package Ġcn . ge ek tang . privacy space . ui . screen . set whitelist Ċ Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . view model . compose . viewModel Ċ import Ġcn . ge ek tang . privacy space . R Ċ import Ġcn . ge ek tang . privacy space . bean . App Info Ċ import Ġcn . ge ek tang . privacy space . ui . widget .* Ċ import Ġcn . ge ek tang . privacy space . util . Local Nav Host Controller Ċ import Ġcn . ge ek tang . privacy space . util . On Lifecycle Event Ċ import Ġcom . google . ac comp an ist . in sets . navigation Bars Padding Ċ Ċ @ Composable Ċ fun ĠSet Whitelist Screen ( viewModel : ĠSet Whitelist ViewModel Ġ= ĠviewModel ()) Ġ{ ĊĠĠĠ Ġval Ġall All List Ġby ĠviewModel . all App List Flow . collect As State () ĊĠĠĠ Ġval ĠisLoading Ġ= Ġall All List . isEmpty () ĊĠĠĠ Ġval Ġapp List Ġby ĠviewModel . app List Flow . collect As State () ĊĠĠĠ Ġval Ġwhitelist Ġby ĠviewModel . whitelist Flow . collect As State () ĊĠĠĠ Ġval Ġblind Apps Ġby ĠviewModel . bl ind Apps Flow . collect As State () ĊĠĠĠ Ġval Ġshow System Apps Ġby ĠviewModel . show System Apps Flow . collect As State () ĊĠĠĠ Ġval Ġsearch Text Ġby ĠviewModel . search Text Flow . collect As State () ĊĠĠĠ Ġval Ġshow Select All Ġby ĠviewModel . show Select All . collect As State () ĊĠĠĠ Ġval Ġactions Ġ= Ġobject Ġ: ĠSet Whitelist Actions Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd App 2 Whitelist ( app Info : ĠApp Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add App 2 Whitelist ( app Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove App 2 Whitelist ( app Info : ĠApp Info ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove App 2 Whitelist ( app Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset System Apps Visible ( show System Apps : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set System Apps Visible ( show System Apps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Search Text Change ( search Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Search Text ( search Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġselect All System Apps ( selectAll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . selectAll System Apps ( selectAll ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠSet White List Content ( ĊĠĠĠĠĠĠĠ Ġapp List Ġ= Ġapp List , ĊĠĠĠĠĠĠĠ Ġwhitelist Ġ= Ġwhitelist , ĊĠĠĠĠĠĠĠ Ġblind Apps Ġ= Ġblind Apps , ĊĠĠĠĠĠĠĠ Ġsearch Text Ġ= Ġsearch Text , ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= ĠisLoading , ĊĠĠĠĠĠĠĠ Ġshow System Apps Ġ= Ġshow System Apps , ĊĠĠĠĠĠĠĠ Ġshow Select All Ġ= Ġshow Select All , ĊĠĠĠĠĠĠĠ Ġactions Ġ= Ġactions ĊĠĠĠ Ġ) ĊĠĠĠ ĠOn Lifecycle Event ( on Event Ġ= Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ PAUSE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġevent Ġ== ĠLifecycle . Event . ON _ STOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġevent Ġ== ĠLifecycle . Event . ON _ DESTROY ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . try Update Config () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠSet White List Content ( ĊĠĠĠ Ġapp List : ĠList < App Info >, ĊĠĠĠ Ġwhitelist : ĠSet < String >, ĊĠĠĠ Ġblind Apps : ĠSet < String >, ĊĠĠĠ Ġsearch Text : ĠString , ĊĠĠĠ ĠisLoading : ĠBoolean , ĊĠĠĠ Ġshow System Apps : ĠBoolean , ĊĠĠĠ Ġshow Select All : ĠBoolean , ĊĠĠĠ Ġactions : ĠSet Whitelist Actions Ċ ) Ġ{ ĊĠĠĠ Ġval Ġnav Host Controller Ġ= ĠLocal Nav Host Controller . current ĊĠĠĠ Ġval Ġis PopupMenu Show Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠSet Whitelist PopupMenu ( ĊĠĠĠĠĠĠĠ Ġis PopupMenu Show , ĊĠĠĠĠĠĠĠ Ġshow System Apps , ĊĠĠĠĠĠĠĠ Ġshow Select All , ĊĠĠĠĠĠĠĠ Ġon System Apps Visible Change Ġ= Ġ{ Ġshow System Apps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis PopupMenu Show . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . set System Apps Visible ( show System Apps ) ĊĠĠĠĠĠĠĠ Ġ}, Ġselect All Callback Ġ= Ġ{ Ġselect All Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . selectAll System Apps ( selectAll ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch Top Bar ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstring Resource ( R . string . set _ white _ list ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Text Ġ= Ġsearch Text , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Search Text Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . on Search Text Change ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġshow More Popup State Ġ= Ġis PopupMenu Show , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Navigation Icon Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Host Controller . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠLoading Box ( modifier Ġ= ĠModifier . fill MaxSize (), Ġshow Loading Ġ= ĠisLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Column ( content Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( app List ) Ġ{ Ġapp Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Item ( whitelist , Ġblind Apps , Ġapp Info , Ġactions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( modifier Ġ= ĠModifier . navigation Bars Padding ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠApp Item ( ĊĠĠĠ Ġwhitelist : ĠSet < String >, ĊĠĠĠ Ġblind Apps : ĠSet < String >, ĊĠĠĠ Ġapp Info : ĠApp Info , ĊĠĠĠ Ġactions : ĠSet Whitelist Actions Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġshow Confirm Dialog Ġby Ġremember Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable State Of ( false ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġis Checked Ġ= Ġwhitelist . contains ( app Info . packageName ) ĊĠĠĠ ĠApp Info Column Item ( app Info Ġ= Ġapp Info , Ġis Checked Ġ= Ġis Checked ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! whitelist . contains ( app Info . packageName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bl ind Apps . contains ( app Info . packageName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirm Dialog Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add App 2 Whitelist ( app Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions . remove App 2 Whitelist ( app Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( show Confirm Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMessage Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . tips _ cancel _ bl ind , Ġapp Info . appName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġon Positive Button Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . add App 2 Whitelist ( app Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Confirm Dialog Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġon Dismiss Request Ġ= Ġ{ Ġshow Confirm Dialog Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠSet Whitelist PopupMenu ( ĊĠĠĠ Ġpopup Menu Show : ĠMutable State < Boolean >, ĊĠĠĠ Ġshow System Apps : ĠBoolean , ĊĠĠĠ Ġshow Select All : ĠBoolean , ĊĠĠĠ Ġon System Apps Visible Change : Ġ( Boolean ) Ġ-> ĠUnit , ĊĠĠĠ Ġselect All Callback : Ġ( Boolean ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠPopup Menu ( is Show Ġ= Ġpopup Menu Show ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 5 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( Intr insic Size . Max ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPopup Checkbox Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . display _ system _ apps ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġshow System Apps , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġon System Apps Visible Change ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPopup Checkbox Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġstring Resource ( R . string . select _ all _ system _ apps ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Ġ= Ġshow Select All , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Checked Change Ġ= Ġselect All Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠSet Whitelist Actions Ġ{ ĊĠĠĠ Ġfun Ġadd App 2 Whitelist ( app Info : ĠApp Info ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove App 2 Whitelist ( app Info : ĠApp Info ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset System Apps Visible ( show System Apps : ĠBoolean ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Search Text Change ( search Text : ĠString ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect All System Apps ( selectAll : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġ} Ċ }