/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠD uck Duck Go Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . duck duck go . mobile . android . vpn . block list Ċ Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . duck duck go . app . global . extensions . extract ET ag Ċ import Ġcom . duck duck go . di . scopes . App Scope Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker Json Parser Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker Package Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . Json App Blocking List Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker Excluded Package Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker Exception Rule Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers . App Tracker System App Override Package Ċ import Ġcom . duck duck go . mobile . android . vpn . track ers .* Ċ import Ġcom . squareup . an vil . annotations . Contribut es Binding Ċ import Ġokhttp 3 . ResponseBody . Companion . to ResponseBody Ċ import Ġretrofit 2 . Response Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ data Ġclass ĠApp Tracker Block list ( ĊĠĠĠ Ġval Ġet ag : ĠE Tag Ġ= ĠE Tag . Invalid ET ag , ĊĠĠĠ Ġval Ġblock list : ĠList < App Tracker > Ġ= ĠlistOf (), ĊĠĠĠ Ġval Ġapp Packages : ĠList < App Tracker Package > Ġ= ĠlistOf (), ĊĠĠĠ Ġval Ġentities : ĠList < App Tracker Entity > Ġ= ĠlistOf () Ċ ) Ċ Ċ data Ġclass ĠApp Tracker Ex clusion List ( ĊĠĠĠ Ġval Ġet ag : ĠE Tag Ġ= ĠE Tag . Invalid ET ag , ĊĠĠĠ Ġval Ġexcluded Packages : ĠList < App Tracker Excluded Package > Ġ= ĠlistOf () Ċ ) Ċ Ċ data Ġclass ĠApp Tracker System App Override List ( ĊĠĠĠ Ġval Ġet ag : ĠE Tag Ġ= ĠE Tag . Invalid ET ag , ĊĠĠĠ Ġval Ġoverride Packages : ĠList < App Tracker System App Override Package > Ġ= ĠlistOf () Ċ ) Ċ Ċ data Ġclass ĠApp Tracker Rule List ( ĊĠĠĠ Ġval Ġet ag : ĠE Tag Ġ= ĠE Tag . Invalid ET ag , ĊĠĠĠ Ġval Ġtracker Exception Rules : ĠList < App Tracker Exception Rule > Ġ= ĠlistOf () Ċ ) Ċ Ċ sealed Ġclass ĠE Tag Ġ{ ĊĠĠĠ Ġobject ĠInvalid ET ag Ġ: ĠE Tag () ĊĠĠĠ Ġdata Ġclass ĠValid ET ag ( val Ġvalue : ĠString ) Ġ: ĠE Tag () Ċ } Ċ Ċ interface ĠApp Tracker List Downloader Ġ{ ĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdownload App Tracker Block list (): ĠApp Tracker Block list ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdownload App Tracker Ex clusion List (): ĠApp Tracker Ex clusion List ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdownload System App Override List (): ĠApp Tracker System App Override List ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdownload App Tracker Exception Rules (): ĠApp Tracker Rule List Ċ } Ċ Ċ @ Contribut es Binding ( App Scope :: class ) Ċ class ĠReal App Tracker List Downloader Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapp Tracker List Service : ĠApp Tracker List Service Ċ ) Ġ: ĠApp Tracker List Downloader Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdownload App Tracker Block list (): ĠApp Tracker Block list Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Downloading Ġthe Ġapp Ġtracker Ġblock list ...") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Tracker List Service . app Tracker Block list (). execute () ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" Error Ġdownloading Ġtracker Ġrules Ġlist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error ( 4 0 0 , Ġ"". to ResponseBody ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Fail Ġto Ġdownload Ġthe Ġapp Ġtracker Ġblock list , Ġerror Ġcode : Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Block list () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġe Tag Ġ= Ġresponse . headers (). extract ET ag () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body () ĊĊĠĠĠĠĠĠĠ Ġval Ġblock list Ġ= Ġextract Block list ( response Body ) ĊĠĠĠĠĠĠĠ Ġval Ġpackages Ġ= Ġextract App Packages ( response Body ) ĊĠĠĠĠĠĠĠ Ġval Ġtracker Entities Ġ= Ġextract Tracker Entities ( response Body ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Received Ġthe Ġapp Ġtracker Ġremote Ġlists . Ġblock list Ġsize : Ġ${ block list . size }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" app - packages Ġsize : Ġ${ packages . size }, Ġentities Ġsize : Ġ${ tracker Entities . size }" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Block list ( etag Ġ= ĠE Tag . Valid ET ag ( e Tag ), Ġblock list Ġ= Ġblock list , Ġapp Packages Ġ= Ġpackages , Ġentities Ġ= Ġtracker Entities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Block list ( response : ĠJson App Blocking List ?): ĠList < App Tracker > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Json Parser . parse App Track ers ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract App Packages ( response : ĠJson App Blocking List ?): ĠList < App Tracker Package > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Json Parser . parse App Packages ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Tracker Entities ( response : ĠJson App Blocking List ?): ĠList < App Tracker Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Json Parser . parse Tracker Entities ( response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload App Tracker Ex clusion List (): ĠApp Tracker Ex clusion List Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Downloading Ġthe Ġapp Ġtracker Ġex clusion Ġlist ...") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Tracker List Service . app Tracker Ex clusion List (). execute () ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" Error Ġdownloading Ġtracker Ġrules Ġlist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error ( 4 0 0 , Ġ"". to ResponseBody ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Fail Ġto Ġdownload Ġthe Ġapp Ġtracker Ġex clusion Ġlist , Ġerror Ġcode : Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Ex clusion List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġe Tag Ġ= Ġresponse . headers (). extract ET ag () ĊĠĠĠĠĠĠĠ Ġval Ġex clusion List Ġ= Ġresponse . body ()?. rules . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠApp Tracker Excluded Package ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Received Ġthe Ġapp Ġtracker Ġex clusion Ġlist , Ġsize : Ġ${ ex clusion List . size }") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Ex clusion List ( etag Ġ= ĠE Tag . Valid ET ag ( e Tag ), Ġexcluded Packages Ġ= Ġex clusion List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload System App Override List (): ĠApp Tracker System App Override List Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Downloading Ġthe Ġapp Ġtracker Ġsystem Ġapp Ġoverrides Ġlist ...") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Tracker List Service . app Tracker System Apps Overrides (). execute () ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" Error Ġdownloading Ġsystem Ġapp Ġoverrides Ġlist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error ( 4 0 0 , Ġ"". to ResponseBody ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Fail Ġto Ġdownload Ġthe Ġapp Ġsystem Ġapp Ġoverrides Ġlist , Ġerror Ġcode : Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker System App Override List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġe Tag Ġ= Ġresponse . headers (). extract ET ag () ĊĠĠĠĠĠĠĠ Ġval Ġsystem App Overrides Ġ= Ġresponse . body ()?. rules . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠApp Tracker System App Override Package ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Received Ġthe Ġapp Ġsystem Ġapp Ġoverrides Ġlist , Ġsize : Ġ${ system App Overrides . size }") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker System App Override List ( etag Ġ= ĠE Tag . Valid ET ag ( e Tag ), Ġoverride Packages Ġ= Ġsystem App Overrides ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdownload App Tracker Exception Rules (): ĠApp Tracker Rule List Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Downloading Ġthe Ġapp Ġtracker Ġrule Ġlist ...") ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Tracker List Service . app Tracker Exception Rules (). execute () ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" Error Ġdownloading Ġtracker Ġrules Ġlist : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . error ( 4 0 0 , Ġ"". to ResponseBody ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Fail Ġto Ġdownload Ġthe Ġapp Ġtracker Ġex clusion Ġlist , Ġerror Ġcode : Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Rule List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġe Tag Ġ= Ġresponse . headers (). extract ET ag () ĊĠĠĠĠĠĠĠ Ġval Ġexception Rules Ġ= Ġresponse . body ()?. rules . or Empty () ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Received Ġthe Ġapp Ġtracker Ġrule Ġlist , Ġsize : Ġ${ exception Rules . size }") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠApp Tracker Rule List ( etag Ġ= ĠE Tag . Valid ET ag ( e Tag ), Ġtracker Exception Rules Ġ= Ġexception Rules ) ĊĠĠĠ Ġ} Ċ } Ċ