/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠSer gio ĠBel da Ċ Ġ* Ċ Ġ* Ġ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 . ser gio bel da . android tod ometer . ui . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . gms . oss . licenses . O ss License s Menu Activity Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ import Ġcom . ser gio bel da . android tod ometer . R Ċ import Ġcom . ser gio bel da . android tod ometer . databinding . More Bottom Sheet Dialog Fragment Binding Ċ import Ġcom . ser gio bel da . android tod ometer . preferences . App Theme . Companion . THEME _ ARRAY Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . icon Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . message Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . negative Button Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . positive Button Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . single Choice Items Ċ import Ġcom . ser gio bel da . android tod ometer . util . Material Dialog . Companion . title Ċ import Ġcom . ser gio bel da . android tod ometer . view model . Main ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Fragment ] Ġshowing Ġoptions . Ċ Ġ*/ Ċ @ Android EntryPoint Ċ class ĠMore Bottom Sheet Dialog Fragment Ġ: ĠBottom Sheet Dialog Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠMore Bottom Sheet Dialog Fragment Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġval Ġmain ViewModel Ġby Ġview Models < Main ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠMore Bottom Sheet Dialog Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit App Theme Observer () ĊĠĠĠĠĠĠĠ Ġinit Edit Project Observer () ĊĠĠĠĠĠĠĠ Ġinit Delete Project Observer () ĊĠĠĠĠĠĠĠ Ġset Click Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit App Theme Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . app Theme . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcurrent Theme Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Theme Ġ= ĠTHE ME _ ARRAY . first OrNull () Ġ{ Ġit . mode Night Ġ== Ġcurrent Theme Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Theme ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . theme Icon . setImage Resource ( it . theme Icon Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . theme Description . text Ġ= ĠgetString ( it . mode Name Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Delete Project Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . projects . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Delete Project Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Delete Project Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdisable Delete Project Button () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Delete Project Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . delete Project Icon . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . delete Project Text . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . delete Project . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . delete Project . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog . create Dialog ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon ( R . drawable . ic _ warning _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( R . string . delete _ project _ dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( getString ( R . string . ok )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . delete Project () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( getString ( R . string . cancel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisable Delete Project Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . delete Project Icon . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . delete Project Text . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . delete Project . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . delete Project . setOnClickListener ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Edit Project Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . project Selected . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġproject Selected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selected ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Edit Project Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdisable Edit Project Button () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Edit Project Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Project Icon . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . edit Project Text . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . edit Project . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . edit Project . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . edit Project Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisable Edit Project Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Project Icon . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . edit Project Text . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . edit Project . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . edit Project . setOnClickListener ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . theme Option . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchoose Theme Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . about Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . about Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . open Source License s Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( require Context (), ĠO ss License s Menu Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" title ", ĠgetString ( R . string . open _ source _ licenses )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchoose Theme Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Theme Ġ= Ġmain ViewModel . app Theme . value ĊĠĠĠĠĠĠĠ Ġvar Ġchecked Item Ġ= ĠTHE ME _ ARRAY . indexOf First Ġ{ Ġit . mode Night Ġ== Ġcurrent Theme Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( checked Item Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠTHE ME _ ARRAY . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetText ( it . mode Name Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog . create Dialog ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( R . string . choose _ theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Choice Items ( items , Ġchecked Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Item Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositive Button ( getString ( R . string . ok )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠTHE ME _ ARRAY [ checked Item ]. mode Night ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . set App Theme ( mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġtheme Ġdescription ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . theme Description . text Ġ= ĠgetString ( THEME _ ARRAY [ checked Item ]. mode Name Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnegative Button ( getString ( R . string . cancel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ