package Ġcom . example . xp mar vel . ui . characters . presentation Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . example . xp mar vel . R Ċ import Ġcom . example . xp mar vel . ui . characters . view _ model . Characters List ViewModel Ċ import Ġcom . example . xp mar vel . core . Main Application Ċ import Ġcom . example . xp mar vel . domain . models . Character Model Ċ import Ġcom . example . xp mar vel . databinding . Fragment Characters List Binding Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠChar acters List Fragment Ġ: ĠFragment (), ĠSw ipe Refresh Layout . On Refresh Listener Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġvm Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Characters List ViewModel > Ġ{ Ġvm Factory Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Data Binding : ĠFragment Characters List Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlist Adapter : ĠChar acters ListAdapter ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĊĠĠĠĠĠĠĠ Ġ( require Activity (). application Ġas ĠMain Application ). app Component . character Component () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Binding Ġ= ĠFragment Characters List Binding . inflate ( in flater , Ġcontainer , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . viewModel Ġ= Ġthis @ Characters List Fragment . viewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview Data Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . refresh Listener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġview Data Binding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġsetup ListAdapter () ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ ĠviewModel . load Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel . load Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . load Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ListAdapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Binding . viewModel ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Adapter Ġ= ĠChar acters ListAdapter ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . re cyclerView . layout Manager Ġ= ĠGrid LayoutManager ( require Context (), Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . re cyclerView . adapter Ġ= Ġlist Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Adapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Character Detail Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Details ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Favorite Toast () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Details ( character : ĠCharacter Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġbundle Of (" character " Ġto Ġcharacter ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . character Detail Fragment , Ġbundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Favorite Toast () Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getText ( R . string . added _ to _ favorites ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠ Ġ} Ċ }