/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 , ĠTom ĠGe ise lm ann Ġ( tom g applications development @ gmail . com ) Ċ Ġ* Ċ Ġ* Ġ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 , WH ETHER Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . none . tom . ex if eras er . update . business Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . google . android . play . core . app update . App Update Info Ċ import Ġcom . google . android . play . core . app update . App Update Manager Ċ import Ġcom . none . tom . ex if eras er . update . data . Update Priority Ċ import Ġcom . none . tom . ex if eras er . update . data . Update Repository Ċ import Ġcom . none . tom . ex if eras er . update . data . Update Result Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġorg . orbit m vi . orbit . Container Host Ċ import Ġorg . orbit m vi . orbit . syntax . simple . intent Ċ import Ġorg . orbit m vi . orbit . syntax . simple . post Side Effect Ċ import Ġorg . orbit m vi . orbit . view model . container Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠUpdate ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġupdate Repository : ĠUpdate Repository Ċ ) Ġ: ĠContainer Host < Update State , ĠUpdate Side Effect >, ĊĠĠĠ ĠViewModel () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontainer Ġ= Ġcontainer < Update State , ĠUpdate Side Effect >( initialState Ġ= ĠUpdate State ) ĊĊĠĠĠ Ġfun Ġbegin Or Resume App Update ( ĊĠĠĠĠĠĠĠ Ġinfo : ĠApp Update Info , ĊĠĠĠĠĠĠĠ Ġon Begin Update : Ġ( App Update Manager , ĠApp Update Info , ĠInt , ĠInt ) Ġ-> ĠBoolean ĊĠĠĠ Ġ) Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin Or Resume App Update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ= Ġinfo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Begin Update Ġ= Ġon Begin Update ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . collect Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Result . Failed To Install Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( Update Side Effect . Update Failed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate Result . InProgress Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( Update Side Effect . Update InProgress ( result . progress )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Result . Ready To Install Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( Update Side Effect . Update Ready To Install ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck App Update Availability () Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġupdate Repository . getApp Update Info () ĊĠĠĠĠĠĠĠ Ġif Ġ( info Ġ!= Ġnull Ġ&& Ġupdate Repository . is App Update Available Or InProgress ( info )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Side Effect . Update Available ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ= Ġinfo , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmediate Update Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Repository . getApp Update Priority ( info ) Ġ== ĠUpdate Priority . High ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle App Update Result ( ĊĠĠĠĠĠĠĠ Ġresult : ĠInt , ĊĠĠĠĠĠĠĠ Ġimmediate Update : ĠBoolean ĊĠĠĠ Ġ) Ġ= Ġintent Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ>= Ġ 0 Ġ&& Ġimmediate Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Side Effect ( Update Side Effect . Update Cancelled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ