package Ġsite . p au lo . local chat . ui . base Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . os . Bundle Ċ import Ġsite . p au lo . local chat . Bo ilerplate Application Ċ import Ġsite . p au lo . local chat . injection . component . Activity Component Ċ import Ġsite . p au lo . local chat . injection . component . Config Persistent Component Ċ import Ġsite . p au lo . local chat . injection . component . D agger Config Persistent Component Ċ import Ġsite . p au lo . local chat . injection . module . Activity Module Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ Ċ open Ġclass ĠBase Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprivate Ġval ĠKEY _ ACTIVITY _ ID Ġ= Ġ" KEY _ ACTIVITY _ ID " ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprivate Ġval ĠNEXT _ ID Ġ= ĠAtomic Long ( 0 ) ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġprivate Ġval Ġcomponents Map Ġ= ĠHashMap < Long , ĠConfig Persistent Component >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġactivity Id : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġlateinit Ġvar Ġactivity Component : ĠActivity Component ĊĠĠĠĠĠĠĠ Ġget ĊĊĠĠĠ Ġ@ Suppress (" Use Property Access Syntax ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠActivity Component Ġand Ġre uses Ġcached ĠConfig Persistent Component Ġif Ġthis Ġis ĊĠĠĠĠĠĠĠ Ġ// Ġbeing Ġcalled Ġafter Ġa Ġconfiguration Ġchange . ĊĠĠĠĠĠĠĠ Ġactivity Id Ġ= ĠsavedInstanceState ?. getLong ( Base Fragment . Companion . KEY _ ACTIVITY _ ID ) Ġ?: ĠBase Fragment . Companion . NEXT _ ID . get And Increment () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Base Fragment . Companion . components Map [ activity Id ] Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Re using ĠConfig Persistent Component Ġid =% d ", Ġactivity Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Persistent Component Ġ= ĠBase Fragment . Companion . components Map . get Or Put ( activity Id , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Creating Ġnew ĠConfig Persistent Component Ġid =% d ", Ġactivity Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġ( activity ?. application ?. application Context Ġas ĠBo ilerplate Application ). application Component ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠD agger Config Persistent Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. application Component ( component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġactivity Component Ġ= Ġconfig Persistent Component . activity Component ( Activity Module ( activity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Long ( Base Fragment . Companion . KEY _ ACTIVITY _ ID , Ġactivity Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġact Ġ= Ġactivity Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! act . is Changing Configurations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" Clear ing ĠConfig Persistent Component Ġid =% d ", Ġactivity Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Fragment . Companion . components Map . remove ( activity Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} Ċ } Ċ