package Ġme . jf enn . alarm io Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . location . Criteria Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . multi dex . Multi Dex Ċ import Ġandroidx . multi dex . Multi Dex Application Ċ import Ġcom . af ol le st ad . a est hetic . A est hetic Ċ import Ġcom . af ol le st ad . a est hetic . Auto Switch Mode Ċ import Ġcom . luck y cat labs . sun ri ses unset . Sun rise S unset Calculator Ċ import Ġcom . luck y cat labs . sun ri ses unset . dto . Location Ċ import Ġme . jf enn . alarm io . data . Alarm Data Ċ import Ġme . jf enn . alarm io . data . Preference Data Ċ import Ġme . jf enn . alarm io . data . Sound Data Ċ import Ġme . jf enn . alarm io . data . Timer Data Ċ import Ġme . jf enn . alarm io . impl . Sound Player Impl Ċ import Ġme . jf enn . alarm io . interfaces . Sound Player Ċ import Ġme . jf enn . alarm io . services . Sleep Reminder Service Ċ import Ġme . jf enn . alarm io . services . Timer Service Ċ import Ġme . jf enn . alarm io . utils . Debug Utils Ċ import Ġorg . k oin . android . ext . k oin . android Context Ċ import Ġorg . k oin . android . ext . k oin . android Logger Ċ import Ġorg . k oin . core . context . start K oin Ċ import Ġorg . k oin . dsl . module Ċ import Ġjava . util .* Ċ Ċ class ĠAlarm io Ġ: ĠMulti Dex Application () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsun set Calculator : ĠSun rise S unset Calculator ? Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġget System Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlocation Manager . getLast Known Location ( location Manager . get Best Provider ( Criteria (), Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSun rise S unset Calculator ( Location ( location !!. latitude , Ġlocation . longitude ), ĠTime Zone . getDefault (). id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġal arms : ĠMutable List < Alarm Data > Ġ= ĠArrayList () ĊĠĠĠ Ġval Ġtimers : ĠMutable List < Timer Data > Ġ= ĠArrayList () ĊĊĠĠĠ Ġprivate Ġval Ġlisteners : ĠMutable List < Alarm io Listener > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠActivity Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġapp Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠ Ġsingle < Sound Player > Ġ{ ĠSound Player Impl ( android Context ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġstart K oin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Logger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Context ( this @ Alarm io ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules ( app Module ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDebug Utils . setup ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalarm Length Ġ= ĠPreference Data . ALARM _ LENGTH . getValue < Int >( this ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġ 0 Ġuntil Ġalarm Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal arms . add ( Alarm Data ( id , Ġthis )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtimer Length Ġ= ĠPreference Data . TIMER _ LENGTH . getValue < Int >( this ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( id Ġin Ġ 0 Ġuntil Ġtimer Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer Data ( id , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer . isSet ) Ġtimers . add ( timer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( timer Length Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠTimer Service :: class . java )) ĊĊĠĠĠĠĠĠĠ ĠSleep Reminder Service . refresh Sleep Time ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġalarm , Ġassigning Ġit Ġan Ġunused Ġpreference Ġid . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠ ĠThe Ġnewly Ġinstantiated Ġ[ Alarm Data ](./ data / Alarm Data ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Alarm (): ĠAlarm Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalarm Ġ= ĠAlarm Data ( al arms . size , ĠCalendar . getInstance ()) ĊĠĠĠĠĠĠĠ Ġalarm . sound Ġ= ĠSound Data . fromString ( Preference Data . DEFAULT _ ALARM _ RING T ONE . getValue ( this , Ġ"")) ĊĠĠĠĠĠĠĠ Ġal arms . add ( alarm ) ĊĠĠĠĠĠĠĠ Ġon Alarm Count Changed () ĊĠĠĠĠĠĠĠ Ġreturn Ġalarm ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġan Ġalarm Ġand Ġall Ġof Ġits Ġits Ġpreferences . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġalarm ĠĠĠĠ ĠThe Ġalarm Ġto Ġbe Ġremoved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Alarm ( alarm : ĠAlarm Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġalarm . on Removed ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġal arms . indexOf ( alarm ) ĊĠĠĠĠĠĠĠ Ġal arms . remove At ( index ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindex Ġuntil Ġal arms . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal arms [ i ]. on Id Changed ( i , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Alarm Count Changed () ĊĠĠĠĠĠĠĠ Ġon Al arms Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġpreferences Ġto Ġshow Ġthat Ġthe Ġalarm Ġcount Ġhas Ġbeen Ġchanged . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Alarm Count Changed () Ġ{ ĊĠĠĠĠĠĠĠ ĠPreference Data . ALARM _ LENGTH . setValue ( this , Ġal arms . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNotify Ġthe Ġapplication Ġof Ġchanges Ġto Ġthe Ġcurrent Ġal arms . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Al arms Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Al arms Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġtimer , Ġassigning Ġit Ġan Ġunused Ġpreference Ġid . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠ ĠThe Ġnewly Ġinstantiated Ġ[ Timer Data ](./ data / Timer Data ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Timer (): ĠTimer Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= ĠTimer Data ( timers . size ) ĊĠĠĠĠĠĠĠ Ġtimers . add ( timer ) ĊĠĠĠĠĠĠĠ Ġon Timer Count Changed () ĊĠĠĠĠĠĠĠ Ġreturn Ġtimer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġa Ġtimer Ġand Ġall Ġof Ġits Ġpreferences . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtimer ĠĠĠĠ ĠThe Ġtimer Ġto Ġbe Ġremoved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Timer ( timer : ĠTimer Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtimer . on Removed ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġtimers . indexOf ( timer ) ĊĠĠĠĠĠĠĠ Ġtimers . remove At ( index ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindex Ġuntil Ġtimers . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimers [ i ]. on Id Changed ( i , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Timer Count Changed () ĊĠĠĠĠĠĠĠ Ġon Timers Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġpreferences Ġto Ġshow Ġthat Ġthe Ġtimer Ġcount Ġhas Ġbeen Ġchanged . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Timer Count Changed () Ġ{ ĊĠĠĠĠĠĠĠ ĠPreference Data . TIMER _ LENGTH . setValue ( this , Ġtimers . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNotify Ġthe Ġapplication Ġof Ġchanges Ġto Ġthe Ġcurrent Ġtimers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Timers Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( listener Ġin Ġlisteners ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Timers Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe Ġtimer Ġservice Ġafter Ġa Ġtimer Ġhas Ġbeen Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Timer Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠTimer Service :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġapplication Ġtheme . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Theme () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Night ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA est hetic . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Dark ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. light StatusBar Mode ( Auto Switch Mode . OFF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Primary ( Context Compat . getColor ( this , ĠR . color . color Night Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color StatusBar ( if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) ĠColor . TRANSP ARENT Ġelse ĠContext Compat . getColor ( this , ĠR . color . color Night Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color NavigationBar ( Context Compat . getColor ( this , ĠR . color . color Night Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Accent ( Context Compat . getColor ( this , ĠR . color . color Night Accent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Card View Background ( Context Compat . getColor ( this , ĠR . color . color Night Foreground )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Window Background ( Context Compat . getColor ( this , ĠR . color . color Night Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary ( Context Compat . getColor ( this , ĠR . color . textColor Primary Night )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary ( Context Compat . getColor ( this , ĠR . color . textColor Secondary Night )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary Inverse ( Context Compat . getColor ( this , ĠR . color . textColor Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary Inverse ( Context Compat . getColor ( this , ĠR . color . textColor Secondary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtheme : ĠInt Ġ= ĠPreference Data . THEME . getValue ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( theme Ġ== ĠTHE ME _ DAY Ġ|| Ġtheme Ġ== ĠTHE ME _ DAY _ N IGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA est hetic . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Dark ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. light StatusBar Mode ( Auto Switch Mode . ON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Primary ( Context Compat . getColor ( this , ĠR . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color StatusBar ( if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) ĠColor . TRANSP ARENT Ġelse ĠContext Compat . getColor ( this , ĠR . color . color Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color NavigationBar ( Context Compat . getColor ( this , ĠR . color . color Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Accent ( Context Compat . getColor ( this , ĠR . color . color Accent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Card View Background ( Context Compat . getColor ( this , ĠR . color . color Foreground )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Window Background ( Context Compat . getColor ( this , ĠR . color . color Primary Dark )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary ( Context Compat . getColor ( this , ĠR . color . textColor Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary ( Context Compat . getColor ( this , ĠR . color . textColor Secondary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary Inverse ( Context Compat . getColor ( this , ĠR . color . textColor Primary Night )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary Inverse ( Context Compat . getColor ( this , ĠR . color . textColor Secondary Night )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( theme Ġ== ĠTHE ME _ AMO LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA est hetic . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Dark ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. light StatusBar Mode ( Auto Switch Mode . OFF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Primary ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color StatusBar ( if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) ĠColor . TRANSP ARENT Ġelse ĠColor . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color NavigationBar ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Accent ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Card View Background ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Window Background ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Primary Inverse ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. textColor Secondary Inverse ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermine Ġif Ġthe Ġtheme Ġshould Ġbe Ġa Ġnight Ġtheme . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠ ĠTrue Ġif Ġthe Ġcurrent Ġtheme Ġis Ġa Ġnight Ġtheme . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Night (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠCalendar . getInstance ()[ Calendar . HOUR _ OF _ DAY ] ĊĠĠĠĠĠĠĠ Ġval Ġactivity Theme Ġ: ĠInt Ġ= ĠPreference Data . THEME . getValue ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( time Ġ< Ġget Day Start () Ġ|| Ġtime Ġ> Ġget Day End ()) Ġ&& Ġactivity Theme Ġ== ĠTHE ME _ DAY _ N IGHT Ġ|| Ġactivity Theme Ġ== ĠTHE ME _ N IGHT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermine Ġif Ġthe Ġsun rise / sun set Ġstuff Ġshould Ġoccur Ġautomatically . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠ ĠTrue Ġif Ġthe Ġday / night Ġstuff Ġis Ġautomated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Day Auto () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( this , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĠPreference Data . DAY _ AUTO . getValue ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhour Ġof Ġthe Ġstart Ġof Ġthe Ġday Ġ( 2 4 h ), Ġas Ġspecified Ġby Ġthe Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Day Start () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Day Auto ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Sun rise ()?. let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPreference Data . DAY _ START . getValue ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhour Ġof Ġthe Ġend Ġof Ġthe Ġday Ġ( 2 4 h ), Ġas Ġspecified Ġby Ġthe Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Day End () Ġ: ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Day Auto ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetS unset ()?. let Ġ{ Ġreturn Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPreference Data . DAY _ END . getValue ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhour Ġof Ġthe Ġcalculated Ġsun rise Ġtime , Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Sun rise () Ġ: ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsun set Calculator ?. get Official Sun rise Calendar For Date ( Calendar . getInstance ()) ?. get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġhour Ġof Ġthe Ġcalculated Ġsun set Ġtime , Ġor Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetS unset () Ġ: ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsun set Calculator ?. get Official S unset Calendar For Date ( Calendar . getInstance ()) ?. get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Listener ( listener : ĠAlarm io Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Listener ( listener : ĠAlarm io Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . remove ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Listener ( listener : ĠActivity Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġif Ġ( listener Ġ!= Ġnull ) Ġupdate Theme () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Permissions ( var arg Ġpermissions : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. request Permissions (* permissions ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfragment Manager : ĠFragment Manager ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġlistener ?. get t FragmentManager () ĊĊĠĠĠ Ġinterface ĠAlarm io Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Al arms Changed () ĊĠĠĠĠĠĠĠ Ġfun Ġon Timers Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠActivity Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġrequest Permissions ( var arg Ġpermissions : ĠString ?) ĊĠĠĠĠĠĠĠ Ġfun Ġget t FragmentManager (): ĠFragment Manager ? Ġ// help ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTHE ME _ DAY _ N IGHT Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTHE ME _ DAY Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTHE ME _ N IGHT Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTHE ME _ AMO LED Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ STOP WATCH Ġ= Ġ" stop watch " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ TIM ERS Ġ= Ġ" timers " ĊĠĠĠ Ġ} Ċ }