/* Ċ Ġ* Ġ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 . app . audit Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . duck duck go . app . global . Dispatcher Provider Ċ import Ġcom . duck duck go . app . global . plugins . view _ model . ViewModel Factory Plugin Ċ import Ġcom . duck duck go . app . privacy . db . User Whitelist Dao Ċ import Ġcom . duck duck go . di . scopes . App Scope Ċ import Ġcom . squareup . an vil . annotations . Contribut es Mult ib ind ing Ċ import Ġkotlinx . coroutines . channels . Buffer Overflow Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Provider Ċ Ċ class ĠAudit Settings ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Allow List Dao : ĠUser Whitelist Dao , ĊĠĠĠ Ġprivate Ġval Ġdispatch ers : ĠDispatcher Provider Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠView State ( ĊĠĠĠĠĠĠĠ Ġval Ġnext T ds Enabled : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġval Ġstartup Trace Enabled : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġsealed Ġclass ĠCommand Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠGo To Url ( val Ġurl : ĠString ) Ġ: ĠCommand () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcommand Ġ= ĠChannel < Command >( 1 , ĠBuffer Overflow . DROP _ OL DEST ) ĊĊĠĠĠ Ġfun Ġcommands (): ĠFlow < Command > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcommand . receive As Flow () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgo To Url ( url : ĠString , Ġprotection s Enabled : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( protection s Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre Add Protection s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Protection s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . send ( Command . Go To Url ( url )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre Add Protection s () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġremove Protection s () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( dispatch ers . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomains Used . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Allow List Dao . insert ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġre Add Protection s () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( dispatch ers . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomains Used . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Allow List Dao . delete ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTEP _ 1 Ġ= Ġ" https :// cnn . com " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTEP _ 2 Ġ= Ġ" https :// g iz mod o . com " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTEP _ 3 Ġ= Ġ" https :// http bin . org / basic - auth / u / pw " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ BLOCK ING Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / request - blocking /? run " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHTTPS _ UP GR A DES Ġ= Ġ" http :// privacy - test - pages . gl itch . me / privacy - protection s / https - upgrade s /? run " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFI RE _ BUTTON _ STORE Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / storage - blocking /? store " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFI RE _ BUTTON _ RE TR IE VE Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / storage - blocking /? ret rive " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCO OK IES _ 3 P _ STORE Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / storage - blocking /? store " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCO OK IES _ 3 P _ RE TR IE VE Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / storage - blocking /? ret rive " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG PC Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / g pc /? run " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG PC _ OTHER Ġ= Ġ" https :// global - privacy - control . gl itch . me /" ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS UR RO G ATES Ġ= Ġ" https :// privacy - test - pages . gl itch . me / privacy - protection s / sur rog ates /" ĊĠĠĠĠĠĠĠ Ġval Ġdomains Used Ġ= ĠlistOf (" privacy - test - pages . gl itch . me ", Ġ" privacy - test - pages . gl itch . me ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Contribut es Mult ib ind ing ( App Scope :: class ) Ċ class ĠAudit Settings ViewModel Factory Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Allow List Dao : ĠProvider < User Whitelist Dao >, ĊĠĠĠ Ġprivate Ġval Ġdispatch ers : ĠProvider < Dispatcher Provider > Ċ ) Ġ: ĠViewModel Factory Plugin Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( model Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis AssignableFrom ( Audit Settings ViewModel :: class . java ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAudit Settings ViewModel ( user Allow List Dao . get (), Ġdispatch ers . get ()) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ