/* Ċ Ġ* ĠĠĠĠ ĠThis Ġfile Ġis Ġpart Ġof ĠL awn ch air ĠLaunch er . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠL awn ch air ĠLaunch er Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* ĠĠĠĠ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* ĠĠĠĠ Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* ĠĠĠĠ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠL awn ch air ĠLaunch er Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* ĠĠĠĠ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠĠĠĠ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠĠĠĠ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* ĠĠĠĠ Ġalong Ġwith ĠL awn ch air ĠLaunch er . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġorg . zim mob . zim lx . groups Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Process Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . android . launcher 3 . R Ċ import Ġcom . android . launcher 3 . util . Component Key Ċ import Ġorg . zim mob . zim lx . Z im Preferences Change Callback Ċ import Ġorg . zim mob . zim lx . preferences . Selectable Apps Activity Ċ import Ġorg . zim mob . zim lx . tint Drawable Ċ import Ġorg . zim mob . zim lx . zim Prefs Ċ Ċ abstract Ġclass ĠDraw er Tabs ( manager : ĠApp Groups Manager , Ġtype : ĠApp Groups Manager . Categor ization Type ) ĊĠĠĠ Ġ: ĠApp Groups < Drawer Tabs . Tab >( manager , Ġtype ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetDefault Creators (): ĠList < Group Creator < Tab >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf (:: create All Apps Tab , Ġ:: create Personal Tab , Ġ:: create Work Tab ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Creator ( type : ĠInt ): ĠGroup Creator < Tab > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ CUSTOM , ĠTYPE _ UNDEFINED Ġ-> Ġ:: create Custom Tab ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ PERSON AL Ġ-> Ġ:: create Personal Tab ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ WORK Ġ-> Ġ:: create Work Tab ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ ALL _ APPS Ġ-> Ġ:: create All Apps Tab ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Flow er pot Tabs . TYPE _ FLOW ER P OT Ġ-> Ġ:: Flow er pot Tab ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ:: create Null ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Personal Tab ( context : ĠContext ) Ġ= ĠPersonal Tab ( context ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Work Tab ( context : ĠContext ) Ġ= ĠWork Tab ( context ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate All Apps Tab ( context : ĠContext ) Ġ= ĠAll Apps Tab ( context ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Custom Tab ( context : ĠContext ) Ġ= ĠCustom Tab ( context ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Groups Changed ( change Callback : ĠZ im Preferences Change Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchange Callback . launcher . all Apps Controller . apps View . reload Tabs () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠTab ( context : ĠContext , Ġtype : ĠInt , Ġtitle Res : ĠInt ) Ġ: ĠGroup ( type , Ġcontext , Ġtitle Res ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// val Ġcolor Resolver Ġ= ĠColor Row ( KEY _ COLOR , ĠApp Groups Utils . getInstance ( context ). default Color Resolver ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġadd Custom ization ( color Resolver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCustom Tab ( context : ĠContext ) Ġ: ĠTab ( context , ĠTYPE _ CUSTOM , ĠR . string . default _ tab _ name ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhide From All Apps Ġ= ĠSwitch Row ( R . drawable . tab _ hide _ from _ main , ĠR . string . tab _ hide _ from _ main , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKEY _ HIDE _ FROM _ ALL _ APPS , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= ĠApps Row ( KEY _ ITEMS , Ġmutable Set Of ()) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Custom ization ( hide From All Apps ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Custom ization ( contents ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom izations . set Order ( KEY _ TITLE , ĠKEY _ HIDE _ FROM _ ALL _ APPS , ĠKEY _ COLOR , ĠKEY _ ITEMS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Summary ( context : ĠContext ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġget Filter ( context ). size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . resources . get Quantity String ( R . plurals . tab _ apps _ count , Ġsize , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Filter ( context : ĠContext ): ĠFilter < *> Ġ= ĠCustom Filter ( context , Ġcontents . value ()) Ġ// ĠIcon Pack Filter ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠPre defined Tab ( context : ĠContext , Ġtype : ĠInt , Ġtitle Res : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfilter Is Work : ĠBoolean ?) Ġ: ĠTab ( context , Ġtype , Ġtitle Res ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Custom ization ( Hidden Apps Row ( filter Is Work )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom izations . set Order ( KEY _ TITLE , ĠKEY _ COLOR , ĠKEY _ HIDDEN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Summary ( context : ĠContext ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhidden Ġ= Ġcontext . zim Prefs . hidden App Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠComponent Key ( context , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( get Work Filter ( filter Is Work )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġhidden . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . resources . get Quantity String ( R . plurals . hidden _ apps _ count , Ġsize , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAll Apps Tab ( context : ĠContext ) Ġ: ĠPre defined Tab ( context , ĠTYPE _ ALL _ APPS , ĠR . string . apps _ label , Ġnull ) ĊĊĠĠĠ Ġclass ĠPersonal Tab ( context : ĠContext ) Ġ: ĠPre defined Tab ( context , ĠTYPE _ PERSON AL , ĠR . string . all _ apps _ personal _ tab , Ġfalse ) ĊĊĠĠĠ Ġclass ĠWork Tab ( context : ĠContext ) Ġ: ĠPre defined Tab ( context , ĠTYPE _ WORK , ĠR . string . all _ apps _ work _ tab , Ġtrue ) ĊĊĠĠĠ Ġclass ĠHidden Apps Row ( private Ġval Ġfilter Is Work : ĠBoolean ? Ġ= Ġnull ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup . Custom ization < Collection < Component Key >, ĠBoolean >( KEY _ HIDDEN , Ġempty Set ()) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpredicate Ġget () Ġ= Ġget Work Filter ( filter Is Work ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Row ( context : ĠContext , Ġparent : ĠViewGroup , Ġaccent : ĠInt ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( R . layout . drawer _ tab _ hidden _ apps _ row , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < ImageView >( R . id . manage _ apps _ icon ). tint Drawable ( accent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Count ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelect able Apps Activity . start ( context , Ġfiltered Value ( context ), Ġ{ Ġnew Selections Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Selections Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠHashSet ( new Selections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Count ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġfilter Is Work ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload FromJson ( context : ĠContext , Ġobj : ĠBoolean ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsave ToJson ( context : ĠContext ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hidden Apps ( context , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Count ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ( value Ġ?: Ġfiltered Value ( view . context )). size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . findViewById < TextView >( R . id . apps _ count ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . resources . get Quantity String ( R . plurals . hidden _ apps _ count , Ġcount , Ġcount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfiltered Value ( context : ĠContext ): ĠCollection < Component Key > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . zim Prefs . hidden App Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠComponent Key ( context , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( predicate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Hidden Apps ( context : ĠContext , Ġhidden : ĠCollection < Component Key >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġcontext . zim Prefs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhidden Set Ġ= ĠArrayList ( prefs . hidden App Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠComponent Key ( context , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! predicate ( it ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhidden Set . addAll ( hidden ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . hidden App Set Ġ= Ġhidden Set . map ( Component Key :: toString ). toSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclone (): ĠGroup . Custom ization < Collection < Component Key >, ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHidden Apps Row ( filter Is Work ). also Ġ{ Ġit . value Ġ= Ġvalue Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ PERSON AL Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ WORK Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ CUSTOM Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTYPE _ ALL _ APPS Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ ITEMS Ġ= Ġ" items " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ HIDDEN Ġ= Ġ" hidden " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġno Filter Ġ= Ġ{ Ġ_: ĠComponent Key Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpersonal Filter Ġ= Ġ{ Ġkey : ĠComponent Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey . user Ġ== Ġnull Ġ|| Ġkey . user Ġ== ĠProcess . my User Handle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwork Filter Ġ= Ġ{ Ġkey : ĠComponent Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey . user Ġ!= Ġnull Ġ&& Ġkey . user Ġ!= ĠProcess . my User Handle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Work Filter ( is Work : ĠBoolean ?): Ġ( Component Key ) Ġ-> ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( is Work ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġno Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġpersonal Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġwork Filter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ