@ file : Jvm Name (" Utils ") Ċ Ċ package Ġcom . blank j . util code . util Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . app . Application Ċ import Ġandroid . app . Application . Activity Lifecycle Callbacks Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . content . File Provider Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . util .* Ċ Ċ @ Suppress Lint (" Static Field Leak ") Ċ private Ġvar Ġs Application : ĠApplication ? Ġ= Ġnull Ċ Ċ private Ġval ĠACT IVITY _ LI FE CYCLE Ġ= ĠActivity Lifecycle Impl () Ċ private Ġconst Ġval ĠPER MISSION _ ACTIVITY _ CLASS _ NAME Ġ= ĊĠĠĠĠĠĠĠ Ġ" com . blank j . util code . util . Permission Utils \$ Permission Utils . Permission Activity " Ċ Ċ /** Ċ Ġ* ĠInit Ġutils . Ċ Ġ* Ċ Ġ* ĠInit Ġit Ġin Ġthe Ġclass Ġof ĠApplication . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext Ġcontext Ċ Ġ*/ Ċ fun Ġinit ( context : ĠContext ?) Ġ{ ĊĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( getApplication By Reflect ()) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġinit ( context . application Context Ġas ĠApplication ) Ċ } Ċ Ċ /** Ċ Ġ* ĠInit Ġutils . Ċ Ġ* Ċ Ġ* ĠInit Ġit Ġin Ġthe Ġclass Ġof ĠApplication . Ċ Ġ* Ċ Ġ* Ġ@ param Ġapp Ġapplication Ċ Ġ*/ Ċ fun Ġinit ( app : ĠApplication ?) Ġ{ ĊĠĠĠ Ġif Ġ( s Application Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs Application Ġ= Ġapp Ġ?: Ġget Application By Reflect () ĊĠĠĠĠĠĠĠ Ġs Application !!. register Activity Lifecycle Callbacks ( ACTIVITY _ LI FE CYCLE ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturn Ġthe Ġcontext Ġof ĠApplication Ġobject . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġcontext Ġof ĠApplication Ġobject Ċ Ġ*/ Ċ fun Ġget App (): ĠApplication Ġ{ ĊĠĠĠ Ġif Ġ( s Application Ġ!= Ġnull ) Ġreturn Ġs Application Ġas ĠApplication ĊĠĠĠ Ġval Ġapp Ġ= Ġget Application By Reflect () ĊĠĠĠ Ġinit ( app ) ĊĠĠĠ Ġreturn Ġapp Ċ } Ċ Ċ private Ġfun Ġget Application By Reflect (): ĠApplication Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Private Api ") ĊĠĠĠĠĠĠĠ Ġval Ġactivity Thread Ġ= ĠClass . forName (" android . app . ActivityThread ") ĊĠĠĠĠĠĠĠ Ġval Ġthread Ġ= Ġactivity Thread . getMethod (" current ActivityThread "). invoke ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= Ġactivity Thread . getMethod (" getApplication "). invoke ( thread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNullPointerException (" u Ġshould Ġinit Ġfirst ") ĊĠĠĠĠĠĠĠ Ġreturn Ġapp Ġas ĠApplication ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthrow ĠNullPointerException (" u Ġshould Ġinit Ġfirst ") Ċ } Ċ Ċ internal Ġfun ĠgetActivity Lifecycle (): ĠActivity Lifecycle Impl Ġ{ ĊĠĠĠ Ġreturn ĠACT IVITY _ LI FE CYCLE Ċ } Ċ Ċ internal Ġfun ĠgetActivity List (): ĠLinkedList < Activity > Ġ{ ĊĠĠĠ Ġreturn ĠACT IVITY _ LI FE CYCLE . m Activity List Ċ } Ċ Ċ fun Ġget Top Activity Or App (): ĠContext Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is App Foreground ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtop Activity Ġ= ĠACT IVITY _ LI FE CYCLE . top Activity ĊĠĠĠĠĠĠĠ Ġtop Activity Ġ?: Ġget App () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġget App () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġis App Foreground (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġam Ġ= Ġget App (). getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĊĠĠĠ Ġval Ġinfo Ġ= Ġam . running App Processes ĊĠĠĠ Ġif Ġ( info Ġ== Ġnull Ġ|| Ġinfo . size Ġ== Ġ 0 ) Ġreturn Ġfalse ĊĠĠĠ Ġfor Ġ( a Info Ġin Ġinfo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( a Info . import ance Ġ== ĠActivity Manager . Running App Process Info . IMPORT ANCE _ FO REG ROUND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa Info . process Name Ġ== Ġget App (). packageName ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ internal Ġval ĠAD AP T _ SCREEN _ ARGS Ġ= ĠAdapt Screen Args () Ċ Ċ internal Ġfun Ġrestore Adapt Screen () Ġ{ ĊĠĠĠ Ġval Ġsystem Dm Ġ= ĠResources . getSystem (). display Metrics ĊĠĠĠ Ġval Ġapp Dm Ġ= Ġget App (). resources . display Metrics ĊĠĠĠ Ġval Ġactivity Ġ= ĠACT IVITY _ LI FE CYCLE . top Activity ĊĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Dm Ġ= Ġactivity . resources . display Metrics ĊĠĠĠĠĠĠĠ Ġif Ġ( ADAP T _ SCREEN _ ARGS . is Vertical Slide ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Dm . density Ġ= Ġactivity Dm . width Pixels Ġ/ ĠAD AP T _ SCREEN _ ARGS . size In Px . toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Dm . density Ġ= Ġactivity Dm . height Pixels Ġ/ ĠAD AP T _ SCREEN _ ARGS . size In Px . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity Dm . scaled Density Ġ= Ġactivity Dm . density Ġ* Ġ( system Dm . scaled Density Ġ/ Ġsystem Dm . density ) ĊĠĠĠĠĠĠĠ Ġactivity Dm . density D pi Ġ= Ġ( 1 6 0 Ġ* Ġactivity Dm . density ). toInt () ĊĊĠĠĠĠĠĠĠ Ġapp Dm . density Ġ= Ġactivity Dm . density ĊĠĠĠĠĠĠĠ Ġapp Dm . scaled Density Ġ= Ġactivity Dm . scaled Density ĊĠĠĠĠĠĠĠ Ġapp Dm . density D pi Ġ= Ġactivity Dm . density D pi ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ADAP T _ SCREEN _ ARGS . is Vertical Slide ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dm . density Ġ= Ġapp Dm . width Pixels Ġ/ ĠAD AP T _ SCREEN _ ARGS . size In Px . toFloat () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Dm . density Ġ= Ġapp Dm . height Pixels Ġ/ ĠAD AP T _ SCREEN _ ARGS . size In Px . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp Dm . scaled Density Ġ= Ġapp Dm . density Ġ* Ġ( system Dm . scaled Density Ġ/ Ġsystem Dm . density ) ĊĠĠĠĠĠĠĠ Ġapp Dm . density D pi Ġ= Ġ( 1 6 0 Ġ* Ġapp Dm . density ). toInt () ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġcancel Adapt Screen () Ġ{ ĊĠĠĠ Ġval Ġsystem Dm Ġ= ĠResources . getSystem (). display Metrics ĊĠĠĠ Ġval Ġapp Dm Ġ= Ġget App (). resources . display Metrics ĊĠĠĠ Ġval Ġactivity Ġ= ĠACT IVITY _ LI FE CYCLE . top Activity ĊĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Dm Ġ= Ġactivity . resources . display Metrics ĊĠĠĠĠĠĠĠ Ġactivity Dm . density Ġ= Ġsystem Dm . density ĊĠĠĠĠĠĠĠ Ġactivity Dm . scaled Density Ġ= Ġsystem Dm . scaled Density ĊĠĠĠĠĠĠĠ Ġactivity Dm . density D pi Ġ= Ġsystem Dm . density D pi ĊĠĠĠ Ġ} ĊĠĠĠ Ġapp Dm . density Ġ= Ġsystem Dm . density ĊĠĠĠ Ġapp Dm . scaled Density Ġ= Ġsystem Dm . scaled Density ĊĠĠĠ Ġapp Dm . density D pi Ġ= Ġsystem Dm . density D pi Ċ } Ċ Ċ internal Ġfun Ġis Adapt Screen (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġsystem Dm Ġ= ĠResources . getSystem (). display Metrics ĊĠĠĠ Ġval Ġapp Dm Ġ= Ġget App (). resources . display Metrics ĊĠĠĠ Ġreturn Ġsystem Dm . density Ġ!= Ġapp Dm . density Ċ } Ċ Ċ internal Ġclass ĠAdapt Screen Args Ġ{ ĊĠĠĠ Ġvar Ġsize In Px : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġis Vertical Slide : ĠBoolean Ġ= Ġfalse Ċ } Ċ Ċ internal Ġclass ĠActivity Lifecycle Impl Ġ: ĠActivity Lifecycle Callbacks Ġ{ ĊĊĠĠĠ Ġval Ġm Activity List : ĠLinkedList < Activity > Ġ= ĠLinkedList () ĊĠĠĠ Ġprivate Ġval Ġm Status Listener Map : ĠHashMap < Any , ĠOn App Status Changed Listener > Ġ= ĠHashMap () ĊĊĠĠĠ Ġprivate Ġvar Ġm Foreground Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Config Count Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġtop Activity : ĠActivity ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Activity List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Activity Ġ= Ġm Activity List . last ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( top Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtop Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Activity By Reflect Ġ= Ġtop Activity By Reflect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( top Activity By Reflect Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Activity Ġ= Ġtop Activity By Reflect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtop Activity By Reflect ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( PERMISSION _ ACTIVITY _ CLASS _ NAME Ġ== Ġactivity ?. java Class ?. name ) Ġreturn ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity ?. java Class Ġ== ĠPermission Utils . Permission Activity :: class . java ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Activity List . contains ( activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m Activity List . last . equals ( activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity List . remove ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity List . add Last ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Activity List . add Last ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtop Activity By Reflect : ĠActivity ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Private Api ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Thread Class Ġ= ĠClass . forName (" android . app . ActivityThread ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Thread Ġ= Ġactivity Thread Class . getMethod (" current ActivityThread "). invoke ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivities Field Ġ= Ġactivity Thread Class . getDeclared Field (" m Activity List ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivities Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivities Ġ= Ġactivities Field . get ( activity Thread ) Ġas ĠMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( activity Record Ġin Ġactivities . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Record Ġ== Ġnull ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Record Class Ġ= Ġactivity Record . java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaused Field Ġ= Ġactivity Record Class . getDeclared Field (" paused ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaused Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! paused Field . getBoolean ( activity Record )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Field Ġ= Ġactivity Record Class . getDeclared Field (" activity ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġactivity Field . get ( activity Record ) Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Field Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Listener ( obj : ĠAny , Ġlistener : ĠOn App Status Changed Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Status Listener Map [ obj ] Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Listener ( obj : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Status Listener Map . remove ( obj ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( activity : ĠActivity , ĠsavedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Activity Ġ= Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Started ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Activity Ġ= Ġactivity ĊĠĠĠĠĠĠĠ Ġif Ġ( m Foreground Count Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Status ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Config Count Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ m Config Count ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ m Foreground Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Res umed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Activity Ġ= Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ) Ġ{ /** / ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Stopped ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity . is Changing Configurations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-- m Config Count ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-- m Foreground Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Foreground Count Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Save InstanceState ( activity : ĠActivity , Ġout State : ĠBundle ) Ġ{ /** / ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Destroyed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Activity List . remove ( activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Status ( is Foreground : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Status Listener Map . isEmpty ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġfor Ġ( on App Status Changed Listener Ġin Ġm Status Listener Map . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Foreground ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon App Status Changed Listener . on Foreground () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon App Status Changed Listener . on Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠFile Provider 4 Util Code Ġ: ĠFile Provider () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġinit ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ //////////////////////////////////////////////////////////////////////// /// Ċ // Ġinterface Ċ //////////////////////////////////////////////////////////////////////// /// Ċ Ċ interface ĠOn App Status Changed Listener Ġ{ ĊĠĠĠ Ġfun Ġon Foreground () ĊĊĠĠĠ Ġfun Ġon Background () Ċ }