Simple Android Library, that provides easy way to start the Activities with arguments.

Overview

Warning: Library is not maintained anymore. If you want to take care of this library, propose it via Pull Request. It needs adjustmensts for newer versions of Android and Gradle.

ActivityStarter

Android Library that provides simpler way to start the Activities with multiple arguments.

codebeat badge Build Status Stories in Ready Join the chat at https://gitter.im/ActivityStarter/Lobby Analytics Analytics

Library bindes fields to Actity, Fragment, Service or Receiver arguments and generates simple starters. Thanks to that you can:

  • Eliminate all putExtra and getXXXExtra methods
  • Forget about all keys that were used to pass arguments (unless you want to define custom onces)
  • Start liking starting flags and intent creation

Media:

Full documentation is located here. Here is TOC:

To stay up-to-date with news about library Twitter URL

Example

With ActivityStarter, to pass arguments to Activity, Fragment, Service or BroadcastReceiver, all you need is @Arg annotation before parameters that needs to be passed:

public class MainActivity extends BaseActivity {

    @Arg String name;
    @Arg int id;
    @Arg char grade;
    @Arg boolean passing;
}

And ActivityStarter.fill(this, savedInstanceState); in BaseActivity:

class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityStarter.fill(this, savedInstanceState);
    }

    @Override // This is optional, only when we want to keep arguments changes in case of rotation etc.
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        ActivityStarter.save(this, outState);
    }
}

Then, you can start Activity using generated starter:

MainActivityStarter.start(context, name, id, grade, passing);

Similar way, you can take Intent or start activity with flags:

MainActivityStarter.getIntent(context, name, id, grade, passing);
MainActivityStarter.startWithFlags(context, name, id, grade, passing, FLAG_ACTIVITY_SINGLE_TOP);

Arguments can be passed to Activities, Fragments, Services or BroadcastReceiver. Arguments can also be Optional.

Optional

You can make optional arguments:

public class MainActivity extends BaseActivity {

    @Arg(optional = true) String name;
    @Arg(optional = true) long id = -1;
}

Then additional generators with not all arguments will be created

MainActivityStarter.start(context);
MainActivityStarter.start(context, name);
MainActivityStarter.start(context, id);
MainActivityStarter.start(context, name, id);

Further reading here.

Kotlin

ActivityStarter is supporting Kotlin to allow properties that are not-null and both read-write or read-only:

class StudentDataActivity : BaseActivity() {

    @get:Arg(optional = true) var name: String by argExtra(defaultName)
    @get:Arg(optional = true) val id: Int by argExtra(defaultId)
    @get:Arg var grade: Char  by argExtra()
    @get:Arg val passing: Boolean by argExtra()
}

Values are taken lazily and kept as fields, but there are still saved if ActivityStarter.save(this) is called inonSaveInstanceState. When all properties are provided by delegate, then there is no need to call ActivityStarter.fill(this, savedInstanceState) in onCreate.

Parceler

Since version 0.70, there is native support for Parceler library. To wrap and unwrap parameter using Parceler, use Arg annotation with parceler property set to true:

@Arg(parceler = true) StudentParcel studentParceler;

See example here.

Installation

For Java project add in build.gradle file:

dependencies {
    compile 'com.marcinmoskala.activitystarter:activitystarter:1.10'
    apt 'com.marcinmoskala.activitystarter:activitystarter-compiler:1.10'
}

For Kotlin project add in build.gradle file:

apply plugin: 'kotlin-kapt'

dependencies {
    compile 'com.marcinmoskala.activitystarter:activitystarter:1.10'
    kapt 'com.marcinmoskala.activitystarter:activitystarter-compiler:1.10'
}

If you want to use Kotlin-specific elements (property delegate argExtra), then add in build.gradle file:

apply plugin: 'kotlin-kapt'

dependencies {
    compile 'com.marcinmoskala.activitystarter:activitystarter:1.10'
    compile 'com.marcinmoskala.activitystarter:activitystarter-kotlin:1.10'
    kapt 'com.marcinmoskala.activitystarter:activitystarter-compiler:1.10'
}

And while library is located on JitPack, remember to add on module build.gradle (unless you already have it):

repositories {
    maven { url 'https://jitpack.io' }
}

More information on Installation page.

Other libraries

If you like it, remember to leave the star and check out my other libraries:

  • PreferenceHolder - Library for simple SharedPreference management in Kotlin
  • ArcSeekBar - Good looking curved Android SeekBar
  • VideoPlayView - Custom Android view with video player, loader and placeholder image
  • KotlinAndroidViewBindings - Bindings for properties with simple Kotlin types (Boolean, String) to layout traits (visibility, text).

License

Copyright 2017 Marcin Moskała

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Implement support for Parcels lib

    Implement support for Parcels lib

    Parcels lib:

       compile 'org.parceler:parceler-api:1.1.5'
        apt 'org.parceler:parceler:1.1.5'
    

    For example this lib:

    compile 'com.hannesdorfmann.fragmentargs:annotation:3.0.2'
        apt 'com.hannesdorfmann.fragmentargs:processor:3.0.2'
     compile 'com.hannesdorfmann.fragmentargs:bundler-parceler:2.1.2'
    

    Supports the parceler lib like this:

       @Arg(bundler = ParcelerArgsBundler.class) public AnyItem item;
    

    Add please support of lib parceler

    opened by Kolyall 15
  • Activity State not getting restored when the activity is killed and restored

    Activity State not getting restored when the activity is killed and restored

    Hi

    I've find a bug in the library when using ActivityStarter.save(this) in the onSaveInstanceState that causes the state to not be saved and instead restoring the App with the original Intent when setting the debug option Don't keep activities, this setting only forces the system to kill the activity, but it's a behaviour that happens in the wild.

    You can see the code reproducing the bug here https://gist.github.com/danieldisu/692c11c1e9eb26a1f27a895c57209a75

    Ways to reproduce:

    Set "Don't keep activities" in the emulator Init activity with 2 arguments. Modify one argument. Navigate to another app and go back to the app

    Expected behaviour The changed argument is changed and the other one is untouched.

    Real behaviour The arguments are the original ones

    opened by danieldisu 12
  • Create any IntentBuilder to avoid generation of methods

    Create any IntentBuilder to avoid generation of methods

    for example in activity:

        @Arg @Optional String text;
        @Arg @Optional Lond id;
        @Arg @Optional Boolean success;
    

    sometimes is needed two of this variables, so how to create intent for two values? you added to 0.50 generation of the methods but you can make this:

    Intent intent = MusicPlayerActivityStarter.getIntentBuilder(context).text(text).id(id).build();
    
    opened by Kolyall 6
  • w: Runtime JAR files in the classpath should have the same version.

    w: Runtime JAR files in the classpath should have the same version.

    Hi @MarcinMoskala

    Thanks for an awesome library 👍 .

    Unfortunately straightforward integration (as described from the README) of this library into the android app project can cause really massive influence on the DEX method count limit.

    For example: here is report from the dex-count-gradle-plugin built for for the app after adding ActivityStarter kotlin library screenshot_1

    And whats more, compiler started to send such messages:

    w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
        */.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.1.4-2/5d546e5fc95a44ff827425c8a756f5fdf94d79d2/kotlin-reflect-1.1.4-2.jar (version 1.1)
        */.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.2.41/d0cfb3ef897c00449e5e696355db9506225fb507/kotlin-stdlib-jdk7-1.2.41.jar (version 1.2)
        */.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.2.50/66d47b004c5b8a1d2d1df9e463187390ed741316/kotlin-stdlib-1.2.50.jar (version 1.2)
        */.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.2.50/6b19a2fcc29d34878b3aab33fd5fcf70458a73df/kotlin-stdlib-common-1.2.50.jar (version 1.2)
    w: Consider providing an explicit dependency on kotlin-reflect 1.2 to prevent strange errors
    w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
    

    I found that this was caused by transitive kotlin-reflect dependecy of activitystarter-kotlin. To fix this you will need to mark activitystarter-kotlin dependencies as NOT transitive

    Like:

    implementation ("com.marcinmoskala.activitystarter:activitystarter-kotlin:1.11-beta") {
            transitive = false
    }
    

    So I will recommend to add some note to the README about this situation to avoid confusion of the the library users.

    Hope this was helpful :)

    opened by amatkivskiy 5
  • Implement method .startActivityForResult

    Implement method .startActivityForResult

    Implement method .startActivityForResult()

    for ex:

    public static final int requestCode = 100;
    AnyActivityStarter.startActivityForResult(this, anyItem,requestCode);
    
    opened by Kolyall 5
  • Create private String KEY

    Create private String KEY

    Make all string keys as constant field public static final

    1. for example in this public static final String KEY_ITEM = "com.example.activities.mItemStarterKey"
    2. NB: in activity item is called: @Arg MediaMetadataCompat mItem So add an annotation to customize prefix to avoid adding prefix to KEY for example: like it is in lombok @Accessor(prefix="m") @Arg MediaMetadataCompat mItem or @Arg(prefix="m") MediaMetadataCompat mItem
    // Generated code from ActivityStarter. Do not modify!
    public final class FullScreenPlayerActivityStarter {
      /**
       * This is method used to fill fields. Use it by calling ActivityStarter.fill(this). */
      public static void fill(FullScreenPlayerActivity activity, Bundle savedInstanceState) {
        Intent intent = activity.getIntent();
        if(savedInstanceState != null && savedInstanceState.containsKey("com.example.activities.mItemStarterKey")) {
        activity.mItem = (android.support.v4.media.MediaMetadataCompat) savedInstanceState.getParcelable("com.example.activities.mItemStarterKey");
        } else {
        if(intent.hasExtra("com.example.activities.mItemStarterKey")) activity.mItem = (android.support.v4.media.MediaMetadataCompat) intent.getParcelableExtra("com.example.activities.mItemStarterKey");
        }
      }
    
      public static void save(FullScreenPlayerActivity activity, Bundle bundle) {
        bundle.putParcelable("com.example.activities.mItemStarterKey", activity.mItem);
      }
    
      public static Intent getIntent(Context context, MediaMetadataCompat mItem) {
        Intent intent = new Intent(context, FullScreenPlayerActivity.class);
        intent.putExtra("com.example.activities.mItemStarterKey", mItem);
        return intent;
      }
    
      public static void start(Context context, MediaMetadataCompat mItem) {
        Intent intent = getIntent(context, mItem);
        context.startActivity(intent);
      }
    
      public static void startWithFlags(Context context, MediaMetadataCompat mItem, int flags) {
        Intent intent = getIntent(context, mItem);
        intent.addFlags(flags);
        context.startActivity(intent);
      }
    
      public static Intent getIntent(Context context) {
        Intent intent = new Intent(context, FullScreenPlayerActivity.class);
        return intent;
      }
    
      public static void start(Context context) {
        Intent intent = getIntent(context);
        context.startActivity(intent);
      }
    
      public static void startWithFlags(Context context, int flags) {
        Intent intent = getIntent(context);
        intent.addFlags(flags);
        context.startActivity(intent);
      }
    }
    
    
    opened by Kolyall 4
  • How to parse list of enum?

    How to parse list of enum?

    Error:(63, 8) error: @Arg com.example.OptionsActivity fields must extend from Serializable, Parcelable or beof typeName String, int, float, double, char or boolean. (mOptionList)
    

    enum:

    public enum Option {
    FIRST(R.string.first), SECOND(R.string.second);
    int titleId;
    }
    

    Activity

    @MakeActivityStarter
    public class OptionsActivity extends Activity{
     @Arg List<Option> mOptionList;
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
      ActivityStarter.fill(this);
    }
    }
    
    opened by Kolyall 3
  • @Arg arguments

    @Arg arguments

    Why you using extra arguments for @Arg annotation (for example @Optional) as another annotation? Is there a way to change it for something like

     @Arg(required = false, key = "key", etc....)
     @Arg(optional = true, etc....)
    

    I think this way much better, because in future if you need a few more parameters for @Arg you don't need to see something like this

     @Arg
     @Optional
     @ParcelerArgBundler
     @Andonemore
    int variable;
    
    opened by thats-bot 3
  • Migration to androidx

    Migration to androidx

    Version of activitystarter: 1.02

    After migrating to androidx I noticed an error with the activitystarter compiler:

    e: [kapt] An exception occurred: java.util.NoSuchElementException: Array contains no element matching the predicate. at activitystarter.compiler.model.classbinding.KnownClassType$Companion.getByType(KnownClassType.kt:26) at activitystarter.compiler.processing.ClassBindingFactory.getKnownClassType(ClassBindingFactory.kt:35) at activitystarter.compiler.processing.ClassBindingFactory.create(ClassBindingFactory.kt:21) at activitystarter.compiler.ActivityStarterProcessor.process(ActivityStarterProcessor.kt:42)`

    This means that a new type of androidx.fragment.app should be added to KnownClassType.

    opened by jeffreydelooff 2
  • Can't fetch data at

    Can't fetch data at

    I want to re-fetch all args on new intent method, but ActivityStarter doesn't have method ActivityStarter.fill(Activity activity, Intent intent); , please add the method ASAP. Thanks for your lib.

      @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            ActivityStarter.fill(this,intent);
    
    opened by Kolyall 2
  • IsParcel is redundant

    IsParcel is redundant

    The marker interface IsParcel isn't necessary and is potentially misleading as part of the Parceler API. This PR removed this interface and cleans up usage of Parceler.

    opened by johncarl81 2
  • Crash when using Proguard

    Crash when using Proguard

    Version: 1.12-beta-2 Log:

    2021-06-14 16:30:02.682 14827-14827/com.myapp.abc E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.myapp.abc, PID: 14827
        kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Property 'tab' (JVM signature: getTab()Lcom/toantran/leadership/development/ui/tab/TabFragment$Tab;) not resolved in class com.myapp.abc.ui.tab.TabFragment
            at kotlin.reflect.jvm.internal.KDeclarationContainerImpl.q(SourceFile:86)
            at kotlin.reflect.jvm.internal.KPropertyImpl$_descriptor$1.a(SourceFile:102)
            at kotlin.reflect.jvm.internal.KPropertyImpl$_descriptor$1.b(SourceFile:27)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.b(SourceFile:92)
            at kotlin.reflect.jvm.internal.KPropertyImpl.x(SourceFile:105)
            at kotlin.reflect.jvm.internal.KPropertyImpl$Getter$descriptor$2.a(SourceFile:152)
            at kotlin.reflect.jvm.internal.KPropertyImpl$Getter$descriptor$2.b(SourceFile:147)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.b(SourceFile:92)
            at kotlin.reflect.jvm.internal.ReflectProperties$Val.c(SourceFile:31)
            at kotlin.reflect.jvm.internal.KPropertyImpl$Getter.w(Unknown Source:7)
            at kotlin.reflect.jvm.internal.KPropertyImpl$Getter.q(SourceFile:147)
            at kotlin.reflect.jvm.internal.KCallableImpl$_annotations$1.a(SourceFile:36)
            at kotlin.reflect.jvm.internal.KCallableImpl$_annotations$1.b(SourceFile:23)
            at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.b(SourceFile:92)
            at kotlin.reflect.jvm.internal.KCallableImpl.k(SourceFile:38)
            at com.marcinmoskala.activitystarter.BoundToArgValueDelegateProvider.a(SourceFile:103)
            at com.myapp.abc.ui.tab.TabFragment.<init>(SourceFile:14)
            at com.myapp.abc.ui.tab.TabFragmentStarter.newInstance(SourceFile:30)
            at com.myapp.abc.ui.main.MainActivity.b0(SourceFile:102)
            at com.myapp.abc.ui.main.MainActivity.onCreate(SourceFile:89)
            at android.app.Activity.performCreate(Activity.java:7009)
            at android.app.Activity.performCreate(Activity.java:7000)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
            at android.app.ActivityThread.-wrap11(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6494)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
            ```
    opened by thanhtoan1196 0
  • Still have NoSuchElementException in 1.12-beta2

    Still have NoSuchElementException in 1.12-beta2

    e: [kapt] An exception occurred: java.util.NoSuchElementException: Array contains no element matching the predicate.
    	at activitystarter.compiler.model.classbinding.KnownClassType$Companion.getByType(KnownClassType.kt:26)
    	at activitystarter.compiler.processing.ClassBindingFactory.getKnownClassType(ClassBindingFactory.kt:35)
    	at activitystarter.compiler.processing.ClassBindingFactory.create(ClassBindingFactory.kt:21)
    	at activitystarter.compiler.ActivityStarterProcessor.process(ActivityStarterProcessor.kt:42)
    	at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:106)
    	at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    	at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    	at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    	at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1039)
    	at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1180)
    	at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    	at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:58)
    	at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31)
    	at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:223)
    	at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:187)
    	at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:98)
    	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:96)
    	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:106)
    	at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:82)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:384)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:70)
    	at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:375)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:123)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:159)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:57)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:96)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:442)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:102)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:1013)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:102)
    	at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:1055)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:1012)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:441)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
    	at sun.rmi.transport.Transport$1.run(Transport.java:200)
    	at sun.rmi.transport.Transport$1.run(Transport.java:197)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)```
    
    opened by olegstepanov 0
  • Androidx migration

    Androidx migration

    @MarcinMoskala I have fixed the conflicts, that Jeffrey do Loof mentioned previously and also updated dependencies. Please check it!

    Thanks, for your time!

    opened by Sonkagyerek 0
  • Incremental processor

    Incremental processor

    Any plans for implementing incremental compilation support? Right now it seems there are no obstacles for this. The processor can define isolating in most cases or aggregating (if there is @ActivityStarterConfig defined somewhere within the project) dynamically using the latest Gradle support.

    According to this processor satisfies all the rules.

    I'm just not sure if it is possible to make a processor dynamic based on the presence of an annotation. Why is it important - isolating processors are much faster. Probably a compiler flag (by a user) can signal that a user doesn't use config.

    opened by naixx 0
  • var ArrayList of Parcelable problem

    var ArrayList of Parcelable problem

    Library version 1.11-beta

    There is an issue if you would try to pass an ArrayList with this library, CustomElement has annotation @Parcelize and extends Parcelable.

    For single element it's correctly generating fill method in x*Starter class for example it would look like: activity.setCustomElement((CustomElement)savedInstanceState.getParcelable(CUSTOM_ELEMENT_KEY)); But for an ArrayList of this CustomElement it look like: activity.setCustomElements(savedInstanceState.getParcelableArrayList(CUSTOM_ELEMENTS_KEY)); And Android Studio marks it as error.

    opened by btwarog 2
Releases(1.12-beta-2)
Owner
Marcin Moskała
Teacher, speaker, consultant, founder of Kot. Academy, author of Android Development with Kotlin.
Marcin Moskała
Fast Android Development. Easy maintainance.

Fast Android Development. Easy maintenance. AndroidAnnotations is an Open Source framework that speeds up Android development. It takes care of the pl

null 11.1k Dec 31, 2022
Fast Android Development. Easy maintainance.

Fast Android Development. Easy maintenance. AndroidAnnotations is an Open Source framework that speeds up Android development. It takes care of the pl

null 11.1k Dec 31, 2022
DI can be simple. Forget about modules and components. Just use it!

PopKorn - Kotlin Multiplatform DI PopKorn is a simple, powerful and lightweight Kotlin Multiplatform Dependency Injector. It doesn't need any modules

Pau Corbella 145 Dec 25, 2022
A scope tree based Dependency Injection (DI) library for Java / Kotlin / Android.

Toothpick (a.k.a T.P. like a teepee) Visit TP wiki ! What is Toothpick ? Toothpick is a scope tree based Dependency Injection (DI) library for Java. I

Stéphane Nicolas 1.1k Jan 1, 2023
Lightweight, minimalistic dependency injection library for Kotlin & Android

‼️ This project is in maintenance mode and not actively developed anymore. For more information read this statement. ‼️ Katana Katana is a lightweight

REWE Digital GmbH 179 Nov 27, 2022
A multi-purpose library containing view injection and threading for Android using annotations

SwissKnife A multi-purpose Groovy library containing view injection and threading for Android using annotations. It's based on both ButterKnife and An

Jorge Martin Espinosa 251 Nov 25, 2022
A SharedPreference "injection" library for Android

PreferenceBinder A SharedPreferences binding library for Android. Using annotation processing, this library makes it easy to load SharedPreferences va

Denley Bihari 232 Dec 30, 2022
DependencyProperty is a dependency resolution library by Delegated Property.

DependencyProperty is a dependency resolution library by Delegated Property. Overview DependencyProperty is simple in defining and

wada811 10 Dec 31, 2022
A fast dependency injector for Android and Java.

Dagger A fast dependency injector for Java and Android. Dagger is a compile-time framework for dependency injection. It uses no reflection or runtime

Google 16.9k Jan 5, 2023
Bind Android views and callbacks to fields and methods.

Butter Knife Attention: This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only criti

Jake Wharton 25.7k Jan 3, 2023
A fast dependency injector for Android and Java.

Dagger 1 A fast dependency injector for Android and Java. Deprecated – Please upgrade to Dagger 2 Square's Dagger 1.x is deprecated in favor of Google

Square 7.3k Jan 5, 2023
Google Guice on Android, version 3.0 [RETIRED]

As of August 2016, RoboGuice is no longer supported. For nearly 5 years it was the #1 dependency injection framework on Android due to its ease-of-use

null 3.8k Dec 26, 2022
Bind Android views and callbacks to fields and methods.

Butter Knife Attention: This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only criti

Jake Wharton 25.7k Mar 22, 2021
:syringe: Transfuse - A Dependency Injection and Integration framework for Google Android

Transfuse Transfuse is a Java Dependency Injection (DI) and integration library geared specifically for the Google Android API. There are several key

John Ericksen 224 Nov 28, 2022
Simple Android Library, that provides easy way to start the Activities with arguments.

Warning: Library is not maintained anymore. If you want to take care of this library, propose it via Pull Request. It needs adjustmensts for newer ver

Marcin Moskała 429 Dec 15, 2022
Android Package Inspector - dynamic analysis with api hooks, start unexported activities and more. (Xposed Module)

Inspeckage - Android Package Inspector Inspeckage is a tool developed to offer dynamic analysis of Android applications. By applying hooks to function

acpm 2.5k Jan 8, 2023
This library will make it easier to pass arguments between screens in Jetpack Compose.

Compose Navigation This library will make it easier to pass arguments between screens in Jetpack Compose Setup allprojects { repositories { ...

Nguyen Van Tan 1 Oct 30, 2021
This library provides Easy Android ListView Adapters(EasyListAdapter & EasyCursorAdapter) which makes designing Multi-Row-Type ListView very simple & cleaner, It also provides many useful features for ListView.

EasyListViewAdapters Whenever you want to display custom items in listview, then only way to achieve this is to implement your own subclass of BaseAda

Biraj Patel 132 Nov 25, 2022
NavigationComponent-SendingData - Android Navigation Component : Pass value (arguments) in Fragments

NavigationComponent-SendingData Android Navigation Component : Pass value (argum

Reyhaneh Ezatpanah 1 Dec 28, 2021
Missing safe arguments generator for Compose Navigation

Safe Arguments Generator Yet another attempt to add safe arguments to Compose Navigation. Why Since routes in Navigation Component don't support safe

Vitali Olshevski 9 Nov 3, 2022