Skip to content

Commit

Permalink
Add Extra annotation for primitive types and String
Browse files Browse the repository at this point in the history
  • Loading branch information
vanniktech committed Jan 31, 2016
1 parent c9fe61b commit 4542f4a
Show file tree
Hide file tree
Showing 45 changed files with 1,832 additions and 253 deletions.
28 changes: 23 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,31 +66,49 @@ void onActivityResultPickImage(final int resultCode, final Intent intent) { /* D

Various parameters are supported:

##### Since 0.1.0

* `none`
* `int`
* `Intent`
* `int, Intent`
* `Intent, int`

Where int parameters will get the resultCode and Intent parameters will get the Intent. Note: Each annotated method shall only have one int and / or Intent variable.
Where int parameters will get the resultCode and Intent parameters will get the Intent.

**Note: Each annotated method shall only have one int and / or Intent variable.**

In addition to that other parameter annotations are supported like:

* [@IntentData](onactivityresult-annotations/src/main/java/onactivityresult/IntentData.java) `Uri uri`. Since 0.2.0
##### Since 0.2.0

* [@IntentData](onactivityresult-annotations/src/main/java/onactivityresult/IntentData.java) `Uri uri`.

##### Since 0.3.0

* [@ExtraBoolean](onactivityresult-annotations/src/main/java/onactivityresult/ExtraBoolean.java) `boolean booleanVar`.
* [@ExtraByte](onactivityresult-annotations/src/main/java/onactivityresult/ExtraByte.java) `byte byteVar`.
* [@ExtraChar](onactivityresult-annotations/src/main/java/onactivityresult/ExtraChar.java) `char charVar`.
* [@ExtraDouble](onactivityresult-annotations/src/main/java/onactivityresult/ExtraDouble.java) `double doubleVar`.
* [@ExtraFloat](onactivityresult-annotations/src/main/java/onactivityresult/ExtraFloat.java) `float floatVar`.
* [@ExtraInt](onactivityresult-annotations/src/main/java/onactivityresult/ExtraInt.java) `int intVar`.
* [@ExtraLong](onactivityresult-annotations/src/main/java/onactivityresult/ExtraLong.java) `long longVar`.
* [@ExtraShort](onactivityresult-annotations/src/main/java/onactivityresult/ExtraShort.java) `short shortVar`.
* [@ExtraString](onactivityresult-annotations/src/main/java/onactivityresult/ExtraString.java) `String stringVar`.

See more examples [here](./onactivityresult-sample/src/main/java/com/vanniktech/onactivityresult/sample/MainActivity.java
).
Some examples can be found [here](./onactivityresult-sample/src/main/java/com/vanniktech/onactivityresult/sample/MainActivity.java).

## Advantages over [AfterMath](https://github.com/MichaelEvans/Aftermath)

* Gives you compile error(s) when using invalid RequestCode
* Annotated method does not require resultCode & Intent to be present. It'll work with every combination (no params, resultCode, Intent, resultCode & Intent, Intent & resultCode)
* Annotated method does not require resultCode & Intent to be present. It'll work with every combination (no params, resultCode, Intent, resultCode & Intent, Intent & resultCode). In addition also all custom parameter annotations can be used.
* The annotations are on mavenCentral
* More detailed error messages
* Almost 100% unit test coverage
* Inheritance support
* [@IntentData](onactivityresult-annotations/src/main/java/onactivityresult/IntentData.java) annotation with @NonNull & @Nullable support. Since 0.2.0
* Specify resultCodes with e.g. `resultCodes = { Activity.RESULT_OK }`. Since 0.2.0
* [@ExtraBoolean](onactivityresult-annotations/src/main/java/onactivityresult/ExtraBoolean.java), [@ExtraByte](onactivityresult-annotations/src/main/java/onactivityresult/ExtraByte.java), [@ExtraChar](onactivityresult-annotations/src/main/java/onactivityresult/ExtraChar.java), [@ExtraDouble](onactivityresult-annotations/src/main/java/onactivityresult/ExtraDouble.java), [@ExtraFloat](onactivityresult-annotations/src/main/java/onactivityresult/ExtraFloat.java), [@ExtraInt](onactivityresult-annotations/src/main/java/onactivityresult/ExtraInt.java), [@ExtraLong](onactivityresult-annotations/src/main/java/onactivityresult/ExtraLong.java), [@ExtraShort](onactivityresult-annotations/src/main/java/onactivityresult/ExtraShort.java), [@ExtraString](onactivityresult-annotations/src/main/java/onactivityresult/ExtraString.java) annotations. Since 0.3.0

## Thanks

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a boolean extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraBoolean final boolean extraBoolean) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: false<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraBoolean<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraBoolean {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a byte extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraByte final byte extraByte) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraByte<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraByte {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a char extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraChar final char extraChar) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraChar<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraChar {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a double extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraDouble final double extraDouble) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0d<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraDouble<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraDouble {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a float extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraFloat final float extraFloat) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0.f<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraFloat<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraFloat {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get an int extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraInt final int extraInt) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraInt<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraInt {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a long extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraLong final long extraLong) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0L<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraLong<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraLong {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a short extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraShort final short extraShort) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: 0<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraShort<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraShort {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package onactivityresult;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.CLASS;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} annotated method can be annotated to get a String extra of the intent<br>
* Example:<br>
* <p>
* <code>
* &#64;OnActivityResult(requestCode = 1)
* void onResult(&#64;ExtraString final String extraString) {
* // Do something
* }
* </code>
* </p>
* <br>
* defaultValue: null<br>
* extra name: same as parameter <br>
* NOTE: In this case it would be extraString<br>
*
* @since 0.3.0
*/
@Retention(CLASS)
@Target(PARAMETER)
public @interface ExtraString {}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import java.lang.annotation.Target;

/**
* parameters of a {@link OnActivityResult} method can be annotated to get the {@link android.content.Intent#getData()} of the intent<br>
* parameters of a {@link OnActivityResult} annotated method can be annotated to get the {@link android.content.Intent#getData()} of the intent<br>
* Example:<br>
* <p>
* <code>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@
* In addition to that other parameter annotations are supported like:<br>
* <ul>
* <li>{@link IntentData} {@link android.net.Uri}</li>
* <li>{@link ExtraBoolean} {@link boolean}</li>
* <li>{@link ExtraByte} {@link byte}</li>
* <li>{@link ExtraChar} {@link char}</li>
* <li>{@link ExtraDouble} {@link double}</li>
* <li>{@link ExtraFloat} {@link float}</li>
* <li>{@link ExtraInt} {@link int}</li>
* <li>{@link ExtraLong} {@link long}</li>
* <li>{@link ExtraShort} {@link short}</li>
* <li>{@link ExtraString} {@link java.lang.String}</li>
* </ul>
*
* @since 0.1.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package onactivityresult;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.Test;

public class ExtraBooleanTest {
@Test
public void testAnnotationRetention() {
final Retention retention = ExtraBoolean.class.getAnnotation(Retention.class);
assertEquals(RetentionPolicy.CLASS, retention.value());
}

@Test
public void testAnnotationTarget() {
final Target retention = ExtraBoolean.class.getAnnotation(Target.class);
final ElementType[] elementTypes = retention.value();
assertArrayEquals(new ElementType[] { ElementType.PARAMETER }, elementTypes);
}
}
Loading

0 comments on commit 4542f4a

Please sign in to comment.