/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠThanks M ister ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 . th ank sm ister . iot . mqtt . alar mp anel . ui . activities Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . app . FragmentManager Ċ import Ġandroid . support . v 4 . app . Fragment State Pager Adapter Ċ import Ġandroid . support . v 4 . content . Local Broadcast Manager Ċ import Ġandroid . support . v 4 . view . Pager Adapter Ċ import Ġandroid . support . v 4 . view . ViewPager Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Toast Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . Base Activity Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . Base Fragment Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . Build Config Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . R Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . managers . Day Night Alarm LiveData Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . network . Alarm Panel Service Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . ui . fragments . Controls Fragment Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . ui . fragments . Main Fragment Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . ui . fragments . Platform Fragment Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . utils . Alarm Utils Ċ import Ġcom . th ank sm ister . iot . mqtt . alar mp anel . view model . Main ViewModel Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĠView Pager . On Page ChangeListener , ĠControls Fragment . On Controls Fragment Listener , ĊĠĠĠĠĠĠĠ ĠMain Fragment . On Main Fragment Listener , ĠPlatform Fragment . On Platform Fragment Listener Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĠĠĠ Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpager Adapter : ĠP ager Adapter ĊĠĠĠ Ġprivate Ġvar Ġalert Dialog : ĠAlertDialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġalarm LiveData : ĠDay Night Alarm LiveData ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlocal Broad Cast Manager : ĠLocal Broadcast Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdecor View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġalarm Panel Service : ĠIntent ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġthis . window . set Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ SHOW _ WHEN _ LOCK ED Ġor ĠWindow Manager . LayoutParams . FLAG _ T URN _ SCREEN _ ON , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ SHOW _ WHEN _ LOCK ED Ġor ĠWindow Manager . LayoutParams . FLAG _ T URN _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ Ġdecor View Ġ= Ġwindow . decor View ĊĊĠĠĠĠĠĠĠ Ġpager Adapter Ġ= ĠMain Slide Pager Adapter ( support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġview _ pager . adapter Ġ= Ġpager Adapter ĊĠĠĠĠĠĠĠ Ġview _ pager . add On Page ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġview _ pager . set Paging Enabled ( false ) ĊĊĠĠĠĠĠĠ Ġif ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . alarm Code Ġ= ĠBuild Config . ALARM _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdark Sky Options . dark Sky Key Ġ= ĠBuild Config . DARK _ SK Y _ KEY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdark Sky Options . latitude Ġ= ĠBuild Config . LAT IT UDE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdark Sky Options . longitude Ġ= ĠBuild Config . LONG IT UDE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmqtt Options . set Broker ( Build Config . BRO KER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . web Url Ġ= ĠBuild Config . H ASS _ URL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Mail From ( Build Config . MAIL _ FROM ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Mail Gun ApiKey ( Build Config . MAIL _ G UN _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Mail To ( Build Config . MAIL _ TO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Mail Gun Url ( Build Config . MAIL _ G UN _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . telegram Chat Id Ġ= ĠBuild Config . TELE GRAM _ CHAT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . telegram Token Ġ= ĠBuild Config . TELE GRAM _ TOKEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . image ClientId Ġ= ĠBuild Config . IMG UR _ CLIENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Options . image Source Ġ= ĠBuild Config . IMG UR _ TAG Ġ// ĠImg ur Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdark Sky Options . setIs C els ius ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . is First Time Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Clock Screen Saver Module ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Photo Screen Saver ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Has Camera Capture ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Web Module ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set Show Weather Module ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . set T ss Module ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . is First Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog Ġ= ĠAlertDialog . Builder ( this @ MainActivity , ĠR . style . Custom AlertDialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . dialog _ first _ time )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠSettings Activity . create Start Intent ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġmust Ġbe Ġsure Ġwe Ġhave Ġthe Ġinstantiated Ġthe Ġview Ġmodel Ġbefore Ġwe Ġobserve . ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Main ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( dialog Utils ) ĊĠĠĠĠĠĠĠ Ġobserve ViewModel () ĊĊĠĠĠĠĠĠĠ Ġif ( configuration . camera Enabled Ġ|| Ġ( configuration . capture Camera Image () Ġ|| Ġconfiguration . has Camera Det e ctions ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . set Flags ( WindowManager . LayoutParams . FLAG _ HARD WARE _ AC CELER ATED , ĠWindow Manager . LayoutParams . FLAG _ HARD WARE _ AC CELER ATED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Prevent ĠSleep Ġ${ configuration . app Prevent Sleep }") ĊĠĠĠĠĠĠĠ Ġif Ġ( configuration . app Prevent Sleep ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( ĠWindow Manager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" onStart ") ĊĠĠĠĠĠĠĠ Ġalarm Panel Service Ġ= ĠIntent ( this , ĠAlarm Panel Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground Service ( alarm Panel Service ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( alarm Panel Service ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis posable . add ( viewModel . get Alarm State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ state Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" onStart Ġstate : Ġ" Ġ+ Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Utils . STATE _ DIS ARM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaw aken Device For Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset In activity Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Utils . STATE _ ARM _ AW AY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Utils . STATE _ ARM _ HOME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaw aken Device For Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset In activity Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Utils . STATE _ TRIGGER ED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaw aken Device For Action () Ġ// Ġ 3 Ġhours ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Disconnect Timer () Ġ// Ġstop Ġscreen Ġsa ver Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlarm Utils . STATE _ PENDING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaw aken Device For Action () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset In activity Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġerror Ġ-> ĠTim ber . e (" Unable Ġto Ġget Ġmessage : Ġ" Ġ+ Ġerror )} )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Alert Message (). observe ( this , ĠObserver Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" get Alert Message ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Utils . show AlertDialog ( this @ MainActivity , Ġmessage !! ) ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . get Toast Message (). observe ( this , ĠObserver Ġ{ Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" get Toast Message ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġmessage , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġalarm LiveData Ġ= ĠDay Night Alarm LiveData ( this @ MainActivity , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġalarm LiveData ?. observe ( this , ĠObserver Ġ{ Ġday Night Mode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Night Mode Check ( day Night Mode ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Resume ") ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġreset In activity Timer () ĊĠĠĠĠĠĠĠ Ġset ViewPager State () ĊĠĠĠĠĠĠĠ Ġ// ĠFilter Ġmessages Ġfrom Ġservice ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( Alarm Panel Service . BRO ADCAST _ ALERT _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( Alarm Panel Service . BRO ADCAST _ TO AST _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( Alarm Panel Service . BRO ADCAST _ SCREEN _ WAKE ) ĊĠĠĠĠĠĠĠ Ġlocal Broad Cast Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġlocal Broad Cast Manager !!. register Receiver ( m Broadcast Receiver , Ġfilter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif ( local Broad Cast Manager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Broad Cast Manager !!. unregister Receiver ( m Broadcast Receiver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Destroy ") ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġif ( alert Dialog Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalert Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwindow . clear Flags ( WindowManager . LayoutParams . FLAG _ HARD WARE _ AC CELER ATED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view _ pager . currentItem Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġuser Ġis Ġcurrently Ġlooking Ġat Ġthe Ġfirst Ġstep , Ġallow Ġthe Ġsystem Ġto Ġhandle Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBack Ġbutton . ĠThis Ġcalls Ġfinish () Ġon Ġthis Ġactivity Ġand Ġp ops Ġthe Ġback Ġstack . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(( pager Adapter Ġas ĠMain Slide Pager Adapter ). getCurrent Fragment () !!. on Back Pressed ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġback press Ġhandled Ġby Ġfragment Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġif Ġback Ġkey Ġpress Ġis Ġnot Ġhandled Ġby Ġfragment , Ġselect Ġthe Ġprevious Ġstep . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview _ pager . currentItem Ġ= Ġview _ pager . currentItem Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Window Focus Changed ( has Focus ) ĊĠĠĠĠĠĠĠ Ġval Ġvisibility : ĠInt ĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus Ġ&& Ġconfiguration . full Screen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT Ġ-> Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ IM MER SIVE _ STICK Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN Ġ-> Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LOW _ PROFILE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ HIDE _ NAV IG ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . set Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View ?. system Ui Visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has Focus ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT Ġ-> Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN Ġ-> Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvisibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ VISIBLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecor View ?. system Ui Visibility Ġ= Ġvisibility ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate Alarm Panel () Ġ{ ĊĠĠĠĠĠĠĠ Ġview _ pager . currentItem Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Paging Enabled ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview _ pager . set Paging Enabled ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnavigate Platform Panel () Ġ{ ĊĠĠĠĠĠĠĠ Ġview _ pager . currentItem Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset ViewPager State () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . has Platform ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview _ pager . set Paging Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview _ pager . set Paging Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpublish Ar med Home () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" publish Ar med Home ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE , ĠAlarm Utils . COMMAND _ ARM _ HOME ) ĊĠĠĠĠĠĠĠ Ġval Ġbm Ġ= ĠLocal Broadcast Manager . getInstance ( application Context ) ĊĠĠĠĠĠĠĠ Ġbm . send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpublish Ar med Away () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" publish Ar med Away ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE , ĠAlarm Utils . COMMAND _ ARM _ AW AY ) ĊĠĠĠĠĠĠĠ Ġval Ġbm Ġ= ĠLocal Broadcast Manager . getInstance ( application Context ) ĊĠĠĠĠĠĠĠ Ġbm . send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpublish Dis ar med () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" publish Dis ar med ") ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Alarm Panel Service . BRO ADCAST _ EVENT _ ALARM _ MODE , ĠAlarm Utils . COMMAND _ DIS ARM ) ĊĠĠĠĠĠĠĠ Ġval Ġbm Ġ= ĠLocal Broadcast Manager . getInstance ( application Context ) ĊĠĠĠĠĠĠĠ Ġbm . send Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWe Ġneed Ġto Ġaw aken Ġthe Ġdevice Ġand Ġallow Ġthe Ġuser Ġto Ġtake Ġaction . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġaw aken Device For Action () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" aw aken Device For Action ") ĊĠĠĠĠĠĠĠ Ġbring Application To Foreground IfNeeded () ĊĠĠĠĠĠĠĠ Ġif Ġ( view _ pager Ġ!= Ġnull Ġ&& Ġpager Adapter . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview _ pager . currentItem Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmanually Launch Screen Saver () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Screen Saver () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠMain Slide Pager Adapter ( fm : ĠFragment Manager ) Ġ: ĠFragment State Pager Adapter ( fm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Fragment Ġ: ĠBase Fragment ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠMain Fragment . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠPlatform Fragment . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMain Fragment . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Primary Item ( container : ĠViewGroup , Ġposition : ĠInt , Ġ` object `: ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . set Primary Item ( container , Ġposition , Ġ` object `) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Fragment Ġ!= Ġ` object ` ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Fragment Ġ= Ġ` object ` Ġas ĠBase Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun ĠgetCurrent Fragment () Ġ= Ġcurrent Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhandler Ġfor Ġreceived Ġdata Ġfrom Ġservice ĊĠĠĠ Ġprivate Ġval Ġm Broadcast Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Alarm Panel Service . BRO ADCAST _ ALERT _ MESSAGE Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġintent . getString Extra ( Alarm Panel Service . BRO ADCAST _ ALERT _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this @ MainActivity , ĠR . style . Custom AlertDialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Alarm Panel Service . BRO ADCAST _ TO AST _ MESSAGE Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġintent . getString Extra ( Alarm Panel Service . BRO ADCAST _ TO AST _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Alarm Panel Service . BRO ADCAST _ SCREEN _ WAKE Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset In activity Timer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }