/* Ċ Ġ* ĠCopyright Ġ( c ) ĠFrancisco ĠBar ro so Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . fb . split screen launcher . ui . shortcut Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . pm . Activity Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . pm . Shortcut Manager Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . lifecycle . observe Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . custom view . custom View Ċ import Ġcom . af ol le st ad . re cyc lic al . setup Ċ import Ġcom . af ol le st ad . re cyc lic al . with Item Ċ import Ġcom . fb . split screen launcher . R Ċ import Ġcom . fb . split screen launcher . databinding . Shortcut Dialog Binding Ċ import Ġcom . fb . split screen launcher . ui . settings . Settings Activity Ċ import Ġcom . fb . split screen launcher . ui . settings . model . App Info Ċ import Ġcom . fb . split screen launcher . ui . settings . model . App Info ViewHolder Ċ import Ġcom . fb . split screen launcher . util . Parameters Ċ import Ġcom . fb . split screen launcher . util . misc . Activity Ext Ċ import Ġcom . fb . split screen launcher . util . misc . toast Ċ import Ġkotlinx . android . synt hetic . main . shortcut _ dialog . view .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel ĊĊ Ċ class ĠShort cut Dialog Ġ: ĠDialog Fragment () Ġ{ ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" SHORT CUT " ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġshow ( context : ĠAppCompatActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs : ĠBundle Ġ= ĠBundle ()) Ġ= ĠShort cut Dialog (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . show ( context . support FragmentManager , ĠTAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġfinish Activity On Dismiss : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġarguments ?. getBoolean ( Parameters . FIN ISH _ PARENT _ AFTER _ DIS MIS S ) Ġ== Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġrequest Pin Shortcut : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġarguments ?. getBoolean ( Parameters . REQUEST _ PIN N ED _ SHORT CUT , Ġtrue ) Ġ== Ġtrue ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġactivity Ġ?: Ġthrow ĠIllegalStateException (" Shortcut Dialog ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmodel : ĠShort cut Dialog ViewModel Ġby ĠviewModel () ĊĊĠĠĠĠĠĠĠ Ġwith Ġ( model ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Back . observe ( this @ Shortcut Dialog ) Ġ{ Ġshortcut Info Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshortcut Info ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠShort cut Manager Compat . create Shortcut Result Intent ( context , Ġshortcut Info ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequest Ġshortcut Ġpin ning ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Pin Shortcut Ġ&& ĠShort cut Manager Compat . is Request Pin Shortcut Supported ( context )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Callback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( context , Ġ 0 , Ġresult , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShort cut Manager Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Pin Shortcut ( context , Ġshortcut Info , Ġsuccess Callback . intent Sender ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. set Result ( Activity . RESULT _ OK , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast s . observe ( this @ Shortcut Dialog ) Ġ{ Ġcontext . toast ( res Ġ= Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠView Ġbinding ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate < Shortcut Dialog Binding >( LayoutInflater . from ( context ), ĠR . layout . shortcut _ dialog , Ġnull , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Shortcut Dialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġmodel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . root . recycler _ view . setup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith DataSource ( model . repo . dataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Item < App Info , ĠApp Info ViewHolder >( R . layout . shortcut _ dialog _ item _ app ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind (:: App Info ViewHolder ) Ġ{ Ġindex , Ġitem Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . text Ġ= Ġitem . activity Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . load Label ( context . package Manager )?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠgetString ( when Ġ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠR . string . dialog _ new _ top _ app ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . string . dialog _ new _ bottom _ app ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . activity Info ?. load Icon ( context . package Manager ) Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Drawable ( R . drawable . ic _ add _ outline _ 2 4 px )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ? ĠActivity Ext )?. apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Activity . launch ( this , ĠSettings Activity . PAGE _ APP _ P ICK ER , Ġ 1 2 3 ) Ġ{ ĠresultCode , Ġdata Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. get Parcelable Extra < Activity Info >( Parameters . RESULT _ APP _ P ICK ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġinfo Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . set App ( index , Ġinfo ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġdialog ĊĠĠĠĠĠĠĠ Ġreturn ĠMaterial Dialog ( context ). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Auto Dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom View ( view Ġ= Ġbinding . root , Ġscroll able Ġ= Ġfalse , Ġno Vertical Padding Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneutral Button ( R . string . dialog _ new _ switch _ pos ) Ġ{ Ġmodel . swap Items () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( R . string . cancel ) Ġ{ Ġdismiss () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( R . string . save ) Ġ{ Ġmodel . save () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Dismiss ( dialog : ĠDialog Interface ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Dismiss ( dialog ) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( finish Activity On Dismiss ) Ġactivity ?. finish () ĊĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ