package Ġcom . p ang rel . pak aim ask er Ċ Ċ import Ġandroid . app .* Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os .* Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġcom . cha quo . python . PyObject Ċ import Ġcom . cha quo . python . Python Ċ import Ġcom . cha quo . python . android . Android Platform Ċ import Ġjava . time . Local Time Ċ Ċ class ĠCam Service () Ġ: ĠService () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġclassification Module Ġ: ĠPyObject ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcapture Handler Ġ: ĠCapture Handler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlocation Tracker Ġ: ĠLocation Tracker ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġreceiver : ĠBroadcast Receiver ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmonitor Task : ĠRunnable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmain Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĊĠĠĠ Ġprivate Ġvar ĠS CH ED UL ED _ TIME _ BEGIN Ġ: ĠLocal Time ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠS CH ED UL ED _ TIME _ END Ġ: ĠLocal Time ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠTOT AL _ CAPTURE Ġ= Ġ 7 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 7 Ġimages Ġto Ġcapture ĊĠĠĠ Ġprivate Ġvar ĠTOT AL _ CAP UT RE _ PROC ES SED Ġ= Ġ 2 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 Ġimages Ġsample Ġto Ġprocessed ĊĠĠĠ Ġprivate Ġvar ĠCAP UT RE _ INTERVAL Ġ= Ġ 1 5 Ġ* Ġ 1 0 0 0 L ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 5 Ġseconds Ġcapture Ġinterval ĊĠĠĠ Ġprivate Ġval ĠLOC ATION _ INTERVAL Ġ= Ġ 1 5 Ġ* Ġ 1 0 0 0 L ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 5 Ġseconds Ġlocation Ġupdates ĊĠĠĠ Ġprivate Ġval ĠSMALL _ DIS PLACE MENT _ DISTANCE : ĠFloat Ġ= Ġ 2 0 f ĠĠĠ Ġ// Ġ 2 0 Ġmeters Ġminimum Ġdistance Ġto Ġupdate ĊĠĠĠ Ġprivate Ġval ĠSA FE ZONE _ RADIUS Ġ= Ġ 5 0 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 5 0 Ġmeters Ġradius Ġof Ġsafe zone ĊĠĠĠ Ġprivate Ġval ĠCONF ID ENCE _ THRESHOLD Ġ= Ġ 0 . 8 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 8 0 Ġpercent Ġminimum Ġconfidence ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( p 0 : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! ĠPython . is Started ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPython . start ( Android Platform ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclassification Module Ġ= ĠPython . getInstance (). getModule (" classification ") ĊĊĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( ACTION _ PRE PARE D )) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( ACTION _ MONITOR ) ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( ACTION _ ADD _ SAFE ZONE ) ĊĠĠĠĠĠĠĠ Ġfilter . addAction ( ACTION _ DEL _ SAFE ZONE ) ĊĠĠĠĠĠĠĠ Ġregister Receiver ( receiver , Ġfilter ) ĊĊĠĠĠĠĠĠĠ Ġstart Foreground () ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġthis . SCHEDUL ED _ TIME _ BEGIN Ġ= ĠLocal Time . parse (" 0 6 : 0 0 : 0 0 ") Ċ // ĠĠĠĠĠĠĠ Ġthis . SCHEDUL ED _ TIME _ END Ġ= ĠLocal Time . parse (" 1 5 : 0 0 : 0 0 ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġmain Handler . remove Callbacks ( monitor Task ) ĊĠĠĠĠĠĠĠ Ġlocation Tracker ?. stop Monitoring () ĊĠĠĠĠĠĠĠ Ġcapture Handler ?. destroy () ĊĠĠĠĠĠĠĠ Ġunregister Receiver ( receiver ) ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( ACTION _ STOP PED )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Tracker Ġ= ĠLocation Tracker ( application Context , ĠLOC ATION _ INTERVAL , ĠSA FE ZONE _ RADIUS , ĠSMALL _ DIS PLACE MENT _ DISTANCE ) ĊĠĠĠĠĠĠĠ Ġcapture Handler Ġ= ĠCapture Handler ( application Context , ĠTOT AL _ CAPTURE , ĠTOT AL _ CAP UT RE _ PROC ES SED ) ĊĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( p 0 : ĠContext ?, Ġp 1 : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Receive : Ġ" Ġ+ Ġp 1 ?. action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( p 1 ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ MONITOR Ġ-> Ġstart Monitoring () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ ADD _ SAFE ZONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . cancel ( REM IND ER _ NOTIFICATION _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracker ?. add Safe Zone ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 . getString Extra (" name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 . get Parcelable Extra (" location ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ DEL _ SAFE ZONE Ġ-> Ġlocation Tracker ?. remove Safe Zone ( p 1 . getString Extra (" name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmonitor Task Ġ= Ġobject : ĠRunnable Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Handler . post Delayed ( monitor Task , ĠCAP UT RE _ INTERVAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Ready ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Handler ?. capture Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlocation Tracker ?. set Listener ( object : ĠOn Location Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Updated ( safe Zones : ĠArrayList < Zone >, Ġis Safe : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Locations ( safe Zones , Ġis Safe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġcapture Handler ?. set Listener ( object : ĠOn Capt ured Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Capt ured Done ( bitmap List : ĠArrayList < Bitmap >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Classification ( bitmap List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġis Ready (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( SCHEDUL ED _ TIME _ BEGIN Ġ!== Ġnull Ġ&& ĠS CH ED UL ED _ TIME _ END Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠLocal Time . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( SCHEDUL ED _ TIME _ BEGIN !!. is Before ( now ) Ġ&& ĠS CH ED UL ED _ TIME _ END !!. is After ( now ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Out Ġof Ġscheduled Ġtime - range ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( location Tracker ?. is Safe () Ġ=== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" User Ġis Ġin Ġsafe - zone ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( getSystem Service ( POWER _ SERVICE ) Ġas ĠPower Manager ). is Interactive Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Screen Ġdevice Ġis Ġoff ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġstart Monitoring () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Handler . post ( monitor Task ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġstart Foreground () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent : ĠPending Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠMainActivity :: class . java ). let Ġ{ Ġnotification Intent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getActivity ( this , Ġ 0 , Ġnotification Intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHAN NEL _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHAN NEL _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . light Color Ġ= ĠColor . BLUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . lock screen Visibility Ġ= ĠNotification . VIS IBILITY _ PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnm Ġ= Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnm . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE M IND ER _ CHANNEL _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE M IND ER _ CHANNEL _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ HIGH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . light Color Ġ= ĠColor . BLUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . lock screen Visibility Ġ= ĠNotification . VIS IBILITY _ PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnm Ġ= Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnm . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification : ĠNotification Ġ= ĠNotification Compat . Builder ( this , ĠCHAN NEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title (" Mask ĠMonitoring ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text (" Service Ġis Ġrunning Ġin Ġbackground ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . mip map . ic _ launcher _ foreground ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ticker ( getText ( R . string . app _ name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( ONGO ING _ NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġupdate Locations ( safe Zones : ĠArrayList < Zone >, Ġis Safe : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ACTION _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" zones ", Ġsafe Zones ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" safe ", Ġis Safe ) ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( intent ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġexecute Classification ( images : ĠMutable List < Bitmap >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclassification Ġ= ĠImage Classification () ĊĠĠĠĠĠĠĠ Ġclassification . set Module ( classification Module !! ) ĊĠĠĠĠĠĠĠ Ġclassification . set Callback ( object Ġ: ĠOn EventListener < Classification Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( e : Ġjava . lang . Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ERROR ĠCL AS SIF ICATION : Ġ" Ġ+ Ġe !!. message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( result : ĠClassification Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Ready ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ACTION _ RESULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" image ", Ġresult . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" class ", Ġresult . classification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" accuracy ", Ġresult . accuracy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" passed ", Ġresult . accuracy Ġ>= ĠCONF ID ENCE _ THRESHOLD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Broadcast ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcls Ġ= Ġintent . getInt Extra (" class ", Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cls Ġ=== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Intent Ġ= ĠIntent ( application Context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Intent . add Category ( Intent . CATEGORY _ LA UNCH ER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Intent . action Ġ= ĠIntent . ACTION _ MAIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Intent . flags Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TOP Ġor ĠIntent . FLAG _ ACTIVITY _ SINGLE _ TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Intent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPending Intent . getActivity ( application Context , Ġ 0 , Ġnotification Intent , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Builder Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Compat . Builder ( application Context , ĠRE M IND ER _ CHANNEL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Defaults ( Notification . DEFAULT _ SOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . mip map . ic _ launcher _ foreground ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( result Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title (" MASK ĠRE M IND ER Ġ!!! ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text (" Please ĠW ear Ġa ĠMask Ġto ĠHelp ĠProt ect ĠYou ĠAg aints ĠCor onav irus ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Compat . PRIORITY _ HIGH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Category ( Notification Compat . CATEGORY _ REM IND ER ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . notify ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE M IND ER _ NOTIFICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Builder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . cancel ( REM IND ER _ NOTIFICATION _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġclassification . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . max ( images . size Ġ- ĠTOT AL _ CAP UT RE _ PROC ES SED , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Cam Service " ĊĊĠĠĠĠĠĠĠ Ġval ĠACTION _ PRE PARE D Ġ= Ġ" pak aim ask er . action . PRE PARE D " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ STOP PED Ġ= Ġ" pak aim ask er . action . STOP PED " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ RESULT Ġ= Ġ" pak aim ask er . action . RESULT " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ LOCATION Ġ= Ġ" pak aim ask er . action . LOCATION " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ MONITOR Ġ= Ġ" pak aim ask er . action . MONITOR " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ ADD _ SAFE ZONE Ġ= Ġ" pak aim ask er . action . ADD _ SAFE ZONE " ĊĠĠĠĠĠĠĠ Ġval ĠACTION _ DEL _ SAFE ZONE Ġ= Ġ" pak aim ask er . action . DEL _ SAFE ZONE " ĊĊĠĠĠĠĠĠĠ Ġval ĠCHAN NEL _ ID Ġ= Ġ" cam _ service _ channel _ id " ĊĠĠĠĠĠĠĠ Ġval ĠCHAN NEL _ NAME Ġ= Ġ" cam _ service _ channel _ name " ĊĠĠĠĠĠĠĠ Ġval ĠON GO ING _ NOTIFICATION _ ID Ġ= Ġ 6 6 6 0 ĊĊĠĠĠĠĠĠĠ Ġval ĠRE M IND ER _ CHANNEL _ ID Ġ= Ġ" cam _ service _ reminder _ channel _ id " ĊĠĠĠĠĠĠĠ Ġval ĠRE M IND ER _ CHANNEL _ NAME Ġ= Ġ" cam _ service _ reminder _ channel _ name " ĊĠĠĠĠĠĠĠ Ġval ĠRE M IND ER _ NOTIFICATION _ ID Ġ= Ġ 6 6 6 5 ĊĠĠĠ Ġ} Ċ }