Android Library to easily implement in-app updates

Overview

Build Status Android Arsenal API License: MIT

InAppUpdater

Android Library to easily implement in-app updates

✏️ Usage

Step 1: Add it in your root build.gradle

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

Step 2: Add the dependency

dependencies {
    implementation 'com.github.SanojPunchihewa:InAppUpdater:1.0.5'
}

Step 3: Initialize the UpdateManager

Declare the UpdateManager in your Activity

    // Declare the UpdateManager
    UpdateManager mUpdateManager;

Initialize the UpdateManager in your onCreate method of the Activity

    // Initialize the Update Manager with the Activity and the Update Mode
    mUpdateManager = UpdateManager.Builder(this).mode(UpdateManagerConstant.FLEXIBLE);
    mUpdateManager.start();

Update Mode

There are two modes

  • Flexible(UpdateManagerConstant.FLEXIBLE) (default) - User can use the app during update download, installation and restart needs to be triggered by user

  • Immediate(UpdateManagerConstant.IMMEDIATE) - User will be blocked until download and installation is finished, restart is triggered automatically

Additionally you can get the Available Version Code of the update and the Number of days passed since the user was notified of an update through the Google Play. You can find these codes in the demo app

mUpdateManager.addUpdateInfoListener(new UpdateInfoListener() {
    @Override
    public void onReceiveVersionCode(final int code) {
        // You can get the available version code of the apk in Google Play
        // Do something here
    }

    @Override
    public void onReceiveStalenessDays(final int days) {
        // Number of days passed since the user was notified of an update through the Google Play
        // If the user hasn't notified this will return -1 as days
        // You can decide the type of update you want to call
    }
});

Monitoring the flexible update download progres

You can monitor the download progress of a Flexible Update using this callback. Note: This is only available for Flexible update mode. You can find more from the official doc

// Callback from Flexible Update Progress
mUpdateManager.addFlexibleUpdateDownloadListener(new FlexibleUpdateDownloadListener() {
    @Override
    public void onDownloadProgress(final long bytesDownloaded, final long totalBytes) {
       // Show a progress bar or anything you want
    }
});

🎥 Demo

Flexible Update Immediate Update

Troubleshoot

  • In-app updates works only with devices running Android 5.0 (API level 21) or higher
  • In-app updates are available only to user accounts that own the app. So, make sure the account you’re using has downloaded your app from Google Play at least once before using the account to test in-app updates.
  • Make sure that the app that you are testing in-app updates with has the same application ID and is signed with the same signing key as the one available from Google Play.
  • Because Google Play can only update an app to a higher version code, make sure the app you are testing as a lower version code than the update version code.

You can find more information at Frequently Asked Questions

👐 Contributions

Any contributions are welcome!

📄 License

MIT License

Copyright (c) 2019 Sanoj Punchihewa

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments
  • google material design textbox looks faded after adding your inapp updater..please help

    google material design textbox looks faded after adding your inapp updater..please help

    implementation 'com.github.SanojPunchihewa:InAppUpdater:1.0.4-alpha2' added in build.gradle.

    apply plugin: 'com.android.application'
    //1.0 9 =>1.1 10
    android {
        compileSdkVersion 28
        buildToolsVersion '28.0.3'
        useLibrary 'org.apache.http.legacy'
        defaultConfig {
            applicationId 'com.mobile.kseb'
            minSdkVersion 21
            targetSdkVersion 28
            versionName '0.0'
            versionCode 8
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        productFlavors {
        }
    }
    
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        //implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.github.SanojPunchihewa:InAppUpdater:1.0.4-alpha2'
        implementation 'com.google.android.material:material:1.0.0'
        //compile 'com.android.support:support-v4:22.1.1'
        //implementation 'com.android.support:recyclerview-v7:28.0.0'
        implementation 'androidx.recyclerview:recyclerview:1.0.0'
        implementation 'androidx.cardview:cardview:1.0.0'
        //implementation 'com.android.support:design:28.0.0'
        implementation 'androidx.appcompat:appcompat:1.0.0'
        //its working
        //implementation 'com.android.support:design:28.0.0-alpha3'compile 'cn.pedant.sweetalert:library:1.3'
        //implementation 'com.github.joielechong:countrycodepicker:2.2.0'
    
        implementation 'com.hbb20:ccp:2.2.7'
        implementation 'com.github.heetch:Android-country-picker:1.0.6'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        //implementation 'com.github.TutorialsAndroid:KAlertDialog:v4.1'
        //implementation 'com.github.Shashank02051997:FancyAlertDialog-Android:0.1'
        implementation 'com.github.thomper:sweet-alert-dialog:v1.4.0'
        implementation 'com.kofigyan.stateprogressbar:stateprogressbar:1.0.0'
        implementation 'com.google.android.play:core:1.6.1'
        implementation files('libs/ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar'
    
    
        )
        //compile 'com.android.support.constraint:constraint-layout:1.1.3'
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        implementation 'com.android.support:support-v4:28.0.0'
        implementation 'org.jsoup:jsoup:1.9.2'
    
    }
    
    bug waiting on author 
    opened by shabeerklm 24
  • How to Test this in-app update feature

    How to Test this in-app update feature

    Is there a way to test if this feature works without releasing updates to play store ? Would it work if the releases to play store are made on the open beta track ? Thanks

    question 
    opened by cyber-gh 5
  • InAppUpdater sees the update, but can't install it

    InAppUpdater sees the update, but can't install it

    Describe the bug I'm trying to use your library, all works fine, but after the update installation is completed and the program restarts, I see the old version.

    To Reproduce For testing I created a simple application with versionCode 3(before this I posted versionCode 2 in the internal test track, but I did not see updates in my application with versionCode 1) and uploaded it in the Google play in a closed track(alpha version).

    Code:

    public class UpdateActivity extends AppCompatActivity {
    
        private UpdateManager mUpdateManager;
    
        static final int REQUEST_CODE = 781;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_update);
    
            TextView txtCurrentVersion = findViewById(R.id.currentVersion);
            TextView txtAvailableVersion = findViewById(R.id.availableVersion);
    
            txtCurrentVersion.setText(String.valueOf(BuildConfig.VERSION_CODE));
    
            // Initialize the Update Manager with the Activity and the Update Mode
            mUpdateManager = UpdateManager.Builder(this);
    
            // Callback from Available version code
            mUpdateManager.getAvailableVersionCode(code -> txtAvailableVersion.setText(String.valueOf(code)));
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            // Continue updates when resumed
            mUpdateManager.continueUpdate();
        }
    
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    Log.d("MyTag", "Result ok! Result code: " + resultCode);
                }
                else if(resultCode == RESULT_CANCELED){
                    Log.d("MyTag", "Result canceled! Result code: " + resultCode);
    
                }
                else if(resultCode == ActivityResult.RESULT_IN_APP_UPDATE_FAILED){
                    Log.d("MyTag", "In app update failed! Result code: " + resultCode);
    
                }
            }
        }
    
    
        public void tryToUpdate(View view){
            mUpdateManager.mode(UpdateManagerConstant.FLEXIBLE).start();
        }
    
    }
    

    After starting, I see that current version = 2, available version = 3, so the app sees the update. Next I click the tryToUpdate button and see the update dialog, click "update", wait, see "An update has just been downloaded", click "restart", see installation activity, after that my application restarts and I see the old version - current version = 2, and this is the problem. Of course, I tried to manually close and open the app but I still see the old version. But if I delete the old version and manually install the new version from Google Play, then all works fine.

    So, how can I solve this?

    Expected behavior I expect to see current version = 3, available version = 3.

    • OS: Android 8.1.0
    bug waiting on author 
    opened by konstantin-doncov 4
  • app not updating after installing from in-app update screen.

    app not updating after installing from in-app update screen.

    app dialog appears that a new version available then i click on update button and update download starts. when app update download completes a snackbar pop ups and if i click on restart then the in-app update screen appears and starts installing but it doesn't show any updated screen. it just goes away and app restarts but version stays same and when i exit and reopen app it again shows the dialog. this is very confusing.

    Samsung a10 , android 9

    bug question 
    opened by onirban27 3
  • [BUG] Crash and ANR on Huawei devices

    [BUG] Crash and ANR on Huawei devices

    Describe the bug Crash and ANR were confirmed with Android Vital of Firebase and Play Store by the application using ver1.0.5. Oddly enough, crashes and ANRs are only seen on Huawei devices.

    To Reproduce Occurs when you execute the following code within the onCreate of your Activity. UpdateManager UpdateManager.Builder(this).mode(UpdateManagerConstant.FLEXIBLE).start();

    Screenshots We will inform you of the crash log and the target device and OS.

    java.lang.RuntimeException: 
      at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback (ClassesInfoCache.java:226)
      at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent (ClassesInfoCache.java:194)
      at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks (ClassesInfoCache.java:185)
      at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged (ReflectiveGenericLifecycleObserver.java:36)
      at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent (LifecycleRegistry.java:361)
      at androidx.lifecycle.LifecycleRegistry.addObserver (LifecycleRegistry.java:188)
      at com.sanojpunchihewa.updatemanager.UpdateManager.<init> (UpdateManager.java:49)
      at com.sanojpunchihewa.updatemanager.UpdateManager.Builder (UpdateManager.java:54)
      ...
      at android.os.AsyncTask.finish (AsyncTask.java:696)
      at android.os.AsyncTask.access$600 (AsyncTask.java:180)
      at android.os.AsyncTask$InternalHandler.handleMessage (AsyncTask.java:713)
      at android.os.Handler.dispatchMessage (Handler.java:112)
      at android.os.Looper.loop (Looper.java:216)
      at android.app.ActivityThread.main (ActivityThread.java:7625)
      at java.lang.reflect.Method.invoke (Method.java)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)
      
    Caused by: java.lang.NullPointerException: 
      at com.sanojpunchihewa.updatemanager.UpdateManager.continueUpdate (UpdateManager.java:142)
      at com.sanojpunchihewa.updatemanager.UpdateManager.onResume (UpdateManager.java:252)
      at java.lang.reflect.Method.invoke (Method.java)
      at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback (ClassesInfoCache.java:216)
      at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent (ClassesInfoCache.java:194)
      at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks (ClassesInfoCache.java:185)
      at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged (ReflectiveGenericLifecycleObserver.java:36)
      at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent (LifecycleRegistry.java:361)
      at androidx.lifecycle.LifecycleRegistry.addObserver (LifecycleRegistry.java:188)
      at com.sanojpunchihewa.updatemanager.UpdateManager.<init> (UpdateManager.java:49)
      at com.sanojpunchihewa.updatemanager.UpdateManager.Builder (UpdateManager.java:54)
      ...
      at android.os.AsyncTask.finish (AsyncTask.java:696)
      at android.os.AsyncTask.access$600 (AsyncTask.java:180)
      at android.os.AsyncTask$InternalHandler.handleMessage (AsyncTask.java:713)
      at android.os.Handler.dispatchMessage (Handler.java:112)
      at android.os.Looper.loop (Looper.java:216)
      at android.app.ActivityThread.main (ActivityThread.java:7625)
      at java.lang.reflect.Method.invoke (Method.java)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:524)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)
    

    Target device HUAWEI P20 Lite HUAWEI P30 lite HUAWEI P10 lite P20 Pro P30 Pro nova 2 Mate 9 HUAWEI P smart+ 2019 HUAWEI P30 华为畅享7S

    Target OS Android 9 Android 8.0 Android 10

    bug 
    opened by 1008k 2
  • [BUG] I've got NPE report from firebase

    [BUG] I've got NPE report from firebase

    Describe the bug i've used this repo 1.0.5-alpha.1, reported NPE from firebase crashlytics.

    To Reproduce Sorry, i can't reproduce it.

    Screenshots image

    Desktop (please complete the following information):

    • OS: android 9, galaxyS8

    Additional context None

    bug 
    opened by jc01rho 2
  • [BUG]

    [BUG]

    Hi, thank you very much for your effort,

    I implemented your library but I have a problem.

    For example, my local version is 4.5 and version of app in store is 4.6.

    App is updated but local version is not changing, Whenever I opened my app always asks update needed.

    Please help this issue.

    bug 
    opened by JavaDeveloper08 2
  • Showing No Update available.

    Showing No Update available.

    2019-10-26 14:58:57.809 895-895/? I//vendor/bin/hw/[email protected]: unbindService is called for service : com.android.vending/com.google.android.finsky.installservice.DevTriggeredUpdateService and for client com.chalkbox.oasishld
    2019-10-26 14:58:57.809 895-895/? I//vendor/bin/hw/[email protected]: size of service connections for service: com.android.vending/com.google.android.finsky.installservice.DevTriggeredUpdateServiceafter removal is 0
    2019-10-26 14:58:57.809 895-895/? I//vendor/bin/hw/[email protected]: size of client connections for client: com.chalkbox.oasishldafter removal is 0
    2019-10-26 14:58:57.809 14713-14713/? D/InAppUpdateManager: No Update available
    2019-10-26 14:58:57.812 895-895/? I//vendor/bin/hw/[email protected]: destroyService is called for service : com.android.vending/com.google.android.finsky.installservice.DevTriggeredUpdateService
    2019-10-26 14:58:57.813 14713-14733/? I/PlayCore: UID: [10368]  PID: [14713] OnRequestInstallCallback : onRequestInfo
    

    Please help sir.

    question waiting on author 
    opened by amitimg29 2
  • Bump gradle from 3.5.0 to 4.2.2

    Bump gradle from 3.5.0 to 4.2.2

    Bumps gradle from 3.5.0 to 4.2.2.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Bump appcompat from 1.2.0 to 1.3.0

    Bump appcompat from 1.2.0 to 1.3.0

    Bumps appcompat from 1.2.0 to 1.3.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • Bump gradle from 3.5.0 to 4.2.1

    Bump gradle from 3.5.0 to 4.2.1

    Bumps gradle from 3.5.0 to 4.2.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 1
  • [BUG]Fatal Exception: java.lang.NullPointerException Attempt to invoke virtual method 'void android.app.Activity.startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle)' on a null object reference

    [BUG]Fatal Exception: java.lang.NullPointerException Attempt to invoke virtual method 'void android.app.Activity.startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle)' on a null object reference

    Log from Crashlytics:

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle)' on a null object reference
           at com.google.android.play.core.appupdate.c.startIntentSenderForResult(:9)
           at com.google.android.play.core.appupdate.d.startUpdateFlowForResult(:23)
           at com.google.android.play.core.appupdate.d.startUpdateFlowForResult(:9)
           at com.sanojpunchihewa.updatemanager.UpdateManager.startUpdate(UpdateManager.java:95)
           at com.sanojpunchihewa.updatemanager.UpdateManager.access$100(UpdateManager.java:26)
           at com.sanojpunchihewa.updatemanager.UpdateManager$1.onSuccess(UpdateManager.java:84)
           at com.sanojpunchihewa.updatemanager.UpdateManager$1.onSuccess(UpdateManager.java:77)
           at com.google.android.play.core.tasks.e.run(:27)
           at android.os.Handler.handleCallback(Handler.java:790)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loop(Looper.java:164)
           at android.app.ActivityThread.main(ActivityThread.java:6767)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:449)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    
    bug 
    opened by hieu-digitoy-xyz 0
  • Failed to resolve: com.github.SanojPunchihewa:InAppUpdater:1.0.5 in Android Studio Artic Fox

    Failed to resolve: com.github.SanojPunchihewa:InAppUpdater:1.0.5 in Android Studio Artic Fox

    Failed to resolve the dependency when we using gradle plugin 7.0.0. i am using android studio artic fox. by default there is no allProjects closure in root level gradle file.

    bug 
    opened by mjjabarullah 1
  • Bump constraintlayout from 2.0.4 to 2.1.0

    Bump constraintlayout from 2.0.4 to 2.1.0

    Bumps constraintlayout from 2.0.4 to 2.1.0.

    Release notes

    Sourced from constraintlayout's releases.

    2.1.0

    No release notes provided.

    2.1.0-rc01

    No release notes provided.

    2.1.0-beta02

    MotionLayout

    A few new features:

    • OnSwipe enhancement including spring (stiffness, damping, mass etc) & never complete
    • jumpToState function
    • ViewTransition downUp mode where on touch Down it plays to 100 and on up reverses to 0

    Various fixes, notably:

    Fix problem in MotionLayout with vertical scroll (#173) Perf improvements on nested MotionLayout (#189) Fast transition with NestedScrollView in MotionLayout (#189) ConstraintSet gone in MotionLayout (#189) Support downUp ViewTransitions in MotionLayout (#190) Fix in ImageFilter when reusing drawables (#192) Add spring support in MotionLayout (#199) Performance improvement to CircularFlow (#200) Fixes in derived constraints / constraint override (#212)

    2.1.0-beta01

    ConstraintLayout

    • android:layout_width and android:layout_height are back being non-optional due to compatibility issues.

    Helpers

    • added a way to animate or jump directly to a given item of a Carousel
    • new CircularFlow helper

    MotionLayout

    • Programmatic support for inserting and removing onSwipe and onClick on Transitions
    • Experimental Support for Transitions through screen rotation
    • support duration argument to transitions
    • Better support for customAttributes that are boolean or References

    2.1.0 alpha 2

    Many new features added in alpha 2, see the wiki

    2.1.0 alpha 1

    New features in MotionLayout (view transition etc) and new Carousel helper

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Bump gradle from 3.5.0 to 7.0.0

    Bump gradle from 3.5.0 to 7.0.0

    Bumps gradle from 3.5.0 to 7.0.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
  • Bump appcompat from 1.2.0 to 1.3.1

    Bump appcompat from 1.2.0 to 1.3.1

    Bumps appcompat from 1.2.0 to 1.3.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 0
Releases(1.0.5)
Owner
Sanoj Punchihewa
Software Engineer @wso2
Sanoj Punchihewa
Implement Webpage in Android App

This is the application for add a webpage in a android app and act like a browser

Ankit P Chandran 1 Oct 14, 2021
Happy-Birthday - Design and implement a single screen app that displays information

Happy Birthday Android App | Android Basics in Kotlin Course Solution code for t

Anas Tariq 1 Feb 6, 2022
Sample to show how to implement blur graphical tricks

BlurEffectForAndroidDesign Sample to show how to implement blur graphical tricks All the explanations could be found here: http://nicolaspomepuy.fr/?p

Nicolas POMEPUY 2k Dec 28, 2022
The goal of this assignment is to implement GameOfFifteen

Game of Fifteen Demo The board for the game of Fifteen is filled randomly with numbers from 1 to 15 and one empty space. You can move the neighboring

Josue Lubaki 0 Dec 6, 2021
Learning about architecture with implement TMDB Restful API

PopCorn Movie and Tv Show list application. Build for learning about architecture (maybe it's clean architecture, but i don't know it's clean or not.

Muhamad Mashudi Ardi Winata 0 Jan 11, 2022
Implement Text Recognition using MLKit in Jetpack Compose using Kotlin

Implement Text Recognition using MLKit in Jetpack Compose using Kotlin. The application is built using Kotlin Programming Language with Jetpack Compose Navigation.

mohamed tamer 5 Jul 22, 2022
This repo contains sample mobile apps that implement contributor design pattern

This repo contains sample mobile apps that implement contributor design pattern. This design pattern was evolved to establish clean contracts for the developers and partners in Teams Mobile code base

Microsoft 3 Jan 6, 2023
A sample app that shows how to easily encrypt the room database in an Android app

A sample app that shows how to easily encrypt the room database in an Android app. The password used for encryption is generated on the first use and saved in the Android EncryptedSharedPreferences.

Lenz Karbaumer 3 Oct 26, 2022
Extensible Android mobile voice framework: wakeword, ASR, NLU, and TTS. Easily add voice to any Android app!

Spokestack is an all-in-one solution for mobile voice interfaces on Android. It provides every piece of the speech processing puzzle, including voice

Spokestack 57 Nov 20, 2022
Money Manager app that helps you to add your daily small incomes and expenses and track them easily.

Simple Money Manager This app is a simple money manager app which helps you to add your daily small incomes and expenses and track them easily. Screen

Yash Bansal 2 Nov 21, 2021
A minimalistic Face Recognition module which can be easily incorporated in any Android project.

Real Time Face Recognition with TfLite A minimalistic Face Recognition module which can be easily incorporated in any Android project. Key Features Fa

Abhinav Sharma 2 Jun 21, 2022
Whatsapp based Phone number verification.Verify your phone number easily through whatsapp

Whatsapp Based Login Try this to implement fastest phone number verification system [ ⚡ ] Verify your phone number through whatsapp android LinkedIn B

MorningStar 10 Jun 21, 2022
Library to change Android launcher App Icon and App Name programmatically !

AppIconNameChanger Change Android App launcher Icon and App Name programmatically ! Download Demo APK from HERE Kindly use the following links to use

Prabhakar Thota 587 Dec 29, 2022
Food Recipe App is an app for collecting most of food recipe in one app

Food Recipe App is an app for collecting most of food recipe in one app

Heba Elsaid 10 Dec 25, 2022
Arjun Naik 1 Apr 16, 2022
Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs

Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs. -> you can click on headline and it will open an article of that news in the app(no need to go to chrome or any browser)

SUMIT KUMAR 5 Nov 28, 2022
A music picker library for React Native. Provides access to the system's UI for selecting songs from the phone's music library.

Expo Music Picker A music picker library for React Native. Provides access to the system's UI for selecting songs from the phone's music library. Supp

Bartłomiej Klocek 60 Dec 29, 2022
:movie_camera: Movie discovery app showcasing Android best practices with Google's recommended architecture: MVVM + Repository + Offline support + Android Architecture Components + Paging library & Retrofit2.

Popular Movies Stage 1 + Stage 2 Discover the most popular and top rated movies playing. Movies data fetched using themoviedb.org API. ✨ Screenshots M

Yassin AJDI 189 Nov 26, 2022
Utility Android app for generating color palettes of images using the Palette library. Written in Kotlin.

Palette Helper is a simple utility app made to generate color palettes of images using Google's fantastic Palette library. It's mostly a for-fun pet p

Zac Sweers 154 Nov 18, 2022