package Ġcom . j . j face . we ar Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Remote Input Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . we arable . Data Event Ċ import Ġcom . google . android . gms . we arable . Data Event Buffer Ċ import Ġcom . google . android . gms . we arable . DataMap Item Ċ import Ġcom . google . android . gms . we arable . W ear able Listener Service Ċ import Ġcom . j . j face . Const Ċ import Ġcom . j . j face . R Ċ import Ġcom . j . j face . feed . J Face Data Feed Ċ import Ġcom . j . j face . feed . OPEN _ FRAGMENT _ EXTRA Ċ import Ġcom . j . j face . notif Manager Ċ import Ġcom . j . j face . org . Automatic Editor Processor Ċ import Ġcom . j . j face . org . notif . Not if Engine Ċ Ċ private Ġconst Ġval ĠCHAN NEL _ ID Ġ= Ġ" j face _ check points " Ċ private Ġconst Ġval ĠCHAN NEL _ NAME Ġ= Ġ" J Face Âł : Ġcheck points " Ċ private Ġconst Ġval ĠNOT IF _ ID Ġ= Ġ 1 Ċ private Ġconst Ġval ĠDELETE _ CHECK POINTS _ ACTION Ġ= Ġ" delete Ġcheck points " Ċ Ċ class ĠData ChangeListener Service Ġ: ĠW ear able Listener Service () Ċ { ĊĠ Ġoverride Ġfun Ġon Data Changed ( eb Ġ: ĠData Event Buffer ?) ĊĠ Ġ{ ĊĠĠĠ Ġif Ġ( null Ġ== Ġe b ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ ĠLog . e (" J Face ", Ġ" Data ChangeListener Service Ġ: Ġon Data Changed Ġwith Ġnull Ġargument ") ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġe b . forEach Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Data Event . TYPE _ CHANGED Ġ!= Ġit . type ) Ġreturn Ġ// ĠDon 't Ġhandle Ġde letions Ġin Ġthis Ġversion ĊĠĠĠĠĠ Ġval Ġpath Ġ= Ġit . data Item . uri . path ĊĠĠĠĠĠ Ġif Ġ( null Ġ== Ġpath ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" J Face ", Ġ" Updated Ġdata Ġpath Ġis Ġnull Ġ? !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(! path . startsWith ( Const . DATA _ PATH )) Ġreturn Ġ// ĠOnly Ġinterested Ġin Ġdata Ġpath Ġstuff ĊĠĠĠĠĠ Ġwhen Ġ( val Ġkey Ġ= Ġpath . substring ( Const . DATA _ PATH . length Ġ+ Ġ 1 )) Ġ// Ġ+ 1 Ġfor Ġthe Ġ"/" Ġseparator ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠConst . DATA _ KEY _ CHECK POINTS Ġ-> ĠData Map Item . from Data Item ( it . data Item ). data Map . get < String >( key ). let Ġ{ Ġmaybe Check points Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ( maybe Check points Ġ?: Ġ""). let Ġ{ Ġcheck points Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ( check points ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ear ( this ). put DataTo Cloud Only ( path , Ġkey , Ġcheck points ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonStart Command ( intent Ġ: ĠIntent ?, Ġflags Ġ: ĠInt , Ġstart Id Ġ: ĠInt ) Ġ: ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( null Ġ!= Ġintent ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ( intent . action ) ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠDELETE _ CHECK POINTS _ ACTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġnotify ("") ĊĠĠĠĠĠĠĠĠĠ ĠW ear ( this ). delete Data ("${ Const . DATA _ PATH }/${ Const . DATA _ KEY _ CHECK POINTS }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Channel () Ġ: ĠNotification Channel ĊĠ Ġ{ ĊĠĠĠ Ġval Ġnot if Manager Ġ= Ġnot if Manager ĊĠĠĠ Ġval Ġexisting Ġ= Ġnot if Manager . get Notification Channel ( CHANNEL _ ID ) ĊĠĠĠ Ġif Ġ( null Ġ!= Ġexisting ) Ġreturn Ġexisting ĊĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( CHANNEL _ ID , ĠCHAN NEL _ NAME , ĠNotification Manager . IMPORT ANCE _ LOW ) ĊĠĠĠ Ġ// ĠConfigure Ġthe Ġnotification Ġchannel . ĊĠĠĠ Ġchannel . description Ġ= Ġ" J Face Âł : Ġcheck points " ĊĠĠĠ Ġchannel . enable Lights ( false ) ĊĠĠĠ Ġchannel . light Color Ġ= Ġget Color ( R . color . j orm ung and _ color ) ĊĠĠĠ Ġchannel . enable V ibration ( false ) ĊĠĠĠ Ġnot if Manager . create Notification Channel ( channel ) ĊĠĠĠ Ġreturn Ġnot if Manager . get Notification Channel ( CHANNEL _ ID ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbuild Delete Button () Ġ: ĠNotification . Action ĊĠ Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent (). set Class ( this , ĠData ChangeListener Service :: class . java ). apply Ġ{ ĊĠĠĠĠĠ Ġaction Ġ= ĠDELETE _ CHECK POINTS _ ACTION ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . getService ( this , ĠConst . CHECK POINTS _ CLEAR , Ġintent , ĠPending Intent . FLAG _ ONE _ SHOT Ġor ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġreturn ĠNotification . Action . Builder ( null , Ġ" Delete ", Ġpending Intent ). build () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnotify ( check points Ġ: ĠString ) ĊĠ Ġ{ ĊĠĠĠ Ġif Ġ( check points . isEmpty ()) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠ Ġnot if Manager . cancel ( NOT IF _ ID ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtitle Ġ= Ġ" J Face " ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠJ Face Data Feed . activity Class ()) ĊĠĠĠ Ġintent . putExtra ( OPEN _ FRAGMENT _ EXTRA , Ġ" Messages ") ĊĠĠĠ Ġval Ġpending Intent Ġ= ĠPending Intent . getActivity ( this , ĠConst . NOTIFICATION _ RESULT _ CODE , Ġintent , ĠPending Intent . FLAG _ ONE _ SHOT Ġor ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġval Ġnotification Ġ= ĠNotification . Builder ( this , Ġget Channel (). id ). apply Ġ{ ĊĠĠĠĠĠ ĠsetShow When ( true ) ĊĠĠĠĠĠ Ġset When ( System . currentTimeMillis ()) ĊĠĠĠĠĠ Ġset Small Icon ( R . drawable . ic _ launcher ) ĊĠĠĠĠĠ Ġset Color ( getColor ( R . color . j orm ung and _ color )) ĊĠĠĠĠĠ Ġset Content Intent ( pending Intent ) ĊĠĠĠĠĠ Ġset Content Title ( title ) ĊĠĠĠĠĠ Ġset Content Text ( check points ) ĊĠĠĠĠĠ Ġset Style ( Notification . Big TextStyle (). big Text ( check points )) ĊĠĠĠĠĠ Ġset Auto Cancel ( true ) ĊĠĠĠĠĠ Ġset Only Alert Once ( true ) ĊĠĠĠĠĠ Ġset Category ( Notification . CATEGORY _ REM IND ER ) ĊĠĠĠĠĠ Ġset Local Only ( true ) Ġ// ĠDon 't Ġshow Ġthis Ġnotification Ġon Ġthe Ġwatch , Ġit Ġcomes Ġfrom Ġthere ĊĠĠĠĠĠ Ġadd Action ( build Delete Button ()) ĊĠĠĠĠĠ Ġ// Ġset Visibility ( Notification . VIS IBILITY _ SECRET ) Ġ// ĠBroken Ġin Ġthe Ġlatest Ġcustom Ġbuild Ġapparently ĊĠĠĠ Ġ}. build () ĊĠĠĠ Ġnot if Manager . notify ( NOT IF _ ID , Ġnotification ) ĊĠ Ġ} Ċ } Ċ