package Ġcom . eb urg _ soft . currency converter . features . history . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder Ċ import Ġcom . eb urg _ soft . currency converter . R Ċ import Ġcom . eb urg _ soft . currency converter . data . datasource . database . models . Currency Conversion Entity Ċ import Ġcom . eb urg _ soft . currency converter . data . di . Scopes Ċ import Ġcom . eb urg _ soft . currency converter . extensions . inject ViewModel Ċ import Ġcom . eb urg _ soft . currency converter . extensions . observe Ċ import Ġcom . eb urg _ soft . currency converter . features . history . ui . adapter . Currency Conversion Adapter Ċ import Ġcom . eb urg _ soft . currency converter . features . history . view model . History ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ history . fab Ċ import Ġkotlinx . android . synt hetic . main . fragment _ history . pb History Ċ import Ġkotlinx . android . synt hetic . main . fragment _ history . recycler _ view _ currency _ conversions Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠHistory Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠsavedInstanceState : ĠBundle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġcurrency Conversion Adapter Ġ= ĠCurrency Conversion Adapter () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoolbar : ĠToolbar ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠHistory ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġinject ViewModel ( History ViewModel :: class , ĠS copes . HISTORY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ LAST _ ITEM _ POSITION Ġ= Ġ" KEY _ LAST _ ITEM _ POSITION " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region Ġ================= ===== ĠAndroid Ġmethods Ġ================= ===== ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġthis . savedInstanceState Ġ= ĠsavedInstanceState ĊĊĠĠĠĠĠĠĠ Ġobserver LiveData () ĊĠĠĠĠĠĠĠ Ġsetup UI () ĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġback Ġbutton ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Activity Ġback Ġpressed Ġinvoked ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġyou Ġwant Ġon Back Pressed () Ġto Ġbe Ġcalled Ġas Ġnormal Ġafterwards ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. let Ġ{ ĠNavigation . find Nav Controller ( it ). navigate Up () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Activity Created () ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ history , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave RecyclerView State ( out State ) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġnavigate Up ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// endregion ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . removeAll History () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( require View ()). navigate ( R . id . fragment _ converter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoolbar Ġ= Ġview ?. findViewById ( R . id . toolbar History Fragment ) !! ĊĠĠĠĠĠĠĠ Ġtoolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf late Menu ( R . menu . menu _ item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . removeItem ( R . id . menu _ action _ history _ fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation Icon ( R . drawable . baseline _ arrow _ back _ white _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( require View ()). navigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserver LiveData () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . currency Conversion List LiveData ) Ġ{ Ġshow Currency Conversions ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . isLoading LiveData ) Ġ{ Ġshow Loading ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Currency Conversions ( currency Conversions : ĠList < Currency Conversion Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpopulate RecyclerView ( currency Conversions ) ĊĠĠĠĠĠĠĠ Ġrestore Previous UIState () ĊĠĠĠĠĠĠĠ Ġanimate RecyclerView Only InThe Beginning () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore Previous UIState () Ġ{ ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Item Position Ġ= Ġit . getInt ( KEY _ LAST _ ITEM _ POSITION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler _ view _ currency _ conversions . scrollTo Position ( last Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ("$ KEY _ LAST _ ITEM _ POSITION Ġis Ġ$ last Item Position ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate RecyclerView ( currency Conversions : ĠList < Currency Conversion Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler _ view _ currency _ conversions . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Adapter . setData ( currency Conversions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġcurrency Conversion Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( object Ġ: ĠItem Touch Helper . Simple Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠViewHolder , Ġtarget : ĠViewHolder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠViewHolder , Ġswipe Dir : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Activity (), ĠR . string . currency _ conversion _ deleted , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠviewHolder . adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove ( currency Conversion Adapter . getC urrency Conversion At ( position )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrency Conversion Adapter . remove Currency Conversion ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). attach To RecyclerView ( recycler _ view _ currency _ conversions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading ( isLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpb History . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġif Ġ( isLoading ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate RecyclerView Only InThe Beginning () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getLast Item Position () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler _ view _ currency _ conversions . layout Animation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Layout Animation ( require Context (), ĠR . anim . layout _ animation _ fall _ down ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetLast Item Position (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Item Position Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . containsKey ( KEY _ LAST _ ITEM _ POSITION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Item Position Ġ= Ġit . getInt ( KEY _ LAST _ ITEM _ POSITION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Item Position ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave RecyclerView State ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler _ view _ currency _ conversions . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager ?. let Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Visible Item Position Ġ= Ġ( it Ġas ĠLinearLayoutManager ). find Last Visible Item Position () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ LAST _ ITEM _ POSITION , Ġlast Visible Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }