Tuesday, 19 January 2021

Implement In-app Update In Android

 implementation 'com.google.android.play:core:1.9.0'


MainActivity.java

package raj.sujeet.com.historycalendar;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;

import android.content.Intent;

import android.content.IntentSender;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

import com.google.android.play.core.appupdate.AppUpdateInfo;

import com.google.android.play.core.appupdate.AppUpdateManager;

import com.google.android.play.core.appupdate.AppUpdateManagerFactory;

import com.google.android.play.core.install.InstallState;

import com.google.android.play.core.install.InstallStateUpdatedListener;

import com.google.android.play.core.install.model.ActivityResult;

import com.google.android.play.core.install.model.AppUpdateType;

import com.google.android.play.core.install.model.InstallStatus;

import com.google.android.play.core.install.model.UpdateAvailability;

import com.google.android.play.core.tasks.OnSuccessListener;

import com.google.android.play.core.tasks.Task;


public class MainActivity extends AppCompatActivity {

    private AppUpdateManager appUpdateManager;

    private static final int MY_REQUEST_CODE = 17326;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        checkUpdate();

    }


    private void checkUpdate() {

InstallStateUpdatedListener listener = new InstallStateUpdatedListener() {

        @Override

        public void onStateUpdate(InstallState installState) {

            if (installState.installStatus() == InstallStatus.DOWNLOADED) {

                Log.d("InstallDownloded", "InstallStatus sucsses");

                notifyUser();

            }

        }

    };

        appUpdateManager = AppUpdateManagerFactory.create(this);

        appUpdateManager.registerListener(listener);


        Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

        appUpdateInfoTask.addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {

            @Override

            public void onSuccess(AppUpdateInfo appUpdateInfo) {

                String data = "packageName :" + appUpdateInfo.packageName() + ", " +

                        "availableVersionCode :" + appUpdateInfo.availableVersionCode() + ", " +

                        "updateAvailability :" + appUpdateInfo.updateAvailability() + ", " +

                        "installStatus :" + appUpdateInfo.installStatus()+ ", ";


                Log.e("appUpdateInfo :", ""+data);

                Toast.makeText(MainActivity.this, ""+data, Toast.LENGTH_LONG).show();


                if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE

                        && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {

                    requestUpdate(appUpdateInfo);

                    Log.d("UpdateAvailable", "update is there ");

                } else if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {

                    Log.d("Update", "3");

                    notifyUser();

                } else {

                    Toast.makeText(MainActivity.this, "No Update Available", Toast.LENGTH_SHORT).show();

                    Log.e("NoUpdateAvailable", "update is not there ");

                }

            }

        });

    }


    private void requestUpdate(AppUpdateInfo appUpdateInfo) {

        try {

            appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, MainActivity.this, MY_REQUEST_CODE);

            resume();

        } catch (IntentSender.SendIntentException e) {

            e.printStackTrace();

        }

    }


    @Override

    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

        super.onActivityResult(requestCode, resultCode, data);


        if (requestCode == MY_REQUEST_CODE) {

            switch (resultCode) {

                case Activity.RESULT_OK:

                    if (resultCode != RESULT_OK) {

                        Toast.makeText(this, "RESULT_OK" + resultCode, Toast.LENGTH_LONG).show();

                        Log.d("RESULT_OK  :", "" + resultCode);

                    }

                    break;

                case Activity.RESULT_CANCELED:


                    if (resultCode != RESULT_CANCELED) {

                        Toast.makeText(this, "RESULT_CANCELED" + resultCode, Toast.LENGTH_LONG).show();

                        Log.d("RESULT_CANCELED  :", "" + resultCode);

                    }

                    break;

                case ActivityResult.RESULT_IN_APP_UPDATE_FAILED:


                    /*if (resultCode != RESULT_IN_APP_UPDATE_FAILED){


                        Toast.makeText(this,"RESULT_IN_APP_UPDATE_FAILED" +resultCode, Toast.LENGTH_LONG).show();

                        Log.d("RESULT_IN_APP_FAILED:",""+resultCode);

                    }*/

            }

        }

    }


    @Override

    protected void onDestroy() {

        super.onDestroy();

        try {

            appUpdateManager.unregisterListener((InstallStateUpdatedListener) this);

        }catch (RuntimeException e){


        }


    }


    private void notifyUser() {


        Snackbar snackbar =

                Snackbar.make(findViewById(R.id.root),

                        "An update has just been downloaded.",

                        Snackbar.LENGTH_INDEFINITE);

        snackbar.setAction("RESTART", new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                appUpdateManager.completeUpdate();

            }

        });

        snackbar.setActionTextColor(

                getResources().getColor(R.color.colorAccent));

        snackbar.show();

    }


    private void resume() {

        appUpdateManager.getAppUpdateInfo().addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {

            @Override

            public void onSuccess(AppUpdateInfo appUpdateInfo) {

                if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {

                    notifyUser();


                }


            }

        });

    }

}


No comments:

Post a Comment