/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġ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 . app . browser Ċ Ċ import Ġandroid . net . Uri Ċ import Ġcom . duck duck go . app . global . App Url . Param Key Ċ import Ġcom . duck duck go . app . global . App Url . Param Value Ċ import Ġcom . duck duck go . app . statistics . store . Statistics DataStore Ċ import Ġtim ber . log . Tim ber Ċ Ċ interface ĠRequest Rew riter Ġ{ ĊĠĠĠ Ġfun Ġshould Rewrite Request ( uri : ĠUri ): ĠBoolean ĊĠĠĠ Ġfun Ġrewrite Request With Custom QueryParams ( request : ĠUri ): ĠUri ĊĠĠĠ Ġfun Ġadd Custom QueryParams ( builder : ĠUri . Builder ) Ċ } Ċ Ċ class ĠD uck Duck Go Request Rew riter ( private Ġval Ġdu ck Duck Go Url Detector : ĠD uck Duck Go Url Detector , Ġprivate Ġval Ġstatistics Store : ĠStatistics DataStore ) Ġ: ĊĠĠĠ ĠRequest Rew riter Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrewrite Request With Custom QueryParams ( request : ĠUri ): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. authority ( request . authority ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scheme ( request . scheme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. path ( request . path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fragment ( request . fragment ) ĊĊĠĠĠĠĠĠĠ Ġrequest . query Parameter Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= ĠParam Key . SOURCE Ġ&& Ġit Ġ!= ĠParam Key . APP _ VERSION Ġ&& Ġit Ġ!= ĠParam Key . AT B Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġbuilder . append QueryParameter ( it , Ġrequest . getQuery Parameter ( it )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Custom QueryParams ( builder ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Uri Ġ= Ġbuilder . build () ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Rew rit ing Ġrequest \ n $ request Ġ[ original ]\ n $ new Uri Ġ[ re written ]") ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Uri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Rewrite Request ( uri : ĠUri ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdu ck Duck Go Url Detector . is Duck Duck Go Query Url ( uri . toString ()) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! uri . query Parameter Names . contains All ( array ListOf ( Param Key . SOURCE , ĠParam Key . APP _ VERSION , ĠParam Key . AT B )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġco hort Ġ( at b ) Ġhttps :// duck . co / help / privacy / at b , Ġapp Ġversion Ġand ĊĠĠĠĠ Ġ* Ġand Ġsource Ġ( t ) Ġhttps :// duck . co / help / privacy / t Ġparams Ġto Ġurl ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġadd Custom QueryParams ( builder : ĠUri . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġat b Ġ= Ġstatistics Store . at b ĊĠĠĠĠĠĠĠ Ġif Ġ( at b Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append QueryParameter ( Param Key . AT B , Ġat b ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append QueryParameter ( Param Key . APP _ VERSION , Ġapp Version ()) ĊĠĠĠĠĠĠĠ Ġbuilder . append QueryParameter ( Param Key . SOURCE , ĠParam Value . SOURCE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapp Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠString . format (" android _% s ", ĠBuild Config . VERSION _ NAME . replace (".", Ġ"_ ")) ĊĠĠĠ Ġ} Ċ } Ċ