package Ġeu . kan ade . t ach iy omi . ui . setting . search Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroidx . preference . Preference Ċ import Ġandroidx . preference . Preference Category Ċ import Ġandroidx . preference . Preference Group Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Advanced Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Backup Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Browse Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Download Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings General Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Library Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Reader Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Security Controller Ċ import Ġeu . kan ade . t ach iy omi . ui . setting . Settings Tracking Controller Ċ import Ġeu . kan ade . t ach iy omi . util . lang . launch Now Ċ import Ġeu . kan ade . t ach iy omi . util . system . is LTR Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . create Instance Ċ Ċ object ĠSettings Search Helper Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġpref SearchResult List : ĠMutable List < Settings SearchResult > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAll Ġsubclasses Ġof Ġ` Settings Controller ` Ġshould Ġbe Ġlisted Ġhere , Ġin Ġorder Ġto Ġhave Ġtheir Ġpreferences Ġsearch able . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsetting Controllers List : ĠList < K Class < out ĠSettings Controller >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠSettings Advanced Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Backup Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Browse Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Download Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings General Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Library Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Reader Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Security Controller :: class , ĊĠĠĠĠĠĠĠ ĠSettings Tracking Controller :: class ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMust Ġbe Ġcalled Ġto Ġpopulate Ġ` pref SearchResult List ` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġfun Ġinit Preference SearchResult Collection ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreference Manager Ġ= ĠPreference Manager ( context ) ĊĠĠĠĠĠĠĠ Ġpref SearchResult List . clear () ĊĊĠĠĠĠĠĠĠ Ġlaunch Now Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetting Controllers List . forEach Ġ{ Ġk Class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctrl Ġ= Ġk Class . create Instance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Pref Screen Ġ= Ġctrl . setup Preference Screen ( preference Manager . create Preference Screen ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref Count Ġ= Ġsettings Pref Screen . preference Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpref Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Pref Ġ= Ġsettings Pref Screen . get Preference ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root Pref . title Ġ== Ġnull ) Ġcontinue Ġ// Ġno Ġtitle , Ġnot Ġa Ġpreference . Ġ( note : Ġonly Ġinfo Ġnotes Ġappear Ġto Ġnot Ġhave Ġtitles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Setting SearchResult ( ctrl , Ġroot Pref , Ġ"${ settings Pref Screen . title }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Filtered Results ( query : ĠString ): ĠList < Settings SearchResult > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpref SearchResult List . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Title Ġ= Ġit . title . contains ( query , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Summary Ġ= Ġit . summary . contains ( query , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġin Breadcrumb Ġ= Ġit . breadcrumb . contains ( query , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ filter Ġin Title Ġ|| Ġin Summary Ġ|| Ġin Breadcrumb ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtract s Ġthe Ġdata Ġneeded Ġfrom Ġa Ġ` Preference ` Ġto Ġcreate Ġa Ġ` Settings SearchResult `, Ġand Ġthen Ġadds Ġit Ġto Ġ` pref SearchResult List ` ĊĠĠĠĠ Ġ* ĠFuture Ġenhancement : Ġmake Ġbold Ġthe Ġtext Ġmatched Ġby Ġthe Ġsearch Ġquery . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Setting SearchResult ( ĊĠĠĠĠĠĠĠ Ġctrl : ĠSettings Controller , ĊĠĠĠĠĠĠĠ Ġpref : ĠPreference , ĊĠĠĠĠĠĠĠ Ġbreadcrumb s : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Ġis ĠPreference Group Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb s Str Ġ= Ġadd Localized Breadcrumb ( breadcrumbs , Ġ"${ pref . title }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġpref . preference Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Pref Ġ= Ġpref . get Preference ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Setting SearchResult ( ctrl , Ġsub Pref , Ġbreadcrumb s Str ) Ġ// Ġrecursion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref Ġis ĠPreference Category Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb s Str Ġ= Ġadd Localized Breadcrumb ( breadcrumbs , Ġ"${ pref . title }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġpref . preference Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Pref Ġ= Ġpref . get Preference ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Setting SearchResult ( ctrl , Ġsub Pref , Ġbreadcrumb s Str ) Ġ// Ġrecursion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( pref . title Ġ!= Ġnull Ġ&& Ġpref . isVisible ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIs Ġan Ġactual Ġpreference ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġpref . title . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= Ġpref . summary ?. toString () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreadcrumb s Str Ġ= Ġadd Localized Breadcrumb ( breadcrumbs , Ġ"${ pref . title }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref SearchResult List . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings SearchResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġpref . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġsummary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreadcrumb Ġ= Ġbreadcrumb s Str , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Controller Ġ= Ġctrl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Localized Breadcrumb ( path : ĠString , Ġnode : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Resources . getSystem (). is LTR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġlocale Ġreads Ġleft Ġto Ġright . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ path Ġ> Ġ$ node " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġlocale Ġreads Ġright Ġto Ġleft . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ node Ġ< Ġ$ path " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠSettings SearchResult ( ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsummary : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġbreadcrumb : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsearch Controller : ĠSettings Controller ĊĠĠĠ Ġ) Ċ } Ċ