package Ġcom . m ire go . tri kot . view models . decl arative . controller Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . m ire go . tri kot . view models . decl arative . controller . factory . Android ViewModel Provider Factory Ċ import Ġcom . m ire go . tri kot . view models . decl arative . lifecycle . Lifecycle Owner Wrapper Ċ import Ġcom . m ire go . tri kot . view models . decl arative . view model . VM D ViewModel Ċ import Ġkotlin . reflect . K Class Ċ Ċ abstract Ġclass ĠViewModel Activity < VM C Ġ: ĠV MD ViewModel Controller < VM , ĠN >, ĠVM Ġ: ĠV MD ViewModel , ĠN Ġ: ĠV MD Navigation Delegate > Ġ: ĊĠĠĠ ĠAppCompatActivity (), ĠV MD Navigation Delegate Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" ViewModel Activity " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġval ĠviewModel Controller : ĠV MC ĊĠĠĠ Ġval ĠviewModel : ĠVM Ġby Ġlazy Ġ{ ĠviewModel Controller . viewModel Ġ} ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġlifecycle Owner Wrapper : ĠLifecycle Owner Wrapper ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnavigation Delegate Ġ= Ġthis Ġas ? ĠN ĊĠĠĠĠĠĠĠ Ġif Ġ( navigation Delegate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Controller . navigation Delegate Ġ= Ġnavigation Delegate ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG _ TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ViewModel Activity Ġ${ this :: class . simple Name } Ġmust Ġconform Ġto Ġits Ġnavigation Ġdelegate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Controller . onCreate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠviewModel Controller . on Ap pear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠviewModel Controller . on Dis appear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Controller . navigation Delegate Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġ< T Ġ: ĠV MD ViewModel Controller < VM , ĠN >> Ġget ViewModel Controller ( requested Class : ĠK Class < T >): ĠT Ġ= ĊĠĠĠĠĠĠĠ ĠAndroid ViewModel Provider Factory . with ( this , Ġnull ). get ( requested Class . java ) ĊĊĠĠĠ Ġprotected Ġfun Ġ< T Ġ: ĠV MD ViewModel Controller < VM , ĠN >> Ġget ViewModel Controller ( ĊĠĠĠĠĠĠĠ Ġrequested Class : ĠK Class < T >, ĊĠĠĠĠĠĠĠ Ġnavigation Data : ĠAny ? ĊĠĠĠ Ġ): ĠT Ġ= Ġif Ġ( navigation Data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget ViewModel Controller ( requested Class ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid ViewModel Provider Factory . with ( this , Ġnavigation Data ). get ( requested Class . java ) ĊĠĠĠ Ġ} Ċ } Ċ