package Ġcom . argon labs . cards x . base Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Sender . Send Intent Exception Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . argon labs . cards x . utils . Utils Ċ import Ġcom . google . android . play . core . app update . App Update Info Ċ import Ġcom . google . android . play . core . app update . App Update Manager Ċ import Ġcom . google . android . play . core . app update . App Update ManagerFactory Ċ import Ġcom . google . android . play . core . install . Install State Updated Listener Ċ import Ġcom . google . android . play . core . install . model . Activity Result Ċ import Ġcom . google . android . play . core . install . model . App Update Type Ċ import Ġcom . google . android . play . core . install . model . Install Status Ċ import Ġcom . google . android . play . core . install . model . Update Availability Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ Ċ abstract Ġclass ĠBase Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġm Auth : ĠFirebase Auth ? Ġ= Ġnull ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġdb Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġshared Preferences : ĠSharedPreferences ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapp Update Manager : ĠApp Update Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠUPDATE _ REQUEST _ CODE Ġ= Ġ 1 1 1 ĊĠĠĠ Ġprivate Ġval Ġinstall State Updated Listener Ġ= ĠInstall State Updated Listener Ġ{ Ġinstall State Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( install State . install Status () Ġ== ĠInstall Status . DOWN LOADED ) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAfter Ġthe Ġupdate Ġis Ġdownloaded , Ġshow Ġa Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrequest Ġuser Ġconfirmation Ġto Ġrestart Ġthe Ġapp . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Will Ġrestart Ġthe ĠApp Ġto Ġshow Ġup Ġchanges ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager !!. complete Update () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġshared Preferences Ġ= ĠBase Application . get m Instance ()?. shared Preferences ĊĠĠĠĠĠĠĠ ĠUtils . disable Screen Records ( this ) ĊĠĠĠĠĠĠĠ ĠUtils . setUp StatusBar ( this ) ĊĠĠĠĠĠĠĠ Ġapp Update Manager Ġ= ĠApp Update ManagerFactory . create ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// Step Ġ 1 Ġ: ĠCheck Ġif ĠUpdate ĠAvailable ĊĠĠĠĠĠĠĠ Ġcheck Update () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Update Info Task Ġ= Ġapp Update Manager ?. app Update Info ĊĠĠĠĠĠĠĠ Ġ// ĠChecks Ġthat Ġthe Ġplatform Ġwill Ġallow Ġthe Ġspecified Ġtype Ġof Ġupdate . ĊĠĠĠĠĠĠĠ Ġapp Update Info Task ?. add On Success Listener Ġ{ Ġresult : ĠApp Update Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . update Availability () Ġ!= ĠUpdate Availability . UPDATE _ AVAILABLE ) Ġreturn @ add On Success Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Update Type Allowed ( App Update Type . IM MEDI ATE )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Using ĠIm mediate ĠUpdate Ġfeature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Next ĠStep ĠRequest Ġthe ĠUpdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Step Ġ 2 : ĠRequest Ġfor ĠUpdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Immediate Update ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Add Ġlistener Ġto Ġmanager ĊĠĠĠĠĠĠĠ Ġapp Update Manager ?. register Listener ( install State Updated Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Immediate Update ( app Update Info : ĠApp Update Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager !!. start Update Flow For Result ( Ġ// ĠPass Ġthe Ġintent Ġthat Ġis Ġreturned Ġby Ġ' getApp Update Info () '. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Info , Ġ Ġ// ĠOr Ġ' App Update Type . FLEX IBLE ' Ġfor Ġflexible Ġupdates . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Update Type . IM MEDI ATE , Ġ Ġ// ĠThe Ġcurrent Ġactivity Ġmaking Ġthe Ġupdate Ġrequest . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġ Ġ// ĠInclude Ġa Ġrequest Ġcode Ġto Ġlater Ġmonitor Ġthis Ġupdate Ġrequest . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUPDATE _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSend Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġapp Update Manager !!. unregister Listener ( install State Updated Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠUPDATE _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ C ANCE LED , ĠActivity Result . RESULT _ IN _ APP _ UPDATE _ FAILED Ġ-> ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Failed Ġin Ġupdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Cancelled Ġthe Ġupdate Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġapp Update Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . app Update Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add On Success Listener Ġ{ Ġapp Update Info : ĠApp Update Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġupdate Ġis Ġdownloaded Ġbut Ġnot Ġinstalled , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotify Ġthe Ġuser Ġto Ġcomplete Ġthe Ġupdate . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Update Info . install Status () Ġ== ĠInstall Status . DOWN LOADED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Pop Ġuser Ġto Ġinstall Ġupdate Ġby Ġcalling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Manager !!. complete Update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġinit Components () Ċ }