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
A lightweight alternative to Android's ViewModels. The easiest way to retain instances in Activities, Fragments or Composables.

A lightweight alternative to Android's ViewModels. The easiest way to retain instances in Activities, Fragments or Composables.

Marcello Galhardo 264 Dec 27, 2022
An example for who are all going to start learning Kotlin programming language to develop Android application.

Kotlin Example Here is an example for who are all going to start learning Kotlin programming language to develop Android application. First check this

Prabhakar Thota 56 Sep 16, 2022
A sample project that helps to start building a Mobile Kotlin Multiplatform application

Mobile Kotlin multiplatform project template A sample project that helps to start building a Mobile Kotlin Multiplatform application. It establishes a

Dizel 0 Oct 16, 2021
Android calendar library provides easy to use widget with events

Kotlin-AgendaCalendarView Kotlin-AgendaCalendarView based on AgendaCalendarView Kotlin-AgendaCalendarView is a awesome calendar widget with a list of

Ognev Zair 88 Nov 21, 2022
:bouquet: An easy way to persist and run code block only as many times as necessary on Android.

Only ?? An easy way to persist and run code block only as many times as necessary on Android. Download Gradle Add below codes to your root build.gradl

Jaewoong Eum 479 Dec 25, 2022
:bouquet: An easy way to persist and run code block only as many times as necessary on Android.

Only ?? An easy way to persist and run code block only as many times as necessary on Android. Download Gradle Add below codes to your root build.gradl

Jaewoong Eum 468 Apr 14, 2021
:performing_arts: An easy, flexible way to implement veil skeletons and shimmering effect for Android.

AndroidVeil An easy, flexible way to implement veil skeletons and shimmering effect for Android. Download Gradle Add below codes to your root build.gr

Jaewoong Eum 1.2k Dec 28, 2022
:closed_umbrella: An easy way to implement modern permission instructions popup.

Needs An easy way to implement modern permission instructions popup. Needs can be fully customized and showing with animations. Download Gradle Add be

Jaewoong Eum 609 Dec 8, 2022
kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin.

kinstall kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin. use First, install kinstall its

david kilmer 0 Apr 24, 2022
AdsManager - Easy way to implement Google Ads

AdsManager Easy way to implement Google Ads Implementaion: https://jitpack.io/#R

null 3 Jul 25, 2022
A Kotlin library providing a simple, high-performance way to use off-heap native memory in JVM applications.

native_memory_allocator A library which uses sun.misc.Unsafe to allocate off-heap native memory. Motivation The goal of this project is to provide a s

Target 5 Dec 8, 2022
A simple way to handle remote image in Kotlin.

Parrot A kotlin extension to load easily remote images in your ImageView. Install Add to gradle in allprojects maven { url 'https://jitpack.io' } the

Matteo Crippa 22 Oct 3, 2022
Clay is an Android library project that provides image trimming which is originally an UI component of LINE Creators Studio

Clay Clay is an Android library project that provides image trimming. Fully written in Kotlin, Clay is originally a UI component of LINE Creators Stud

LINE 119 Dec 27, 2022
An Android Library that provides social login for 15 platforms within by RxJava2, Kotlin and Firebase Authentication.

RxSocialLogin The license information for logo is located at the bottom of the document. These instructions are available in their respective language

WindSekirun (wind.seo) 124 Nov 21, 2022
This library provides common speech features for ASR including MFCCs and filterbank energies for Android and iOS.

Kotlin Speech Features Quick Links ?? Introduction This library is a complete port of python_speech_features in pure Kotlin available for Android and

Merlyn Mind 13 Oct 7, 2022
AbstractMvp 0.8 0.0 Kotlin is a library that provides abstract components for MVP architecture realization, with problems solutions that are exist in classic MVP.

MinSDK 14+ AbstractMvp AbstractMvp is a library that provides abstract components for MVP architecture realization, with problems solutions that are e

Robert 12 Apr 5, 2022
A library provides some useful kotlin extension functions

ktext ?? A library provides some useful kotlin extension functions. Including in your project Gradle Add below codes to your root build.gradle file (n

热心市民苏苏仔 76 Oct 26, 2022
Kamper - a small KMM/KMP library that provides performance monitoring for your app.

?? Kamper Kamper is a KMP/KMM library that implements a unified way to track application performances. The solution is based on plugin design patterns

S. Mellouk 31 Jun 10, 2022
Kotools Types - a lightweight library that provides commonly used types for Kotlin

Kotools Types is a lightweight library that provides commonly used types for Kotlin

Kotools 1 Dec 23, 2022