package Ġcom . b ren tp an ther . bitcoin widget . ui . settings Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . widget . TextView Compat Ċ import Ġandroidx . fragment . app . commit Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġcom . b ren tp an ther . bitcoin widget . Coin Entry Ċ import Ġcom . b ren tp an ther . bitcoin widget . R Ċ import Ġcom . b ren tp an ther . bitcoin widget . Widget Application Ċ import Ġcom . b ren tp an ther . bitcoin widget . Widget State Ċ import Ġcom . b ren tp an ther . bitcoin widget . databinding . Layout Settings Binding Ċ import Ġcom . b ren tp an ther . bitcoin widget . db . Widget Ċ import Ġcom . b ren tp an ther . bitcoin widget . strategy . data . Widget Data Strategy Ċ import Ġcom . b ren tp an ther . bitcoin widget . strategy . display . Widget Display Strategy Ċ import Ġcom . b ren tp an ther . bitcoin widget . strategy . presenter . Preview Widget Presenter Ċ import Ġcom . b ren tp an ther . bitcoin widget . ui . settings . Settings ViewModel . Data State . Downloading Ċ import Ġcom . b ren tp an ther . bitcoin widget . ui . settings . Settings ViewModel . Data State . Success Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠSettings Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcoin : ĠCoin Entry ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Settings ViewModel >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠLayout Settings Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠLayout Settings Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED , Ġintent ) ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġintent . extras !! ĊĠĠĠĠĠĠĠ ĠviewModel . widget Id Ġ= Ġextras . getInt ( App Widget Manager . EXTRA _ APP WIDGET _ ID , ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġwidget Type Ġ= ĠWidget Application . instance . get Widget Type ( viewModel . widget Id ) ĊĠĠĠĠĠĠĠ Ġcoin Ġ= Ġextras . get Parcelable ( EXTRA _ CO IN ) Ġ?: Ġthrow ĠIllegalArgumentException () ĊĠĠĠĠĠĠĠ Ġif Ġ( extras . getBoolean ( EXTRA _ EDIT _ WIDGET )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . edit _ widget , Ġcoin . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . save . text Ġ= ĠgetString ( R . string . settings _ update ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠgetString ( R . string . new _ widget , Ġcoin . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . save . text Ġ= ĠgetString ( R . string . settings _ create ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . text Widget Summary . text Ġ= ĠgetString ( widget Type . widget Summary , Ġcoin . name ) ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat On Lifecycle ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . settings Data ( coin , Ġapplication Context ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDownloading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . commit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplace ( R . id . fragment _ container _ view , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Type . get Settings Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Preview . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidget Preview . preview Layout . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave . setOnClickListener Ġ{ ĠviewModel . save () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . widget Preview Flow . collect Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Widget ( it . widget , Ġit . refresh Price ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Widget ( widget : ĠWidget , Ġrefresh Price : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( refresh Price ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrategy Ġ= ĠWidget Data Strategy . get Strategy ( this , Ġwidget . widget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy . widget Ġ= Ġwidget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy . load Data ( manual Ġ= Ġfalse , Ġforce Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( widget . state Ġ!= ĠWidget State . CURRENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidget . last Value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwidget Presenter Ġ= ĠPreview Widget Presenter ( widget , Ġbinding . widget Preview ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Strategy Ġ= ĠWidget Display Strategy . get Strategy ( this , Ġwidget , Ġwidget Presenter ) ĊĠĠĠĠĠĠĠ Ġdisplay Strategy . refresh () ĊĠĠĠĠĠĠĠ Ġval Ġprice Ġ= Ġbinding . root . findViewById < TextView >( R . id . price ) ĊĠĠĠĠĠĠĠ ĠTextView Compat . set AutoSize Text Type With Defaults ( price , ĠTextView Compat . AUTO _ SIZE _ TEXT _ TYPE _ UNIFORM ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ EDIT _ WIDGET Ġ= Ġ" edit _ widget " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ CO IN Ġ= Ġ" coin " ĊĠĠĠ Ġ} Ċ } Ċ