package Ġde . sch alter . los ungen . screens . settings Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . preference .* Ċ import Ġde . sch alter . customize . Choose Style Preference Ċ import Ġde . sch alter . customize . Choose Style Preference Dialog Ċ import Ġde . sch alter . customize . Custom ize Ċ import Ġde . sch alter . customize . Custom ize Activity Ċ import Ġde . sch alter . los ungen . R Ċ import Ġde . sch alter . los ungen . background Tasks . daily Notifications . Schedule Notification Ċ import Ġde . sch alter . los ungen . components . dialogs . delete Ser mon s . Delete Ser mon s Dialog Ċ import Ġde . sch alter . los ungen . components . preferences . time Picker . Time Dialog Ċ import Ġde . sch alter . los ungen . components . preferences . time Picker . Time Preference Ċ import Ġde . sch alter . los ungen . firebase . Firebase Util Ċ import Ġde . sch alter . los ungen . utils . Preference Tags ĊĊ Ċ class ĠSettings Activity Ġ: ĠCustom ize Activity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Theme ( Custom ize . get Theme ( this )) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ settings ) ĊĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĊĠĠĠĠĠĠĠ Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( R . id . main _ activity _ fragment , ĠSettings Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġtoolbar . setTitle ( R . string . settings ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Home Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġarrow Ġclick Ġin Ġtoolbar ĊĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSettings Fragment Ġ: ĠPreference Fragment Compat () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreferences : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġvar Ġshared Preference Listener : ĠSharedPreferences . On Shared Preference ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ Ġcontext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preference Listener Ġ= ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġshared Preferences , Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġpreferences . all [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Util . track Settings Changed ( context , Ġkey , ĠnewValue . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . register On Shared Preference ChangeListener ( shared Preference Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĠĠĠĠĠĠĠ Ġshared Preference Listener ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences . unregister On Shared Preference ChangeListener ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . preferences , Ġroot Key ) ĊĊĠĠĠĠĠĠĠ Ġallow Statistics () ĊĠĠĠĠĠĠĠ Ġopen External Default () ĊĠĠĠĠĠĠĠ Ġshow Notification () ĊĠĠĠĠĠĠĠ Ġdelete Ser mon s () ĊĠĠĠĠĠĠĠ Ġdelete Ser mon s Autom atically () ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Attr Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . color Accent ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . attr . textColor Secondary ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext ?. theme ?. obtain Styled Attributes ( int ArrayOf ( color Attr )) ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Color Ġ= Ġthis . getColor ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt int Icons ( preference Screen , Ġicon Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Display Preference Dialog ( preference : ĠPreference ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( preference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTime Preference Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTime Dialog . newInstance ( preference . key ). let Ġ{ Ġdialog Fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Fragment . setTarget Fragment ( this , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Fragment . show ( fragment Manager !! , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChoose Style Preference Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChoose Style Preference Dialog . newInstance (). let Ġ{ Ġdialog Fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Fragment . setTarget Fragment ( this , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Fragment . show ( fragment Manager !! , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Display Preference Dialog ( preference ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġt int Icons ( preference : ĠPreference , Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( preference Ġis ĠPreference Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt int Icons ( it , Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= Ġpreference . icon ĊĠĠĠĠĠĠĠ Ġicon ?. setColor Filter ( color , ĠPort er D uff . Mode . SRC _ IN ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ---------- ĠNOT IFICATION ĠCHANGE ĠLIST ENER Ġ--------- ĊĠĠĠ Ġprivate Ġfun Ġallow Statistics () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < Switch Preference Compat >( Preference Tags . SEND _ STAT ISTICS )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Util . allow Sending ( context , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen External Default () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( Preference Tags . OPEN _ EXTERNAL _ DEFAULT )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( Preference Tags . OPEN _ EXTERNAL _ DEFAULT , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context !! , ĠR . string . successful , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < Switch Preference Compat >( Preference Tags . NOTIFICATION _ SHOW )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshow Notification Ġ= ĠnewValue Ġas ĠBoolean ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Notification ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule Notification ( context !! ). schedule Notification ( instant ly Show Notification Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSchedule Notification ( context !! ). cancel Scheduled Notification ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Ser mon s Autom atically () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < EditText Preference >( Preference Tags . SER MON S _ DELETE _ AUTO )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdays Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġ( newValue Ġas ĠString ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠR . string . only _ numbers _ allowed , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( Preference Tags . SER MON S _ DELETE _ AUTO , Ġdays . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text Ġ= Ġdays . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Ser mon s () Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( Preference Tags . SER MON S _ DELETE )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelete Ser mon s Dialog ( context ). show ( this @ Settings Fragment . fragment Manager !! , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ