package Ġapp . me lon . base . lazy load Ċ Ċ import Ġandroidx . view binding . View Binding Ċ import Ġapp . me lon . base . framework . Base D agger Fragment Ċ import Ġapp . me lon . base . framework . lifecycle . Fragment Lifecycle Observer ĊĊ Ċ abstract Ġclass ĠLazy Load Fragment < V Ġ: ĠView Binding > Ġ: ĠBase D agger Fragment < V >(), ĠIF ragment Visibility Ġ{ ĊĊĠĠĠ Ġ// Ġif Ġthe Ġfragment Ġis Ġvisible Ġto Ġthe Ġuser . ĊĠĠĠ Ġprivate Ġvar Ġm Is Fragment Visible Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġif Ġthe Ġfragment Ġis Ġvisible Ġto Ġthe Ġuser Ġfor Ġthe Ġfirst Ġtime . ĊĠĠĠ Ġprivate Ġvar Ġm Is Fragment Visible First Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġis VisibleTo User : ĠBoolean Ġget () Ġ= Ġm Is Fragment Visible ĊĊĠĠĠ Ġprivate Ġfun Ġdetermine Fragment Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġparent Fragment ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull Ġ&& Ġparent Ġis ĠLazy Load Fragment <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parent . isVisible To User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReg ard Ġthis Ġfragment Ġas Ġinvisible Ġwhen Ġits ĠParent ĠFragment Ġis Ġinvisible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠ Ġif Ġ( is Res umed Ġ&& Ġ! is Hidden Ġ&& Ġuser Visible Hint Ġ&& Ġ! m Is Fragment Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Fragment Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Is Fragment Visible First ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Fragment Visible First Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon First Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Post First Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Child Fragment Visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetermine Fragment In visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Is Fragment Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Is Fragment Visible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon In visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Child Fragment In visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetermine Child Fragment Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġchild FragmentManager . fragments . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLazy Load Fragment <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . determine Fragment Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdetermine Child Fragment In visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġchild FragmentManager . fragments . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLazy Load Fragment <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . determine Fragment In visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLazy Load Observer Ġ: ĠFragment Lifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment Visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment In visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Hidden Changed ( hidden : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment In visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetUser Visible Hint ( isVisible To User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isVisible To User ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment Visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetermine Fragment In visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Observer ( Lazy Load Observer ()) ĊĠĠĠ Ġ} Ċ }