package Ġcom . minder a . s ke leto id . logs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġcom . minder a . s ke leto id . generic . Android Utils Ċ import Ġcom . minder a . s ke leto id . logs . LOG . PRIORITY Ċ import Ġcom . minder a . s ke leto id . logs . append ers . interfaces . I Log Appender Ċ import Ġcom . minder a . s ke leto id . logs . interfaces . I Logger Manager Ċ import Ġcom . minder a . s ke leto id . logs . utils . Log Appender Utils Ċ import Ġcom . minder a . s ke leto id . threads . utils . Thread Utils Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . HashSet Ċ Ċ /** Ċ Ġ* ĠLOG Ġmain Ġclass . ĠIt Ġcontains Ġall Ġthe Ġlogic Ġand Ġfeeds Ġthe Ġappend ers Ċ Ġ*/ Ċ internal Ġclass ĠLogger Manager Ġ: ĠILogger Manager Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ TAG Ġ= Ġ" Logger Manager " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLog Ġformat ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOG _ FORMAT _ 4 ARGS Ġ= Ġ"% s Ġ% s Ġ% s Ġ| Ġ% s " ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplication ĠTAG Ġfor Ġlogs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠpackageName : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefine Ġif Ġthe Ġmethod Ġname Ġinvoking Ġthe Ġlog Ġshould Ġbe Ġprinted Ġor Ġnot Ġ( via Ġexception Ġstack ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġvar Ġadd MethodName Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġappend ers Ġ( it Ġcan Ġbe Ġimproved Ġto Ġan ĠArray Map Ġif Ġwe Ġwant Ġto Ġadd Ġthe Ġsupport Ġlib Ġas Ġdependency ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlog Append ers : ĠMutable Map < String , ĠI Log Appender > Ġ= ĠHashMap () ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠpackageName Ġ= ĠAndroid Utils . getApplication Package ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( packageName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . packageName Ġ= ĠpackageName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnables Ġor Ġdisables Ġlogging Ġto Ġconsole / log cat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd Append ers ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġlog Append ers : ĠList < I Log Appender > ĊĠĠĠ Ġ): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp ender Ids : ĠMutable Set < String > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġfor Ġ( log Appender Ġin Ġlog Append ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogger Id Ġ= Ġlog Appender . logger Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . log Append ers . containsKey ( logger Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( LOG _ TAG , ĠPR I ORITY . ERROR , Ġnull , Ġ" Repl acing ĠLog ĠApp ender Ġwith ĠID : Ġ$ logger Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Log Appender Ġ= Ġthis . log Append ers . remove ( logger Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Log Appender !!. disable Appender () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Appender . enable Appender ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender Ids . add ( logger Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . log Append ers [ logger Id ] Ġ= Ġlog Appender ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġapp ender Ids ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnables Ġor Ġdisables Ġlogging Ġto Ġconsole / log cat . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove Append ers ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġlogger Ids : ĠSet < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( log Append ers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( log Id Ġin Ġlogger Ids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Appender Ġ= Ġlog Append ers . remove ( log Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Appender ?. disable Appender () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove All Append ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( log Append ers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġappend ers Keys : ĠList < String ?> Ġ= ĠArrayList ( log Append ers . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( log Id Ġin Ġappend ers Keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalytics Appender Ġ= Ġlog Append ers . remove ( log Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Appender ?. disable Appender () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser Property ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( log Appender Ġin Ġlog Append ers . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Appender . setUser Property ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset MethodName Visible ( visibility : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd MethodName Ġ= Ġvisibility ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpush Log To Append ers ( ĊĠĠĠĠĠĠĠ Ġtype : ĠPR I ORITY , ĊĠĠĠĠĠĠĠ Ġt : ĠThrowable ?, ĊĠĠĠĠĠĠĠ Ġlog : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( _, Ġvalue ) Ġin Ġlog Append ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . log ( type , Ġt , Ġlog ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog ( ĊĠĠĠĠĠĠĠ Ġtag : ĠString , ĊĠĠĠĠĠĠĠ Ġpriority : ĠPR I ORITY , ĊĠĠĠĠĠĠĠ Ġt : ĠThrowable ?, ĊĠĠĠĠĠĠĠ Ġvar arg Ġtext : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( log Append ers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG _ FORMAT _ 4 ARGS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Appender Utils . getObject Hash ( tag ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Utils . currentThread Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Appender Utils . getLog String (* text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Log To Append ers ( priority , Ġt , Ġlog ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }