package Ġru . mail . m arch . inter actor Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Ċ import Ġru . mail . m arch . channel . Data Channel Factory Ċ Ċ class ĠViewModel Interactor Ob t ainer ( ĊĠĠĠ Ġprivate Ġval ĠviewModel Store : ĠViewModel Store , ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner Ċ ) Ġ: ĠInter actor Ob t ainer Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠInter actor > Ġobtain ( clazz : ĠClass < T >, Ġcreator : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobtain ( clazz , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ KEY , Ġcreator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠInter actor > Ġobtain ( ĊĠĠĠĠĠĠĠ Ġclazz : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġcreator : Ġ() Ġ-> ĠT ĊĠĠĠ Ġ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠViewModel Provider ( viewModel Store , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInter actor ViewModel Factory ( creator ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= Ġprovider . get ( prepare Key ( clazz , Ġkey ), ĠInter actor ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġcast ed ViewModel Ġ= ĠviewModel Ġas ĠInter actor ViewModel < T > ĊĊĠĠĠĠĠĠĠ Ġcast ed ViewModel . channel Factory . attach Owner ( lifecycle Owner ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcast ed ViewModel . inter actor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Key ( clazz : ĠClass <* >, Ġkey : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġclazz . canonical Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Local Ġand Ġanonymous Ġclasses Ġcan Ġnot Ġbe ĠInter actor ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ className Ġ: Ġ$ key " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ KEY Ġ= Ġ" Default " ĊĠĠĠ Ġ} Ċ }