package Ġio . github . sam uel jar os in ski . amb il ight . amb il ight Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Looper Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . getSystem Service Ċ import Ġio . github . sam uel jar os in ski . amb il ight . R Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠAmb il ight Service Ġ: ĠService (), ĠOn Session Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġreceiver Ġ= ĠAmb il ight Broadcast Receiver () ĊĠĠĠ Ġprivate Ġvar Ġamb il ight Session : ĠAmb il ight Session ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Running : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent , Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Starting ĠAmb il ight Ġrequested Ġbut Ġis Ġalready Ġrunning , Ġignoring .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART _ RE DE LI VER _ INT ENT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Starting Ġ${ getString ( R . string . label _ service _ amb il ight )}. ") ĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( NOTIFICATION _ ID , Ġcreate Notification ( R . string . label _ hue _ connecting )) ĊĊĠĠĠĠĠĠĠ Ġreceiver . register ( context Ġ= Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġamb il ight Session Ġ= ĠAmb il ight Session ( context Ġ= Ġthis , Ġon Session Callback Ġ= Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ RE DE LI VER _ INT ENT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġamb il ight Session ?. stop () ĊĊĠĠĠĠĠĠĠ Ġreceiver . unregister ( context Ġ= Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Stopping Ġ${ getString ( R . string . label _ service _ amb il ight )}. ") ĊĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Amb il ight Session Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġget System Service < Notification Manager >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . notify ( NOTIFICATION _ ID , Ġcreate Notification ( R . string . label _ amb il ight _ active )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon No B rid ges Found () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĠToast . makeText ( this , ĠR . string . msg _ no _ brid ges _ found , ĠToast . LENGTH _ LONG ). show () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Not Authenticated () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . post Ġ{ ĠToast . makeText ( this , ĠR . string . msg _ not _ authenticated , ĠToast . LENGTH _ LONG ). show () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Amb il ight Session Error () Ġ= Ġstop Self () ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification (@ String Res Ġtitle Res Id : ĠInt ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstop Intent Ġ= ĠAmb il ight Broadcast Receiver . STOP _ INT ENT ĊĠĠĠĠĠĠĠ Ġval Ġstop Pending Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . get Broadcast ( this , Ġ 0 , Ġstop Intent , ĠPending Intent . FLAG _ CANCEL _ CURRENT ) ĊĠĠĠĠĠĠĠ Ġval Ġstop Action Ġ= ĠNotification Compat . Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ e 2 7 _ w aca _ off , ĠgetText ( R . string . action _ stop ), Ġstop Pending Intent ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠNotification Compat . Builder ( this , ĠNOT IFICATION _ CHANNEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ e 2 7 _ w aca _ on ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( getText ( title Res Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Compat . PRIORITY _ MIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Category ( Notification Compat . CATEGORY _ SERVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setVisibility ( Notification Compat . VIS IBILITY _ SECRET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAction ( stop Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show When ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Local Only ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ ID Ġ= Ġ" NOTIFICATION _ CHANNEL _ ID _ AMB IL IGHT _ SERVICE " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 3 1 ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġcreate Start Intent ( context : ĠContext ) Ġ= ĠIntent ( context , ĠAmb il ight Service :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ