/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 1 9 ĠH az uki Ċ Ġ* Ċ Ġ* Ġ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 Ġjp . h az uki . y uz ub rowser . ad block . core Ċ Ċ import Ġandroid . net . Uri Ċ import Ġjp . h az uki . y uz ub rowser . ad block . filter . Filter Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠAd Block er ( ĊĠĠĠĠĠĠĠ Ġval Ġblack List : ĠFilter Matcher , ĊĠĠĠĠĠĠĠ Ġval Ġwhite List : ĠFilter Matcher , ĊĠĠĠĠĠĠĠ Ġval Ġwhite Page List : ĠFilter Matcher List ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġwhite Page Cache : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwhite Page Cache Result : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġresult Cache Ġ= ĠCollections . synchronized Map ( L ru Cache < String , ĠFilter ?> ()) ĊĠĠĠ Ġprivate Ġval Ġcandidates Creator Ġ= ĠPattern . compile ("[ a - z 0 - 9 % ]{ 3 , }", ĠPattern . CASE _ INS ENS ITIVE ) ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġblack List . clear () ĊĠĠĠĠĠĠĠ Ġwhite List . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Block Search ( uri : ĠUri , Ġpage Url : ĠUri , ĠcontentType : ĠInt , Ġis Third Party : ĠBoolean ): ĠFilter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= Ġcandidates Creator . matcher ( uri . toString ()). findAll () ĊĠĠĠĠĠĠĠ Ġcandidates . add ("") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġcandidates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( white List . match ( it , Ġuri , Ġpage Url , ĠcontentType , Ġis Third Party )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġcandidates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblack List . find ( it , Ġuri , Ġpage Url , ĠcontentType , Ġis Third Party )?. let Ġ{ Ġreturn Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis White Page ( page Url : ĠUri , ĠcontentType : ĠInt , Ġis Third : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġpage Url . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( white Page Cache Ġ!= Ġurl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhite Page Cache Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhite Page Cache Result Ġ= Ġwhite Page List . match ( page Url , Ġpage Url , ĠcontentType , Ġis Third ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhite Page Cache Result ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Block ( page Url : ĠUri , Ġurl : ĠUri , ĠcontentType : ĠInt , Ġis Third : ĠBoolean ): ĠFilter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcache Key Ġ= Ġpage Url . toString () Ġ+ Ġurl . toString () Ġ+ Ġis Third ĊĠĠĠĠĠĠĠ Ġval Ġcache Ġ= Ġresult Cache [ cacheKey ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cache Ġ!= Ġnull ) Ġreturn Ġcache ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġis Block Search ( url , Ġpage Url , ĠcontentType , Ġis Third ) ĊĊĠĠĠĠĠĠĠ Ġresult Cache [ cacheKey ] Ġ= Ġresult ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġopen Ġclass ĠL ru Cache < K , ĠV > Ġ: ĠLinkedHashMap < K , ĠV >( INITIAL _ CAP ACITY , ĠLOAD _ FACTOR , Ġtrue ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove El dest Entry ( el dest : ĠMutable Map . Mutable Entry < K , ĠV >? ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsize Ġ> ĠCACHE _ SIZE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠserialVersionUID Ġ= Ġ- 1 8 8 2 0 7 1 9 0 1 4 6 7 3 6 8 4 0 6 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠINITIAL _ CAP ACITY Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠLOAD _ FACTOR Ġ= Ġ 0 . 7 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠCACHE _ SIZE Ġ= Ġ 1 0 2 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ