package Ġnet . mik soft . covid co fight . domain . ble Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġnet . mik soft . covid co fight . MainActivity Ċ import Ġnet . mik soft . covid co fight . R Ċ import Ġnet . mik soft . covid co fight . data . storage . SharedPreferences Storage Ċ import Ġnet . mik soft . covid co fight . domain . Notifications Controller Ċ import Ġnet . mik soft . covid co fight . presentation . common . show Confirmation Dialog Ċ import Ġnet . mik soft . covid co fight . presentation . common . show Info Dialog Ċ Ċ object ĠGeneral Bluetooth Controller Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠOPER ATION _ KEY Ġ= Ġ" General Bluetooth Controller _ operation " ĊĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ REQUEST _ CODE Ġ= Ġ 1 1 1 1 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivity : ĠMainActivity ĊĠĠĠ Ġprivate Ġvar Ġis Initialized Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġoperation Status ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSharedPreferences Storage . get ( OPERATION _ KEY , Ġdefault Ġ= Ġtrue ) ĊĊĠĠĠ Ġfun Ġinit ( activity : ĠMainActivity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGeneral Bluetooth Controller . activity Ġ= Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġresume Operation (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Operation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Status ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġtoggle Operation (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Operation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! operation Status ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Operation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSharedPreferences Storage . remove ( OPERATION _ KEY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġset Operation ( enabled : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enabled Ġ&& Ġ! can Enable ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSharedPreferences Storage . put ( OPERATION _ KEY , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isInitialized Ġ&& Ġenabled Ġ== Ġoperation Status ) Ġreturn Ġenabled ĊĊĠĠĠĠĠĠĠ Ġval Ġbroadcast Ġ= ĠBroadcast Controller . set Operation ( enabled ) ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠListener Controller . set Operation ( enabled ) ĊĠĠĠĠĠĠĠ ĠNotifications Controller . set Running Notification ( enabled ) ĊĠĠĠĠĠĠĠ ĠSharedPreferences Storage . put ( OPERATION _ KEY , Ġenabled ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( enabled Ġ&& Ġ! broadcast Ġ&& Ġ! listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBroadcast Controller . set Operation ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠListener Controller . set Operation ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications Controller . set Running Notification ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSharedPreferences Storage . put ( OPERATION _ KEY , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Initialized Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Enable (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġcheck For Permissions () Ġ&& Ġcheck For Bluetooth Enabled () ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Permissions (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġneeded Permissions Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . BL U ETO OTH , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . BL U ETO OTH _ ADMIN ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ<= ĠBuild . VERSION _ CODES . P ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin Ġneeded Permissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Permission Missing ( permission )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Permissions Confirmation ( needed Permissions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Bluetooth Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Bluetooth Adapter . getDefault Adapter (). isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenable Bt Intent Ġ= ĠIntent ( Bluetooth Adapter . ACTION _ REQUEST _ ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Bt Intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġis Multiple Ad vertisement Supported () Ġrequires ĠBT Ġto Ġbe Ġenabled ĊĠĠĠĠĠĠĠ Ġif Ġ(! Bluetooth Adapter . getDefault Adapter (). is Multiple Ad vertisement Supported ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBluetooth Adapter . getDefault Adapter (). bluetooth Le Ad vert iser Ġ== Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . show Info Dialog ( R . string . bluetooth _ not _ supported ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Permission Missing ( permission : ĠString ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ( Context Compat . check Self Permission ( activity , Ġpermission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) ĊĊĠĠĠ Ġprivate Ġfun Ġshow Permissions Confirmation ( needed Permissions : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity . show Confirmation Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Res Id Ġ= ĠR . string . permissions _ confirmation _ title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id Ġ= ĠR . string . permissions _ confirmation _ body , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneeded Permissions . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }