OnActivityResult Compiler

OnActivityResult annotation compiler for Android

License

License

GroupId

GroupId

com.vanniktech
ArtifactId

ArtifactId

onactivityresult-compiler
Last Version

Last Version

0.7.0
Release Date

Release Date

Type

Type

jar
Description

Description

OnActivityResult Compiler
OnActivityResult annotation compiler for Android
Project URL

Project URL

https://github.com/vanniktech/OnActivityResult
Source Code Management

Source Code Management

https://github.com/vanniktech/OnActivityResult

Download onactivityresult-compiler

How to add to project

<!-- https://jarcasting.com/artifacts/com.vanniktech/onactivityresult-compiler/ -->
<dependency>
    <groupId>com.vanniktech</groupId>
    <artifactId>onactivityresult-compiler</artifactId>
    <version>0.7.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.vanniktech/onactivityresult-compiler/
implementation 'com.vanniktech:onactivityresult-compiler:0.7.0'
// https://jarcasting.com/artifacts/com.vanniktech/onactivityresult-compiler/
implementation ("com.vanniktech:onactivityresult-compiler:0.7.0")
'com.vanniktech:onactivityresult-compiler:jar:0.7.0'
<dependency org="com.vanniktech" name="onactivityresult-compiler" rev="0.7.0">
  <artifact name="onactivityresult-compiler" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.vanniktech', module='onactivityresult-compiler', version='0.7.0')
)
libraryDependencies += "com.vanniktech" % "onactivityresult-compiler" % "0.7.0"
[com.vanniktech/onactivityresult-compiler "0.7.0"]

Dependencies

compile (1)

Group / Artifact Type Version
com.squareup : javapoet jar 1.9.0

runtime (1)

Group / Artifact Type Version
com.vanniktech : onactivityresult-annotations jar 0.7.0

test (6)

Group / Artifact Type Version
com.google.android : android jar 4.1.1.4
junit : junit jar 4.12
org.mockito : mockito-core jar 2.13.0
com.google.testing.compile : compile-testing jar 0.14
com.pushtorefresh.java-private-constructor-checker : checker jar 1.2.0
com.intellij : annotations jar 12.0

Project Modules

There are no modules declared in this project.

OnActivityResult

  • Generates boilerplate code for OnActivityResult callbacks and lets you focus on what matters.
  • Generated code is fully traceable and debuggable.
  • Everything is generated during compile time with appropriate errors / warnings.
  • No reflection used!

Gradle

dependencies {
  compile 'com.vanniktech:onactivityresult:0.7.0'
  annotationProcessor 'com.vanniktech:onactivityresult-compiler:0.7.0'
}

Snapshots

compile 'com.vanniktech:onactivityresult:0.8.0-SNAPSHOT'
annotationProcessor 'com.vanniktech:onactivityresult-compiler:0.8.0-SNAPSHOT'

Modules are located on Maven Central.

Example

Override onActivityResult in your Activity / Fragment and call ActivityResult.onResult

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  ActivityResult.onResult(requestCode, resultCode, data).into(this);
}

Annotate your methods and get the callback

@OnActivityResult(requestCode = 33)
void onActivityResultTestActivity() { /* Do something */ }

@OnActivityResult(requestCode = 1, resultCodes = { Activity.RESULT_OK })
void onActivityResultActivityOk() { /* Only do something when ok */ }

@OnActivityResult(requestCode = 1, resultCodes = { Activity.RESULT_CANCELED })
void onActivityResultActivityCanceled() { /* Only do something when canceled */ }

@OnActivityResult(requestCode = 2)
void onActivityResultPickImage(final int resultCode, final Intent intent) { /* Do something */ }

Various parameters are supported:

  • 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.

In addition to that other parameter annotations are supported like:

Some examples can be found here.

The @Extra annotation is generic and works with every type mentioned above. In addition it also supports custom types which are implementing Parcelable or Serializable.

The disadvantage of @Extra is that it won't let you specify a default value therefore the other annotations do exist and should be used when needed.

Advantages over AfterMath

  • Gives you compile error(s) when using invalid RequestCode
  • Annotated method does not require resultCode and 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 and available as a separate artifact
  • More detailed error messages
  • Inheritance support
  • @IntentData annotation with @NonNull & @Nullable support.
  • Specify resultCodes with e.g. resultCodes = { Activity.RESULT_OK }.
  • @Extra, @ExtraBoolean, @ExtraByte, @ExtraChar, @ExtraDouble, @ExtraFloat, @ExtraInt, @ExtraLong, @ExtraShort, @ExtraString annotations.

Thanks

Thanks to JakeWharton's ButterKnife

Thanks to Hannes Dorfmann's Annotation Processing 101

License

Copyright (C) 2015 Vanniktech - Niklas Baudy

Licensed under the Apache License, Version 2.0

Versions

Version
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0