package Ġcom . mobile j azz . har mony . kotlin . android . logger Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġcom . mobile j azz . har mony . kotlin . android . Build Config Ċ import Ġcom . mobile j azz . har mony . kotlin . core . logger . Logger Ċ import Ġjava . util . regex . Pattern Ċ Ċ open Ġclass ĠAndroid Logger Ġ: ĠLogger Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ TAG _ LENGTH Ġ= Ġ 2 3 ĊĠĠĠ Ġprivate Ġval ĠAN ONY MO US _ CLASS Ġ= ĠPattern . compile ("( \\ $ \\ d + )+ $ ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlog ( level : ĠLogger . Level , Ġtag : ĠString ?, Ġmessage : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġtag Ġ= Ġtag Ġ?: Ġcreate Class Tag () ĊĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( level ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . Level . VERBOSE Ġ-> ĠLog . v ( tag , Ġmessage ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . DEBUG Ġ-> ĠLog . d ( tag , Ġmessage ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . INFO Ġ-> ĠLog . i ( tag , Ġmessage ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . WARNING Ġ-> ĠLog . w ( tag , Ġmessage ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . ERROR Ġ-> ĠLog . e ( tag , Ġmessage ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlog ( level : ĠLogger . Level , Ġthrowable : ĠThrowable , Ġtag : ĠString ?, Ġmessage : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġtag Ġ= Ġtag Ġ?: Ġcreate Class Tag () ĊĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( level ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . Level . VERBOSE Ġ-> ĠLog . v ( tag , Ġmessage , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . DEBUG Ġ-> ĠLog . d ( tag , Ġmessage , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . INFO Ġ-> ĠLog . i ( tag , Ġmessage , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . WARNING Ġ-> ĠLog . w ( tag , Ġmessage , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠLogger . Level . ERROR Ġ-> ĠLog . e ( tag , Ġmessage , Ġthrowable ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlog ( key : ĠString , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠ Ġlog ( Logger . Level . INFO , Ġ" KEY ", Ġ"$ key : Ġ$ it ") ĊĠĠĠ Ġ} Ġ?: Ġlog ( Logger . Level . INFO , Ġ" KEY ", Ġ"$ key : Ġnull ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsend Issue ( tag : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġtag , Ġmessage ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Device Boolean ( key : ĠString , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġkey , Ġvalue . toString ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Device String ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġkey , Ġvalue ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Device Integer ( key : ĠString , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġkey , Ġvalue . toString ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Device Float ( key : ĠString , Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġkey , Ġvalue . toString ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġremove Device Key ( key : ĠString ) Ġ{ ĊĠĠĠ Ġlog ( Logger . Level . DEBUG , Ġkey , Ġ" Remove Device Key ") ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġdevice Identifier : ĠString ĊĠĠĠ Ġget () Ġ= Ġ"" ĊĊĠ Ġprivate Ġfun Ġcreate Class Tag (): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġignore Class Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠAndroid Logger :: class . java . name , ĊĠĠĠĠĠĠĠ ĠLogger :: class . java . name ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġstack Trace Element : ĠStack Trace Element Ġ= ĠThrowable (). stack Trace ĊĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . className Ġ! in Ġignore Class Ġ&& Ġ! it . className . contains (" Default Imp ls ") Ġ} ĊĠĠĠ Ġvar Ġtag Ġ= Ġstack Trace Element . className . substring After Last ('.') ĊĠĠĠ Ġval Ġm Ġ= ĠAN ONY MO US _ CLASS . matcher ( tag ) ĊĠĠĠ Ġif Ġ( m . find ()) Ġ{ ĊĠĠĠĠĠ Ġtag Ġ= Ġm . replaceAll ("") ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠTag Ġlength Ġlimit Ġwas Ġremoved Ġin ĠAPI Ġ 2 4 . ĊĠĠĠ Ġreturn Ġif Ġ( tag . length Ġ<= ĠMAX _ TAG _ LENGTH Ġ|| ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠ Ġtag ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġtag . substring ( 0 , ĠMAX _ TAG _ LENGTH ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ } Ċ