package Ġcom . web add ict ed . h ilt session . view . base Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . target . Drawable ImageView Target Ċ import Ġcom . web add ict ed . h ilt session . Build Config Ċ import Ġcom . web add ict ed . h ilt session . R Ċ import Ġcom . web add ict ed . h ilt session . data . model . common . Common List Res po Ċ import Ġcom . web add ict ed . h ilt session . data . model . common . Common Res po Ċ import Ġcom . web add ict ed . h ilt session . utils . api utils . ApiResponse Ċ import Ġcom . web add ict ed . h ilt session . utils . common .* Ċ import Ġcom . web add ict ed . h ilt session . view . home . Home Activity Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ abstract Ġclass ĠBase Activity ( private Ġval Ġlayout Id : ĠInt ) Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġis Allow Exit App : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠBase Activity :: class . qualified Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġon Bind To ( binding : ĠView Data Binding ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠView Data Binding ? ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , Ġlayout Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind To ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{} ĊĊĠĠĠ Ġfun Ġnavigate Fragment ( ĊĠĠĠĠĠĠĠ Ġlayout Container : ĠInt , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġis Enable Back Stack : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . replace ( layout Container , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠHome Activity ) Ġis Allow Exit App Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Enable Back Stack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit Allow ing State Loss () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate Add Fragment ( ĊĠĠĠĠĠĠĠ Ġlayout Container : ĠInt , ĊĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠ Ġis Enable Back Stack : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction Ġ= Ġfragment Manager . beginTransaction () Ċ // ĠĠĠ Ġfragment Transaction . set Custom Animations ( R . anim . trans _ left _ in , ĠR . anim . trans _ left _ out , ĠR . anim . trans _ right _ in , ĠR . anim . trans _ right _ out ) Ċ // ĠĠĠ Ġfragment Transaction . set Custom Animations ( Ċ // ĠĠĠĠĠ ĠR . anim ator . fragment _ slide _ left _ enter , Ċ // ĠĠĠĠĠ ĠR . anim ator . fragment _ slide _ left _ exit , Ċ // ĠĠĠĠĠ ĠR . anim ator . fragment _ slide _ right _ enter , Ċ // ĠĠĠĠĠ ĠR . anim ator . fragment _ slide _ right _ exit Ċ // ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . add ( layout Container , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Enable Back Stack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transaction . addTo Back Stack ( fragment :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit Allow ing State Loss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġhandle Api Res po ( ĊĠĠĠĠĠĠĠ Ġapi Response : ĠApiResponse < T >, ĊĠĠĠĠĠĠĠ Ġloading View : ĠView ?, ĊĠĠĠĠĠĠĠ Ġresponse Observer : Ġ( is Failure : ĠBoolean , Ġresult : ĠApiResponse < T > ?) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( api Response . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Status . NO _ INTER NET _ CONNECTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Utils . get Dialog Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . error ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dialog _ no _ internet _ msg ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . retry ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġresponse Observer ( true , Ġapi Response ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loading View Ġ!= Ġnull Ġ&& Ġloading View Ġis ĠImageView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading View . visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( R . raw . loader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( Drawable ImageView Target ( loading View )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġloading View ?. visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Msg : ĠString Ġ= Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Response . errorMessage . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . something _ w ent _ wrong ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Utils . get Dialog Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . error ), Ġerror Msg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . retry ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġresponse Observer ( true , Ġapi Response ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading View ?. g one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Success : ĠBoolean ? Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Msg : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( api Response . data Ġis ĠCommon Res po <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Success Ġ= Ġapi Response . data . is Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Msg Ġ= Ġapi Response . data . str Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( api Response . data Ġis ĠCommon List Res po <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Success Ġ= Ġapi Response . data . is Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Msg Ġ= Ġapi Response . data . str Message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Success Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Observer ( false , Ġapi Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Msg ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Utils . get Dialog Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . error ), Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . retry ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . cancel ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġresponse Observer ( true , Ġapi Response ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdialog , Ġwhich Ġ-> Ġdialog . dismiss () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading View ?. g one () Ċ // ĠĠĠĠĠĠĠ Ġresponse Observer ( false , Ġapi Response ) Ċ // ĠĠĠĠĠĠĠ Ġloading View ?. g one () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġ< T > ĠLive Data < ApiResponse < T >> . observe Once ( ĊĠĠĠĠĠĠĠ Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠĠĠĠĠ Ġobserver : ĠObserver < ApiResponse < T >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve ( lifecycle Owner , Ġobject Ġ: ĠObserver < ApiResponse < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( t : ĠApiResponse < T > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Changed ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t ?. status Ġ!= ĠApiResponse . Status . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > ĠLive Data < ApiResponse < T >> . observe Once ( observer : ĠObserver < ApiResponse < T >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Fore ver ( object Ġ: ĠObserver < ApiResponse < T >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( t : ĠApiResponse < T > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Changed ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t ?. status Ġ!= ĠApiResponse . Status . LOADING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ ĠPermission Helper . on Request Permissions Result ( this , Ġrequest Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠImage Picker Helper . Img Picker Type . CH OO SER _ CAMERA _ G ALL ERY . value Ġ|| Ġrequest Code Ġ== ĠImage Picker Helper . Img Picker Type . C ROP _ IMAGE . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Picker Helper . on Activity Result ( this , Ġrequest Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} Ċ Ċ }