/* Ċ Ġ* ĠCreated Ġby ĠE du ard ĠZ ay del Ġon Ġ 8 / 8 / 2 0 1 9 Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 9 ĠW aves ĠPlatform . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcom . waves platform . wallet . v 2 . ui . widget . configuration Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app widget . App Widget Manager Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . String Res Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġm oxy . presenter . Inject Presenter Ċ import Ġm oxy . presenter . Provide Presenter Ċ import Ġcom . ch ad . library . adapter . base . Base Quick Adapter Ċ import Ġcom . ch ad . library . adapter . base . callback . Item Drag And Swipe Callback Ċ import Ġcom . ch ad . library . adapter . base . listener . On Item Drag Listener Ċ import Ġcom . eth anh ua . skeleton . RecyclerView Skeleton Screen Ċ import Ġcom . eth anh ua . skeleton . Skeleton Ċ import Ġcom . waves platform . sdk . model . response . data . Asset Info Response Ċ import Ġcom . waves platform . sdk . utils . is W aves Ċ import Ġcom . waves platform . sdk . utils . notNull Ċ import Ġcom . waves platform . wallet . R Ċ import Ġcom . waves platform . wallet . v 2 . data . analytics . An alytic Events Ċ import Ġcom . waves platform . wallet . v 2 . data . analytics . analytics Ċ import Ġcom . waves platform . wallet . v 2 . data . manager . widget . Market Widget Active Asset Store Ċ import Ġcom . waves platform . wallet . v 2 . data . model . local . widget . Market Widget Active Asset Ċ import Ġcom . waves platform . wallet . v 2 . data . model . local . widget . Market Widget Settings Ċ import Ġcom . waves platform . wallet . v 2 . data . model . local . widget . Market Widget Style Ċ import Ġcom . waves platform . wallet . v 2 . data . model . local . widget . Market Widget Update Interval Ċ import Ġcom . waves platform . wallet . v 2 . ui . base . view . Base Activity Ċ import Ġcom . waves platform . wallet . v 2 . ui . custom . Fade In Without Delay Animator Ċ import Ġcom . waves platform . wallet . v 2 . ui . widget . Market Pulse App Widget Provider Ċ import Ġcom . waves platform . wallet . v 2 . ui . widget . configuration . assets . Market Widget Configuration Assets Bottom Sheet Fragment Ċ import Ġcom . waves platform . wallet . v 2 . ui . widget . configuration . options . Options Bottom Sheet Fragment Ċ import Ġcom . waves platform . wallet . v 2 . util . Environment Manager Ċ import Ġcom . waves platform . wallet . v 2 . util . is Fi at Ċ import Ġcom . waves platform . wallet . v 2 . util . show Error Ċ import Ġkotlinx . android . synt hetic . main . content _ empty _ data . view .* Ċ import Ġkotlinx . android . synt hetic . main . market _ widget _ configure .* Ċ import Ġpers . v ictor . ext . click Ċ import Ġpers . v ictor . ext . inflate Ċ import Ġpers . v ictor . ext . is Network Connected Ċ import Ġjavax . inject . Inject ĊĊ Ċ /** Ċ Ġ* ĠThe Ġconfiguration Ġscreen Ġfor Ġthe Ġ[ Market Pulse App Widget Provider ] ĠApp Widget . Ċ Ġ*/ Ċ class ĠMarket Widget Configure Activity Ġ: ĠBase Activity (), ĠTab Layout . On Tab Selected Listener , ĊĠĠĠĠĠĠĠ ĠMarket Widget Configure View Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġ@ Inject Presenter ĊĠĠĠ Ġlateinit Ġvar Ġpresenter : ĠMarket Widget Configure Presenter ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠMarket Widget Configuration Mark ets Adapter ĊĠĠĠ Ġprivate Ġvar Ġskeleton Screen : ĠRecyclerView Skeleton Screen ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Provide Presenter ĊĠĠĠ Ġfun Ġprovide Presenter (): ĠMarket Widget Configure Presenter Ġ= Ġpresenter ĊĊĠĠĠ Ġprivate Ġval Ġwidget Id : ĠInt Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . extras ?. getInt ( App Widget Manager . EXTRA _ APP WIDGET _ ID , ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠonUpdate Complete Listener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠEnvironment Manager . Companion . On Update Complete Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Assets Pairs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Network Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfig Layout Res (): ĠInt Ġ= ĠR . layout . market _ widget _ configure ĊĊĠĠĠ Ġoverride Ġfun Ġask Pass Code () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġneed To Show Network Message () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġon Network Connection Changed ( network Connected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Network Connection Changed ( network Connected ) ĊĠĠĠĠĠĠĠ Ġload Assets Pairs () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Ready ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset StatusBar Color ( R . color . basic 5 0 ) ĊĊĠĠĠĠĠĠĠ Ġcheck Widget Id () ĊĊĠĠĠĠĠĠĠ Ġtab _ navigation . add Tab ( tab _ navigation . new Tab (). set Custom View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Custom View ( R . drawable . ic _ widget _ interval _ 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . market _ widget _ config _ interval )). setTag (" set _ interval ")) ĊĠĠĠĠĠĠĠ Ġtab _ navigation . add Tab ( tab _ navigation . new Tab (). set Custom View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Custom View ( R . drawable . ic _ widget _ add token _ 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . market _ widget _ config _ add _ token )). setTag (" add _ token ")) ĊĠĠĠĠĠĠĠ Ġtab _ navigation . add Tab ( tab _ navigation . new Tab (). set Custom View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Custom View ( R . drawable . ic _ widget _ style _ 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . market _ widget _ config _ style )). setTag (" set _ style ")) ĊĊĠĠĠĠĠĠĠ Ġtab _ navigation . add On Tab Selected Listener ( this ) ĊĊĠĠĠĠĠĠĠ Ġtoolbar _ close . click Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave App Widget () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġtokens List . layout Manager Ġ= Ġandroidx . recyclerview . widget . Linear LayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġtokens List . item Animator Ġ= ĠF ade In Without Delay Animator () ĊĠĠĠĠĠĠĠ Ġadapter . bind To RecyclerView ( tokens List ) ĊĠĠĠĠĠĠĠ Ġadapter . on Item Child ClickListener Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Quick Adapter . On Item Child ClickListener Ġ{ Ġadapter , Ġview , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . image _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . data . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter . getItem ( position ). notNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . assets . remove ( it . asset Info . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . remove ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Widget Asset Pairs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Can Add Pair () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . data . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Drag And Swipe Callback Ġ= ĠItem Drag And Swipe Callback ( adapter ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( item Drag And Swipe Callback ) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( tokens List ) ĊĊĠĠĠĠĠĠĠ Ġadapter . enable Drag Item ( item Touch Helper , ĠR . id . image _ drag , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġadapter . setOn Item Drag Listener ( object Ġ: ĠOn Item Drag Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Drag Start ( view Holder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġpos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Drag Moving ( source : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġfrom : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġto : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Drag End ( view Holder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġpos : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Widget Asset Pairs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġskeleton Screen Ġ= ĠS keleton . bind ( tokens List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. adapter ( adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shim mer ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( R . color . basic 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( R . layout . item _ skeleton _ widget _ drag _ assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. frozen ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġset Skeleton Gradient () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent . has Extra ( EXTRA _ APP WIDGET _ CHANGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . track Event ( An alytic Events . Market Pulse Active Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . theme Name Ġ= ĠMarket Widget Style . get Theme ( this , Ġwidget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . interval Update Ġ= ĠMarket Widget Update Interval . get Interval ( this , Ġwidget Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Tab Text ( INTERVAL _ TAB , Ġpresenter . interval Update . item Title ()) ĊĠĠĠĠĠĠĠ Ġset Tab Text ( THEME _ TAB , Ġpresenter . theme Name . item Title ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! intent . has Extra ( EXTRA _ APP WIDGET _ CHANGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMarket Widget Active Asset Store . clear ( this , Ġwidget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠEnvironment Manager . remove On Update Complete Listener ( on Update Complete Listener ) ĊĠĠĠĠĠĠĠ ĠMarket Pulse App Widget Provider . update Widget By Broadcast ( this , Ġwidget Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave App Widget () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Network Connected () Ġ|| Ġpresenter . assets . size Ġ== Ġ 0 Ġ|| Ġadapter . data . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent . has Extra ( EXTRA _ APP WIDGET _ CHANGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . track Event ( An alytic Events . Market Pulse Settings Changed Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . theme Name . toString (). toLowerCase (). capitalize (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ presenter . interval Update . interval } m ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . assets )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMarket Widget Active Asset Store . save All ( this , Ġwidget Id , Ġpresenter . widget Asset Pairs ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Value Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġresult Value . putExtra ( App Widget Manager . EXTRA _ APP WIDGET _ ID , Ġwidget Id ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġresult Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Assets Pairs () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Network Connected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Environment Manager . is Update Completed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . load Assets Pairs ( this , Ġwidget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment Manager . update () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment Manager . add On Update Complete Listener ( on Update Complete Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Tab Selected ( tab ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Network Connected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( tab ?. position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINTER VAL _ TAB Ġ-> Ġshow Interval Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠADD _ TAB Ġ-> Ġshow Assets Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTHE ME _ TAB Ġ-> Ġshow Theme Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Add Pairs ( asset Pair List : ĠList < Market Widget Configuration Mark ets Adapter . Token Pair >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( asset Pair List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton Screen ?. hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . market _ widget _ config _ cant _ find _ currency _ pair , ĠR . id . error Sn ackBar Root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġadapter . data ĊĠĠĠĠĠĠĠ Ġdata . addAll ( asset Pair List ) ĊĠĠĠĠĠĠĠ ĠonUpdate Pairs ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonUpdate Pairs ( asset Pair List : ĠList < Market Widget Configuration Mark ets Adapter . Token Pair >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . set New Data ( asset Pair List ) ĊĠĠĠĠĠĠĠ Ġcheck Can Add Pair () ĊĠĠĠĠĠĠĠ Ġadapter . empty View Ġ= Ġget Empty View () ĊĠĠĠĠĠĠĠ Ġskeleton Screen ?. hide () ĊĠĠĠĠĠĠĠ Ġupdate Widget Asset Pairs () ĊĠĠĠĠĠĠĠ Ġset Skeleton Gradient ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fail Get Mark ets () Ġ{ ĊĠĠĠĠĠĠĠ Ġafter Fail Get Mark ets () ĊĠĠĠĠĠĠĠ Ġskeleton Screen ?. hide () ĊĠĠĠĠĠĠĠ Ġset Skeleton Gradient ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Widget Asset Pairs () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . widget Asset Pairs . clear () ĊĊĠĠĠĠĠĠĠ Ġadapter . data . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . price Asset ?. is W aves () Ġ== Ġtrue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . amount Asset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Fi at ( it . pair . price Asset Ġ?: Ġ"") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . amount Asset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . price Asset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . widget Asset Pairs . add ( Market Widget Active Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . asset Info . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . amount Asset Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pair . price Asset Ġ?: Ġ"")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave App Widget () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Can Add Pair () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . can Add Pair Ġ= Ġadapter . data . size Ġ< Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠSp ann able StringBuilder ("${ adapter . data . size } Ġ/ Ġ 1 0 ") ĊĠĠĠĠĠĠĠ Ġcount . set Span ( Style Span ( Type face . BOLD ), Ġ 0 , Ġcount . length Ġ- Ġ 2 , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠ Ġtokens Counter . text Ġ= Ġcount ĊĊĠĠĠĠĠĠĠ Ġval Ġadd Tab Ġ= Ġtab _ navigation . get Tab At ( ADD _ TAB ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Tab Ġ= Ġadd Tab ?. custom View ?. findViewById < ImageView >( R . id . image _ tab ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Tab Ġ= Ġadd Tab ?. custom View ?. findViewById < TextView >( R . id . text _ tab ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( presenter . can Add Pair ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Tab ?. setTextColor ( Context Compat . getColor ( base Context , ĠR . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Tab ?. setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( base Context , ĠR . drawable . ic _ widget _ add token _ 2 2 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Tab ?. setTextColor ( Context Compat . getColor ( base Context , ĠR . color . basic 5 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Tab ?. setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( base Context , ĠR . drawable . ic _ widget _ max token _ 2 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Tab Text ( tab Position : ĠInt , Ġ@ String Res Ġtext Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġtab _ navigation . get Tab At ( tab Position ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Tab Ġ= Ġtab ?. custom View ?. findViewById < TextView >( R . id . text _ tab ) ĊĠĠĠĠĠĠĠ Ġtext Tab ?. text Ġ= ĠgetString ( text Res ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Empty View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinf late ( R . layout . content _ address _ book _ empty _ state ) ĊĠĠĠĠĠĠĠ Ġview . text _ empty . text Ġ= ĠgetString ( R . string . dex _ market _ empty ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġafter Fail Get Mark ets () Ġ{ ĊĠĠĠĠĠĠĠ Ġskeleton Screen ?. hide () ĊĠĠĠĠĠĠĠ Ġshow Error ( R . string . common _ server _ error , ĠR . id . error Sn ackBar Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Custom View ( tab Icon : ĠInt , Ġtab Text : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcustom Tab Ġ= ĠLayoutInflater . from ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . content _ widget _ configure _ navigation _ tab , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Tab Ġ= Ġcustom Tab . findViewById < ImageView >( R . id . image _ tab ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Tab Ġ= Ġcustom Tab . findViewById < AppCompat TextView >( R . id . text _ tab ) ĊĊĠĠĠĠĠĠĠ Ġimage Tab . setImage Resource ( tab Icon ) ĊĠĠĠĠĠĠĠ Ġtext Tab . text Ġ= ĠgetString ( tab Text ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcustom Tab ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Widget Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġresult Ġto ĠC ANCE LED . Ġ ĠThis Ġwill Ġcause Ġthe Ġwidget Ġhost Ġto Ġcancel ĊĠĠĠĠĠĠĠ Ġ// Ġout Ġof Ġthe Ġwidget Ġplacement Ġif Ġthe Ġuser Ġp resses Ġthe Ġback Ġbutton . ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthis Ġactivity Ġwas Ġstarted Ġwith Ġan Ġintent Ġwithout Ġan Ġapp Ġwidget ĠID , Ġfinish Ġwith Ġan Ġerror . ĊĠĠĠĠĠĠĠ Ġif Ġ( widget Id Ġ== ĠApp Widget Manager . INVALID _ APP WIDGET _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Interval Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoption Bottom Sheet Fragment Ġ= ĠOptions Bottom Sheet Fragment < Market Widget Update Interval >() ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠMarket Widget Update Interval . values (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġdefault Position Ġ= Ġoptions . indexOf ( Market Widget Settings . interval Settings (). get Interval ( this , Ġwidget Id )) ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . configure Dialog ( options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . market _ widget _ config _ update _ interval ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Position ) ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . on Option Selected Listener Ġ= Ġobject Ġ: ĠOptions Bottom Sheet Fragment . On Selected Listener < Market Widget Update Interval > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Selected ( data : ĠMarket Widget Update Interval ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . interval Update Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarket Widget Settings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. interval Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interval ( this @ Market Widget Configure Activity , Ġwidget Id , Ġpresenter . interval Update ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tab Text ( INTERVAL _ TAB , Ġpresenter . interval Update . item Title ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave App Widget () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . show ( support FragmentManager , Ġoption Bottom Sheet Fragment :: class . java . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Theme Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoption Bottom Sheet Fragment Ġ= ĠOptions Bottom Sheet Fragment < Market Widget Style >() ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠMarket Widget Style . values (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġval Ġdefault Position Ġ= Ġoptions . indexOf ( Market Widget Settings . theme Settings (). get Theme ( this , Ġwidget Id )) ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . configure Dialog ( options , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . market _ widget _ config _ widget _ style ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Position ) ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . on Option Selected Listener Ġ= Ġobject Ġ: ĠOptions Bottom Sheet Fragment . On Selected Listener < Market Widget Style > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Selected ( data : ĠMarket Widget Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . theme Name Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarket Widget Settings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. theme Settings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Theme ( this @ Market Widget Configure Activity , Ġwidget Id , Ġpresenter . theme Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tab Text ( THEME _ TAB , Ġpresenter . theme Name . item Title ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave App Widget () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoption Bottom Sheet Fragment . show ( support FragmentManager , Ġoption Bottom Sheet Fragment :: class . java . simple Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Assets Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! presenter . can Add Pair ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġassets Dialog Ġ= ĠMarket Widget Configuration Assets Bottom Sheet Fragment . newInstance ( presenter . assets ) ĊĠĠĠĠĠĠĠ Ġval Ġft Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġft . add ( assets Dialog , Ġassets Dialog :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġft . commit Allow ing State Loss () ĊĠĠĠĠĠĠĠ Ġassets Dialog . on Choose Listener Ġ= Ġobject Ġ: ĠMarket Widget Configuration Assets Bottom Sheet Fragment . On Choose Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Choose ( asset : ĠAsset Info Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . assets . add ( asset . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġadapter . data . first OrNull Ġ{ Ġit . asset Info . id Ġ== Ġasset . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton Screen ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Skeleton Gradient () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . load Asset Pair ( asset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error ( R . string . market _ widget _ config _ error _ add _ asset , ĠR . id . error Sn ackBar Root ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Skeleton Gradient ( enable : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtokens List ?. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 1 )?. alpha Ġ= Ġ 0 . 7 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 2 )?. alpha Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 3 )?. alpha Ġ= Ġ 0 . 4 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 4 )?. alpha Ġ= Ġ 0 . 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 1 )?. alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 2 )?. alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 3 )?. alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens List ?. layout Manager ?. find View By Position ( 4 )?. alpha Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTER VAL _ TAB Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠADD _ TAB Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTHE ME _ TAB Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ APP WIDGET _ CHANGE Ġ= Ġ" com . waves platform . wallet . EXTRA _ APP WIDGET _ CHANGE " ĊĠĠĠ Ġ} Ċ }