package Ġat . sh ock bytes . d ante . ui . fragment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġat . sh ock bytes . d ante . R Ċ import Ġat . sh ock bytes . d ante . backup . model . Backup Storage Provider Ċ import Ġat . sh ock bytes . d ante . databinding . Fragment Backup Backup Binding Ċ import Ġat . sh ock bytes . d ante . injection . App Component Ċ import Ġat . sh ock bytes . d ante . ui . adapter . Backup Storage Provider Adapter Ċ import Ġat . sh ock bytes . d ante . ui . view model . Backup ViewModel Ċ import Ġat . sh ock bytes . d ante . util . Priority Ċ import Ġat . sh ock bytes . d ante . util . addTo Ċ import Ġat . sh ock bytes . d ante . util . viewModel Of Activity Ċ import Ġat . sh ock bytes . util . adapter . Base Adapter Ċ import Ġat . sh ock bytes . util . view . Equal Space Item Decoration Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠAuthor : Ġ ĠMartin ĠM ache iner Ċ Ġ* ĠDate : ĠĠĠĠ 2 6 . 0 5 . 2 0 1 9 Ċ Ġ*/ Ċ class ĠBackup Backup Fragment Ġ: ĠBase Fragment < Fragment Backup Backup Binding >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate View Binding ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġroot : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ Ġattach To Root : ĠBoolean ĊĠĠĠ Ġ): ĠFragment Backup Backup Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Backup Backup Binding . inflate ( in flater , Ġroot , Ġattach To Root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvm Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠBackup ViewModel ĊĊĠĠĠ Ġoverride Ġfun Ġinject To Graph ( app Component : ĠApp Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel Of Activity ( require Activity (), Ġvm Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup Views () Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġbind ViewModel () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . getLast Backup Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġlast Backup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvb . tv Fragment Backup Last Backup . text Ġ= ĠgetString ( R . string . last _ backup , Ġlast Backup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . getActive Backup Providers (). observe ( this , ĠObserver (:: setup Backup Provider UI )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . make Backup Event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: handle Backup State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Backup State ( state : ĠBackup ViewModel . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBackup ViewModel . State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . backup _ created ), Ġshow Long Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . switch To Backup Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch To Backup Tab () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBackup ViewModel . State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . backup _ not _ created )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch To Backup Tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( parent Fragment Ġas ? ĠBackup Fragment )?. switch To Backup Tab () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun bind ViewModel () Ġ= ĠUnit ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Backup Provider UI ( providers : ĠList < Backup Storage Provider >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvb . rv Fragment Backup Providers . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( require Context (), Ġ 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( vb . rv Fragment Backup Providers . adapter Ġas ĠBackup Storage Provider Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. data [ position ]. priority . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPriority . LOW Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPriority . MEDIUM Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPriority . HIGH Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠBackup Storage Provider Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġobject Ġ: ĠBase Adapter . On ItemClickListener < Backup Storage Provider > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( content : ĠBackup Storage Provider , Ġposition : ĠInt , Ġv : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . make Backup ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Data ( providers . sorted By Ġ{ Ġit . priority Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Decoration Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Equal Space Item Decoration ( context . resources . get Dimension ( R . dim en . backup _ provider _ margin ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠBackup Backup Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBackup Backup Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }