package Ġio . main frame . h acs . Page Fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġio . main frame . h acs . R Ċ import Ġio . main frame . h acs . common . Constants . SPACE _ DO OR Ċ import Ġio . main frame . h acs . common . Yes No Dialog Ċ import Ġio . main frame . h acs . components . Door Buttons Ċ import Ġio . main frame . h acs . main . Back Door Status Ċ import Ġio . main frame . h acs . main . Network Status Ċ import Ġio . main frame . h acs . main . Status Ċ import Ġio . main frame . h acs . mqtt . Mqtt Status Listener Ċ import Ġio . main frame . h acs . ssh . Door Command Ċ import Ġio . main frame . h acs . ssh . Pk Credentials Ċ import Ġio . main frame . h acs . trash _ notifications . Trash Calendar Ċ import Ġjava . util .* Ċ Ċ class ĠStatus Fragment Ġ: ĠBase Page Fragment (), ĠNetwork Status . Network Status Listener , ĠM qtt Status Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdoor Buttons : ĠDoor Buttons ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ status , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġdoor Buttons Ġ= Ġview . findViewById ( R . id . status _ door Buttons ) ĊĠĠĠĠĠĠĠ Ġdoor Buttons . setOn Button ClickListener Ġ{ Ġdoor Button , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( door Button . status Ġ== ĠStatus . CLOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspecial Ġaction Ġwhen Ġthe Ġspace Ġis Ġgoing Ġto Ġbe Ġclosed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Back Door Check Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Trash Check Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction . send Ssh Command ( SPACE _ DO OR , ĠDoor Command . get Switch Door State Cmd ( door Button . status )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction . send Ssh Command ( SPACE _ DO OR , ĠDoor Command . get Switch Door State Cmd ( door Button . status )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwith Trash Check ( next : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrash Summary For Tom orrow Ġ= ĠTr ash Calendar ( context ). trash Summary For Tom orrow ĊĠĠĠĠĠĠĠ Ġif Ġ( trash Summary For Tom orrow Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠYes No Dialog . show ( context , Ġ" M Ã¼ ll Ġpr Ã¼ fen ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format (" M org en Ġist ĠM Ã¼ ll ab fu hr ! ĠI st Ġsch on Ġ% s Ġan Ġdie ĠS tra ÃŁ e Ġgest ellt ?", Ġtrash Summary For Tom orrow ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" trash ") Ġ{ Ġ_, Ġresult Ok Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwith Back Door Check ( next : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġback Door Status Ġ= Ġinteraction . mqtt Connector . getLast Value < Back Door Status >( Mqtt Status Listener . Topic . BACK _ DO OR _ B OL T , ĠBack Door Status :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( back Door Status Ġ!= ĠBack Door Status . OPEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠYes No Dialog . show ( context , Ġ" Back - Door Ġpr Ã¼ fen .", Ġ" Die ĠBack - Door Ġist Ġno ch Ġoff en . ĠW irk lich Ġab sch lieÃŁ en ?", Ġ" bd ") Ġ{ Ġ_, Ġresult Ok Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġthe Ġssh Ġkey Ġpassword Ġis Ġnot Ġset ĊĠĠĠĠĠĠĠ Ġval ĠreadOnly Mode Ġ= Ġ! Pk Credentials . is Password Set ( context !! ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! readOnly Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Status Ġ= Ġinteraction . network Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Status . addListener ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Status . is Require Main frame Wifi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoor Buttons . isEnabled Ġ= Ġnetwork Status . isIn Main frame Wifi Ġ&& Ġ! network Status . has M ach ining B ssid () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoor Buttons . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoor Buttons . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmqtt Ġ= Ġinteraction . mqtt Connector ĊĠĠĠĠĠĠĠ Ġmqtt . addListener ( this , ĠEnum Set . of < Mqtt Status Listener . Topic >( Mqtt Status Listener . Topic . STATUS , ĠM qtt Status Listener . Topic . BACK _ DO OR _ B OL T )) ĊĊĠĠĠĠĠĠĠ ĠsetStatus Text ( mqtt . getLast Value < Status >( Mqtt Status Listener . Topic . STATUS , ĠStatus :: class . java )) ĊĠĠĠĠĠĠĠ Ġset Led Image ( mqtt . getLast Value ( Mqtt Status Listener . Topic . BACK _ DO OR _ B OL T , ĠBack Door Status :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĠĠĠĠĠĠĠ Ġinteraction . mqtt Connector . removeAll Listener ( this ) ĊĠĠĠĠĠĠĠ Ġinteraction . network Status . remove Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Title Res (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . string . nav _ status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetStatus Text ( status : ĠStatus ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġview Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġview . findViewById < TextView >( R . id . status _ status ) ĊĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġif Ġ( status Ġ== Ġnull ) ĠgetString ( R . string . unknown ) Ġelse Ġstatus . ui Value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Led Image ( status : ĠBack Door Status ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġview Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= Ġview . findViewById < ImageView >( R . id . back _ door _ status ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBack Door Status . OPEN Ġ-> ĠimageView . setImage Resource ( R . drawable . ic _ led _ red _ black ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBack Door Status . CLOSED Ġ-> ĠimageView . setImage Resource ( R . drawable . ic _ led _ blue _ black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠimageView . setImage Resource ( R . drawable . ic _ button _ black ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* Ġcallback Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Network Change ( has Network : ĠBoolean , Ġhas Mobile : ĠBoolean , Ġhas Wifi : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Main frame Wifi : ĠBoolean , Ġhas M ach ining B ssid : ĠBoolean , Ġrequire Main frame Wifi : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdoor Buttons . isEnabled Ġ= Ġ! require Main frame Wifi Ġ|| ĠisIn Main frame Wifi ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Msg ( topic : ĠM qtt Status Listener . Topic , Ġmsg : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( topic Ġ== ĠM qtt Status Listener . Topic . STATUS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetStatus Text ( msg Ġas ĠStatus ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( topic Ġ== ĠM qtt Status Listener . Topic . BACK _ DO OR _ B OL T ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Led Image ( msg Ġas ĠBack Door Status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Mqtt Connected () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġneeded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Mqtt Connection Lost () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetStatus Text ( null ) ĊĠĠĠĠĠĠĠ Ġset Led Image ( Back Door Status . UNKNOWN ) ĊĠĠĠ Ġ} Ċ } Ċ