import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . dynamic features . Dynamic Extras Ċ import Ġandroidx . navigation . dynamic features . Dynamic Install Monitor Ċ import Ġcom . google . android . play . core . split install . Split Install Session State Ċ import Ġcom . google . android . play . core . split install . model . Split Install Session Status Ċ import Ġcom . sum mit . commons . ui . base . Base Fragment Ċ Ċ abstract Ġclass ĠDynamic Navigation Fragment < B Ġ: ĠView Data Binding , ĠM Ġ: ĠViewModel >( ĊĠĠĠ Ġ@ Layout Res ĊĠĠĠ Ġprivate Ġval Ġlayout Id : ĠInt Ċ ) Ġ: ĊĠĠĠ ĠBase Fragment < B , ĠM >( layout Id ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġinstall Monitor Ġ= ĠDynamic Install Monitor () ĊĊĠĠĠ Ġfun Ġnavigate With In ast all Monitor ( ĊĠĠĠĠĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠĠĠĠĠ Ġ@ Id Res Ġdestination Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDynamic Extras ( install Monitor ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprintln (" Dynamic Install Fragment Ġis Install Required : Ġ${ install Monitor . is Install Required }") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( install Monitor . is Install Required ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Monitor . status . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠObserver < Split Install Session State > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( session State : ĠSplit Install Session State ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( session State . status ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . INST ALLED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCall Ġnavigate Ġagain Ġhere Ġor Ġafter Ġuser Ġt aps Ġagain Ġin Ġthe ĠUI : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( destination Id , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . REQ UIRES _ USER _ CONFIRM ATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġall Ġremaining Ġstates : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . FAILED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSplit Install Session Status . C ANCE LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( session State . has Terminal Status ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstall Monitor . status . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }