package Ġcom . k ier on qu inn . app . t apt ap . ui . screens . settings . shared . selector . shortcuts Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . view . update LayoutParams Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . coroutine Scope Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view binding . View Binding Ċ import Ġcom . k ier on qu inn . app . t apt ap . databinding . Item Settings Shared Shortcut s Selector App Binding Ċ import Ġcom . k ier on qu inn . app . t apt ap . databinding . Item Settings Shared Shortcut s Selector Shortcut Binding Ċ import Ġcom . k ier on qu inn . app . t apt ap . ui . screens . settings . shared . selector . shortcuts . Settings Shared Shortcut s Selector ViewModel . Item Ċ import Ġcom . k ier on qu inn . app . t apt ap . ui . views . Lifecycle Aware RecyclerView Ċ import Ġcom . k ier on qu inn . app . t apt ap . utils . extensions . on Clicked Ċ import Ġcom . k ier on qu inn . app . t apt ap . utils . pic asso . App Icon RequestHandler Ċ import Ġcom . k ier on qu inn . app . t apt ap . utils . pic asso . Component Name Icon RequestHandler Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlinx . coroutines . flow . collect Ċ Ċ class ĠSettings Shared Shortcut s Selector Adapter ( ĊĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠ Ġvar Ġitems : ĠList < Item >, ĊĠĠĠ Ġprivate Ġval Ġon App Clicked : Ġ( packageName : ĠString ) Ġ-> ĠList < Int >, ĊĠĠĠ Ġprivate Ġval Ġon Shortcut Clicked : Ġ( component Name : ĠComponent Name ) Ġ-> ĠUnit Ċ ) Ġ: ĊĠĠĠ ĠLifecycle Aware RecyclerView . Adapter < Settings Shared Shortcut s Selector Adapter . ViewHolder >( ĊĠĠĠĠĠĠĠ Ġre cyclerView ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlayout Inflater Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . context . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpic asso Ġ= ĠPic asso . get () ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. item Type . ordinal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Item . ItemType . values ()[ view Type ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem . ItemType . APP Ġ-> ĠViewHolder . App ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Settings Shared Shortcut s Selector App Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem . ItemType . SHORT CUT Ġ-> ĠViewHolder . Shortcut ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Settings Shared Shortcut s Selector Shortcut Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewHolder . App Ġ-> Ġholder . binding . setup ( item Ġas ĠItem . App , Ġholder . lifecycle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠViewHolder . Shortcut Ġ-> Ġholder . binding . setup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġas ĠItem . Shortcut , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . lifecycle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠItem Settings Shared Shortcut s Selector App Binding . setup ( ĊĠĠĠĠĠĠĠ Ġitem : ĠItem . App , ĊĠĠĠĠĠĠĠ Ġlifecycle : ĠLifecycle ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Settings Shared Shortcut s Selector App Label . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ("${ App Icon RequestHandler . SCHEME _ P NAME }:${ item . packageName }") ĊĠĠĠĠĠĠĠ Ġpic asso . load ( uri ). into ( item Settings Shared Shortcut s Selector App Icon ) ĊĠĠĠĠĠĠĠ Ġitem Settings Shared Shortcut s Selector App Che vron . rotation Ġ= Ġif Ġ( item . isOpen ) Ġ 1 8 0 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġlifecycle . coroutine Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . on Clicked (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item ( item , Ġitem Settings Shared Shortcut s Selector App Che vron ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle . coroutine Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Settings Shared Shortcut s Selector App Che vron . on Clicked (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Item ( item , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Item ( item : ĠItem . App , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems ToUpdate Ġ= Ġon App Clicked ( item . packageName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( items ToUpdate . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . isOpen Ġ= Ġ! item . isOpen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . animate (). rotation ( 1 8 0 f ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . animate (). rotation ( 0 f ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitems ToUpdate . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠItem Settings Shared Shortcut s Selector Shortcut Binding . setup ( ĊĠĠĠĠĠĠĠ Ġitem : ĠItem . Shortcut , ĊĠĠĠĠĠĠĠ Ġlifecycle : ĠLifecycle ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot . isVisible Ġ= Ġitem . isVisible ĊĠĠĠĠĠĠĠ Ġroot . update LayoutParams < RecyclerView . LayoutParams > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġif Ġ( item . isVisible ) ĠRecyclerView . LayoutParams . WRAP _ CONTENT Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġitem Settings Shared Shortcut s Selector Shortcut Label . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= ĠComponent Name ( item . packageName , Ġitem . activity ) ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ("${ Component Name Icon RequestHandler . SCHEME _ P NAME }:${ component . flatten ToString () }") ĊĠĠĠĠĠĠĠ Ġpic asso . load ( uri ). into ( item Settings Shared Shortcut s Selector Shortcut Icon ) ĊĠĠĠĠĠĠĠ Ġlifecycle . coroutine Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . on Clicked (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Shortcut Clicked ( component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠViewHolder ( open Ġval Ġbinding : ĠView Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠLifecycle Aware RecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠApp ( override Ġval Ġbinding : ĠItem Settings Shared Shortcut s Selector App Binding ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder ( binding ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠShort cut ( override Ġval Ġbinding : ĠItem Settings Shared Shortcut s Selector Shortcut Binding ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder ( binding ) ĊĠĠĠ Ġ} Ċ Ċ }