/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 1 ĠBor is ĠTim of ee v Ġ< bt im of ee v @ em unix . org > Ċ Ġ* ĠDistributed Ġunder Ġthe ĠMIT ĠLicense Ġ( license Ġterms Ġare Ġat Ġhttp :// opensource . org / licenses / MIT ). Ċ Ġ*/ Ċ Ċ package Ġorg . em unix . instead launcher . ui . game Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . em unix . instead launcher . R Ċ import Ġorg . em unix . instead launcher . data . Game Ċ import Ġorg . em unix . instead launcher . data . Game . State .* Ċ import Ġorg . em unix . instead launcher . databinding . Fragment Game Binding Ċ import Ġorg . em unix . instead launcher . helpers . load Url Ċ import Ġorg . em unix . instead launcher . helpers . show Toast Ċ import Ġorg . em unix . instead launcher . helpers . visible Ċ import Ġorg . em unix . instead launcher . ui . dialogs . Delete Game Dialog Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ class ĠGame Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠGame ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Game Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Game Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ĠAppCompatActivity ). set Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation Icon ( R . drawable . ic _ close _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgame Name Ġ= Ġarguments ?. getString (" game _ name ") Ġ?: Ġthrow ĠIllegalArgumentException (" Game Fragment Ġrequire Ġgame _ name Ġpassed Ġas Ġargument ") ĊĠĠĠĠĠĠĠ ĠviewModel . init ( game Name ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Game (). observe ( view Lifecycle Owner ) Ġ{ Ġgame Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Views ( game ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . get Progress (). observe ( view Lifecycle Owner ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset In determinate Progress ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset In determinate Progress ( false , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . get Progress Message (). observe ( view Lifecycle Owner ) Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Install Message ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . get ErrorMessage (). observe ( view Lifecycle Owner ) Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . getContent IfNot Handled ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). show Toast ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Views ( game : ĠGame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġas ĠAppCompatActivity ĊĠĠĠĠĠĠĠ Ġactivity . support ActionBar ?. title Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġbinding . coll ap sing Toolbar ?. is Title Enabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġbinding . name . text Ġ= Ġgame . title ĊĠĠĠĠĠĠĠ Ġbinding . author . text Ġ= Ġgame . author ĊĠĠĠĠĠĠĠ Ġif Ġ( game . installed Version . isNotBlank () Ġand Ġ( game . version Ġ!= Ġgame . installed Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . version . text Ġ= ĠgetString ( R . string . game _ activity _ label _ version , Ġgame . installed Version Ġ+ Ġ" Ġ(\ u 2 1 9 1 ${ game . version }) ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . version . text Ġ= ĠgetString ( R . string . game _ activity _ label _ version , Ġgame . version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . size . text Ġ= ĠgetString ( R . string . game _ activity _ label _ size , ĠFileUtils . byte Count To Display Size ( game . size )) ĊĠĠĠĠĠĠĠ Ġbinding . game Image . load Url ( game . image ) ĊĠĠĠĠĠĠĠ Ġbinding . description . text Ġ= Ġgame . description ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . desc url . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . feedback Button . visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . feedback Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( game . desc url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser Intent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). startActivity ( browser Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . feedback Button . visible ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠINST ALLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Message . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . delete Button . visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . run Button . visible ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . version Ġ!= Ġgame . installed Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . text Ġ= ĠgetText ( R . string . game _ activity _ button _ update ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . background Tint List Ġ= ĠContext Compat . getColor State List ( activity , ĠR . color . color Update Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠNO _ INST ALLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . text Ġ= ĠgetText ( R . string . game _ activity _ button _ install ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . background Tint List Ġ= ĠContext Compat . getColor State List ( activity , ĠR . color . color Install Button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Button . visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . delete Button . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . run Button . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visible ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Message . visible ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠIS _ INSTALL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Message . text Ġ= ĠgetString ( R . string . game _ activity _ message _ installing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠIS _ DELETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Message . text Ġ= ĠgetString ( R . string . notification _ delete _ game ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠIN _ QUEUE _ TO _ INSTALL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . install Message . text Ġ= ĠgetString ( R . string . game _ activity _ message _ download _ pending ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . install Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . install Game () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . delete Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠINST ALLED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Dialog Ġ= ĠDelete Game Dialog . newInstance ( game . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Added ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent FragmentManager . let Ġ{ Ġdelete Dialog . show ( it , Ġ" delete _ dialog ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . run Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . run Game ( require Context ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Progress ( flag : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . install Message . visible ( flag ) ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . visible ( flag ) ĊĠĠĠĠĠĠĠ Ġbinding . install Button . visible (! flag ) ĊĠĠĠĠĠĠĠ Ġbinding . delete Button . visible (! flag ) ĊĠĠĠĠĠĠĠ Ġbinding . run Button . visible (! flag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset In determinate Progress ( in determinate : ĠBoolean , Ġvalue : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . isIn determinate Ġ= Ġin determinate ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . progress Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Install Message ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . install Message . text Ġ= Ġmsg ĊĠĠĠ Ġ} Ċ Ċ } Ċ