remove :core:main dependency

This commit is contained in:
Milos Kozak 2022-11-28 17:09:07 +01:00
parent 146e2a8559
commit 1a135087fc
21 changed files with 122 additions and 115 deletions

View file

@ -20,24 +20,24 @@ import info.nightscout.androidaps.receivers.BTReceiver
import info.nightscout.androidaps.receivers.ChargingStateReceiver import info.nightscout.androidaps.receivers.ChargingStateReceiver
import info.nightscout.androidaps.receivers.KeepAliveWorker import info.nightscout.androidaps.receivers.KeepAliveWorker
import info.nightscout.androidaps.receivers.TimeDateOrTZChangeReceiver import info.nightscout.androidaps.receivers.TimeDateOrTZChangeReceiver
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.implementation.lifecycle.ProcessLifecycleListener
import info.nightscout.core.ui.locale.LocaleHelper import info.nightscout.core.ui.locale.LocaleHelper
import info.nightscout.implementation.receivers.NetworkChangeReceiver
import info.nightscout.interfaces.versionChecker.VersionCheckerUtils
import info.nightscout.database.entities.TherapyEvent import info.nightscout.database.entities.TherapyEvent
import info.nightscout.database.entities.UserEntry import info.nightscout.database.entities.UserEntry
import info.nightscout.database.impl.AppRepository import info.nightscout.database.impl.AppRepository
import info.nightscout.database.impl.transactions.InsertIfNewByTimestampTherapyEventTransaction import info.nightscout.database.impl.transactions.InsertIfNewByTimestampTherapyEventTransaction
import info.nightscout.database.impl.transactions.VersionChangeTransaction import info.nightscout.database.impl.transactions.VersionChangeTransaction
import info.nightscout.implementation.db.CompatDBHelper import info.nightscout.implementation.db.CompatDBHelper
import info.nightscout.implementation.lifecycle.ProcessLifecycleListener
import info.nightscout.implementation.plugin.PluginStore import info.nightscout.implementation.plugin.PluginStore
import info.nightscout.implementation.receivers.NetworkChangeReceiver
import info.nightscout.interfaces.Config import info.nightscout.interfaces.Config
import info.nightscout.interfaces.ConfigBuilder import info.nightscout.interfaces.ConfigBuilder
import info.nightscout.interfaces.LocalAlertUtils import info.nightscout.interfaces.LocalAlertUtils
import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.versionChecker.VersionCheckerUtils
import info.nightscout.plugins.general.overview.notifications.NotificationStore import info.nightscout.plugins.general.overview.notifications.NotificationStore
import info.nightscout.plugins.general.themes.ThemeSwitcherPlugin import info.nightscout.plugins.general.themes.ThemeSwitcherPlugin
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
@ -74,7 +74,7 @@ class MainApp : DaggerApplication() {
@Inject lateinit var dateUtil: DateUtil @Inject lateinit var dateUtil: DateUtil
@Suppress("unused") @Inject lateinit var staticInjector: info.nightscout.plugins.aps.utils.StaticInjector// TODO avoid , here fake only to initialize @Suppress("unused") @Inject lateinit var staticInjector: info.nightscout.plugins.aps.utils.StaticInjector// TODO avoid , here fake only to initialize
@Inject lateinit var uel: UserEntryLogger @Inject lateinit var uel: UserEntryLogger
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper @Inject lateinit var activityNames: ActivityNames
@Inject lateinit var notificationStore: NotificationStore @Inject lateinit var notificationStore: NotificationStore
@Inject lateinit var processLifecycleListener: Provider<ProcessLifecycleListener> @Inject lateinit var processLifecycleListener: Provider<ProcessLifecycleListener>
@Inject lateinit var profileSwitchPlugin: ThemeSwitcherPlugin @Inject lateinit var profileSwitchPlugin: ThemeSwitcherPlugin
@ -247,7 +247,7 @@ class MainApp : DaggerApplication() {
override fun onTerminate() { override fun onTerminate() {
aapsLogger.debug(LTag.CORE, "onTerminate") aapsLogger.debug(LTag.CORE, "onTerminate")
unregisterActivityLifecycleCallbacks(activityMonitor) unregisterActivityLifecycleCallbacks(activityMonitor)
alarmSoundServiceHelper.stopService(this, "onTerminate") activityNames.stopAlarm("onTerminate")
super.onTerminate() super.onTerminate()
} }
} }

View file

@ -12,9 +12,10 @@ import info.nightscout.androidaps.R
import info.nightscout.androidaps.activities.HistoryBrowseActivity import info.nightscout.androidaps.activities.HistoryBrowseActivity
import info.nightscout.androidaps.activities.MyPreferenceFragment import info.nightscout.androidaps.activities.MyPreferenceFragment
import info.nightscout.androidaps.activities.PreferencesActivity import info.nightscout.androidaps.activities.PreferencesActivity
import info.nightscout.core.services.AlarmSoundService
import info.nightscout.configuration.activities.SingleFragmentActivity import info.nightscout.configuration.activities.SingleFragmentActivity
import info.nightscout.core.events.EventNewNotification import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.services.AlarmSoundService
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.ui.toast.ToastUtils
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.nsclient.NSAlarm import info.nightscout.interfaces.nsclient.NSAlarm
@ -41,7 +42,9 @@ import info.nightscout.ui.dialogs.WizardDialog
import javax.inject.Inject import javax.inject.Inject
class ActivityNamesImpl @Inject constructor( class ActivityNamesImpl @Inject constructor(
private val rxBus: RxBus private val rxBus: RxBus,
private val injector: HasAndroidInjector,
private val alarmSoundServiceHelper: AlarmSoundServiceHelper
) : ActivityNames { ) : ActivityNames {
override val mainActivity: Class<*> = MainActivity::class.java override val mainActivity: Class<*> = MainActivity::class.java
@ -177,9 +180,30 @@ class ActivityNamesImpl @Inject constructor(
rxBus.send(EventNewNotification(NotificationWithAction(injector, nsAlarm))) rxBus.send(EventNewNotification(NotificationWithAction(injector, nsAlarm)))
} }
override fun addNotificationWithAction(id: Int, text: String, level: Int, buttonText: Int, action: Runnable, @RawRes soundId: Int?, date: Long) {
rxBus.send(
EventNewNotification(
NotificationWithAction(injector, id, text, level)
.action(buttonText, action)
.also {
it.date = date
it.soundId = soundId
}
)
)
}
override fun showToastAndNotification(ctx: Context?, string: String?, soundID: Int) { override fun showToastAndNotification(ctx: Context?, string: String?, soundID: Int) {
ToastUtils.showToastInUiThread(ctx, string) ToastUtils.showToastInUiThread(ctx, string)
ToastUtils.playSound(ctx, soundID) ToastUtils.playSound(ctx, soundID)
addNotification(Notification.TOAST_ALARM, string!!, Notification.URGENT) addNotification(Notification.TOAST_ALARM, string!!, Notification.URGENT)
} }
override fun startAlarm(@RawRes sound: Int, reason: String) {
alarmSoundServiceHelper.startAlarm(sound, reason)
}
override fun stopAlarm(reason: String) {
alarmSoundServiceHelper.stopAlarm(reason)
}
} }

View file

@ -5,12 +5,14 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.ServiceConnection import android.content.ServiceConnection
import android.os.IBinder import android.os.IBinder
import androidx.annotation.RawRes
import info.nightscout.interfaces.NotificationHolder import info.nightscout.interfaces.NotificationHolder
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.rx.logging.LTag import info.nightscout.rx.logging.LTag
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
import dagger.Lazy
/* /*
This code replaces following This code replaces following
@ -25,10 +27,11 @@ import javax.inject.Singleton
@Singleton @Singleton
class AlarmSoundServiceHelper @Inject constructor( class AlarmSoundServiceHelper @Inject constructor(
private val aapsLogger: AAPSLogger, private val aapsLogger: AAPSLogger,
private val notificationHolder: NotificationHolder private val notificationHolder: Lazy<NotificationHolder>,
private val context: Context
) { ) {
fun startAlarm(context: Context, sound: Int, reason: String) { fun startAlarm(@RawRes sound: Int, reason: String) {
aapsLogger.debug(LTag.CORE, "Starting alarm from $reason") aapsLogger.debug(LTag.CORE, "Starting alarm from $reason")
val connection = object : ServiceConnection { val connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName?, service: IBinder?) { override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
@ -41,7 +44,7 @@ class AlarmSoundServiceHelper @Inject constructor(
// This is the key: Without waiting Android Framework to call this method // This is the key: Without waiting Android Framework to call this method
// inside Service.onCreate(), immediately call here to post the notification. // inside Service.onCreate(), immediately call here to post the notification.
alarmSoundService.startForeground(notificationHolder.notificationID, notificationHolder.notification) alarmSoundService.startForeground(notificationHolder.get().notificationID, notificationHolder.get().notification)
// Release the connection to prevent leaks. // Release the connection to prevent leaks.
context.unbindService(this) context.unbindService(this)
@ -62,13 +65,13 @@ class AlarmSoundServiceHelper @Inject constructor(
} }
} }
fun stopService(context: Context, reason: String) { fun stopAlarm(reason: String) {
aapsLogger.debug(LTag.CORE, "Stopping alarm from $reason") aapsLogger.debug(LTag.CORE, "Stopping alarm from $reason")
val alarm = Intent(context, AlarmSoundService::class.java) val alarm = Intent(context, AlarmSoundService::class.java)
context.stopService(alarm) context.stopService(alarm)
} }
private fun getServiceIntent(context: Context, sound: Int): Intent { private fun getServiceIntent(context: Context, @RawRes sound: Int): Intent {
val alarm = Intent(context, AlarmSoundService::class.java) val alarm = Intent(context, AlarmSoundService::class.java)
alarm.putExtra(AlarmSoundService.SOUND_ID, sound) alarm.putExtra(AlarmSoundService.SOUND_ID, sound)
return alarm return alarm

View file

@ -10,7 +10,6 @@
<string name="format_mins">%1$d mins</string> <string name="format_mins">%1$d mins</string>
<string name="objectives">Objectives</string> <string name="objectives">Objectives</string>
<string name="please_wait">Please wait…</string> <string name="please_wait">Please wait…</string>
<string name="mute">Mute</string>
<string name="stop">Stop</string> <string name="stop">Stop</string>
<string name="carbs">Carbs</string> <string name="carbs">Carbs</string>
<string name="invalid_profile">Invalid profile!</string> <string name="invalid_profile">Invalid profile!</string>
@ -202,7 +201,6 @@
<!-- PumpEnactResult--> <!-- PumpEnactResult-->
<string name="enacted">Enacted</string> <string name="enacted">Enacted</string>
<string name="comment">Comment</string> <string name="comment">Comment</string>
<string name="success">Success</string>
<string name="percent">Percent</string> <string name="percent">Percent</string>
<string name="absolute">Absolute</string> <string name="absolute">Absolute</string>
<string name="waitingforpumpresult">Waiting for result</string> <string name="waitingforpumpresult">Waiting for result</string>
@ -228,8 +226,6 @@
<!-- Ntp--> <!-- Ntp-->
<string name="timedetection">Time detection</string> <string name="timedetection">Time detection</string>
<string name="mute5min">Mute for 5 minutes</string>
<!-- User Entry --> <!-- User Entry -->
<string name="uel_bolus">BOLUS</string> <string name="uel_bolus">BOLUS</string>
<string name="uel_bolus_calculator">BOLUS CALCULATOR</string> <string name="uel_bolus_calculator">BOLUS CALCULATOR</string>

View file

@ -67,5 +67,9 @@ interface ActivityNames {
fun addNotificationWithSound(id: Int, text: String, level: Int, @RawRes soundId: Int) fun addNotificationWithSound(id: Int, text: String, level: Int, @RawRes soundId: Int)
fun addNotificationValidTo(id: Int, date: Long, text: String, level: Int, validTo: Long) fun addNotificationValidTo(id: Int, date: Long, text: String, level: Int, validTo: Long)
fun addNotificationWithAction(injector: HasAndroidInjector, nsAlarm: NSAlarm) fun addNotificationWithAction(injector: HasAndroidInjector, nsAlarm: NSAlarm)
fun addNotificationWithAction(id: Int, text: String, level: Int, buttonText: Int, action: Runnable, @RawRes soundId: Int? = null, date: Long = System.currentTimeMillis())
fun showToastAndNotification(ctx: Context?, string: String?, @RawRes soundID: Int) fun showToastAndNotification(ctx: Context?, string: String?, @RawRes soundID: Int)
fun startAlarm(@RawRes sound: Int, reason: String)
fun stopAlarm(reason: String)
} }

View file

@ -42,7 +42,9 @@
<string name="pump">Pump</string> <string name="pump">Pump</string>
<string name="missed_bg_readings">Missed BG readings</string> <string name="missed_bg_readings">Missed BG readings</string>
<string name="treatments_iob_label_string">IOB:</string> <string name="treatments_iob_label_string">IOB:</string>
<string name="mute5min">Mute for 5 minutes</string>
<string name="mute">Mute</string>
<string name="success">Success</string>
<!-- Protection--> <!-- Protection-->
<string name="unlock_settings">Unlock settings</string> <string name="unlock_settings">Unlock settings</string>

View file

@ -320,7 +320,7 @@ public class InsightAlertService extends DaggerService implements InsightConnect
case ACTIVE: case ACTIVE:
Intent muteIntent = new Intent(this, InsightAlertService.class).putExtra("command", "mute"); Intent muteIntent = new Intent(this, InsightAlertService.class).putExtra("command", "mute");
PendingIntent mutePendingIntent = PendingIntent.getService(this, 1, muteIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent mutePendingIntent = PendingIntent.getService(this, 1, muteIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
notificationBuilder.addAction(0, rh.gs(R.string.mute_alert), mutePendingIntent); notificationBuilder.addAction(0, rh.gs(R.string.mute), mutePendingIntent);
case SNOOZED: case SNOOZED:
Intent confirmIntent = new Intent(this, InsightAlertService.class).putExtra("command", "confirm"); Intent confirmIntent = new Intent(this, InsightAlertService.class).putExtra("command", "confirm");
PendingIntent confirmPendingIntent = PendingIntent.getService(this, 2, confirmIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent confirmPendingIntent = PendingIntent.getService(this, 2, confirmIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);

View file

@ -61,7 +61,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:onClick="muteClicked" android:onClick="muteClicked"
android:text="@string/mute_alert" /> android:text="@string/mute" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/confirm" android:id="@+id/confirm"

View file

@ -58,7 +58,6 @@
<string name="short_status_tdd">TDD: %1$.2f</string> <string name="short_status_tdd">TDD: %1$.2f</string>
<string name="short_status_reservoir">Reser.: %1$.2f U</string> <string name="short_status_reservoir">Reser.: %1$.2f U</string>
<string name="short_status_battery">Batt.: %1$d%%</string> <string name="short_status_battery">Batt.: %1$d%%</string>
<string name="mute_alert">Mute</string>
<string name="release_software_version">Release software version</string> <string name="release_software_version">Release software version</string>
<string name="ui_processor_software_version">UI processor software version</string> <string name="ui_processor_software_version">UI processor software version</string>
<string name="pc_processor_software_version">PC processor software version</string> <string name="pc_processor_software_version">PC processor software version</string>

View file

@ -12,10 +12,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.interfaces.NotificationHolder import info.nightscout.interfaces.NotificationHolder
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.ui.IconsProvider import info.nightscout.interfaces.ui.IconsProvider
import info.nightscout.plugins.R import info.nightscout.plugins.R
import info.nightscout.plugins.databinding.OverviewNotificationItemBinding import info.nightscout.plugins.databinding.OverviewNotificationItemBinding
@ -36,7 +36,7 @@ class NotificationStore @Inject constructor(
private val rh: ResourceHelper, private val rh: ResourceHelper,
private val context: Context, private val context: Context,
private val iconsProvider: IconsProvider, private val iconsProvider: IconsProvider,
private val alarmSoundServiceHelper: AlarmSoundServiceHelper, private val activityNames: ActivityNames,
private val dateUtil: DateUtil, private val dateUtil: DateUtil,
private val notificationHolder: NotificationHolder, private val notificationHolder: NotificationHolder,
private val activePlugin: ActivePlugin private val activePlugin: ActivePlugin
@ -69,7 +69,7 @@ class NotificationStore @Inject constructor(
store.add(n) store.add(n)
if (sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, true) && n !is NotificationWithAction) if (sp.getBoolean(R.string.key_raise_notifications_as_android_notifications, true) && n !is NotificationWithAction)
raiseSystemNotification(n) raiseSystemNotification(n)
if (n.soundId != null && n.soundId != 0) alarmSoundServiceHelper.startAlarm(context, n.soundId!!, n.text) if (n.soundId != null && n.soundId != 0) activityNames.startAlarm(n.soundId!!, n.text)
Collections.sort(store, NotificationComparator()) Collections.sort(store, NotificationComparator())
return true return true
} }
@ -78,7 +78,7 @@ class NotificationStore @Inject constructor(
fun remove(id: Int): Boolean { fun remove(id: Int): Boolean {
for (i in store.indices) { for (i in store.indices) {
if (store[i].id == id) { if (store[i].id == id) {
if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context, "Removed " + store[i].text) if (store[i].soundId != null) activityNames.stopAlarm("Removed " + store[i].text)
aapsLogger.debug(LTag.NOTIFICATION, "Notification removed: " + store[i].text) aapsLogger.debug(LTag.NOTIFICATION, "Notification removed: " + store[i].text)
store.removeAt(i) store.removeAt(i)
return true return true
@ -93,7 +93,7 @@ class NotificationStore @Inject constructor(
while (i < store.size) { while (i < store.size) {
val n = store[i] val n = store[i]
if (n.validTo != 0L && n.validTo < System.currentTimeMillis()) { if (n.validTo != 0L && n.validTo < System.currentTimeMillis()) {
if (store[i].soundId != null) alarmSoundServiceHelper.stopService(context, "Expired " + store[i].text) if (store[i].soundId != null) activityNames.stopAlarm("Expired " + store[i].text)
aapsLogger.debug(LTag.NOTIFICATION, "Notification expired: " + store[i].text) aapsLogger.debug(LTag.NOTIFICATION, "Notification expired: " + store[i].text)
store.removeAt(i) store.removeAt(i)
i-- i--

View file

@ -70,9 +70,10 @@ class NotificationWithAction constructor(
} }
} }
fun action(buttonText: Int, action: Runnable) { fun action(buttonText: Int, action: Runnable): NotificationWithAction {
this.buttonText = buttonText this.buttonText = buttonText
this.action = action this.action = action
return this
} }
} }

View file

@ -7,14 +7,12 @@ import info.nightscout.core.extensions.convertedToAbsolute
import info.nightscout.core.extensions.toStringShort import info.nightscout.core.extensions.toStringShort
import info.nightscout.core.extensions.valueToUnits import info.nightscout.core.extensions.valueToUnits
import info.nightscout.core.extensions.valueToUnitsString import info.nightscout.core.extensions.valueToUnitsString
import info.nightscout.core.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.core.graph.data.GlucoseValueDataPoint import info.nightscout.core.graph.data.GlucoseValueDataPoint
import info.nightscout.core.iob.generateCOBString import info.nightscout.core.iob.generateCOBString
import info.nightscout.core.iob.iobCobCalculator.GlucoseStatusProvider
import info.nightscout.core.iob.round import info.nightscout.core.iob.round
import info.nightscout.core.ui.toast.ToastUtils import info.nightscout.core.ui.toast.ToastUtils
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.receivers.ReceiverStatusStore
import info.nightscout.core.wizard.BolusWizard import info.nightscout.core.wizard.BolusWizard
import info.nightscout.core.wizard.QuickWizard import info.nightscout.core.wizard.QuickWizard
import info.nightscout.core.wizard.QuickWizardEntry import info.nightscout.core.wizard.QuickWizardEntry
@ -38,6 +36,7 @@ import info.nightscout.interfaces.constraints.Constraint
import info.nightscout.interfaces.constraints.Constraints import info.nightscout.interfaces.constraints.Constraints
import info.nightscout.interfaces.iob.IobCobCalculator import info.nightscout.interfaces.iob.IobCobCalculator
import info.nightscout.interfaces.logging.UserEntryLogger import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.plugin.PluginBase import info.nightscout.interfaces.plugin.PluginBase
import info.nightscout.interfaces.profile.DefaultValueHelper import info.nightscout.interfaces.profile.DefaultValueHelper
@ -46,11 +45,12 @@ import info.nightscout.interfaces.profile.ProfileFunction
import info.nightscout.interfaces.pump.DetailedBolusInfo import info.nightscout.interfaces.pump.DetailedBolusInfo
import info.nightscout.interfaces.queue.Callback import info.nightscout.interfaces.queue.Callback
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.receivers.ReceiverStatusStore
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.DecimalFormatter import info.nightscout.interfaces.utils.DecimalFormatter
import info.nightscout.interfaces.utils.HardLimits import info.nightscout.interfaces.utils.HardLimits
import info.nightscout.interfaces.utils.TrendCalculator import info.nightscout.interfaces.utils.TrendCalculator
import info.nightscout.plugins.R import info.nightscout.plugins.R
import info.nightscout.interfaces.nsclient.ProcessedDeviceStatusData
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.events.EventMobileToWear import info.nightscout.rx.events.EventMobileToWear
@ -101,7 +101,7 @@ class DataHandlerMobile @Inject constructor(
private val activePlugin: ActivePlugin, private val activePlugin: ActivePlugin,
private val commandQueue: CommandQueue, private val commandQueue: CommandQueue,
private val fabricPrivacy: FabricPrivacy, private val fabricPrivacy: FabricPrivacy,
private val alarmSoundServiceHelper: AlarmSoundServiceHelper private val activityNames: ActivityNames
) { ) {
private val disposable = CompositeDisposable() private val disposable = CompositeDisposable()
@ -293,7 +293,7 @@ class DataHandlerMobile @Inject constructor(
.observeOn(aapsSchedulers.io) .observeOn(aapsSchedulers.io)
.subscribe({ .subscribe({
aapsLogger.debug(LTag.WEAR, "SnoozeAlert received $it from ${it.sourceNodeId}") aapsLogger.debug(LTag.WEAR, "SnoozeAlert received $it from ${it.sourceNodeId}")
alarmSoundServiceHelper.stopService(context, "Muted from wear") activityNames.stopAlarm("Muted from wear")
}, fabricPrivacy::logException) }, fabricPrivacy::logException)
disposable += rxBus disposable += rxBus
.toObservable(EventData.WearException::class.java) .toObservable(EventData.WearException::class.java)

View file

@ -25,11 +25,12 @@ dependencies {
implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared')
implementation project(':database:entities') implementation project(':database:entities')
implementation project(':database:impl') implementation project(':database:impl')
implementation project(':core:core-main')
implementation project(':core:interfaces') implementation project(':core:interfaces')
implementation project(':core:utils') implementation project(':core:utils')
implementation project(':core:ui') implementation project(':core:ui')
api 'com.google.guava:guava:31.1-jre'
//RxAndroidBle //RxAndroidBle
implementation "com.polidea.rxandroidble3:rxandroidble:1.17.2" implementation "com.polidea.rxandroidble3:rxandroidble:1.17.2"
implementation "com.jakewharton.rx3:replaying-share:3.0.0" implementation "com.jakewharton.rx3:replaying-share:3.0.0"

View file

@ -1,23 +0,0 @@
package info.nightscout.androidaps.plugins.pump.eopatch
import info.nightscout.interfaces.notifications.Notification
import info.nightscout.rx.logging.AAPSLogger
import javax.inject.Inject
class EONotification constructor() : Notification() {
@Inject lateinit var aapsLogger: AAPSLogger
constructor(id: Int, text: String, level: Int) : this() {
this.id = id
date = System.currentTimeMillis()
this.text = text
this.level = level
}
fun action(buttonText: Int, action: Runnable) {
this.buttonText = buttonText
this.action = action
}
}

View file

@ -9,7 +9,6 @@ import info.nightscout.androidaps.plugins.pump.eopatch.code.BolusExDuration
import info.nightscout.androidaps.plugins.pump.eopatch.code.SettingKeys import info.nightscout.androidaps.plugins.pump.eopatch.code.SettingKeys
import info.nightscout.androidaps.plugins.pump.eopatch.ui.EopatchOverviewFragment import info.nightscout.androidaps.plugins.pump.eopatch.ui.EopatchOverviewFragment
import info.nightscout.androidaps.plugins.pump.eopatch.vo.TempBasal import info.nightscout.androidaps.plugins.pump.eopatch.vo.TempBasal
import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.PluginDescription import info.nightscout.interfaces.plugin.PluginDescription
@ -27,6 +26,7 @@ import info.nightscout.interfaces.pump.defs.PumpDescription
import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.pump.defs.PumpType
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.queue.CustomCommand import info.nightscout.interfaces.queue.CustomCommand
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.interfaces.utils.TimeChangeType import info.nightscout.interfaces.utils.TimeChangeType
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
@ -60,7 +60,8 @@ class EopatchPumpPlugin @Inject constructor(
private val pumpSync: PumpSync, private val pumpSync: PumpSync,
private val patchManager: IPatchManager, private val patchManager: IPatchManager,
private val alarmManager: IAlarmManager, private val alarmManager: IAlarmManager,
private val preferenceManager: IPreferenceManager private val preferenceManager: IPreferenceManager,
private val activityNames: ActivityNames
) : PumpPluginBase( ) : PumpPluginBase(
PluginDescription() PluginDescription()
.mainType(PluginType.PUMP) .mainType(PluginType.PUMP)
@ -203,7 +204,7 @@ class EopatchPumpPlugin @Inject constructor(
disposable.dispose() disposable.dispose()
aapsLogger.info(LTag.PUMP, "Basal Profile was set: ${isSuccess ?: false}") aapsLogger.info(LTag.PUMP, "Basal Profile was set: ${isSuccess ?: false}")
if (isSuccess == true) { if (isSuccess == true) {
rxBus.send(EventNewNotification(Notification(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60))) activityNames.addNotificationValidFor(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60)
return PumpEnactResult(injector).success(true).enacted(true) return PumpEnactResult(injector).success(true).enacted(true)
} else { } else {
return PumpEnactResult(injector) return PumpEnactResult(injector)
@ -212,7 +213,7 @@ class EopatchPumpPlugin @Inject constructor(
} else { } else {
preferenceManager.getNormalBasalManager().setNormalBasal(profile) preferenceManager.getNormalBasalManager().setNormalBasal(profile)
preferenceManager.flushNormalBasalManager() preferenceManager.flushNormalBasalManager()
rxBus.send(EventNewNotification(Notification(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60))) activityNames.addNotificationValidFor(Notification.PROFILE_SET_OK, rh.gs(R.string.profile_set_ok), Notification.INFO, 60)
return PumpEnactResult(injector).success(true).enacted(true) return PumpEnactResult(injector).success(true).enacted(true)
} }
} }

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps.plugins.pump.eopatch.alarm
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import info.nightscout.androidaps.plugins.pump.eopatch.EONotification
import info.nightscout.androidaps.plugins.pump.eopatch.EoPatchRxBus import info.nightscout.androidaps.plugins.pump.eopatch.EoPatchRxBus
import info.nightscout.androidaps.plugins.pump.eopatch.R import info.nightscout.androidaps.plugins.pump.eopatch.R
import info.nightscout.androidaps.plugins.pump.eopatch.alarm.AlarmCode.A005 import info.nightscout.androidaps.plugins.pump.eopatch.alarm.AlarmCode.A005
@ -17,13 +16,13 @@ import info.nightscout.androidaps.plugins.pump.eopatch.code.AlarmCategory
import info.nightscout.androidaps.plugins.pump.eopatch.event.EventEoPatchAlarm import info.nightscout.androidaps.plugins.pump.eopatch.event.EventEoPatchAlarm
import info.nightscout.androidaps.plugins.pump.eopatch.ui.AlarmHelperActivity import info.nightscout.androidaps.plugins.pump.eopatch.ui.AlarmHelperActivity
import info.nightscout.androidaps.plugins.pump.eopatch.vo.Alarms import info.nightscout.androidaps.plugins.pump.eopatch.vo.Alarms
import info.nightscout.core.events.EventNewNotification
import info.nightscout.core.utils.fabric.FabricPrivacy import info.nightscout.core.utils.fabric.FabricPrivacy
import info.nightscout.interfaces.notifications.Notification import info.nightscout.interfaces.notifications.Notification
import info.nightscout.interfaces.plugin.ActivePlugin import info.nightscout.interfaces.plugin.ActivePlugin
import info.nightscout.interfaces.pump.PumpSync import info.nightscout.interfaces.pump.PumpSync
import info.nightscout.interfaces.pump.defs.PumpType import info.nightscout.interfaces.pump.defs.PumpType
import info.nightscout.interfaces.queue.CommandQueue import info.nightscout.interfaces.queue.CommandQueue
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
@ -59,7 +58,7 @@ class AlarmManager @Inject constructor() : IAlarmManager {
@Inject lateinit var sp: SP @Inject lateinit var sp: SP
@Inject lateinit var context: Context @Inject lateinit var context: Context
@Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var aapsSchedulers: AapsSchedulers
@Inject lateinit var activityNames: ActivityNames
@Inject lateinit var pm: IPreferenceManager @Inject lateinit var pm: IPreferenceManager
@Inject lateinit var mAlarmRegistry: IAlarmRegistry @Inject lateinit var mAlarmRegistry: IAlarmRegistry
@ -150,41 +149,50 @@ class AlarmManager @Inject constructor() : IAlarmManager {
context.startActivity(i) context.startActivity(i)
} }
private fun showNotification(alarmCode: AlarmCode, timeOffset: Long = 0L){ private fun showNotification(alarmCode: AlarmCode, timeOffset: Long = 0L) {
var alarmMsg = resourceHelper.gs(alarmCode.resId) var alarmMsg = resourceHelper.gs(alarmCode.resId)
if(alarmCode == B000){ if (alarmCode == B000) {
val expireTimeValue = pm.getPatchWakeupTimestamp() + TimeUnit.HOURS.toMillis(84) val expireTimeValue = pm.getPatchWakeupTimestamp() + TimeUnit.HOURS.toMillis(84)
val expireTimeString = SimpleDateFormat(resourceHelper.gs(R.string.date_format_yyyy_m_d_e_a_hh_mm_comma), Locale.US).format(expireTimeValue) val expireTimeString = SimpleDateFormat(resourceHelper.gs(R.string.date_format_yyyy_m_d_e_a_hh_mm_comma), Locale.US).format(expireTimeValue)
alarmMsg = resourceHelper.gs(alarmCode.resId, expireTimeString) alarmMsg = resourceHelper.gs(alarmCode.resId, expireTimeString)
} }
val notification = EONotification(Notification.EOELOW_PATCH_ALERTS + (alarmCode.aeCode + 10000), alarmMsg, Notification.URGENT) activityNames.addNotificationWithAction(
id = Notification.EOELOW_PATCH_ALERTS + (alarmCode.aeCode + 10000),
notification.action(R.string.confirm) { text = alarmMsg,
compositeDisposable.add( level = Notification.URGENT,
Single.just(isValid(alarmCode)) buttonText = R.string.confirm,
.flatMap { isValid -> action = {
return@flatMap if(isValid) mAlarmProcess.doAction(context, alarmCode) compositeDisposable.add(
else Single.just(IAlarmProcess.ALARM_HANDLED) Single.just(isValid(alarmCode))
} .flatMap { isValid ->
.subscribe { ret -> return@flatMap if (isValid) mAlarmProcess.doAction(context, alarmCode)
if(ret == IAlarmProcess.ALARM_HANDLED){ else Single.just(IAlarmProcess.ALARM_HANDLED)
if(alarmCode == B001){
pumpSync.syncStopTemporaryBasalWithPumpId(
timestamp = dateUtil.now(),
endPumpId = dateUtil.now(),
pumpType = PumpType.EOFLOW_EOPATCH2,
pumpSerial = patchManager.patchConfig.patchSerialNumber
)
} }
updateState(alarmCode, AlarmState.HANDLE) .subscribe { ret ->
}else{ if (ret == IAlarmProcess.ALARM_HANDLED) {
rxBus.send(EventNewNotification(notification)) if (alarmCode == B001) {
} pumpSync.syncStopTemporaryBasalWithPumpId(
}) timestamp = dateUtil.now(),
} endPumpId = dateUtil.now(),
notification.soundId = R.raw.error pumpType = PumpType.EOFLOW_EOPATCH2,
notification.date = pm.getPatchConfig().patchWakeupTimestamp + TimeUnit.SECONDS.toMillis(timeOffset) pumpSerial = patchManager.patchConfig.patchSerialNumber
rxBus.send(EventNewNotification(notification)) )
}
updateState(alarmCode, AlarmState.HANDLE)
} else {
activityNames.addNotification(
id = Notification.EOELOW_PATCH_ALERTS + (alarmCode.aeCode + 10000),
text = alarmMsg,
level = Notification.URGENT
)
}
}
)
},
soundId = R.raw.error,
date = pm.getPatchConfig().patchWakeupTimestamp + TimeUnit.SECONDS.toMillis(timeOffset)
)
} }
private fun updateState(alarmCode: AlarmCode, state: AlarmState){ private fun updateState(alarmCode: AlarmCode, state: AlarmState){

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.pump.eopatch.ui.dialogs package info.nightscout.androidaps.plugins.pump.eopatch.ui.dialogs
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.HandlerThread import android.os.HandlerThread
@ -17,8 +16,8 @@ import info.nightscout.androidaps.plugins.pump.eopatch.bindingadapters.setOnSafe
import info.nightscout.androidaps.plugins.pump.eopatch.ble.IPatchManager import info.nightscout.androidaps.plugins.pump.eopatch.ble.IPatchManager
import info.nightscout.androidaps.plugins.pump.eopatch.databinding.DialogAlarmBinding import info.nightscout.androidaps.plugins.pump.eopatch.databinding.DialogAlarmBinding
import info.nightscout.androidaps.plugins.pump.eopatch.ui.AlarmHelperActivity import info.nightscout.androidaps.plugins.pump.eopatch.ui.AlarmHelperActivity
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.core.ui.R import info.nightscout.core.ui.R
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.AapsSchedulers import info.nightscout.rx.AapsSchedulers
import info.nightscout.rx.bus.RxBus import info.nightscout.rx.bus.RxBus
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
@ -28,7 +27,7 @@ import javax.inject.Inject
class AlarmDialog : DaggerDialogFragment() { class AlarmDialog : DaggerDialogFragment() {
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper @Inject lateinit var activityNames: ActivityNames
@Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var patchManager: IPatchManager @Inject lateinit var patchManager: IPatchManager
@Inject lateinit var rxBus: RxBus @Inject lateinit var rxBus: RxBus
@ -159,16 +158,10 @@ class AlarmDialog : DaggerDialogFragment() {
} }
private fun startAlarm(reason: String) { private fun startAlarm(reason: String) {
if (sound != 0) { if (sound != 0) activityNames.startAlarm(sound, reason)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context?.let { context -> alarmSoundServiceHelper.startAlarm(context, sound, reason) }
}
}
} }
private fun stopAlarm(reason: String) { private fun stopAlarm(reason: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { activityNames.stopAlarm(reason)
context?.let { context -> alarmSoundServiceHelper.stopService(context, reason) }
}
} }
} }

View file

@ -21,9 +21,9 @@ dependencies {
implementation project(':core:core-main') implementation project(':core:core-main')
implementation project(':core:interfaces') implementation project(':core:interfaces')
implementation project(':core:ui') implementation project(':core:ui')
implementation project(':core:utils')
implementation project(':pump:pump-common') implementation project(':pump:pump-common')
implementation project(':pump:pump-core') implementation project(':pump:pump-core')
implementation project(':pump:rileylink') implementation project(':pump:rileylink')
implementation project(path: ':core:utils') testImplementation project(':database:impl')
testImplementation project(path: ':database:impl')
} }

View file

@ -18,8 +18,8 @@ android {
dependencies { dependencies {
implementation project(':core:libraries') implementation project(':core:libraries')
implementation project(':core:core-main')
implementation project(':core:interfaces') implementation project(':core:interfaces')
implementation project(':core:ui')
implementation project(':core:utils') implementation project(':core:utils')
implementation project(':app-wear-shared:shared') implementation project(':app-wear-shared:shared')

View file

@ -1,6 +1,5 @@
package info.nightscout.ui.alertDialogs package info.nightscout.ui.alertDialogs
import android.content.Context
import android.content.res.Resources import android.content.res.Resources
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
@ -11,12 +10,12 @@ import android.view.ViewGroup
import android.view.Window import android.view.Window
import android.view.WindowManager import android.view.WindowManager
import dagger.android.support.DaggerDialogFragment import dagger.android.support.DaggerDialogFragment
import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.core.services.AlarmSoundServiceHelper
import info.nightscout.core.ui.activities.DialogAppCompatActivity
import info.nightscout.core.main.R import info.nightscout.core.main.R
import info.nightscout.core.ui.activities.DialogAppCompatActivity
import info.nightscout.database.entities.UserEntry.Action import info.nightscout.database.entities.UserEntry.Action
import info.nightscout.database.entities.UserEntry.Sources import info.nightscout.database.entities.UserEntry.Sources
import info.nightscout.interfaces.logging.UserEntryLogger
import info.nightscout.interfaces.ui.ActivityNames
import info.nightscout.rx.logging.AAPSLogger import info.nightscout.rx.logging.AAPSLogger
import info.nightscout.shared.utils.T import info.nightscout.shared.utils.T
import info.nightscout.ui.databinding.DialogErrorBinding import info.nightscout.ui.databinding.DialogErrorBinding
@ -24,10 +23,9 @@ import javax.inject.Inject
class ErrorDialog : DaggerDialogFragment() { class ErrorDialog : DaggerDialogFragment() {
@Inject lateinit var alarmSoundServiceHelper: AlarmSoundServiceHelper @Inject lateinit var activityNames: ActivityNames
@Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var aapsLogger: AAPSLogger
@Inject lateinit var uel: UserEntryLogger @Inject lateinit var uel: UserEntryLogger
@Inject lateinit var ctx: Context
var helperActivity: DialogAppCompatActivity? = null var helperActivity: DialogAppCompatActivity? = null
var status: String = "" var status: String = ""
@ -115,9 +113,9 @@ class ErrorDialog : DaggerDialogFragment() {
private fun startAlarm() { private fun startAlarm() {
if (sound != 0) if (sound != 0)
alarmSoundServiceHelper.startAlarm(ctx, sound, "$title:$status") activityNames.startAlarm(sound, "$title:$status")
} }
private fun stopAlarm(reason: String) = private fun stopAlarm(reason: String) =
alarmSoundServiceHelper.stopService(ctx, reason) activityNames.stopAlarm(reason)
} }