package Ġcom . ade sso . move e . base Ċ Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Extras Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . nav Graph ViewModels Ċ import Ġcom . ade sso . move e . BR Ċ import Ġcom . ade sso . move e . internal . extension . observe NonNull Ċ import Ġcom . ade sso . move e . internal . extension . show Popup Ċ import Ġcom . ade sso . move e . internal . util . functional . lazy Thread Safety None Ċ import Ġcom . ade sso . move e . navigation . Navigation Command Ċ import Ġcom . ade sso . move e . scene . main . MainActivity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjava . lang . reflect . Parameterized Type Ċ Ċ class ĠBase Fragment Decorator < VM Ġ: ĠBase Android ViewModel , ĠB Ġ: ĠView Data Binding >( ĊĠĠĠ Ġval Ġfragment : ĠFragment , ĊĠĠĠ Ġval Ġbinder : ĠB , ĊĠĠĠ Ġval ĠviewModel Factory : ĠViewModel Provider . Factory Ċ ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval ĠviewModel Ġby Ġlazy Thread Safety None Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpersistent ViewModel Class Ġ= Ġ( fragment . java Class . generic Super class Ġas ĠParameter ized Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. actual Type Arguments [ 0 ] Ġas ĠClass < VM > ĊĠĠĠĠĠĠĠ Ġreturn @ lazy Thread Safety None ĠViewModel Provider ( fragment , ĠviewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( persistent ViewModel Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġactivity ViewModels (): ĠLazy < VM > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment . activity ViewModels Ġ{ ĠviewModel Factory Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġview Models (): ĠLazy < VM > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment . view Models Ġ{ ĠviewModel Factory Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġparent ViewModels (): ĠLazy < VM > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment . require Parent Fragment (). view Models Ġ{ ĠviewModel Factory Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠVM Ġ: ĠViewModel > Ġnav Graph ViewModels (@ Id Res Ġnav Graph Id : ĠInt ): ĊĠĠĠĠĠĠĠ ĠLazy < VM > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment . nav Graph ViewModels ( nav Graph Id ) Ġ{ ĠviewModel Factory Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġfragment . view Lifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Variable ( BR . viewModel , ĠviewModel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Navigation () ĊĠĠĠĠĠĠĠ Ġobserve Failure () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Navigation () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . navigation . observe NonNull ( fragment . view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Navigation ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Navigation ( command : ĠNavigation Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNavigation Command . To Direction Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . find Nav Controller (). navigate ( command . directions , Ġget Extras ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNavigation Command . To Deep Link Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragment . activity Ġas ? ĠMainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . nav Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . navigate ( command . deep Link . to Uri (), Ġnull , Ġget Extras ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNavigation Command . Popup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . context ?. show Popup ( model , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNavigation Command . Back Ġ-> Ġfragment . find Nav Controller (). navigate Up () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Failure () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . failure Popup . observe NonNull ( fragment . view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ Ġpopup Ui Model Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . context ?. show Popup ( popup Ui Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Sn ackBar Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( binder . root , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Extras (): ĠFragment Navigator . Extras Ġ= ĠFragment Navigator Extras () Ċ } Ċ