package Ġid . p ah lev ik un . j ot ter Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġid . p ah lev ik un . j ot ter . event . Activity Event Ċ import Ġid . p ah lev ik un . j ot ter . event . Fragment Event Ċ import Ġid . p ah lev ik un . j ot ter . util . Lifecycle Listener Ċ import Ġid . p ah lev ik un . j ot ter . util . Logger Ċ Ċ class ĠJ ot ter Ġprivate Ġconstructor ( private Ġval Ġbuilder : ĠBuilder ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Log Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtag : ĠString Ġ= ĠTAG ĊĠĠĠ Ġprivate Ġvar Ġactivity Events : ĠList < String > Ġ= ĠlistOf () ĊĠĠĠ Ġprivate Ġvar Ġfragment Events : ĠList < String > Ġ= ĠlistOf () ĊĠĠĠ Ġprivate Ġvar Ġapplication : ĠApplication ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication Ġ= Ġbuilder . application ĊĠĠĠĠĠĠĠ Ġis Log Enabled Ġ= Ġbuilder . is Log Enabled ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġbuilder . listener ĊĠĠĠĠĠĠĠ Ġtag Ġ= Ġbuilder . tag ĊĠĠĠĠĠĠĠ Ġactivity Events Ġ= Ġbuilder . activity Events ĊĠĠĠĠĠĠĠ Ġfragment Events Ġ= Ġbuilder . fragment Events ĊĊĠĠĠĠĠĠĠ ĠLogger . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . log Enabled Ġ= Ġis Log Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . tag Ġ= Ġtag ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( internal Ġval Ġapplication : ĠApplication ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġis Log Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġlistener : ĠListener ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġtag : ĠString Ġ= ĠTAG ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġactivity Events Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . CREATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . START , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . RE SU ME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . PAUSE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . STOP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . SAVE _ INSTANCE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Event . DESTROY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġfragment Events Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . PRE _ ATTACH , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . ATTACH , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . CREATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . ACTIVITY _ CREATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . PRE _ CREATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . VIEW _ CREATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . START , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . RE SU ME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . PAUSE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . STOP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . SAVE _ INSTANCE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . DESTROY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . VIEW _ DESTROY , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Event . DET ACH ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Log Enable ( is Log Enabled : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . is Log Enabled Ġ= Ġis Log Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Custom Tag ( tag : ĠString ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tag Ġ= Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset J ot ter Listener ( listener : ĠListener ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Activity Event Filter ( events : ĠList < String >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . activity Events Ġ= Ġevents ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Fragment Event Filter ( events : ĠList < String >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fragment Events Ġ= Ġevents ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ= ĠJ ot ter ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset J ot ter Listener ( listener : ĠListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Listening () Ġ{ ĊĠĠĠĠĠĠĠ ĠLifecycle Listener . register ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Ġ= Ġthis . builder . application , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġthis . listener , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Filter Ġ= Ġthis . activity Events , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Filter Ġ= Ġthis . fragment Events ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this . listener Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . debug ( Constant . LIST ENER _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Receive Activity Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Activity Event Ġevent : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Receive Fragment Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment : ĠFragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Fragment Event Ġevent : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠJ ot ter ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠJ ot ter Ġ= ĠINSTANCE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException ( Constant . INSTANCE _ MESSAGE ) ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġfun ĠgetDefault Instance ( application : ĠApplication ): ĠJ ot ter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( INSTANCE Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= ĠBuilder ( application ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" J ot ter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠConstant Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠINSTANCE _ MESSAGE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" J ot ter Ġisn 't Ġinitialized Ġyet . ĠPlease Ġuse ĠJ ot ter . Builder ( application ) !" ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠLIST ENER _ MESSAGE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Listener Ġnot Ġfound , Ġyou Ġcan 't Ġreceive Ġcallbacks , Ġplease Ġset Ġit Ġfirst Ġvia ĠBuilder Ġor Ġset J ot ter Listener ĠAPI !" ĊĠĠĠ Ġ} Ċ }