package Ġcom . k ier on qu inn . app . discover kill er . ui . screens . settings . ap pp icker Ċ Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view .* Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . core . view . Window Insets Compat Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . fragment . app . set Fragment Result Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . k ier on qu inn . app . discover kill er . databinding . Fragment App Picker Binding Ċ import Ġcom . k ier on qu inn . app . discover kill er . model . App Picker Item Ċ import Ġcom . k ier on qu inn . app . discover kill er . ui . base . Back Available Ċ import Ġcom . k ier on qu inn . app . discover kill er . ui . base . Bound Fragment Ċ import Ġcom . k ier on qu inn . app . discover kill er . ui . screens . settings . container . Settings ViewModel Ċ import Ġcom . k ier on qu inn . app . discover kill er . utils . Transition Utils Ċ import Ġcom . k ier on qu inn . app . discover kill er . utils . extensions . apply Mon et To Fast Scroller Ċ import Ġcom . k ier on qu inn . mon et compat . extensions . views . apply Mon et Re cursively Ċ import Ġcom . k ier on qu inn . mon et compat . extensions . views . enable Stretch Over scroll Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . de bounce Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel ĊĊ Ċ class ĠSettings App Picker Fragment Ġ: ĊĠĠĠ ĠBound Fragment < Fragment App Picker Binding >( Fragment App Picker Binding :: inflate ), ĠBack Available Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ APP Ġ= Ġ" request _ app " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ APP _ PACKAGE Ġ= Ġ" package " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Settings App Picker ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġsettings ViewModel Ġby Ġshared ViewModel < Settings ViewModel >() ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSettings App Picker Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List < App Picker Item >(). to Mutable List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: on Package Enabled Changed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsearch Text Watcher Ġ= Ġobject Ġ: ĠText Watcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Search Term ( s ?. toString () Ġ?: Ġreturn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠTransition Utils . get Material Shared Axis ( require Context (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= ĠTransition Utils . get Material Shared Axis ( require Context (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Transition Ġ= ĠTransition Utils . get Material Shared Axis ( require Context (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠTransition Utils . get Material Shared Axis ( require Context (), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview ?. apply Mon et Re cursively () ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Fragment Result ( REQUEST _ APP , Ġbundle Of ( KEY _ APP _ PACKAGE Ġto Ġnull )) ĊĠĠĠĠĠĠĠ Ġset Loading State ( loading Ġ= Ġtrue , ĠisEmpty Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠĠĠĠĠ Ġsetup Search () ĊĠĠĠĠĠĠĠ Ġsetup Snackbar Padding () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding . re cyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġthis @ Settings App Picker Fragment . adapter ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( this ){ Ġview , Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequired Insets Ġ= Ġin sets . get Insets ( Window Insets Compat . Type . ime () Ġor ĠWindow Insets Compat . Type . navigation Bars () Ġor ĠWindow Insets Compat . Type . status Bars ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Padding ( left Ġ= Ġrequired Insets . left , Ġright Ġ= Ġrequired Insets . right , Ġbottom Ġ= Ġrequired Insets . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin sets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Stretch Over scroll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Mon et To Fast Scroller () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load State . de bounce ( 5 0 ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Load State ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Load State ( load State : ĠSettings App Picker ViewModel . Load State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Loading State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload State Ġis ĠSettings App Picker ViewModel . Load State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( load State Ġis ĠSettings App Picker ViewModel . Load State . Loaded Ġ&& Ġload State . apps . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( load State Ġis ĠSettings App Picker ViewModel . Load State . Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set Items ( load State . apps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loading State ( loading : ĠBoolean , ĠisEmpty : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . isVisible Ġ= Ġ! loading Ġ&& Ġ! isEmpty ĊĠĠĠĠĠĠĠ Ġbinding . app Picker Loading . isVisible Ġ= Ġloading Ġ&& Ġ! isEmpty ĊĠĠĠĠĠĠĠ Ġbinding . app Picker Empty . isVisible Ġ= ĠisEmpty ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding . app Picker Search ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Ġ= Ġmon et . get BackgroundColor ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecondary Background Ġ= Ġmon et . get BackgroundColor Secondary ( require Context ()) Ġ?: Ġbackground ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . set BackgroundColor ( background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Box . background Tint List Ġ= ĠColor State List . valueOf ( secondary Background ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Box . text . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( viewModel . get Search Term ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . show Search Clear Button . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Clear . isVisible Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Clear . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Box . text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . app Picker Search . search Box . add TextChanged Listener ( search Text Watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbinding . app Picker Search . search Box . remove TextChanged Listener ( search Text Watcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Package Enabled Changed ( app Picker Item : ĠApp Picker Item . App ){ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Fragment Result ( REQUEST _ APP , Ġbundle Of ( KEY _ APP _ PACKAGE Ġto Ġapp Picker Item . packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . navigate Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Snackbar Padding (){ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ViewModel . sn ackbar Showing . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . add Snackbar Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . remove Snackbar Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }