package Ġcom . ber en l uth . gray scale Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . android . synt hetic . main . activity _ home .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* ĊĊ Ċ class ĠHome Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġval ĠTAG Ġ= Ġ" Home Activity " ĊĊĠĠĠ Ġvar Ġdefault Mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġnight Mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġin Time Window : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġsn ackbar Ġ: ĠSn ackbar ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ home ) ĊĊĠĠĠĠĠĠĠ Ġ// Read Ġthe Ġuser Ġsaved Ġpreference ĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġthis . get SharedPreferences ( Util Values . GENERAL _ PREFER ENCES , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġdefault Mode Ġ= Ġprefs . getBoolean ( Util Values . DEFAULT _ MODE , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġprefs . getInt ( Util Values . DARK _ THEME , ĠAppCompat Delegate . MODE _ N IGHT _ NO ) ĊĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( mode ) ĊĠĠĠĠĠĠĠ Ġdelegate . apply Day Night () ĊĊĠĠĠĠĠĠĠ ĠLog . d (" Home Activity ", Ġ" Default Ġmode Ġ= Ġ$ default Mode ") ĊĊĠĠĠĠĠĠĠ Ġ// Update Ġthe Ġswitch Ġand Ġother Ġviews Ġwith Ġthe Ġcorrect Ġdefault Ġmode ĊĠĠĠĠĠĠĠ Ġmain _ switch . isChecked Ġ= Ġdefault Mode ĊĠĠĠĠĠĠĠ Ġanimate UI ( default Mode ) ĊĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġprefs . getLong ( Util Values . TIMER _ END , Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġval Ġtimer Message Ġ= ĠString . format ( getString ( R . string . night _ mode _ running ), Ġget Timer End ( end )) ĊĊĠĠĠĠĠĠĠ Ġsn ackbar Ġ= ĠSn ackbar . make ( main _ switch , Ġtimer Message , ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . edit ) Ġ{ Ġ_ Ġ-> Ġrun { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Settings Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}} ĊĊĠĠĠĠĠĠĠ Ġ// Call Ġthis Ġfunction Ġwhen Ġthe Ġswitch Ġis Ġpressed ĊĠĠĠĠĠĠĠ Ġmain _ switch . setOn Checked ChangeListener Ġ{ Ġ_, Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Util . has Permission ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Mode Ġ= Ġs ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrect State Ġ= Ġdefault Mode Ġ|| Ġ( night Mode Ġ&& Ġin Time Window ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Home Activity ", Ġ" default Mode =$ default Mode , Ġnight Mode =$ night Mode , Ġin Time Window =$ in Time Window , Ġcorrect State =$ correct State ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . toggle Grey scale ( this , Ġcorrect State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimate UI ( s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Update Ġuser 's Ġpreference Ġwith Ġthe Ġnew Ġdefault Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit (). put Boolean ( Util Values . DEFAULT _ MODE , Ġs ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Home Activity ", Ġ" Default _ mode Ġchanged Ġin : Ġ$ s ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if ( sn ackbar . is Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( main _ switch , ĠR . string . timer _ auto _ stopped , ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Show Ġdialog Ġfragment Ġif Ġapp Ġdoesn 't Ġhave Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain _ switch . isChecked Ġ= Ġ! s Ġ Ġ// B ring Ġthe Ġswitch Ġto Ġthe Ġprevious Ġstate ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠUtil . create Tips Dialog ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsettings _ button . setOnClickListener Ġ{ Ġ_ Ġ-> Ġstart Settings Activity () Ġ} ĊĊĠĠĠĠĠĠĠ Ġneed _ help . setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent (" android . intent . action . VIEW ", ĠUri . parse ( getString ( R . string . guide _ website ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( browser Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġthis . get SharedPreferences ( Util Values . GENERAL _ PREFER ENCES , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġnight Mode Ġ= Ġprefs . getBoolean ( Util Values . N IGHT _ MODE _ ENABLED , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġin Time Window Ġ= ĠUtil . is Current TimeIn Window ( prefs ) ĊĊĠĠĠĠĠĠĠ Ġif ( ĠUtil . has Permission ( this ) Ġ&& Ġnight Mode Ġ&& Ġin Time Window ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Util . has Permission ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneed _ help . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneed _ help . animate (). translation Y ( 0 f ). duration Ġ= Ġ 3 0 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġanimate UI ( gray : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimation Scale Ġ= Ġ 1 7 5 L ĊĠĠĠĠĠĠĠ Ġval Ġscale Factor Ġ= Ġ 0 . 8 f ĊĊĠĠĠĠĠĠĠ Ġif ( gray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch _ on . animate (). scale X ( 1 f ). scale Y ( 1 f ). duration Ġ= Ġanimation Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch _ off . animate (). scale X ( scale Factor ). scale Y ( scale Factor ). duration Ġ= Ġanimation Scale ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch _ off . animate (). scale X ( 1 f ). scale Y ( 1 f ). duration Ġ= Ġanimation Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch _ on . animate (). scale X ( scale Factor ). scale Y ( scale Factor ). duration Ġ= Ġanimation Scale ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Timer End ( end : ĠLong ) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . time In Millis Ġ= Ġend ĊĊĠĠĠĠĠĠĠ Ġval Ġformat 1 Ġ= ĠSimpleDateFormat (" HH : mm ") ĊĠĠĠĠĠĠĠ Ġreturn Ġformat 1 . format ( calendar . time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Settings Activity (){ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( this , ĠSettings Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( i ) ĊĠĠĠ Ġ} Ċ } Ċ