package Ġcom . pr 0 gram m . app . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġcom . pr 0 gram m . app . ui . dialogs . Error Dialog Fragment Ċ import Ġcom . pr 0 gram m . app . util . Error Formatting Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ /** Ċ Ġ*/ Ċ class ĠActivity ErrorHandler ( application : ĠApplication ) Ġ: ĠError Dialog Fragment . OnError Dialog Handler , ĠApplication . Activity Lifecycle Callbacks Ġ{ ĊĠĠĠ Ġprivate Ġval Ġnull Value Ġ= ĠWeak Reference < Fragment Activity >( null ) ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Ġ= Ġnull Value ĊĊĠĠĠ Ġprivate Ġvar Ġpending Error : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpending Formatter : ĠError Formatting . Formatter ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication . register Activity Lifecycle Callbacks ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Error Dialog ( error : ĠThrowable , Ġformatter : ĠError Formatting . Formatter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġcurrent . get () ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġif Ġ( formatter . handles ( error )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter . getMessage ( activity , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Writer (). also Ġ{ Ġerror . printStackTrace ( PrintWriter ( it )) Ġ}. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Dialog Fragment . show Error String ( activity . support FragmentManager , Ġmessage ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġany Ġpending Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Formatter Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pending Error Ġ= Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pending Formatter Ġ= Ġformatter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Res umed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠFragment Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= ĠWeak Reference ( activity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Error Ġ!= Ġnull Ġ&& Ġpending Formatter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Dialog ( pending Error !! , Ġpending Formatter !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current . get () Ġ=== Ġactivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġnull Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Stopped ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current . get () Ġ=== Ġactivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġnull Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Destroyed ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current . get () Ġ=== Ġactivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġnull Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( activity : ĠActivity , ĠsavedInstanceState : ĠBundle ?) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Started ( activity : ĠActivity ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Save InstanceState ( activity : ĠActivity , Ġout State : ĠBundle ) Ġ{} Ċ Ċ } Ċ