package Ġcom . abs int he . lib checker . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Message Queue Ċ import Ġandroidx . annotation . Checks Sdk Int At Least Ċ import Ġcom . abs int he . lib checker . Build Config Ċ import Ġcom . abs int he . lib checker . Lib Checker App Ċ import Ġcom . abs int he . lib checker . R Ċ import Ġcom . abs int he . lib checker . annotation .* Ċ import Ġcom . abs int he . lib checker . database . App Item Repository Ċ import Ġcom . abs int he . lib checker . database . entity . Rule Entity Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ object ĠLC App Utils Ġ{ ĊĊĠĠĠ Ġfun ĠgetCurrent Season (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( Calendar . getInstance ( Locale . getDefault ()). get ( Calendar . MONTH ) Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 , Ġ 4 , Ġ 5 Ġ-> ĠSPR ING ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 , Ġ 7 , Ġ 8 Ġ-> ĠSUM MER ĊĠĠĠĠĠĠĠĠĠĠĠĠ 9 , Ġ 1 0 , Ġ 1 1 Ġ-> ĠA UT UMN ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 , Ġ 1 , Ġ 2 Ġ-> ĠW INTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetTitle (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder ( Lib Checker App . context . getString ( R . string . app _ name )) ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠSimpleDateFormat (" yyyy MM dd ", ĠLocale . getDefault ()). format ( Date ()) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . endsWith (" 1 2 2 5 ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ uD 8 3 C \ u DF 8 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ== Ġ" 2 0 2 1 0 2 1 1 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ uD 8 3 C \ u DF EE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ== Ġ" 2 0 2 1 0 2 1 2 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ uD 8 3 D \ u DC 2 E ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget App Icon ( packageName : ĠString ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= ĠLib Checker App . context . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpi Ġ= Ġpm . get Package Info ( packageName , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpi ?. application Info ?. load Icon ( pm ) !! ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor Drawable ( Color . TRANSP ARENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Checks Sdk Int At Least ( api Ġ= ĠBuild . VERSION _ CODES . P ) ĊĠĠĠ Ġfun Ġat Least P (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 8 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Checks Sdk Int At Least ( api Ġ= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠ Ġfun Ġat Least O (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 6 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Checks Sdk Int At Least ( api Ġ= ĠBuild . VERSION _ CODES . N _ MR 1 ) ĊĠĠĠ Ġfun Ġat Least N MR 1 (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Checks Sdk Int At Least ( api Ġ= ĠBuild . VERSION _ CODES . N ) ĊĠĠĠ Ġfun Ġat Least N (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget From Assets ( context : ĠContext , ĠfileName : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Reader Ġ= ĠInputStreamReader ( context . resources . assets . open ( fileName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Reader Ġ= ĠBufferedReader ( input Reader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( buf Reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" get From Assets ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Rule Regex ( string : ĠString , Ġ@ Lib Type Ġtype : ĠInt ): ĠRule Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= ĠApp Item Repository . rules Regex List . entries . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . key . matcher ( string ). matches () Ġ&& Ġentry . value . type Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentry . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Rule With Dex Checking ( name : ĠString , ĠpackageName : ĠString ? Ġ= Ġnull ): ĠRule Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrule Entity Ġ= ĠLib Checker App . repository . get Rule ( name ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( rule Entity . type Ġ== ĠN ATIVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( packageName Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrule Entity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis A pk Ġ= ĠpackageName . endsWith ("/ temp . apk ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( rule Entity . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lib ji ag u . so " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Package Utils . has Dex Class ( packageName , Ġ" com . q ih oo . util ", Ġis A pk )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lib app . so " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Package Utils . has Dex Class ( packageName , Ġ" io . flutter ", Ġis A pk )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġrule Entity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrule Entity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Rule With Regex ( name : ĠString , Ġ@ Lib Type Ġtype : ĠInt , ĠpackageName : ĠString ? Ġ= Ġnull ): ĠRule Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Rule With Dex Checking ( name , ĠpackageName ) Ġ?: Ġfind Rule Regex ( name , Ġtype ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Native Lib Validation ( packageName : ĠString , Ġnative Lib : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( native Lib ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" lib ji ag u . so " Ġ-> Ġ{ ĠPackage Utils . has Dex Class ( packageName , Ġ" com . q ih oo . util ", Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" lib app . so " Ġ-> Ġ{ ĠPackage Utils . has Dex Class ( packageName , Ġ" io . flutter ", Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFrom Ġdr ake et Ċ Ġ*/ Ċ fun Ġdo On MainThread Idle ( action : Ġ() Ġ-> ĠUnit , Ġtimeout : ĠLong ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġval Ġidle Handler Ġ= ĠMessage Queue . Idle Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠ Ġreturn @ Idle Handler Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup Idle Handler ( queue : ĠMessage Queue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( timeout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . remove Idle Handler ( idle Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" do On MainThread Idle : Ġ${ timeout } ms Ġtimeout !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġtimeout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġqueue . add Idle Handler ( idle Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( Looper . get Main Looper () Ġ== ĠL ooper . my Looper ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Idle Handler ( Looper . my Queue ()) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Idle Handler ( Looper . get Main Looper (). queue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġsetup Idle Handler ( Looper . my Queue ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }