package Ġcom . p ape . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġz hang zh any ong Ġon Ġ 2 0 1 8 / 4 / 1 9 . Ċ Ġ*/ Ċ object ĠUtils Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠACT IVITY _ LIST Ġ= ĠLinkedList < Activity >() ĊĊĠĠĠ Ġprivate Ġval Ġm Callbacks Ġ= Ġobject Ġ: ĠApplication . Activity Lifecycle Callbacks Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Created ( activity : ĠActivity , Ġbundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Top Activity ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Started ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Top Activity ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Res umed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Top Activity ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Stopped ( activity : ĠActivity ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Save InstanceState ( activity : ĠActivity , Ġbundle : ĠBundle ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Destroyed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACT IVITY _ LIST . remove ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å·¥åħ· åĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit ( app : ĠApplication ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapp . register Activity Lifecycle Callbacks ( m Callbacks ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġset Top Activity ( activity : ĠActivity ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( activity . java Class Ġ== ĠPermission Utils . Permission Activity :: class . java ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ( ACTIVITY _ LIST . contains ( activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ACTIVITY _ LIST . last Ġ!= Ġactivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACT IVITY _ LIST . remove ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACT IVITY _ LIST . add Last ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACT IVITY _ LIST . add Last ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun ĠgetActivity List (): ĠLinkedList < Activity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠACT IVITY _ LIST ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Top Activity (): ĠActivity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! ACTIVITY _ LIST . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Activity Ġ= ĠACT IVITY _ LIST . last ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( top Activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtop Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġusing Ġreflect Ġto Ġget Ġtop Ġactivity ĊĠĠĠĠĠĠĠ Ġ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 Activities ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivities Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivities Ġ= Ġactivities Field . get ( activity Thread ) Ġas ĠMap < *, Ġ*> Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( activity Record Ġin Ġactivities . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Record Class Ġ= Ġactivity Record ?. java Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Record Class ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaused Field Ġ= Ġit . getDeclared Field (" paused ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaused Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! paused Field . getBoolean ( activity Record )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Field Ġ= Ġit . getDeclared Field (" activity ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Field . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Field . get ( activity Record ) Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . set Top Activity ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ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 ĊĠĠĠ Ġ} Ċ Ċ }