package Ġio . horizontal systems . bank wallet . modules . settings . notifications Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . horizontal systems . bank wallet . R Ċ import Ġio . horizontal systems . bank wallet . core . Base Fragment Ċ import Ġio . horizontal systems . bank wallet . core . setOn Single ClickListener Ċ import Ġio . horizontal systems . bank wallet . modules . settings . notifications . bottom menu . Bottom Notification Menu Ċ import Ġio . horizontal systems . core . find Nav Controller Ċ import Ġio . horizontal systems . views . List Position Ċ import Ġio . horizontal systems . views . Settings View Dropdown Ċ import Ġio . horizontal systems . views . inflate Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . fragment _ notifications .* Ċ import Ġkotlinx . android . synt hetic . main . view _ holder _ notification _ coin _ name .* ĊĊ Ċ class ĠNotifications Fragment Ġ: ĠBase Fragment (), ĠNotification Items Adapter . Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Notifications ViewModel > Ġ{ ĠNotifications Module . Factory () Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification Items Adapter : ĠNotification Items Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ notifications , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġtoolbar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbutton Android Settings . setOn Single ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . open Settings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdeactivate All . setOn Single ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . deactivate All () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotification Items Adapter Ġ= ĠNotification Items Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġnotifications . adapter Ġ= Ġnotification Items Adapter ĊĊĠĠĠĠĠĠĠ Ġswitch Notification . setOnClickListener Ġ{ Ġswitch Notification . switch Toggle () Ġ} ĊĊĠĠĠĠĠĠĠ Ġswitch Notification . setOn Checked ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . switch Alert Notification ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( item : ĠNotification View Item ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . on Dropdown Tap ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . items LiveData . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Items Adapter . items Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Items Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . open Notification Settings . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= Ġ" android . settings . APP _ NOTIFICATION _ SETTINGS " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" android . provider . extra . APP _ PACKAGE ", Ġit . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . controls Visible . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications . isVisible Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeactivate All . isVisible Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . set Warning Visible . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġshow Warning Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Notification . isVisible Ġ= Ġ! show Warning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Description . isVisible Ġ= Ġ! show Warning ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Warning . isVisible Ġ= Ġshow Warning ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Android Settings . isVisible Ġ= Ġshow Warning ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . notification Is On LiveData . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Notification . setChecked ( enabled ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . open Options Dialog . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġ( coin Name , Ġcoin Id , Ġmode ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Notification Menu . show ( child FragmentManager , Ġmode , Ġcoin Name , Ġcoin Id ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . set De activate Button Enabled . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġif Ġ( enabled ) ĠR . color . luc ian Ġelse ĠR . color . grey _ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeactivate All Text . setTextColor ( it . getColor ( color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeactivate All . isEnabled Ġ= Ġenabled ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠNotification Items Adapter ( private Ġval Ġlistener : ĠListener ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġvar Ġitems Ġ= ĠlistOf < Notification View Item >() ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( item : ĠNotification View Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcoin Name Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġnotification Option Ġ= Ġ 2 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( items [ position ]. type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification View ItemType . Coin Name Ġ-> Ġcoin Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnotification Option ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. hashCode (). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Option Ġ-> ĠNotification Item ViewHolder ( inflate ( parent , ĠR . layout . view _ holder _ setting _ with _ dropdown , Ġfalse ), ĠonClick Ġ= Ġ{ Ġindex Ġ-> Ġlistener . on Item Click ( items [ index ]) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoin Name Ġ-> ĠNotification Coin Name ViewHolder ( inflate ( parent , ĠR . layout . view _ holder _ notification _ coin _ name , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Invalid Ġview Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNotification Item ViewHolder Ġ-> Ġholder . bind ( items [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNotification Coin Name ViewHolder Ġ-> Ġholder . bind ( items [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠNotification Coin Name ViewHolder ( override Ġval Ġcontainer View : ĠView ) ĊĠĠĠ Ġ: ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĊĠĠĠ Ġfun Ġbind ( item : ĠNotification View Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoin Name . text Ġ= Ġitem . coin Name ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠNotification Item ViewHolder ( override Ġval Ġcontainer View : ĠView , Ġval ĠonClick : Ġ( position : ĠInt ) Ġ-> ĠUnit ) Ġ: ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdropdown View Ġ= Ġcontainer View . findViewById < Settings View Dropdown >( R . id . dropdown View ) ĊĊĠĠĠ Ġfun Ġbind ( item : ĠNotification View Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdropdown View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Title ( item . title Res ?. let Ġ{ Ġcontainer View . context . getString ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dropdown Value ( item View . context . getString ( item . dropdown Value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset List Position ( getList Position ( item . type )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( binding Adapter Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetList Position ( type : ĠNotification View ItemType ): ĠList Position Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotification View ItemType . Change Option Ġ-> ĠList Position . First ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠList Position . Last ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ