From 1cb45605d4c70fdce997e4cbf137ec4512b3d4a9 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Thu, 14 Mar 2024 09:38:49 +0100 Subject: [PATCH 001/242] Upgrade Gradle and Android version --- .idea/gradle.xml | 5 ++--- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 1f8f648a1..d181ac75e 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,10 +4,8 @@ diff --git a/build.gradle b/build.gradle index 237f9244d..d26d01cc8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.1.2' apply false - id 'com.android.library' version '8.1.2' apply false + id 'com.android.application' version '8.3.0' apply false + id 'com.android.library' version '8.3.0' apply false id 'org.jetbrains.kotlin.android' version '1.8.20' apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 403669e71..132b9f038 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Dec 14 15:11:00 CET 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 21a9feac83cd3c1e799b96fb9e48b848a99bcbb5 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Sun, 17 Mar 2024 19:08:06 +0100 Subject: [PATCH 002/242] Libre support for multiple patients --- build.gradle | 2 +- .../glucodatahandler/common/Constants.kt | 1 + .../common/GlucoDataService.kt | 5 ++- .../common/notifier/NotifySource.kt | 3 +- .../common/tasks/LibreViewSourceTask.kt | 45 ++++++++++++++++++- common/src/main/res/values-de/strings.xml | 2 + common/src/main/res/values-pl/strings.xml | 2 + common/src/main/res/values/strings.xml | 2 + .../preferences/SourceFragment.kt | 31 ++++++++++++- mobile/src/main/res/xml/sources.xml | 5 +++ 10 files changed, 92 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index d26d01cc8..0ce233337 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } project.ext.set("versionCode", 26) -project.ext.set("versionName", "0.9.11") +project.ext.set("versionName", "0.9.11.1") project.ext.set("compileSdk", 34) project.ext.set("targetSdk", 33) project.ext.set("minSdk", 26) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index 2fb9a2665..b65d169ac 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -105,6 +105,7 @@ object Constants { const val SHARED_PREF_LIBRE_TOKEN="source_libre_token" const val SHARED_PREF_LIBRE_TOKEN_EXPIRE="source_libre_token_expire" const val SHARED_PREF_LIBRE_REGION="source_libre_region" + const val SHARED_PREF_LIBRE_PATIENT_ID="source_libre_patient_id" const val SHARED_PREF_NIGHTSCOUT_ENABLED="src_ns_enabled" const val SHARED_PREF_NIGHTSCOUT_URL="src_ns_url" diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt index 523b1faf4..93a4c78a4 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt @@ -64,6 +64,7 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { fun start(source: AppSource, context: Context, cls: Class<*>, force: Boolean = false) { if (!running || force) { + Log.v(LOG_ID, "start called") try { appSource = source val serviceIntent = Intent( @@ -80,7 +81,7 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { // default on wear and phone true//sharedPref.getBoolean(Constants.SHARED_PREF_FOREGROUND_SERVICE, true) ) - context.startService(serviceIntent) + context.startForegroundService(serviceIntent) } catch (exc: Exception) { Log.e( LOG_ID, @@ -112,7 +113,7 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { @RequiresApi(Build.VERSION_CODES.Q) override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { try { - Log.d(LOG_ID, "onStartCommand called") + Log.v(LOG_ID, "onStartCommand called") super.onStartCommand(intent, flags, startId) val isForeground = true // intent?.getBooleanExtra(Constants.SHARED_PREF_FOREGROUND_SERVICE, true) --> always use foreground!!! if (isForeground && !isForegroundService && Utils.checkPermission(this, android.Manifest.permission.POST_NOTIFICATIONS, Build.VERSION_CODES.TIRAMISU)) { diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt index 79f4e731f..2fff5a110 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt @@ -14,5 +14,6 @@ enum class NotifySource { SOURCE_STATE_CHANGE, NOTIFIER_CHANGE, IOB_COB_CHANGE, - LOGCAT_REQUEST; + LOGCAT_REQUEST, + PATIENT_DATA_CHANGED; } \ No newline at end of file diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt index cb0987ec1..7755cb63b 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt @@ -3,6 +3,7 @@ package de.michelinside.glucodatahandler.common.tasks import android.content.Context import android.content.SharedPreferences import android.os.Bundle +import android.os.Handler import android.util.Log import de.michelinside.glucodatahandler.common.BuildConfig import de.michelinside.glucodatahandler.common.Constants @@ -13,6 +14,7 @@ import de.michelinside.glucodatahandler.common.SourceState import de.michelinside.glucodatahandler.common.notifier.DataSource import de.michelinside.glucodatahandler.common.notifier.InternalNotifier import de.michelinside.glucodatahandler.common.notifier.NotifySource +import org.json.JSONArray import org.json.JSONObject import java.text.DateFormat import java.text.SimpleDateFormat @@ -32,6 +34,8 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, private var token = "" private var tokenExpire = 0L private var region = "" + private var patientId = "" + val patientData = mutableMapOf() const val server = "https://api.libreview.io" const val region_server = "https://api-%s.libreview.io" const val LOGIN_ENDPOINT = "/llu/auth/login" @@ -243,7 +247,7 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, setLastError(GlucoDataService.context!!.getString(R.string.src_libre_setup_librelink)) return } - val data = array.optJSONObject(0) + val data = getPatientData(array) if(data.has("glucoseMeasurement")) { val glucoseData = data.optJSONObject("glucoseMeasurement") if (glucoseData != null) { @@ -278,6 +282,35 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, } } + private fun getPatientData(dataArray: JSONArray): JSONObject { + if(dataArray.length() != patientData.size) { + // create patientData map + patientData.clear() + for (i in 0 until dataArray.length()) { + val data = dataArray.getJSONObject(i) + if(data.has("patientId") && data.has("firstName") && data.has("lastName")) { + val id = data.getString("patientId") + val name = data.getString("firstName") + " " + data.getString("lastName") + Log.d(LOG_ID, "New patient found: $name with ID: $id") + patientData[id] = name + } + } + Handler(GlucoDataService.context!!.mainLooper).post { + InternalNotifier.notify(GlucoDataService.context!!, NotifySource.PATIENT_DATA_CHANGED, null) + } + } + if(dataArray.length() > 1 && patientId.isNotEmpty()) { + for (i in 0 until dataArray.length()) { + val data = dataArray.getJSONObject(i) + if (data.has("patientId") && data.getString("patientId") == patientId) { + return data + } + } + } + // default: use first one + return dataArray.optJSONObject(0) + } + private fun getConnection(firstCall: Boolean = true) { if (login()) { handleGlucoseResponse(httpGet(getUrl(CONNECTION_ENDPOINT), getHeader())) @@ -287,6 +320,7 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, } override fun checkPreferenceChanged(sharedPreferences: SharedPreferences, key: String?, context: Context): Boolean { + Log.v(LOG_ID, "checkPreferenceChanged called for $key") var trigger = false if (key == null) { user = sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_USER, "")!!.trim() @@ -294,6 +328,7 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, token = sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_TOKEN, "")!! tokenExpire = sharedPreferences.getLong(Constants.SHARED_PREF_LIBRE_TOKEN_EXPIRE, 0L) region = sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_REGION, "")!! + patientId = sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_PATIENT_ID, "")!! InternalNotifier.notify(GlucoDataService.context!!, NotifySource.SOURCE_STATE_CHANGE, null) trigger = true } else { @@ -317,6 +352,14 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, Constants.SHARED_PREF_LIBRE_RECONNECT -> { if (reconnect != sharedPreferences.getBoolean(Constants.SHARED_PREF_LIBRE_RECONNECT, false)) { reconnect = sharedPreferences.getBoolean(Constants.SHARED_PREF_LIBRE_RECONNECT, false) + Log.d(LOG_ID, "Reconnect triggered") + trigger = true + } + } + Constants.SHARED_PREF_LIBRE_PATIENT_ID -> { + if (patientId != sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_PATIENT_ID, "")) { + patientId = sharedPreferences.getString(Constants.SHARED_PREF_LIBRE_PATIENT_ID, "")!! + Log.d(LOG_ID, "PatientID changed to $patientId") trigger = true } } diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 4a04ffc46..3b6e526a4 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -310,5 +310,7 @@ Für alle Zeit und Intervall spezifischen Aufgaben, benötigt die App die Berechtigung für Wecker und Erinnerungen.\nDie App verändert keine vom Benutzer eingerichteten Wecker oder Erinnerung. Sie benötigt die Berechtigung nur für interne Trigger.\nNach dem Drücken von OK leitet die App Sie zur entsprechenden Berechtigungseinstellung weiter. Bitte aktivieren Sie diese Berechtigung für GlucoDataHandler. Berechtigung für Wecker und Erinnerungen Genaue Bearbeitung von Intervallen deaktiviert!!!\nKorrekte Funktionalität von GlucoDataHandler ist nicht gewährleistet!!!\nBitte hier drücken, um zu der entsprechenden Berechtigungseinstellung zu gelangen. + Patient + Wenn der Libre Accout für mehr als einen Patienten verwendet wird, bitte wählen sie den entsprechenden Patienten aus, für den die Daten empfangen werden sollen. diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index a497d0cdc..ce86de948 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -312,5 +312,7 @@ W przypadku wszystkich zadań związanych z czasem i odstępami czasu aplikacja wymaga udzielenia uprawnień do ich obsługi.\nAplikacja nie dodaje ani nie zmienia żadnych alarmów i przypomnień, które ustawił użytkownik. Wymaga jedynie pozwolenia na uruchamianie wewnętrznych wyzwalaczy.\nJeśli naciśniesz OK, otwarte zostaną ustawienia uprawnień, gdzie można je nadać dla GlucoDataHandler. Zezwalaj na ustawianie alarmów i przypomnień Uprawnienie do ustawiania alarmów i przypomnień jest wyłączone!!!\nGlucoDataHandler może nie działać poprawnie!!!\nNaciśnij tutaj, aby przejść bezpośrednio do ustawień. + Patient + If there is more then one patient connected to the libre account, please select the patient receiving the data for. diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 8d1b13de2..2b44fd723 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -325,4 +325,6 @@ For all time/interval related work, this app requires the permission for alarms & reminders.\nIt will not add or change any user reminders, it is only for internal scheduling.\nIf you press OK, you will forward to the permission setting to enable it for GlucoDataHandler. Alarms & reminders permission Schedule exact alarm is disabled!!!\nGlucoDataHandler may not work correct!!!\nPress here to go direct to the permission setting. + Patient + If there is more then one patient connected to the libre account, please select the patient receiving the data for. diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/SourceFragment.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/SourceFragment.kt index b09fe8552..0f1acd7dc 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/SourceFragment.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/SourceFragment.kt @@ -1,5 +1,6 @@ package de.michelinside.glucodatahandler.preferences +import android.content.Context import android.content.SharedPreferences import android.os.Bundle import android.text.InputType @@ -8,11 +9,13 @@ import androidx.preference.* import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.notifier.InternalNotifier +import de.michelinside.glucodatahandler.common.notifier.NotifierInterface import de.michelinside.glucodatahandler.common.notifier.NotifySource import de.michelinside.glucodatahandler.common.tasks.DataSourceTask +import de.michelinside.glucodatahandler.common.tasks.LibreViewSourceTask -class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { +class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener, NotifierInterface { private val LOG_ID = "GDH.SourceFragment" private var settingsChanged = false @@ -33,6 +36,7 @@ class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPre editText.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD } + setupLibrePatientData() } catch (exc: Exception) { Log.e(LOG_ID, "onCreatePreferences exception: " + exc.toString()) } @@ -56,6 +60,7 @@ class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPre try { preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) updateEnableStates(preferenceManager.sharedPreferences!!) + InternalNotifier.addNotifier(requireContext(), this, mutableSetOf(NotifySource.PATIENT_DATA_CHANGED)) super.onResume() } catch (exc: Exception) { Log.e(LOG_ID, "onResume exception: " + exc.toString()) @@ -66,6 +71,7 @@ class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPre Log.d(LOG_ID, "onPause called") try { preferenceManager.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this) + InternalNotifier.remNotifier(requireContext(), this) super.onPause() } catch (exc: Exception) { Log.e(LOG_ID, "onPause exception: " + exc.toString()) @@ -128,4 +134,27 @@ class SourceFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPre Log.e(LOG_ID, "updateEnableStates exception: " + exc.toString()) } } + + private fun setupLibrePatientData() { + try { + val listPreference = findPreference(Constants.SHARED_PREF_LIBRE_PATIENT_ID) + // force "global broadcast" to be the first entry + listPreference!!.entries = LibreViewSourceTask.patientData.values.toTypedArray() + listPreference.entryValues = LibreViewSourceTask.patientData.keys.toTypedArray() + listPreference.isVisible = LibreViewSourceTask.patientData.size > 1 + } catch (exc: Exception) { + Log.e(LOG_ID, "setupLibrePatientData exception: $exc") + } + } + + override fun OnNotifyData(context: Context, dataSource: NotifySource, extras: Bundle?) { + try { + Log.v(LOG_ID, "OnNotifyData called for source $dataSource") + if (dataSource == NotifySource.PATIENT_DATA_CHANGED) + setupLibrePatientData() + } catch (exc: Exception) { + Log.e(LOG_ID, "OnNotifyData exception for source $dataSource: $exc") + } + } + } \ No newline at end of file diff --git a/mobile/src/main/res/xml/sources.xml b/mobile/src/main/res/xml/sources.xml index 8f783812c..c47fdb5e0 100644 --- a/mobile/src/main/res/xml/sources.xml +++ b/mobile/src/main/res/xml/sources.xml @@ -74,6 +74,11 @@ android:summary="@string/src_libre_password_summary" android:inputType="textPassword" app:iconSpaceReserved="false" /> + Date: Wed, 20 Mar 2024 08:53:29 +0100 Subject: [PATCH 003/242] Reset multiple patients --- build.gradle | 2 +- .../common/GlucoDataService.kt | 2 +- .../common/tasks/LibreViewSourceTask.kt | 20 ++++++++++++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 0ce233337..8815dff6f 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } project.ext.set("versionCode", 26) -project.ext.set("versionName", "0.9.11.1") +project.ext.set("versionName", "0.9.11.3") project.ext.set("compileSdk", 34) project.ext.set("targetSdk", 33) project.ext.set("minSdk", 26) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt index 93a4c78a4..35ce73be1 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt @@ -81,7 +81,7 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { // default on wear and phone true//sharedPref.getBoolean(Constants.SHARED_PREF_FOREGROUND_SERVICE, true) ) - context.startForegroundService(serviceIntent) + context.startService(serviceIntent) } catch (exc: Exception) { Log.e( LOG_ID, diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt index 7755cb63b..0d8fc7995 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/tasks/LibreViewSourceTask.kt @@ -71,6 +71,7 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, Log.i(LOG_ID, "reset called") token = "" region = "" + patientData.clear() } private fun checkResponse(body: String?): JSONObject? { @@ -248,6 +249,10 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, return } val data = getPatientData(array) + if (data == null) { + setState(SourceState.NO_NEW_VALUE) + return + } if(data.has("glucoseMeasurement")) { val glucoseData = data.optJSONObject("glucoseMeasurement") if (glucoseData != null) { @@ -282,9 +287,10 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, } } - private fun getPatientData(dataArray: JSONArray): JSONObject { - if(dataArray.length() != patientData.size) { + private fun getPatientData(dataArray: JSONArray): JSONObject? { + if(dataArray.length() > patientData.size) { // create patientData map + val checkPatienId = patientData.isEmpty() && patientId.isEmpty() patientData.clear() for (i in 0 until dataArray.length()) { val data = dataArray.getJSONObject(i) @@ -295,17 +301,25 @@ class LibreViewSourceTask : DataSourceTask(Constants.SHARED_PREF_LIBRE_ENABLED, patientData[id] = name } } + if (checkPatienId && !patientData.keys.contains(patientId)) { + patientId = "" + with (GlucoDataService.sharedPref!!.edit()) { + putString(Constants.SHARED_PREF_LIBRE_PATIENT_ID, "") + apply() + } + } Handler(GlucoDataService.context!!.mainLooper).post { InternalNotifier.notify(GlucoDataService.context!!, NotifySource.PATIENT_DATA_CHANGED, null) } } - if(dataArray.length() > 1 && patientId.isNotEmpty()) { + if(patientId.isNotEmpty()) { for (i in 0 until dataArray.length()) { val data = dataArray.getJSONObject(i) if (data.has("patientId") && data.getString("patientId") == patientId) { return data } } + return null } // default: use first one return dataArray.optJSONObject(0) From 8019ff6224e568beefc3a9590d0174d9ee5e61c7 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Wed, 20 Mar 2024 13:13:31 +0100 Subject: [PATCH 004/242] Lockscreen Wallpaper --- build.gradle | 2 +- .../glucodatahandler/common/Constants.kt | 3 + .../common/utils/BitmapUtils.kt | 16 ++ common/src/main/res/values-de/strings.xml | 5 + common/src/main/res/values-pl/strings.xml | 5 + common/src/main/res/values/strings.xml | 5 + images/LockscreenWallpaper.png | Bin 0 -> 74794 bytes mobile/src/main/AndroidManifest.xml | 1 + .../GlucoDataServiceMobile.kt | 3 + .../widget/LockScreenWallpaper.kt | 158 ++++++++++++++++++ mobile/src/main/res/layout/wallpaper.xml | 121 ++++++++++++++ mobile/src/main/res/xml/preferences.xml | 21 +++ 12 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 images/LockscreenWallpaper.png create mode 100644 mobile/src/main/java/de/michelinside/glucodatahandler/widget/LockScreenWallpaper.kt create mode 100644 mobile/src/main/res/layout/wallpaper.xml diff --git a/build.gradle b/build.gradle index 8815dff6f..21bf2934f 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } project.ext.set("versionCode", 26) -project.ext.set("versionName", "0.9.11.3") +project.ext.set("versionName", "0.9.11.4") project.ext.set("compileSdk", 34) project.ext.set("targetSdk", 33) project.ext.set("minSdk", 26) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index b65d169ac..7de56e9dc 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -115,6 +115,9 @@ object Constants { const val SHARED_PREF_DUMMY_VALUES = "dummy_values" + const val SHARED_PREF_LOCKSCREEN_WP_ENABLED = "lockscreen_enabled" + const val SHARED_PREF_LOCKSCREEN_WP_Y_POS = "lockscreen_y_pos" + // Android Auto const val AA_MEDIA_ICON_STYLE_TREND = "trend" const val AA_MEDIA_ICON_STYLE_GLUCOSE_TREND = "glucose_trend" diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/utils/BitmapUtils.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/utils/BitmapUtils.kt index d8f0207d0..1e38fc608 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/utils/BitmapUtils.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/utils/BitmapUtils.kt @@ -1,5 +1,6 @@ package de.michelinside.glucodatahandler.common.utils +import android.content.res.Resources import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color @@ -15,9 +16,24 @@ import de.michelinside.glucodatahandler.common.GlucoDataService import de.michelinside.glucodatahandler.common.ReceiveData import kotlin.math.abs + object BitmapUtils { private val LOG_ID = "GDH.Utils.Bitmap" + + fun getScreenWidth(): Int { + return Resources.getSystem().displayMetrics.widthPixels + } + + fun getScreenHeight(): Int { + return Resources.getSystem().displayMetrics.heightPixels + } + + fun getScreenDpi(): Int { + return Resources.getSystem().displayMetrics.densityDpi + } + + private fun isShortText(text: String): Boolean = text.length <= (if (text.contains(".")) 3 else 2) private fun calcMaxTextSizeForBitmap(bitmap: Bitmap, text: String, roundTarget: Boolean, maxTextSize: Float, top: Boolean, bold: Boolean): Float { diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 3b6e526a4..bebaa9dc8 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -312,5 +312,10 @@ Genaue Bearbeitung von Intervallen deaktiviert!!!\nKorrekte Funktionalität von GlucoDataHandler ist nicht gewährleistet!!!\nBitte hier drücken, um zu der entsprechenden Berechtigungseinstellung zu gelangen. Patient Wenn der Libre Accout für mehr als einen Patienten verwendet wird, bitte wählen sie den entsprechenden Patienten aus, für den die Daten empfangen werden sollen. + Lockscreen Hintergrund + Aktivieren + Wenn sie den Hintergrund für den Lockscreen aktivieren, erstellt die App einen Hintergrund auf dem Lockscreen, welche den Glucosewert und den Trendpfeil enthält. + Vertikale Position + Vertikale position auf dem Lockscreen:\n0: am oberen Rand des Bildschirms\n100: am unteren Rand des Bildschirms diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index ce86de948..fa6b68ae5 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -314,5 +314,10 @@ Uprawnienie do ustawiania alarmów i przypomnień jest wyłączone!!!\nGlucoDataHandler może nie działać poprawnie!!!\nNaciśnij tutaj, aby przejść bezpośrednio do ustawień. Patient If there is more then one patient connected to the libre account, please select the patient receiving the data for. + Lockscreen Wallpaper + Enable + If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. + Vertical position + Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 2b44fd723..e7231e662 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -327,4 +327,9 @@ Schedule exact alarm is disabled!!!\nGlucoDataHandler may not work correct!!!\nPress here to go direct to the permission setting. Patient If there is more then one patient connected to the libre account, please select the patient receiving the data for. + Lockscreen Wallpaper + Enable + If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. + Vertical position + Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display diff --git a/images/LockscreenWallpaper.png b/images/LockscreenWallpaper.png new file mode 100644 index 0000000000000000000000000000000000000000..d7bba8b70d359d35bf2d18b3f3f5de9b321edd3b GIT binary patch literal 74794 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 literal 0 HcmV?d00001 diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index 4b237cef5..162b31056 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt index 46bd666b7..f96f8c140 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt @@ -15,6 +15,7 @@ import de.michelinside.glucodatahandler.tasker.setWearConnectionState import de.michelinside.glucodatahandler.watch.WatchDrip import de.michelinside.glucodatahandler.widget.FloatingWidget import de.michelinside.glucodatahandler.widget.GlucoseBaseWidget +import de.michelinside.glucodatahandler.widget.LockScreenWallpaper class GlucoDataServiceMobile: GlucoDataService(AppSource.PHONE_APP), NotifierInterface { @@ -57,6 +58,7 @@ class GlucoDataServiceMobile: GlucoDataService(AppSource.PHONE_APP), NotifierInt GlucoseBaseWidget.updateWidgets(applicationContext) WatchDrip.init(applicationContext) floatingWidget.create() + LockScreenWallpaper.create(this) } catch (exc: Exception) { Log.e(LOG_ID, "onCreate exception: " + exc.message.toString() ) } @@ -76,6 +78,7 @@ class GlucoDataServiceMobile: GlucoDataService(AppSource.PHONE_APP), NotifierInt CarModeReceiver.cleanup(applicationContext) WatchDrip.close(applicationContext) floatingWidget.destroy() + LockScreenWallpaper.destroy(this) super.onDestroy() } catch (exc: Exception) { Log.e(LOG_ID, "onDestroy exception: " + exc.message.toString() ) diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/widget/LockScreenWallpaper.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/widget/LockScreenWallpaper.kt new file mode 100644 index 000000000..e3b35b647 --- /dev/null +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/widget/LockScreenWallpaper.kt @@ -0,0 +1,158 @@ +package de.michelinside.glucodatahandler.widget + +import android.app.WallpaperManager +import android.content.Context +import android.content.SharedPreferences +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Paint +import android.graphics.drawable.BitmapDrawable +import android.os.Bundle +import android.util.Log +import de.michelinside.glucodatahandler.common.Constants +import de.michelinside.glucodatahandler.common.GlucoDataService +import de.michelinside.glucodatahandler.common.notifier.InternalNotifier +import de.michelinside.glucodatahandler.common.notifier.NotifierInterface +import de.michelinside.glucodatahandler.common.notifier.NotifySource +import de.michelinside.glucodatahandler.common.utils.BitmapUtils +import kotlin.math.max + + +object LockScreenWallpaper : NotifierInterface, SharedPreferences.OnSharedPreferenceChangeListener { + private val LOG_ID = "GDH.LockScreenWallpaper" + private var enabled = false + private var yPos = 75 + + + fun create(context: Context) { + try { + Log.d(LOG_ID, "create called") + val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) + sharedPref.registerOnSharedPreferenceChangeListener(this) + onSharedPreferenceChanged(sharedPref, null) + } catch (exc: Exception) { + Log.e(LOG_ID, "create exception: " + exc.message.toString() ) + } + } + + fun destroy(context: Context) { + try { + Log.d(LOG_ID, "destroy called") + val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) + sharedPref.unregisterOnSharedPreferenceChangeListener(this) + disable(context) + } catch (exc: Exception) { + Log.e(LOG_ID, "destroy exception: " + exc.message.toString() ) + } + } + + private fun enable(context: Context) { + if (!enabled) { + Log.d(LOG_ID, "enable called") + enabled = true + val filter = mutableSetOf( + NotifySource.BROADCAST, + NotifySource.MESSAGECLIENT, + NotifySource.OBSOLETE_VALUE, + NotifySource.SETTINGS + ) + InternalNotifier.addNotifier(context, this, filter) + updateLockScreen(context) + } + } + + private fun disable(context: Context) { + if (enabled) { + Log.d(LOG_ID, "disable called") + enabled = false + InternalNotifier.remNotifier(context, this) + setWallpaper(null, context) + } + } + + fun updateLockScreen(context: Context) { + try { + Log.v(LOG_ID, "updateLockScreen called - enabled=$enabled") + if (enabled) { + setWallpaper(getBitmapForWallpaper(context), context) + } + } catch (exc: Exception) { + Log.e(LOG_ID, "updateLockScreen exception: " + exc.message.toString() ) + } + } + + private fun setWallpaper(bitmap: Bitmap?, context: Context) { + try { + Log.v(LOG_ID, "updateLockScreen called for bitmap $bitmap") + val wallpaperManager = WallpaperManager.getInstance(context) + if (bitmap != null) { + val wallpaper = createWallpaper(bitmap, context) + wallpaperManager.setBitmap(wallpaper, null, false, WallpaperManager.FLAG_LOCK) + wallpaper?.recycle() + } else { + // remove wallpaper + wallpaperManager.clear() + } + } catch (exc: Exception) { + Log.e(LOG_ID, "updateLockScreen exception: " + exc.message.toString() ) + } + + } + + private fun createWallpaper(bitmap: Bitmap, context: Context): Bitmap? { + try { + Log.v(LOG_ID, "creatWallpaper called") + val screenWidth = BitmapUtils.getScreenWidth() + val screenHeigth = BitmapUtils.getScreenHeight() + val screenDPI = BitmapUtils.getScreenDpi().toFloat() + val wallpaper = Bitmap.createBitmap(screenWidth, screenHeigth, Bitmap.Config.ARGB_8888) + val canvas = Canvas(wallpaper) + val drawable = BitmapDrawable(context.resources, bitmap) + drawable.setBounds(0, 0, screenWidth, screenHeigth) + val xOffset = ((screenWidth-bitmap.width)/2F) //*1.2F-(screenDPI*0.3F) + val yOffset = max(0F, ((screenHeigth-bitmap.height)*yPos/100F)) //-(screenDPI*0.3F)) + Log.d(LOG_ID, "Create wallpaper at x=$xOffset/$screenWidth and y=$yOffset/$screenHeigth DPI=$screenDPI") + canvas.drawBitmap(bitmap, xOffset, yOffset, Paint(Paint.ANTI_ALIAS_FLAG)) + bitmap.recycle() + return wallpaper + } catch (exc: Exception) { + Log.e(LOG_ID, "updateLockScreen exception: " + exc.message.toString() ) + } + return null + } + + private fun getBitmapForWallpaper(context: Context): Bitmap? { + return BitmapUtils.getGlucoseTrendBitmap(width = 400, height = 400) + } + + override fun OnNotifyData(context: Context, dataSource: NotifySource, extras: Bundle?) { + try { + Log.v(LOG_ID, "OnNotifyData called for source $dataSource") + updateLockScreen(context) + } catch (exc: Exception) { + Log.e(LOG_ID, "OnNotifyData exception: " + exc.message.toString() ) + } + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { + try { + Log.v(LOG_ID, "onSharedPreferenceChanged called for key $key") + var changed = false + if (yPos != sharedPreferences.getInt(Constants.SHARED_PREF_LOCKSCREEN_WP_Y_POS, 75)) { + yPos = sharedPreferences.getInt(Constants.SHARED_PREF_LOCKSCREEN_WP_Y_POS, 75) + Log.d(LOG_ID, "New Y pos: $yPos") + changed = true + } + if (enabled != sharedPreferences.getBoolean(Constants.SHARED_PREF_LOCKSCREEN_WP_ENABLED, false)) { + if (sharedPreferences.getBoolean(Constants.SHARED_PREF_LOCKSCREEN_WP_ENABLED, false)) + enable(GlucoDataService.context!!) + else + disable(GlucoDataService.context!!) + } else if (changed) { + updateLockScreen(GlucoDataService.context!!) + } + } catch (exc: Exception) { + Log.e(LOG_ID, "onSharedPreferenceChanged exception: " + exc.message.toString() ) + } + } +} \ No newline at end of file diff --git a/mobile/src/main/res/layout/wallpaper.xml b/mobile/src/main/res/layout/wallpaper.xml new file mode 100644 index 000000000..18606d36f --- /dev/null +++ b/mobile/src/main/res/layout/wallpaper.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mobile/src/main/res/xml/preferences.xml b/mobile/src/main/res/xml/preferences.xml index 606ec5c07..e9399f988 100644 --- a/mobile/src/main/res/xml/preferences.xml +++ b/mobile/src/main/res/xml/preferences.xml @@ -191,6 +191,27 @@ android:title="@string/pref_notification_big_icon" app:iconSpaceReserved="false" /> + + + + Date: Wed, 20 Mar 2024 19:26:09 +0100 Subject: [PATCH 005/242] Refactor startForegroundService --- build.gradle | 2 +- .../glucodatahandler/common/GlucoDataService.kt | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 21bf2934f..8659b2fb6 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } project.ext.set("versionCode", 26) -project.ext.set("versionName", "0.9.11.4") +project.ext.set("versionName", "0.9.11.5") project.ext.set("compileSdk", 34) project.ext.set("targetSdk", 33) project.ext.set("minSdk", 26) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt index 35ce73be1..06abb2708 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/GlucoDataService.kt @@ -63,9 +63,10 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { } fun start(source: AppSource, context: Context, cls: Class<*>, force: Boolean = false) { - if (!running || force) { - Log.v(LOG_ID, "start called") + if (!running) { + Log.v(LOG_ID, "start called (running: $running - foreground: $foreground)") try { + isRunning = true appSource = source val serviceIntent = Intent( context, @@ -81,12 +82,16 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { // default on wear and phone true//sharedPref.getBoolean(Constants.SHARED_PREF_FOREGROUND_SERVICE, true) ) - context.startService(serviceIntent) + if (foreground) + context.startService(serviceIntent) + else + context.startForegroundService(serviceIntent) } catch (exc: Exception) { Log.e( LOG_ID, "start exception: " + exc.message.toString() ) + isRunning = false } } } @@ -200,6 +205,7 @@ abstract class GlucoDataService(source: AppSource) : WearableListenerService() { super.onDestroy() service = null isRunning = false + isForegroundService = false } catch (exc: Exception) { Log.e(LOG_ID, "onDestroy exception: " + exc.toString()) } From e0a886d4b471ecd2a4e14470b242fab52f5b1cc4 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Wed, 20 Mar 2024 21:45:32 +0100 Subject: [PATCH 006/242] Create AlarmHandler --- .../android_auto/CarNotification.kt | 3 +- build.gradle | 2 +- .../glucodatahandler/common/Constants.kt | 2 + .../glucodatahandler/common/ReceiveData.kt | 90 +---------- .../common/WearPhoneConnection.kt | 23 ++- .../common/notification/AlarmHandler.kt | 145 ++++++++++++++++++ .../common/notification/AlarmType.kt | 23 +++ .../common/notifier/NotifySource.kt | 3 +- common/src/main/res/values-de/strings.xml | 1 + common/src/main/res/values-pl/strings.xml | 1 + common/src/main/res/values/strings.xml | 1 + .../glucodatahandler/MainActivity.kt | 6 + .../preferences/AlarmFragment.kt | 90 +++++++++++ .../preferences/AppSettingsActivity.kt | 12 +- .../glucodatahandler/watch/WatchDrip.kt | 21 +-- mobile/src/main/res/menu/menu_items.xml | 7 + mobile/src/main/res/xml/alarms.xml | 6 + .../glucodatahandler/GlucoDataServiceWear.kt | 13 +- 18 files changed, 345 insertions(+), 104 deletions(-) create mode 100644 common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt create mode 100644 common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmType.kt create mode 100644 mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt create mode 100644 mobile/src/main/res/xml/alarms.xml diff --git a/auto/src/main/java/de/michelinside/glucodataauto/android_auto/CarNotification.kt b/auto/src/main/java/de/michelinside/glucodataauto/android_auto/CarNotification.kt index eca2a0265..235e885f1 100644 --- a/auto/src/main/java/de/michelinside/glucodataauto/android_auto/CarNotification.kt +++ b/auto/src/main/java/de/michelinside/glucodataauto/android_auto/CarNotification.kt @@ -18,6 +18,7 @@ import de.michelinside.glucodataauto.GlucoDataServiceAuto import de.michelinside.glucodataauto.R import de.michelinside.glucodatahandler.common.R as CR import de.michelinside.glucodatahandler.common.* +import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.notifier.* import de.michelinside.glucodatahandler.common.utils.BitmapUtils import de.michelinside.glucodatahandler.common.notification.ChannelType @@ -211,7 +212,7 @@ object CarNotification: NotifierInterface, SharedPreferences.OnSharedPreferenceC Log.v(LOG_ID, "Notification has forced by interval or alarm") return true } - if (ReceiveData.getAlarmType() == ReceiveData.AlarmType.VERY_LOW) { + if (ReceiveData.getAlarmType() == AlarmType.VERY_LOW) { Log.v(LOG_ID, "Notification for very low-alarm") forceNextNotify = true // if obsolete or VERY_LOW, the next value is important! return true diff --git a/build.gradle b/build.gradle index 8659b2fb6..2d3503ff1 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } project.ext.set("versionCode", 26) -project.ext.set("versionName", "0.9.11.5") +project.ext.set("versionName", "0.9.11.6") project.ext.set("compileSdk", 34) project.ext.set("targetSdk", 33) project.ext.set("minSdk", 26) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index 7de56e9dc..c90104be5 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -7,12 +7,14 @@ object Constants { const val BATTERY_INTENT_MESSAGE_PATH = "/battery_intent" const val SETTINGS_INTENT_MESSAGE_PATH = "/settings_intent" const val SOURCE_SETTINGS_INTENT_MESSAGE_PATH = "/source_settings_intent" + const val ALARM_SETTINGS_INTENT_MESSAGE_PATH = "/alarm_settings_intent" const val REQUEST_DATA_MESSAGE_PATH = "/request_data_intent" const val REQUEST_LOGCAT_MESSAGE_PATH = "/request_logcat_intent" const val LOGCAT_CHANNEL_PATH = "/logcat_intent" const val GLUCODATA_BROADCAST_ACTION = "glucodata.Minute" const val SETTINGS_BUNDLE = "settings_bundle" const val SOURCE_SETTINGS_BUNDLE = "source_settings_bundle" + const val ALARM_SETTINGS_BUNDLE = "alarm_settings_bundle" const val GLUCOSE_CONVERSION_FACTOR = 18.0182F const val GLUCOSE_MIN_VALUE = 40 const val GLUCOSE_MAX_VALUE = 400 diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt index 322a0a956..63e66a2c3 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt @@ -5,6 +5,8 @@ import android.content.SharedPreferences import android.graphics.Color import android.os.Bundle import android.util.Log +import de.michelinside.glucodatahandler.common.notification.AlarmHandler +import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.notifier.* import de.michelinside.glucodatahandler.common.notifier.DataSource import de.michelinside.glucodatahandler.common.tasks.ElapsedTimeTask @@ -32,29 +34,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { const val COB = "glucodata.Minute.COB" const val IOBCOB_TIME = "gdh.IOB_COB_time" - private const val LAST_ALARM_INDEX = "last_alarm_index" - private const val LAST_ALARM_TIME = "last_alarm_time" - - enum class AlarmType(val resId: Int) { - NONE(R.string.alarm_none), - VERY_LOW(R.string.alarm_very_low), - LOW(R.string.alarm_low), - OK(R.string.alarm_none), - HIGH(R.string.alarm_high), - VERY_HIGH(R.string.alarm_very_high); - - companion object { - fun fromIndex(idx: Int): AlarmType { - AlarmType.values().forEach { - if(it.ordinal == idx) { - return it - } - } - return NONE - } - } - } - var sensorID: String? = null var rawValue: Int = 0 var glucose: Float = 0.0F @@ -123,10 +102,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { private var colorAlarm: Int = Color.RED private var colorOutOfRange: Int = Color.YELLOW private var colorOK: Int = Color.GREEN - private var lowAlarmDuration = 15L*60*1000 // ms -> 15 minutes - private var highAlarmDuration = 25L*60*1000 // ms -> 25 minutes - private var lastAlarmTime = 0L - private var lastAlarmType = AlarmType.OK private var initialized = false init { @@ -140,6 +115,7 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { initialized = true readTargets(context) loadExtras(context) + AlarmHandler.initData(context) TimeTaskService.run(context) } } catch (exc: Exception) { @@ -268,55 +244,13 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { AlarmType.VERY_LOW -> 7 else -> 0 } - setForceAlarm(checkForceAlarm(curAlarmType), curAlarmType) - if (curAlarm != 0 && forceAlarm) { + + if (curAlarm != 0 && AlarmHandler.checkForAlarmTrigger(curAlarmType)) { return curAlarm or 8 } return curAlarm } - private fun checkForceAlarm(curAlarmType: AlarmType): Boolean { - Log.d(LOG_ID, "Check force alarm:" + - " - curAlarmType=" + curAlarmType.toString() + - " - lastAlarmType=" + lastAlarmType.toString() + - " - lastAlarmTime=" + DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(lastAlarmTime)) + - " - time=" + DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(time)) + - " - delta=" + delta.toString() + - " - rate=" + rate.toString() + - " - diff=" + (time - lastAlarmTime).toString() + - " - lowDur=" + lowAlarmDuration.toString() + - " - highDur=" + highAlarmDuration.toString() - ) - when(curAlarmType) { - AlarmType.LOW, - AlarmType.VERY_LOW -> { - if(curAlarmType < lastAlarmType || ((delta < 0F || rate < 0F) && (time - lastAlarmTime >= lowAlarmDuration))) - { - return true - } - return false - } - AlarmType.HIGH, - AlarmType.VERY_HIGH -> { - if(curAlarmType > lastAlarmType || ((delta > 0F || rate > 0F) && (time - lastAlarmTime >= highAlarmDuration))) - { - return true - } - return false - } - else -> return false - } - } - - private fun setForceAlarm(force: Boolean, curAlarmType: AlarmType) { - forceAlarm = force - if (forceAlarm) { - lastAlarmTime = time - lastAlarmType = curAlarmType - Log.i(LOG_ID, "Force alarm for type " + curAlarmType) - } - } - fun getClucoseColor(monoChrome: Boolean = false): Int { if(isObsolete(Constants.VALUE_OBSOLETE_SHORT_SEC)) return Color.GRAY @@ -440,7 +374,7 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { // check for alarm if (interApp) { alarm = extras.getInt(ALARM) // if bit 8 is set, then an alarm is triggered - setForceAlarm((alarm and 8) == 8, getAlarmType()) + forceAlarm = ((alarm and 8) == 8) } else { alarm = calculateAlarm() } @@ -521,8 +455,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { putInt(Constants.SHARED_PREF_COLOR_OK, bundle.getInt(Constants.SHARED_PREF_COLOR_OK, colorOK)) putInt(Constants.SHARED_PREF_COLOR_OUT_OF_RANGE, bundle.getInt(Constants.SHARED_PREF_COLOR_OUT_OF_RANGE, colorOutOfRange)) putInt(Constants.SHARED_PREF_COLOR_ALARM, bundle.getInt(Constants.SHARED_PREF_COLOR_ALARM, colorAlarm)) - putLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)) - putLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)) if (bundle.containsKey(Constants.SHARED_PREF_RELATIVE_TIME)) { putBoolean(Constants.SHARED_PREF_RELATIVE_TIME, bundle.getBoolean(Constants.SHARED_PREF_RELATIVE_TIME, ElapsedTimeTask.relativeTime)) } @@ -542,8 +474,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { bundle.putInt(Constants.SHARED_PREF_COLOR_OK, colorOK) bundle.putInt(Constants.SHARED_PREF_COLOR_OUT_OF_RANGE, colorOutOfRange) bundle.putInt(Constants.SHARED_PREF_COLOR_ALARM, colorAlarm) - bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000) - bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000) return bundle } @@ -555,9 +485,7 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { use5minDelta = sharedPref.getBoolean(Constants.SHARED_PREF_FIVE_MINUTE_DELTA, use5minDelta) colorOK = sharedPref.getInt(Constants.SHARED_PREF_COLOR_OK, colorOK) colorOutOfRange = sharedPref.getInt(Constants.SHARED_PREF_COLOR_OUT_OF_RANGE, colorOutOfRange) - colorAlarm = sharedPref.getInt(Constants.SHARED_PREF_COLOR_ALARM, colorAlarm) - lowAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)*60000 - highAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)*60000 + colorAlarm = sharedPref.getInt(Constants.SHARED_PREF_COLOR_ALARM, colorAlarm) changeIsMmol(sharedPref.getBoolean(Constants.SHARED_PREF_USE_MMOL, isMmol)) calculateAlarm() // re-calculate alarm with new settings Log.i(LOG_ID, "Raw low/min/max/high set: " + lowValue.toString() + "/" + targetMinValue.toString() + "/" + targetMaxValue.toString() + "/" + highValue.toString() @@ -637,8 +565,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { putFloat(COB, cob) putLong(IOBCOB_TIME, iobCobTime) putInt(SOURCE_INDEX, source.ordinal) - putLong(LAST_ALARM_TIME, lastAlarmTime) - putInt(LAST_ALARM_INDEX, lastAlarmType.ordinal) apply() } } catch (exc: Exception) { @@ -663,8 +589,6 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { extras.putFloat(IOB, sharedGlucosePref.getFloat(IOB, iob)) extras.putFloat(COB, sharedGlucosePref.getFloat(COB, cob)) extras.putLong(IOBCOB_TIME, sharedGlucosePref.getLong(IOBCOB_TIME, iobCobTime)) - lastAlarmType = AlarmType.fromIndex(sharedGlucosePref.getInt(LAST_ALARM_INDEX, AlarmType.NONE.ordinal)) - lastAlarmTime = sharedGlucosePref.getLong(LAST_ALARM_TIME, 0L) handleIntent(context, DataSource.fromIndex(sharedGlucosePref.getInt(SOURCE_INDEX, DataSource.NONE.ordinal)), extras) } diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/WearPhoneConnection.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/WearPhoneConnection.kt index 45b4a7ce6..0aa127402 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/WearPhoneConnection.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/WearPhoneConnection.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.util.Log import com.google.android.gms.tasks.Tasks import com.google.android.gms.wearable.* +import de.michelinside.glucodatahandler.common.notification.AlarmHandler import de.michelinside.glucodatahandler.common.notifier.* import de.michelinside.glucodatahandler.common.receiver.BatteryReceiver import de.michelinside.glucodatahandler.common.notifier.DataSource @@ -77,6 +78,7 @@ class WearPhoneConnection : MessageClient.OnMessageReceivedListener, CapabilityC if (sendSettings) { filter.add(NotifySource.SETTINGS) // only send setting changes from phone to wear! filter.add(NotifySource.SOURCE_SETTINGS) + filter.add(NotifySource.ALARM_SETTINGS) } InternalNotifier.addNotifier(this.context, this, filter) checkForConnectedNodes() @@ -176,6 +178,7 @@ class WearPhoneConnection : MessageClient.OnMessageReceivedListener, CapabilityC NotifySource.CAPILITY_INFO -> Constants.REQUEST_DATA_MESSAGE_PATH NotifySource.SETTINGS -> Constants.SETTINGS_INTENT_MESSAGE_PATH NotifySource.SOURCE_SETTINGS -> Constants.SOURCE_SETTINGS_INTENT_MESSAGE_PATH + NotifySource.ALARM_SETTINGS -> Constants.ALARM_SETTINGS_INTENT_MESSAGE_PATH NotifySource.LOGCAT_REQUEST -> Constants.REQUEST_LOGCAT_MESSAGE_PATH else -> Constants.GLUCODATA_INTENT_MESSAGE_PATH } @@ -193,6 +196,7 @@ class WearPhoneConnection : MessageClient.OnMessageReceivedListener, CapabilityC Log.d(LOG_ID, "Adding settings for sending") extras.putBundle(Constants.SETTINGS_BUNDLE, ReceiveData.getSettingsBundle()) extras.putBundle(Constants.SOURCE_SETTINGS_BUNDLE, DataSourceTask.getSettingsBundle(context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE))) + extras.putBundle(Constants.ALARM_SETTINGS_BUNDLE, AlarmHandler.getSettings()) } // Send a message to all nodes in parallel connectedNodes.forEach { node -> @@ -299,17 +303,33 @@ class WearPhoneConnection : MessageClient.OnMessageReceivedListener, CapabilityC } if (p0.path == Constants.SOURCE_SETTINGS_INTENT_MESSAGE_PATH) { - // check for other settings send... if (!extras.isEmpty) { Log.d(LOG_ID, "Glucose source settings receceived from " + p0.sourceNodeId + ": " + extras.toString()) DataSourceTask.updateSettings(context, extras) } } + if (extras.containsKey(Constants.ALARM_SETTINGS_BUNDLE)) { + val bundle = extras.getBundle(Constants.ALARM_SETTINGS_BUNDLE) + if (bundle != null) { + Log.d(LOG_ID, "Glucose alarm settings receceived from " + p0.sourceNodeId + ": " + bundle.toString()) + AlarmHandler.setSettings(context, bundle) + } + extras.remove(Constants.ALARM_SETTINGS_BUNDLE) + } + + if (p0.path == Constants.ALARM_SETTINGS_INTENT_MESSAGE_PATH) { + if (!extras.isEmpty) { + Log.d(LOG_ID, "Glucose alarm settings receceived from " + p0.sourceNodeId + ": " + extras.toString()) + AlarmHandler.setSettings(context, extras) + } + } + if (p0.path == Constants.SETTINGS_INTENT_MESSAGE_PATH) { // check for other settings send... extras.remove(Constants.SETTINGS_BUNDLE) extras.remove(Constants.SOURCE_SETTINGS_BUNDLE) + extras.remove(Constants.ALARM_SETTINGS_BUNDLE) extras.remove(BatteryReceiver.LEVEL) if (!extras.isEmpty) { val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) @@ -344,6 +364,7 @@ class WearPhoneConnection : MessageClient.OnMessageReceivedListener, CapabilityC Log.d(LOG_ID, "Adding settings for sending") bundle.putBundle(Constants.SETTINGS_BUNDLE, ReceiveData.getSettingsBundle()) bundle.putBundle(Constants.SOURCE_SETTINGS_BUNDLE, DataSourceTask.getSettingsBundle(context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE))) + bundle.putBundle(Constants.ALARM_SETTINGS_BUNDLE, AlarmHandler.getSettings()) } sendMessage(source, bundle) } diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt new file mode 100644 index 000000000..3f3a29829 --- /dev/null +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt @@ -0,0 +1,145 @@ +package de.michelinside.glucodatahandler.common.notification + +import android.content.Context +import android.content.SharedPreferences +import android.os.Bundle +import android.util.Log +import de.michelinside.glucodatahandler.common.Constants +import de.michelinside.glucodatahandler.common.GlucoDataService +import de.michelinside.glucodatahandler.common.ReceiveData +import java.text.DateFormat +import java.util.Date + +object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { + private const val LOG_ID = "GDH.AlarmHandler" + + private const val LAST_ALARM_INDEX = "last_alarm_index" + private const val LAST_ALARM_TIME = "last_alarm_time" + + private var lowAlarmDuration = 15L*60*1000 // ms -> 15 minutes + private var highAlarmDuration = 25L*60*1000 // ms -> 25 minutes + private var lastAlarmTime = 0L + private var lastAlarmType = AlarmType.OK + private var initialized = false + + fun initData(context: Context) { + try { + if (!initialized) { + Log.v(LOG_ID, "initData called") + val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) + sharedPref.registerOnSharedPreferenceChangeListener(this) + updateSettings(sharedPref) + loadExtras() + initialized = true + } + } catch (exc: Exception) { + Log.e(LOG_ID, "initData exception: " + exc.toString() + "\n" + exc.stackTraceToString() ) + } + } + + fun checkForAlarmTrigger(newAlarmType: AlarmType): Boolean { + Log.d( + LOG_ID, "Check force alarm:" + + " - newAlarmType=" + newAlarmType.toString() + + " - lastAlarmType=" + lastAlarmType.toString() + + " - lastAlarmTime=" + DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(lastAlarmTime)) + + " - time=" + DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(ReceiveData.time)) + + " - delta=" + ReceiveData.delta.toString() + + " - rate=" + ReceiveData.rate.toString() + + " - diff=" + (ReceiveData.time - lastAlarmTime).toString() + + " - lowDur=" + lowAlarmDuration.toString() + + " - highDur=" + highAlarmDuration.toString() + ) + val triggerAlarm = when(newAlarmType) { + AlarmType.LOW, + AlarmType.VERY_LOW -> checkLowAlarm(newAlarmType, lowAlarmDuration) + AlarmType.HIGH, + AlarmType.VERY_HIGH -> checkHighAlarm(newAlarmType, highAlarmDuration) + else -> false + } + if (triggerAlarm) { + lastAlarmTime = ReceiveData.time + lastAlarmType = newAlarmType + saveExtras() + Log.i(LOG_ID, "Trigger alarm for type $newAlarmType") + } + return triggerAlarm + } + + private fun checkHighAlarm(newAlarmType: AlarmType, alarmDuration: Long): Boolean { + if(newAlarmType > lastAlarmType || ((ReceiveData.delta > 0F || ReceiveData.rate > 0F) && (ReceiveData.time - lastAlarmTime >= alarmDuration))) + { + return true + } + return false + } + + private fun checkLowAlarm(newAlarmType: AlarmType, alarmDuration: Long): Boolean { + if(newAlarmType < lastAlarmType || ((ReceiveData.delta < 0F || ReceiveData.rate < 0F) && (ReceiveData.time - lastAlarmTime >= alarmDuration))) + { + return true + } + return false + } + + private fun saveExtras() { + Log.d(LOG_ID, "Saving extras") + val sharedExtraPref = GlucoDataService.context!!.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) + with(sharedExtraPref.edit()) { + putLong(LAST_ALARM_TIME, lastAlarmTime) + putInt(LAST_ALARM_INDEX, lastAlarmType.ordinal) + apply() + } + } + + private fun loadExtras() { + try { + Log.i(LOG_ID, "Reading saved values...") + val sharedExtraPref = GlucoDataService.context!!.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) + lastAlarmType = AlarmType.fromIndex(sharedExtraPref.getInt(LAST_ALARM_INDEX, AlarmType.NONE.ordinal)) + lastAlarmTime = sharedExtraPref.getLong(LAST_ALARM_TIME, 0L) + + } catch (exc: Exception) { + Log.e(LOG_ID, "Loading receivers exception: " + exc.toString() + "\n" + exc.stackTraceToString() ) + } + } + + + val alarmPreferences = mutableSetOf( + Constants.SHARED_PREF_NOTIFY_DURATION_LOW, + Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, + ) + + fun getSettings(): Bundle { + val bundle = Bundle() + bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000) + bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000) + return bundle + } + + fun setSettings(context: Context, bundle: Bundle) { + val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) + with(sharedPref.edit()) { + putLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)) + putLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)) + apply() + } + updateSettings(sharedPref) + } + + fun updateSettings(sharedPref: SharedPreferences) { + lowAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)*60000 + highAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)*60000 + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { + try { + Log.d(LOG_ID, "onSharedPreferenceChanged called for key " + key) + if (GlucoDataService.context != null && alarmPreferences.contains(key)) { + updateSettings(sharedPreferences) + } + } catch (exc: Exception) { + Log.e(LOG_ID, "onSharedPreferenceChanged exception: " + exc.toString() + "\n" + exc.stackTraceToString() ) + } + } +} \ No newline at end of file diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmType.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmType.kt new file mode 100644 index 000000000..8530c62b1 --- /dev/null +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmType.kt @@ -0,0 +1,23 @@ +package de.michelinside.glucodatahandler.common.notification + +import de.michelinside.glucodatahandler.common.R + +enum class AlarmType(val resId: Int) { + NONE(R.string.alarm_none), + VERY_LOW(R.string.alarm_very_low), + LOW(R.string.alarm_low), + OK(R.string.alarm_none), + HIGH(R.string.alarm_high), + VERY_HIGH(R.string.alarm_very_high); + + companion object { + fun fromIndex(idx: Int): AlarmType { + AlarmType.values().forEach { + if(it.ordinal == idx) { + return it + } + } + return NONE + } + } +} \ No newline at end of file diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt index 2fff5a110..0fc40c33b 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notifier/NotifySource.kt @@ -15,5 +15,6 @@ enum class NotifySource { NOTIFIER_CHANGE, IOB_COB_CHANGE, LOGCAT_REQUEST, - PATIENT_DATA_CHANGED; + PATIENT_DATA_CHANGED, + ALARM_SETTINGS; } \ No newline at end of file diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index bebaa9dc8..ccfae751f 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -317,5 +317,6 @@ Wenn sie den Hintergrund für den Lockscreen aktivieren, erstellt die App einen Hintergrund auf dem Lockscreen, welche den Glucosewert und den Trendpfeil enthält. Vertikale Position Vertikale position auf dem Lockscreen:\n0: am oberen Rand des Bildschirms\n100: am unteren Rand des Bildschirms + Alarms diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index fa6b68ae5..63271bfe8 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -319,5 +319,6 @@ If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display + Alarms diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index e7231e662..6b278e5f8 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -332,4 +332,5 @@ If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display + Alarms diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/MainActivity.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/MainActivity.kt index c73b31a0e..ff605776b 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/MainActivity.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/MainActivity.kt @@ -288,6 +288,12 @@ class MainActivity : AppCompatActivity(), NotifierInterface { startActivity(intent) return true } + R.id.action_alarms -> { + val intent = Intent(this, SettingsActivity::class.java) + intent.putExtra(SettingsActivity.FRAGMENT_EXTRA, SettingsFragmentClass.ALARM_FRAGMENT.value) + startActivity(intent) + return true + } R.id.action_help -> { val browserIntent = Intent( Intent.ACTION_VIEW, diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt new file mode 100644 index 000000000..f6bf3cba8 --- /dev/null +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt @@ -0,0 +1,90 @@ +package de.michelinside.glucodatahandler.preferences + +import android.content.SharedPreferences +import android.os.Bundle +import android.util.Log +import androidx.preference.* +import de.michelinside.glucodatahandler.R +import de.michelinside.glucodatahandler.common.Constants +import de.michelinside.glucodatahandler.common.notification.AlarmHandler +import de.michelinside.glucodatahandler.common.notifier.InternalNotifier +import de.michelinside.glucodatahandler.common.notifier.NotifySource +import de.michelinside.glucodatahandler.common.tasks.DataSourceTask + + +class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { + private val LOG_ID = "GDH.AlarmFragment" + private var settingsChanged = false + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + Log.d(LOG_ID, "onCreatePreferences called") + try { + settingsChanged = false + preferenceManager.sharedPreferencesName = Constants.SHARED_PREF_TAG + setPreferencesFromResource(R.xml.alarms, rootKey) + } catch (exc: Exception) { + Log.e(LOG_ID, "onCreatePreferences exception: " + exc.toString()) + } + } + + override fun onDestroyView() { + Log.d(LOG_ID, "onDestroyView called") + try { + if (settingsChanged) { + InternalNotifier.notify(requireContext(), NotifySource.ALARM_SETTINGS, DataSourceTask.getSettingsBundle(preferenceManager.sharedPreferences!!)) + } + } catch (exc: Exception) { + Log.e(LOG_ID, "onDestroyView exception: " + exc.toString()) + } + super.onDestroyView() + } + + + override fun onResume() { + Log.d(LOG_ID, "onResume called") + try { + preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) + updateEnableStates(preferenceManager.sharedPreferences!!) + super.onResume() + } catch (exc: Exception) { + Log.e(LOG_ID, "onResume exception: " + exc.toString()) + } + } + + override fun onPause() { + Log.d(LOG_ID, "onPause called") + try { + preferenceManager.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this) + super.onPause() + } catch (exc: Exception) { + Log.e(LOG_ID, "onPause exception: " + exc.toString()) + } + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { + Log.d(LOG_ID, "onSharedPreferenceChanged called for " + key) + try { + if(AlarmHandler.alarmPreferences.contains(key)) + settingsChanged = true + + /* + when(key) { + Constants.SHARED_PREF_LIBRE_PASSWORD, + Constants.SHARED_PREF_LIBRE_USER, + Constants.SHARED_PREF_NIGHTSCOUT_URL -> { + updateEnableStates(sharedPreferences!!) + } + }*/ + } catch (exc: Exception) { + Log.e(LOG_ID, "onSharedPreferenceChanged exception: " + exc.toString()) + } + } + + fun updateEnableStates(sharedPreferences: SharedPreferences) { + try { + } catch (exc: Exception) { + Log.e(LOG_ID, "updateEnableStates exception: " + exc.toString()) + } + } + +} \ No newline at end of file diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AppSettingsActivity.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AppSettingsActivity.kt index 761381a6f..b45b5af8f 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AppSettingsActivity.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AppSettingsActivity.kt @@ -7,11 +7,13 @@ import android.util.Log import androidx.appcompat.app.AppCompatActivity import de.michelinside.glucodatahandler.preferences.SettingsFragment import de.michelinside.glucodatahandler.preferences.SourceFragment +import de.michelinside.glucodatahandler.preferences.AlarmFragment import de.michelinside.glucodatahandler.common.R as RC enum class SettingsFragmentClass(val value: Int, val titleRes: Int) { SETTINGS_FRAGMENT(0, RC.string.menu_settings), - SORUCE_FRAGMENT(1, RC.string.menu_sources) + SORUCE_FRAGMENT(1, RC.string.menu_sources), + ALARM_FRAGMENT(2, RC.string.menu_alarms) } class SettingsActivity : AppCompatActivity() { private val LOG_ID = "GDH.SettingsActivity" @@ -39,6 +41,14 @@ class SettingsActivity : AppCompatActivity() { .replace(R.id.content, SourceFragment()) .commit() } + + SettingsFragmentClass.ALARM_FRAGMENT.value -> { + this.supportActionBar!!.title = + this.applicationContext.resources.getText(SettingsFragmentClass.ALARM_FRAGMENT.titleRes) + supportFragmentManager.beginTransaction() + .replace(R.id.content, AlarmFragment()) + .commit() + } } } } catch (ex: Exception) { diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/watch/WatchDrip.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/watch/WatchDrip.kt index 0264869c3..da60171bf 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/watch/WatchDrip.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/watch/WatchDrip.kt @@ -9,6 +9,7 @@ import android.content.SharedPreferences import android.os.Build import android.os.Bundle import android.util.Log +import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.BuildConfig import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.GlucoDataService @@ -122,8 +123,8 @@ object WatchDrip: SharedPreferences.OnSharedPreferenceChangeListener, NotifierIn bundle.putLong("bg.timeStamp", ReceiveData.time) bundle.putBoolean("bg.isStale", ReceiveData.isObsolete(Constants.VALUE_OBSOLETE_SHORT_SEC)) bundle.putBoolean("doMgdl", !ReceiveData.isMmol) - bundle.putBoolean("bg.isHigh", ReceiveData.getAlarmType() == ReceiveData.AlarmType.VERY_HIGH) - bundle.putBoolean("bg.isLow", ReceiveData.getAlarmType() == ReceiveData.AlarmType.VERY_LOW) + bundle.putBoolean("bg.isHigh", ReceiveData.getAlarmType() == AlarmType.VERY_HIGH) + bundle.putBoolean("bg.isLow", ReceiveData.getAlarmType() == AlarmType.VERY_LOW) bundle.putString("pumpJSON", "{}") if (!ReceiveData.isIobCobObsolete(Constants.VALUE_OBSOLETE_SHORT_SEC) && !ReceiveData.iob.isNaN()) { bundle.putString("predict.IOB", ReceiveData.iobString) @@ -142,20 +143,20 @@ object WatchDrip: SharedPreferences.OnSharedPreferenceChangeListener, NotifierIn private fun getAlertType(): String { return when(ReceiveData.getAlarmType()) { - ReceiveData.AlarmType.VERY_LOW, - ReceiveData.AlarmType.VERY_HIGH -> TYPE_ALERT - ReceiveData.AlarmType.LOW, - ReceiveData.AlarmType.HIGH -> TYPE_OTHER_ALERT + AlarmType.VERY_LOW, + AlarmType.VERY_HIGH -> TYPE_ALERT + AlarmType.LOW, + AlarmType.HIGH -> TYPE_OTHER_ALERT else -> TYPE_NO_ALERT } } private fun getAlarmMessage(): String { return when(ReceiveData.getAlarmType()) { - ReceiveData.AlarmType.VERY_LOW -> "VERY LOW " + ReceiveData.getClucoseAsString() - ReceiveData.AlarmType.LOW -> "LOW " + ReceiveData.getClucoseAsString() - ReceiveData.AlarmType.HIGH -> "HIGH " + ReceiveData.getClucoseAsString() - ReceiveData.AlarmType.VERY_HIGH -> "VERY HIGH " + ReceiveData.getClucoseAsString() + AlarmType.VERY_LOW -> "VERY LOW " + ReceiveData.getClucoseAsString() + AlarmType.LOW -> "LOW " + ReceiveData.getClucoseAsString() + AlarmType.HIGH -> "HIGH " + ReceiveData.getClucoseAsString() + AlarmType.VERY_HIGH -> "VERY HIGH " + ReceiveData.getClucoseAsString() else -> "No alarm!" } } diff --git a/mobile/src/main/res/menu/menu_items.xml b/mobile/src/main/res/menu/menu_items.xml index 9f014844e..6ab4b5e77 100644 --- a/mobile/src/main/res/menu/menu_items.xml +++ b/mobile/src/main/res/menu/menu_items.xml @@ -17,6 +17,13 @@ android:title="@string/menu_sources" app:showAsAction="never" /> + + + + + + + \ No newline at end of file diff --git a/wear/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceWear.kt b/wear/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceWear.kt index b76897aa1..7e857981e 100644 --- a/wear/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceWear.kt +++ b/wear/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceWear.kt @@ -9,6 +9,7 @@ import android.os.Vibrator import android.os.VibratorManager import android.util.Log import de.michelinside.glucodatahandler.common.* +import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.notification.ChannelType import de.michelinside.glucodatahandler.common.notification.Channels import de.michelinside.glucodatahandler.common.R as CR @@ -91,17 +92,17 @@ class GlucoDataServiceWear: GlucoDataService(AppSource.WEAR_APP), NotifierInterf .build() } - fun getVibrationPattern(alarmType: ReceiveData.AlarmType): LongArray? { + fun getVibrationPattern(alarmType: AlarmType): LongArray? { return when(alarmType) { - ReceiveData.AlarmType.VERY_LOW -> longArrayOf(0, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000) - ReceiveData.AlarmType.LOW -> longArrayOf(0, 700, 500, 700, 500, 700, 500, 700) - ReceiveData.AlarmType.HIGH -> longArrayOf(0, 500, 500, 500, 500, 500, 500, 500) - ReceiveData.AlarmType.VERY_HIGH -> longArrayOf(0, 800, 500, 800, 800, 600, 800, 800, 500, 800, 800, 600, 800) + AlarmType.VERY_LOW -> longArrayOf(0, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000) + AlarmType.LOW -> longArrayOf(0, 700, 500, 700, 500, 700, 500, 700) + AlarmType.HIGH -> longArrayOf(0, 500, 500, 500, 500, 500, 500, 500) + AlarmType.VERY_HIGH -> longArrayOf(0, 800, 500, 800, 800, 600, 800, 800, 500, 800, 800, 600, 800) else -> null } } - fun vibrate(alarmType: ReceiveData.AlarmType): Boolean { + fun vibrate(alarmType: AlarmType): Boolean { try { val vibratePattern = getVibrationPattern(alarmType) ?: return false val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { From 21ce378938952f990d54ddc0c4e3c7cb6bed0e80 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Thu, 21 Mar 2024 19:15:57 +0100 Subject: [PATCH 007/242] Very Low Alarm Settings --- .../glucodatahandler/common/Constants.kt | 15 ++- .../glucodatahandler/common/ReceiveData.kt | 2 +- .../common/notification/AlarmHandler.kt | 65 +++++++------ common/src/main/res/values-de/strings.xml | 15 +++ common/src/main/res/values-pl/strings.xml | 15 +++ common/src/main/res/values/strings.xml | 15 +++ .../preferences/AlarmFragment.kt | 96 +++++++++++++++++-- mobile/src/main/res/xml/alarms.xml | 50 ++++++++++ 8 files changed, 235 insertions(+), 38 deletions(-) diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index c90104be5..09c8eb4d2 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -53,8 +53,6 @@ object Constants { const val SHARED_PREF_CAR_NOTIFICATION_REAPPEAR_INTERVAL = "car_notification_reappear_interval" const val SHARED_PREF_CAR_MEDIA = "car_media" const val SHARED_PREF_CAR_MEDIA_ICON_STYLE = "aa_media_player_icon_style" - const val SHARED_PREF_NOTIFY_DURATION_LOW = "notify_duration_low" - const val SHARED_PREF_NOTIFY_DURATION_HIGH = "notify_duration_high" const val SHARED_PREF_USE_MMOL = "use_mmol" const val SHARED_PREF_GLUCODATA_RECEIVER_SHOW_ALL = "show_all_glucodata_receivers" const val SHARED_PREF_LOW_GLUCOSE = "low_glucose" @@ -120,6 +118,19 @@ object Constants { const val SHARED_PREF_LOCKSCREEN_WP_ENABLED = "lockscreen_enabled" const val SHARED_PREF_LOCKSCREEN_WP_Y_POS = "lockscreen_y_pos" + // Alarm + const val SHARED_PREF_ALARM_VERY_LOW_ENABLED = "alarm_very_low_enabled" + const val SHARED_PREF_ALARM_VERY_LOW_INTERVAL = "alarm_very_low_interval" + const val SHARED_PREF_ALARM_VERY_LOW_IGNORE_DND = "alarm_very_low_ignore_dnd" + const val SHARED_PREF_ALARM_VERY_LOW_VIBRATE = "alarm_very_low_vibrate" + const val SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND = "alarm_very_low_enable_sound" + const val SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND = "alarm_very_low_default_sound" + const val SHARED_PREF_ALARM_VERY_LOW_SOUND = "alarm_very_low_sound" + + const val SHARED_PREF_ALARM_LOW_INTERVAL = "alarm_low_interval" + const val SHARED_PREF_ALARM_HIGH_INTERVAL = "alarm_high_interval" + const val SHARED_PREF_ALARM_VERY_HIGH_INTERVAL = "alarm_very_high_interval" + // Android Auto const val AA_MEDIA_ICON_STYLE_TREND = "trend" const val AA_MEDIA_ICON_STYLE_GLUCOSE_TREND = "glucose_trend" diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt index 63e66a2c3..5f8ac9981 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/ReceiveData.kt @@ -113,9 +113,9 @@ object ReceiveData: SharedPreferences.OnSharedPreferenceChangeListener { if (!initialized) { Log.v(LOG_ID, "initData called") initialized = true + AlarmHandler.initData(context) readTargets(context) loadExtras(context) - AlarmHandler.initData(context) TimeTaskService.run(context) } } catch (exc: Exception) { diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt index 3f3a29829..136ed1c06 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt @@ -16,11 +16,14 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { private const val LAST_ALARM_INDEX = "last_alarm_index" private const val LAST_ALARM_TIME = "last_alarm_time" - private var lowAlarmDuration = 15L*60*1000 // ms -> 15 minutes - private var highAlarmDuration = 25L*60*1000 // ms -> 25 minutes + private var veryLowInterval = 15*60000 // ms -> 15 minutes + private var lowInterval = 25*60000 // ms -> 25 minutes + private var highInterval = 30*60000 // ms -> 35 minutes + private var veryHighInterval = 30*60000 // ms -> 30 minutes private var lastAlarmTime = 0L private var lastAlarmType = AlarmType.OK private var initialized = false + private lateinit var sharedExtraPref: SharedPreferences fun initData(context: Context) { try { @@ -29,7 +32,8 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) sharedPref.registerOnSharedPreferenceChangeListener(this) updateSettings(sharedPref) - loadExtras() + sharedExtraPref = context.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) + loadExtras(context) initialized = true } } catch (exc: Exception) { @@ -47,14 +51,16 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { " - delta=" + ReceiveData.delta.toString() + " - rate=" + ReceiveData.rate.toString() + " - diff=" + (ReceiveData.time - lastAlarmTime).toString() + - " - lowDur=" + lowAlarmDuration.toString() + - " - highDur=" + highAlarmDuration.toString() + " - veryLowInt=" + veryLowInterval.toString() + + " - lowInt=" + lowInterval.toString() + + " - highInt=" + highInterval.toString() + + " - veryHighInt=" + veryHighInterval.toString() ) val triggerAlarm = when(newAlarmType) { - AlarmType.LOW, - AlarmType.VERY_LOW -> checkLowAlarm(newAlarmType, lowAlarmDuration) - AlarmType.HIGH, - AlarmType.VERY_HIGH -> checkHighAlarm(newAlarmType, highAlarmDuration) + AlarmType.VERY_LOW -> checkLowAlarm(newAlarmType, veryLowInterval) + AlarmType.LOW -> checkLowAlarm(newAlarmType, lowInterval) + AlarmType.HIGH -> checkHighAlarm(newAlarmType, highInterval) + AlarmType.VERY_HIGH -> checkHighAlarm(newAlarmType, veryHighInterval) else -> false } if (triggerAlarm) { @@ -66,16 +72,16 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { return triggerAlarm } - private fun checkHighAlarm(newAlarmType: AlarmType, alarmDuration: Long): Boolean { - if(newAlarmType > lastAlarmType || ((ReceiveData.delta > 0F || ReceiveData.rate > 0F) && (ReceiveData.time - lastAlarmTime >= alarmDuration))) + private fun checkHighAlarm(newAlarmType: AlarmType, alarmInterval: Int): Boolean { + if(newAlarmType > lastAlarmType || ((ReceiveData.delta > 0F || ReceiveData.rate > 0F) && (ReceiveData.time - lastAlarmTime >= alarmInterval))) { return true } return false } - private fun checkLowAlarm(newAlarmType: AlarmType, alarmDuration: Long): Boolean { - if(newAlarmType < lastAlarmType || ((ReceiveData.delta < 0F || ReceiveData.rate < 0F) && (ReceiveData.time - lastAlarmTime >= alarmDuration))) + private fun checkLowAlarm(newAlarmType: AlarmType, alarmInterval: Int): Boolean { + if(newAlarmType < lastAlarmType || ((ReceiveData.delta < 0F || ReceiveData.rate < 0F) && (ReceiveData.time - lastAlarmTime >= alarmInterval))) { return true } @@ -84,7 +90,6 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { private fun saveExtras() { Log.d(LOG_ID, "Saving extras") - val sharedExtraPref = GlucoDataService.context!!.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) with(sharedExtraPref.edit()) { putLong(LAST_ALARM_TIME, lastAlarmTime) putInt(LAST_ALARM_INDEX, lastAlarmType.ordinal) @@ -92,10 +97,9 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { } } - private fun loadExtras() { + private fun loadExtras(context: Context) { try { Log.i(LOG_ID, "Reading saved values...") - val sharedExtraPref = GlucoDataService.context!!.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) lastAlarmType = AlarmType.fromIndex(sharedExtraPref.getInt(LAST_ALARM_INDEX, AlarmType.NONE.ordinal)) lastAlarmTime = sharedExtraPref.getLong(LAST_ALARM_TIME, 0L) @@ -104,38 +108,45 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { } } - - val alarmPreferences = mutableSetOf( - Constants.SHARED_PREF_NOTIFY_DURATION_LOW, - Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, + val alarmPreferencesToSend = mutableSetOf( + Constants.SHARED_PREF_ALARM_VERY_LOW_INTERVAL, + Constants.SHARED_PREF_ALARM_LOW_INTERVAL, + Constants.SHARED_PREF_ALARM_HIGH_INTERVAL, + Constants.SHARED_PREF_ALARM_VERY_HIGH_INTERVAL, ) fun getSettings(): Bundle { val bundle = Bundle() - bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000) - bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000) + bundle.getInt(Constants.SHARED_PREF_ALARM_VERY_LOW_INTERVAL, veryLowInterval/60000) + bundle.getInt(Constants.SHARED_PREF_ALARM_LOW_INTERVAL, lowInterval/60000) + bundle.getInt(Constants.SHARED_PREF_ALARM_HIGH_INTERVAL, highInterval/60000) + bundle.getInt(Constants.SHARED_PREF_ALARM_VERY_HIGH_INTERVAL, veryHighInterval/60000) return bundle } fun setSettings(context: Context, bundle: Bundle) { val sharedPref = context.getSharedPreferences(Constants.SHARED_PREF_TAG, Context.MODE_PRIVATE) with(sharedPref.edit()) { - putLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)) - putLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, bundle.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)) + putInt(Constants.SHARED_PREF_ALARM_VERY_LOW_INTERVAL, bundle.getInt(Constants.SHARED_PREF_ALARM_VERY_LOW_INTERVAL, veryLowInterval/60000)) + putInt(Constants.SHARED_PREF_ALARM_LOW_INTERVAL, bundle.getInt(Constants.SHARED_PREF_ALARM_LOW_INTERVAL, lowInterval/60000)) + putInt(Constants.SHARED_PREF_ALARM_HIGH_INTERVAL, bundle.getInt(Constants.SHARED_PREF_ALARM_HIGH_INTERVAL, highInterval/60000)) + putInt(Constants.SHARED_PREF_ALARM_VERY_HIGH_INTERVAL, bundle.getInt(Constants.SHARED_PREF_ALARM_VERY_HIGH_INTERVAL, veryHighInterval/60000)) apply() } updateSettings(sharedPref) } fun updateSettings(sharedPref: SharedPreferences) { - lowAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_LOW, lowAlarmDuration/60000)*60000 - highAlarmDuration = sharedPref.getLong(Constants.SHARED_PREF_NOTIFY_DURATION_HIGH, highAlarmDuration/60000)*60000 + veryLowInterval = sharedPref.getInt(Constants.SHARED_PREF_ALARM_VERY_LOW_INTERVAL, veryLowInterval/60000)*60000 + lowInterval = sharedPref.getInt(Constants.SHARED_PREF_ALARM_LOW_INTERVAL, lowInterval/60000)*60000 + highInterval = sharedPref.getInt(Constants.SHARED_PREF_ALARM_HIGH_INTERVAL, highInterval/60000)*60000 + veryHighInterval = sharedPref.getInt(Constants.SHARED_PREF_ALARM_VERY_HIGH_INTERVAL, veryHighInterval/60000)*60000 } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { try { Log.d(LOG_ID, "onSharedPreferenceChanged called for key " + key) - if (GlucoDataService.context != null && alarmPreferences.contains(key)) { + if (GlucoDataService.context != null && alarmPreferencesToSend.contains(key)) { updateSettings(sharedPreferences) } } catch (exc: Exception) { diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index ccfae751f..09a549303 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -318,5 +318,20 @@ Vertikale Position Vertikale position auf dem Lockscreen:\n0: am oberen Rand des Bildschirms\n100: am unteren Rand des Bildschirms Alarms + Very low + Interval + Minimum interval between notifications for the this alarm type. + Ignore DnD + Ignore Do not Disturb mode for notification. + Enabled + Notification are enabled for this alarm type. + Vibration + Vibrate while notification is triggered. + Default Ringtone + Use internal ringtone for this alarm type. + Select ringtone + Press here to select a custom ringtone from the system. + Use sound + If you want a sound for the notification, this should be activated. diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index 63271bfe8..c3fa70af8 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -320,5 +320,20 @@ Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display Alarms + Very low + Interval + Minimum interval between notifications for the this alarm type. + Ignore DnD + Ignore Do not Disturb mode for notification. + Enabled + Notification are enabled for this alarm type. + Vibration + Vibrate while notification is triggered. + Default ringtone + Use internal ringtone for this alarm type. + Select ringtone + Press here to select a custom ringtone from the system. + Use sound + If you want a sound for the notification, this should be activated. diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 6b278e5f8..3f5a5458b 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -333,4 +333,19 @@ Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display Alarms + Very low + Interval + Minimum interval between notifications for the this alarm type. + Ignore DnD + Ignore Do not Disturb mode for notification. + Enabled + Notification are enabled for this alarm type. + Vibration + Vibrate while notification is triggered. + Default ringtone + Use internal ringtone for this alarm type. + Select ringtone + Press here to select a custom ringtone from the system. + Use sound + If you want a sound for the notification, this should be activated. diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt index f6bf3cba8..1ea2db478 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt @@ -1,9 +1,18 @@ package de.michelinside.glucodatahandler.preferences +import android.app.Activity +import android.content.Intent import android.content.SharedPreferences +import android.media.RingtoneManager +import android.net.Uri import android.os.Bundle import android.util.Log -import androidx.preference.* +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreferenceCompat import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.notification.AlarmHandler @@ -15,6 +24,8 @@ import de.michelinside.glucodatahandler.common.tasks.DataSourceTask class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { private val LOG_ID = "GDH.AlarmFragment" private var settingsChanged = false + private lateinit var veryLowSoundPicker: ActivityResultLauncher + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { Log.d(LOG_ID, "onCreatePreferences called") @@ -22,6 +33,18 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref settingsChanged = false preferenceManager.sharedPreferencesName = Constants.SHARED_PREF_TAG setPreferencesFromResource(R.xml.alarms, rootKey) + + veryLowSoundPicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> + Log.v(LOG_ID, "Very low result ${result.resultCode}: ${result.data}") + if (result.resultCode == Activity.RESULT_OK) { + val intent = result.data + // Handle the Intent + setRingtoneResult(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, veryLowSoundPicker, intent?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)) + } + } + + setRingtoneSelect(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, veryLowSoundPicker, Uri.parse(preferenceManager.sharedPreferences?.getString(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, ""))) + } catch (exc: Exception) { Log.e(LOG_ID, "onCreatePreferences exception: " + exc.toString()) } @@ -64,27 +87,84 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { Log.d(LOG_ID, "onSharedPreferenceChanged called for " + key) try { - if(AlarmHandler.alarmPreferences.contains(key)) + if(AlarmHandler.alarmPreferencesToSend.contains(key)) settingsChanged = true - /* + when(key) { - Constants.SHARED_PREF_LIBRE_PASSWORD, - Constants.SHARED_PREF_LIBRE_USER, - Constants.SHARED_PREF_NIGHTSCOUT_URL -> { + Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND, + Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND -> { updateEnableStates(sharedPreferences!!) } - }*/ + } } catch (exc: Exception) { Log.e(LOG_ID, "onSharedPreferenceChanged exception: " + exc.toString()) } } + + fun setEnableState(sharedPreferences: SharedPreferences, key: String, enableKey: String, secondEnableKey: String? = null, defValue: Boolean = false, secondInvert: Boolean = false) { + val pref = findPreference(key) + if (pref != null) + pref.isEnabled = sharedPreferences.getBoolean(enableKey, defValue) && (if (secondEnableKey != null) secondInvert != sharedPreferences.getBoolean(secondEnableKey, defValue) else true) + } + fun setEnableState(sharedPreferences: SharedPreferences, key: String, enableKey: String, defValue: Boolean = false, invert: Boolean = false) { + val pref = findPreference(key) + if (pref != null) { + pref.isEnabled = invert != sharedPreferences.getBoolean(enableKey, defValue) + } + } + fun updateEnableStates(sharedPreferences: SharedPreferences) { try { + // very low + setEnableState(sharedPreferences, Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND, secondInvert = true) + setEnableState(sharedPreferences, Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND) + } catch (exc: Exception) { Log.e(LOG_ID, "updateEnableStates exception: " + exc.toString()) } } -} \ No newline at end of file + private fun setRingtoneSelect( + preference: String, + picker: ActivityResultLauncher, + curUir: Uri? + ) { + Log.v(LOG_ID, "setRingtoneSelect called for preference $preference with uri $curUir" ) + val pref = findPreference(preference) + if (pref != null) { + if (curUir != null && curUir.toString().isNotEmpty()) { + val ringtone = RingtoneManager.getRingtone(requireContext(), curUir) + val title = ringtone.getTitle(requireContext()) + if (title.isNullOrEmpty()) { + pref.summary = resources.getString(de.michelinside.glucodatahandler.common.R.string.alarm_sound_summary) + } else { + Log.d(LOG_ID, "Ringtone '$title' for uri $curUir") + pref.summary = title + } + } else { + pref.summary = resources.getString(de.michelinside.glucodatahandler.common.R.string.alarm_sound_summary) + } + pref.setOnPreferenceClickListener { + val ringtoneIntent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER) + ringtoneIntent.putExtra( + RingtoneManager.EXTRA_RINGTONE_TYPE, + RingtoneManager.TYPE_ALL + ) + ringtoneIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, curUir) + picker.launch(ringtoneIntent) + true + } + } + } + + private fun setRingtoneResult(preference: String, picker: ActivityResultLauncher, newUri: Uri?) { + Log.i(LOG_ID, "Set custom ringtone for $preference: $newUri") + with (preferenceManager.sharedPreferences!!.edit()) { + putString(preference, newUri?.toString()) + apply() + } + setRingtoneSelect(preference, picker, newUri) + } +} diff --git a/mobile/src/main/res/xml/alarms.xml b/mobile/src/main/res/xml/alarms.xml index d9ed6c0da..6c6326818 100644 --- a/mobile/src/main/res/xml/alarms.xml +++ b/mobile/src/main/res/xml/alarms.xml @@ -2,5 +2,55 @@ + + + + + + + + + \ No newline at end of file From 4255c1d9850e306df3f00728e33029c6eea1287e Mon Sep 17 00:00:00 2001 From: pachi81 Date: Fri, 22 Mar 2024 13:34:02 +0100 Subject: [PATCH 008/242] Very Low Alarm Notification --- .../glucodatahandler/common/Constants.kt | 8 +- .../common/notification/AlarmHandler.kt | 1 + .../common/notification/AlarmNotification.kt | 165 ++++++++++++++++++ .../common/notification/Channels.kt | 5 +- .../src/main/res/raw/gdh_alarm_very_low.mp3 | Bin 0 -> 321120 bytes common/src/main/res/values-de/strings.xml | 32 ++-- common/src/main/res/values-pl/strings.xml | 20 +-- common/src/main/res/values/strings.xml | 20 +-- .../preferences/AlarmFragment.kt | 98 +++++++---- mobile/src/main/res/xml/alarms.xml | 38 ++-- 10 files changed, 285 insertions(+), 102 deletions(-) create mode 100644 common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt create mode 100644 common/src/main/res/raw/gdh_alarm_very_low.mp3 diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index 09c8eb4d2..60fd5a6b3 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -121,11 +121,9 @@ object Constants { // Alarm const val SHARED_PREF_ALARM_VERY_LOW_ENABLED = "alarm_very_low_enabled" const val SHARED_PREF_ALARM_VERY_LOW_INTERVAL = "alarm_very_low_interval" - const val SHARED_PREF_ALARM_VERY_LOW_IGNORE_DND = "alarm_very_low_ignore_dnd" - const val SHARED_PREF_ALARM_VERY_LOW_VIBRATE = "alarm_very_low_vibrate" - const val SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND = "alarm_very_low_enable_sound" - const val SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND = "alarm_very_low_default_sound" - const val SHARED_PREF_ALARM_VERY_LOW_SOUND = "alarm_very_low_sound" + const val SHARED_PREF_ALARM_VERY_LOW_TEST = "alarm_very_low_test" + const val SHARED_PREF_ALARM_VERY_LOW_SETTINGS = "alarm_very_low_settings" + const val SHARED_PREF_ALARM_VERY_LOW_SAVE_SOUND = "alarm_very_low_save_sound" const val SHARED_PREF_ALARM_LOW_INTERVAL = "alarm_low_interval" const val SHARED_PREF_ALARM_HIGH_INTERVAL = "alarm_high_interval" diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt index 136ed1c06..8156768b1 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt @@ -34,6 +34,7 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { updateSettings(sharedPref) sharedExtraPref = context.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) loadExtras(context) + AlarmNotification.initNotifications(context) initialized = true } } catch (exc: Exception) { diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt new file mode 100644 index 000000000..2eeae2624 --- /dev/null +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt @@ -0,0 +1,165 @@ +package de.michelinside.glucodatahandler.common.notification + +import android.app.Notification +import android.app.NotificationChannelGroup +import android.content.Context +import android.media.AudioAttributes +import android.net.Uri +import android.os.Handler +import android.util.Log +import android.widget.Toast +import de.michelinside.glucodatahandler.common.GlucoDataService +import de.michelinside.glucodatahandler.common.R +import de.michelinside.glucodatahandler.common.ReceiveData +import java.io.FileOutputStream + +object AlarmNotification { + private const val LOG_ID = "GDH.AlarmNotification" + private const val ALARM_GROUP_ID = "alarm_group" + private const val VERY_LOW_NOTIFICATION_ID = 801 + fun initNotifications(context: Context) { + createNotificationChannels(context) + } + + fun stopNotifications(alarmType: AlarmType, context: Context? = null) { + val notify_id = getNotificationId(alarmType) + if (notify_id > 0) + Channels.getNotificationManager(context).cancel(notify_id) + } + + fun triggerNotification(alarmType: AlarmType, context: Context) { + try { + Log.v(LOG_ID, "showNotification called for $alarmType") + Channels.getNotificationManager(context).notify( + getNotificationId(alarmType), + createNotification(context, alarmType) + ) + } catch (exc: Exception) { + Log.e(LOG_ID, "showNotification exception: " + exc.toString() ) + } + } + + private fun createNotificationChannels(context: Context) { + val groupName = context.resources.getString(R.string.alarm_notification_group_name) + Channels.getNotificationManager(context).createNotificationChannelGroup( + NotificationChannelGroup(ALARM_GROUP_ID, groupName)) + createNotificationChannel(context, AlarmType.VERY_LOW, true) + } + + private fun createNotificationChannel(context: Context, alarmType: AlarmType, byPassDnd: Boolean) { + val channelType = getChannelType(alarmType) + if (channelType != null) { + val audioAttributes = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_ALARM) + .build() + + val channel = Channels.getNotificationChannel(context, channelType, false) + channel.group = ALARM_GROUP_ID + channel.setSound(getDefaultAlarm(alarmType, context), audioAttributes) + channel.vibrationPattern = getVibrationPattern(alarmType) + channel.setBypassDnd(byPassDnd) + Channels.getNotificationManager(context).createNotificationChannel(channel) + } + } + + private fun createNotification(context: Context, alarmType: AlarmType): Notification? { + val channelId = getChannelId(alarmType) + if (channelId.isNullOrEmpty()) + return null + val notification = Notification.Builder(context, channelId) + .setSmallIcon(R.mipmap.ic_launcher) + .setOnlyAlertOnce(false) + .setAutoCancel(true) + .setShowWhen(true) + .setCategory(Notification.CATEGORY_ALARM) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setWhen(ReceiveData.time) + .setContentTitle(context.getString(R.string.info_label_alarm) + ": " + context.getString( + alarmType.resId)) + .setContentText(ReceiveData.getClucoseAsString() + " (Δ " + ReceiveData.getDeltaAsString() + ")") + .build() + + return notification + } + + private fun getNotificationId(alarmType: AlarmType): Int { + return when(alarmType) { + AlarmType.VERY_LOW -> VERY_LOW_NOTIFICATION_ID + else -> -1 + } + } + + private fun getChannelType(alarmType: AlarmType): ChannelType? { + return when(alarmType) { + AlarmType.VERY_LOW -> ChannelType.VERY_LOW_ALARM + else -> null + } + } + + fun getChannelId(alarmType: AlarmType): String? { + return when(alarmType) { + AlarmType.VERY_LOW -> ChannelType.VERY_LOW_ALARM.channelId + else -> null + } + } + + fun getAlarmSoundRes(alarmType: AlarmType): Int? { + return when(alarmType) { + AlarmType.VERY_LOW -> R.raw.gdh_alarm_very_low + else -> null + } + } + + private fun getDefaultAlarm(alarmType: AlarmType, context: Context): Uri? { + val res = getAlarmSoundRes(alarmType) + if (res != null) { + return getUri(res, context) + } + return null + } + + private fun getUri(resId: Int, context: Context): Uri { + val uri = "android.resource://" + context.packageName + "/" + resId + return Uri.parse(uri) + } + + fun getVibrationPattern(alarmType: AlarmType): LongArray? { + return when(alarmType) { + AlarmType.VERY_LOW -> longArrayOf(0, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 1000) + AlarmType.LOW -> longArrayOf(0, 700, 500, 700, 500, 700, 500, 700) + AlarmType.HIGH -> longArrayOf(0, 500, 500, 500, 500, 500, 500, 500) + AlarmType.VERY_HIGH -> longArrayOf(0, 800, 500, 800, 800, 600, 800, 800, 500, 800, 800, 600, 800) + else -> null + } + } + + fun saveAlarm(context: Context, alarmType: AlarmType, uri: Uri) { + try { + val resId = getAlarmSoundRes(alarmType) + if (resId != null) { + Thread { + context.contentResolver.openFileDescriptor(uri, "w")?.use { + FileOutputStream(it.fileDescriptor).use { outputStream -> + val inputStream = context.resources.openRawResource(resId) + val buffer = ByteArray(4 * 1024) // or other buffer size + var read: Int + while (inputStream.read(buffer).also { rb -> read = rb } != -1) { + outputStream.write(buffer, 0, read) + } + Log.v(LOG_ID, "flush") + outputStream.flush() + outputStream.close() + } + } + val text = context.resources.getText(R.string.alarm_saved) + Handler(GlucoDataService.context!!.mainLooper).post { + Toast.makeText(GlucoDataService.context!!, text, Toast.LENGTH_SHORT).show() + } + }.start() + } + } catch (exc: Exception) { + Log.e(LOG_ID, "Saving alarm to file exception: " + exc.message.toString() ) + } + } +} \ No newline at end of file diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/Channels.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/Channels.kt index 5d68a8f18..435fb1333 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/Channels.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/Channels.kt @@ -11,7 +11,8 @@ enum class ChannelType(val channelId: String, val nameResId: Int, val descrResId WORKER("worker_notification_01", R.string.worker_notification_name, R.string.worker_notification_descr, NotificationManager.IMPORTANCE_LOW ), WEAR_FOREGROUND("glucodatahandler_service_01", R.string.wear_foreground_notification_name, R.string.wear_foreground_notification_descr, NotificationManager.IMPORTANCE_LOW), ANDROID_AUTO("GlucoDataNotify_Car", R.string.android_auto_notification_name, R.string.android_auto_notification_descr ), - ANDROID_AUTO_FOREGROUND("GlucoDataAuto_foreground", R.string.mobile_foreground_notification_name, R.string.mobile_foreground_notification_descr, NotificationManager.IMPORTANCE_LOW ); + ANDROID_AUTO_FOREGROUND("GlucoDataAuto_foreground", R.string.mobile_foreground_notification_name, R.string.mobile_foreground_notification_descr, NotificationManager.IMPORTANCE_LOW ), + VERY_LOW_ALARM("very_low_alarm", R.string.very_low_alarm_notification_name, R.string.very_low_alarm_notification_descr, NotificationManager.IMPORTANCE_MAX ); } object Channels { private var notificationMgr: NotificationManager? = null @@ -42,6 +43,4 @@ object Channels { fun deleteNotificationChannel(context: Context, type: ChannelType) { getNotificationManager(context).deleteNotificationChannel(type.channelId) } - - } \ No newline at end of file diff --git a/common/src/main/res/raw/gdh_alarm_very_low.mp3 b/common/src/main/res/raw/gdh_alarm_very_low.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..987934660e5f932fed697985bff3153aa4dbd693 GIT binary patch literal 321120 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�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 z z1qkIk@MPq|^QGsPprn%k377{h?J$-lgqrKg#58I%k&J969O!r=fbxb#140Bq*3bt+ z%~JU$!iS27OhYM=4DKq`DU*rk*KbTbbag&a(newqR4Cj%YE({|F`=>XwJltg$m%ptzLB$9>rj)D+9ki>d{-iojh zah&SlgoX+d0U!zNU=Wf4-$dZ0M0mHpa+ChXht@Zr%(@EMCFsAoze!BO0i<+mR;byo z5AsLGKZb!EhC6Iq1?3KowyrRC`SVc7Z}GoD;plJiQXAc&NMFQBQbz4nKU8;fwrCCD z2vF9qjC8}uYjN(KjIGL$qu;+c6WuI(#wX5&@%s3J~&T`W$p)6l7*}5?nmjnygb3SxBk%DX@QlJH6 zC>J7B?lQ)uOOc->W~&A8d=n9xtS6S33{v#G%1d{%H2!>1_9hLk>cHgWYt7c&o8#LV z+GDvqMtP>$lRU+0XPMH;rMw0nb&70cwKJ%PT7HaNcW>81W% z#dv+-Y(U{M?O?mlfnEK461=a z9Uj7cESpuLBD&MeFTmYkm!z|8ITB!LnaTv@t{hFG7{KlU<)E`J1uFam+(cN4uBbR6 zDv59bHw;ZrszSgl6jO9M5}YQ9keI_OPTL4PLS%uIT|F_Hc$nGLu~NSN)9P|BdymZM zydXc7=ceD`hP(>{bv9GFHiLIlb%EtX{z^rYU!gE~qn-dhJN|-EgQX+gSo+xg16~@% zzCnA+&(e%G3KV8B{28P0w&*Mvc%$JOgWQHg+OHHfAP;yeov4pjuJ86OXN&Q2hMt$s z(EFCd&mvVvYEoms)0ml3OvDK6Q|I-&@OAucB4z4CEJP;%t5-~PuMyanDCRWBrdxj6 z@!*kH|HWXb&C-zJ3p<9cwL5J6_xo{w-+5yfll zYlW@-T9<(5wzc9bYyXvOlj@$sHg-HdNwPBO_NUjt+KY{mmdhq#B@$Mi2P@l6vU)^((Xg@UhmGk8@Z0M`D#bQv_g$>l1J$BAI_yQ8)B=pxxYvC87s7 zzT8u|rHXadv~r1bi+kO3MWtJ3uJVGku2YuKx#7FC-v6#CtX9|wcCuX^cG+hdH%wGC z8@(sk)>nhx|GM)h@Hb{n-gvyvw*QSojJ&A6!nV~|xaiyPEm7YrZPmwjt-T?Kva+IfU~w2W zF_0nVLJgEl7P_lVB}8y0Hnelv2Bj{3dM!BJpA1gxRJ}&jw=?!h-8xzO3(h=WzGPQ& z@RIOd+4s&ak+!PBI~TdvCBpeRb{VO&TBY};$Oh7rGLUK1ERs(}JnU|wlM#{@AOtN% z2qQa$ib3l&Ynjv39mqq?N0VOH{&{%Uwjkk2wHZ@U(|ISaRUD8%+`Yr~DO#VYZ0y>G z98Xird)iaI6OJygEa&l*Oqnr-#R?P3j%1r?d^`ss_4eutyofWSd&nc!0U?JLs&&S* z0ugxpGMF|q7+`5}sf?_vI(M<}TG<%0DaLzTwJ} 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 literal 0 HcmV?d00001 diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 09a549303..10c551e58 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -317,21 +317,21 @@ Wenn sie den Hintergrund für den Lockscreen aktivieren, erstellt die App einen Hintergrund auf dem Lockscreen, welche den Glucosewert und den Trendpfeil enthält. Vertikale Position Vertikale position auf dem Lockscreen:\n0: am oberen Rand des Bildschirms\n100: am unteren Rand des Bildschirms - Alarms - Very low - Interval - Minimum interval between notifications for the this alarm type. - Ignore DnD - Ignore Do not Disturb mode for notification. - Enabled - Notification are enabled for this alarm type. - Vibration - Vibrate while notification is triggered. - Default Ringtone - Use internal ringtone for this alarm type. - Select ringtone - Press here to select a custom ringtone from the system. - Use sound - If you want a sound for the notification, this should be activated. + Alarme + Sehr tiefer Alarm + Benachrichtigung für sehr tiefe Alarme. + Alarme + Sehr tiefer Alarm + Intervall + Minimale Zeit zwischen den Benachrichtigungen für diesen Alarm. + Aktiv + Benachrichtigungen sind aktiv für diesen Alarm. + Test + Hier drücken, um die Benachrichtigung zu testen. + Einstellungen + Hier drücken, um zum den Benachrichtigungseinstellungen für diesen Alarm zu gelangen. + Ton speichern + Hier drücken, um den Standard Alarm Ton auf das Telefon zu speichern. + Alarm gespeichert... diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index c3fa70af8..fd9b61b38 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -319,21 +319,21 @@ If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display + Alarm very low + Notification for very low alarms. Alarms Very low Interval Minimum interval between notifications for the this alarm type. - Ignore DnD - Ignore Do not Disturb mode for notification. Enabled Notification are enabled for this alarm type. - Vibration - Vibrate while notification is triggered. - Default ringtone - Use internal ringtone for this alarm type. - Select ringtone - Press here to select a custom ringtone from the system. - Use sound - If you want a sound for the notification, this should be activated. + Test it + Press here to test the alarm. + Settings + Press here to go to settings for notification channel for this alarm.\nThere you can change all related settings. + Alarms + Save sound + Press here, if you want to save the default alarm sound to file system. + Alarm saved... diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 3f5a5458b..a73bc61d8 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -332,20 +332,20 @@ If you enable lockscreen wallpaper, the app replaces the wallpaper on lockscreen with an Image containing the value and trend. Vertical position Vertical position of the glucose-trend image on lockscreen:\n0 is the top of the display\n100 is the botton of the display + Alarm very low + Notification for very low alarms. Alarms Very low Interval Minimum interval between notifications for the this alarm type. - Ignore DnD - Ignore Do not Disturb mode for notification. Enabled Notification are enabled for this alarm type. - Vibration - Vibrate while notification is triggered. - Default ringtone - Use internal ringtone for this alarm type. - Select ringtone - Press here to select a custom ringtone from the system. - Use sound - If you want a sound for the notification, this should be activated. + Test it + Press here to test the alarm. + Settings + Press here to go to settings for notification channel for this alarm.\nThere you can change all related settings. + Alarms + Save sound + Press here, if you want to save the default alarm sound to file system. + Alarm saved... diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt index 1ea2db478..ba8c8f10e 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt @@ -3,19 +3,24 @@ package de.michelinside.glucodatahandler.preferences import android.app.Activity import android.content.Intent import android.content.SharedPreferences -import android.media.RingtoneManager +import android.media.MediaScannerConnection import android.net.Uri import android.os.Bundle +import android.os.Environment +import android.os.Environment.DIRECTORY_ALARMS +import android.provider.DocumentsContract +import android.provider.Settings import android.util.Log import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreferenceCompat import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.notification.AlarmHandler +import de.michelinside.glucodatahandler.common.notification.AlarmNotification +import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.notifier.InternalNotifier import de.michelinside.glucodatahandler.common.notifier.NotifySource import de.michelinside.glucodatahandler.common.tasks.DataSourceTask @@ -24,7 +29,7 @@ import de.michelinside.glucodatahandler.common.tasks.DataSourceTask class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { private val LOG_ID = "GDH.AlarmFragment" private var settingsChanged = false - private lateinit var veryLowSoundPicker: ActivityResultLauncher + private lateinit var veryLowSoundSaver: ActivityResultLauncher override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -34,16 +39,19 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref preferenceManager.sharedPreferencesName = Constants.SHARED_PREF_TAG setPreferencesFromResource(R.xml.alarms, rootKey) - veryLowSoundPicker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> + veryLowSoundSaver = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult -> Log.v(LOG_ID, "Very low result ${result.resultCode}: ${result.data}") if (result.resultCode == Activity.RESULT_OK) { val intent = result.data - // Handle the Intent - setRingtoneResult(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, veryLowSoundPicker, intent?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)) + intent?.data?.also { uri -> + Log.v(LOG_ID, "Save media to " + uri) + AlarmNotification.saveAlarm(requireContext(), AlarmType.VERY_LOW, uri) + } } } - - setRingtoneSelect(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, veryLowSoundPicker, Uri.parse(preferenceManager.sharedPreferences?.getString(Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, ""))) + setAlarmTest(Constants.SHARED_PREF_ALARM_VERY_LOW_TEST, AlarmType.VERY_LOW) + setAlarmSettings(Constants.SHARED_PREF_ALARM_VERY_LOW_SETTINGS, AlarmType.VERY_LOW) + setAlarmSave(Constants.SHARED_PREF_ALARM_VERY_LOW_SAVE_SOUND, AlarmType.VERY_LOW, veryLowSoundSaver) } catch (exc: Exception) { Log.e(LOG_ID, "onCreatePreferences exception: " + exc.toString()) @@ -67,7 +75,6 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref Log.d(LOG_ID, "onResume called") try { preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) - updateEnableStates(preferenceManager.sharedPreferences!!) super.onResume() } catch (exc: Exception) { Log.e(LOG_ID, "onResume exception: " + exc.toString()) @@ -89,43 +96,69 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref try { if(AlarmHandler.alarmPreferencesToSend.contains(key)) settingsChanged = true - - - when(key) { - Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND, - Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND -> { - updateEnableStates(sharedPreferences!!) - } - } } catch (exc: Exception) { Log.e(LOG_ID, "onSharedPreferenceChanged exception: " + exc.toString()) } } - fun setEnableState(sharedPreferences: SharedPreferences, key: String, enableKey: String, secondEnableKey: String? = null, defValue: Boolean = false, secondInvert: Boolean = false) { - val pref = findPreference(key) - if (pref != null) - pref.isEnabled = sharedPreferences.getBoolean(enableKey, defValue) && (if (secondEnableKey != null) secondInvert != sharedPreferences.getBoolean(secondEnableKey, defValue) else true) - } - fun setEnableState(sharedPreferences: SharedPreferences, key: String, enableKey: String, defValue: Boolean = false, invert: Boolean = false) { - val pref = findPreference(key) + private fun setAlarmTest(preference: String, alarmType: AlarmType) { + val pref = findPreference(preference) if (pref != null) { - pref.isEnabled = invert != sharedPreferences.getBoolean(enableKey, defValue) + pref.setOnPreferenceClickListener { + Log.d(LOG_ID, "Trigger test for $alarmType") + AlarmNotification.triggerNotification(alarmType, requireContext()) + true + } } } - fun updateEnableStates(sharedPreferences: SharedPreferences) { - try { - // very low - setEnableState(sharedPreferences, Constants.SHARED_PREF_ALARM_VERY_LOW_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND, secondInvert = true) - setEnableState(sharedPreferences, Constants.SHARED_PREF_ALARM_VERY_LOW_DEF_SOUND, Constants.SHARED_PREF_ALARM_VERY_LOW_ENABLE_SOUND) + private fun setAlarmSettings(preference: String, alarmType: AlarmType) { + val pref = findPreference(preference) + if (pref != null) { + pref.setOnPreferenceClickListener { + Log.d(LOG_ID, "Open settings for $alarmType") + val intent: Intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) + .putExtra(Settings.EXTRA_CHANNEL_ID, AlarmNotification.getChannelId(alarmType)) + startActivity(intent) + true + } + } + } - } catch (exc: Exception) { - Log.e(LOG_ID, "updateEnableStates exception: " + exc.toString()) + private fun setAlarmSave( + preference: String, + alarmType: AlarmType, + veryLowSoundSaver: ActivityResultLauncher + ) { + val pref = findPreference(preference) + val resId = AlarmNotification.getAlarmSoundRes(alarmType) + if (pref != null && resId != null) { + pref.setOnPreferenceClickListener { + var alarmUri: Uri? = null + MediaScannerConnection.scanFile(requireContext(), arrayOf(Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS).absolutePath), null + ) { s: String, uri: Uri -> + Log.v(LOG_ID, "Set URI $uri for path $s") + alarmUri = uri + } + Log.d(LOG_ID, "Save sound for $alarmType to ${alarmUri}") + val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "audio/mpeg" + val fileName = + requireContext().resources.getResourceEntryName(resId) + ".mp3" + putExtra(Intent.EXTRA_TITLE, fileName) + putExtra(DocumentsContract.EXTRA_INITIAL_URI, alarmUri) + } + veryLowSoundSaver.launch(intent) + true + } } } + + /* private fun setRingtoneSelect( preference: String, picker: ActivityResultLauncher, @@ -167,4 +200,5 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref } setRingtoneSelect(preference, picker, newUri) } + */ } diff --git a/mobile/src/main/res/xml/alarms.xml b/mobile/src/main/res/xml/alarms.xml index 6c6326818..c17c8eab2 100644 --- a/mobile/src/main/res/xml/alarms.xml +++ b/mobile/src/main/res/xml/alarms.xml @@ -5,7 +5,7 @@ + app:initialExpandedChildrenCount="2"> - - - - From 6ee4a32e8ef73598927c62c2d70d79805892b112 Mon Sep 17 00:00:00 2001 From: pachi81 Date: Fri, 22 Mar 2024 17:03:23 +0100 Subject: [PATCH 009/242] Alarm Notification View --- .../glucodatahandler/common/Constants.kt | 3 + .../common/notification/AlarmHandler.kt | 1 - common/src/main/res/values-de/strings.xml | 2 + common/src/main/res/values-pl/strings.xml | 2 + common/src/main/res/values/strings.xml | 2 + mobile/src/main/AndroidManifest.xml | 8 ++ .../GlucoDataServiceMobile.kt | 4 + .../notification/AlarmNotification.kt | 80 ++++++++++++++--- .../PermanentNotification.kt | 4 +- .../notification/SnoozeAlarmReceiver.kt | 17 ++++ .../preferences/AlarmFragment.kt | 7 +- .../main/res/layout/alarm_notification.xml | 89 +++++++++++++++++++ 12 files changed, 202 insertions(+), 17 deletions(-) rename {common/src/main/java/de/michelinside/glucodatahandler/common => mobile/src/main/java/de/michelinside/glucodatahandler}/notification/AlarmNotification.kt (61%) rename mobile/src/main/java/de/michelinside/glucodatahandler/{ => notification}/PermanentNotification.kt (98%) create mode 100644 mobile/src/main/java/de/michelinside/glucodatahandler/notification/SnoozeAlarmReceiver.kt create mode 100644 mobile/src/main/res/layout/alarm_notification.xml diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt index 60fd5a6b3..165727777 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/Constants.kt @@ -119,6 +119,9 @@ object Constants { const val SHARED_PREF_LOCKSCREEN_WP_Y_POS = "lockscreen_y_pos" // Alarm + const val ALARM_SNOOZE_ACTION = "de.michelinside.glucodatahandler.SNOOZE" + const val ALARM_SNOOZE_EXTRA_TIME = "snooze_time" + const val ALARM_SNOOZE_EXTRA_NOTIFY_ID = "notification_id" const val SHARED_PREF_ALARM_VERY_LOW_ENABLED = "alarm_very_low_enabled" const val SHARED_PREF_ALARM_VERY_LOW_INTERVAL = "alarm_very_low_interval" const val SHARED_PREF_ALARM_VERY_LOW_TEST = "alarm_very_low_test" diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt index 8156768b1..136ed1c06 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt +++ b/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmHandler.kt @@ -34,7 +34,6 @@ object AlarmHandler: SharedPreferences.OnSharedPreferenceChangeListener { updateSettings(sharedPref) sharedExtraPref = context.getSharedPreferences(Constants.SHARED_PREF_EXTRAS_TAG, Context.MODE_PRIVATE) loadExtras(context) - AlarmNotification.initNotifications(context) initialized = true } } catch (exc: Exception) { diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 10c551e58..67a794b9e 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -333,5 +333,7 @@ Ton speichern Hier drücken, um den Standard Alarm Ton auf das Telefon zu speichern. Alarm gespeichert... + Very low! + Snooze diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index fd9b61b38..06d236bbd 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -335,5 +335,7 @@ Save sound Press here, if you want to save the default alarm sound to file system. Alarm saved... + Very low! + Snooze diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index a73bc61d8..292cde3ae 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -348,4 +348,6 @@ Save sound Press here, if you want to save the default alarm sound to file system. Alarm saved... + Very low! + Snooze diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index 162b31056..0e8ebf351 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -222,6 +222,14 @@ + + + + + diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt index f96f8c140..f87f39ca0 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/GlucoDataServiceMobile.kt @@ -8,9 +8,11 @@ import android.os.Bundle import android.util.Log import de.michelinside.glucodatahandler.android_auto.CarModeReceiver import de.michelinside.glucodatahandler.common.* +import de.michelinside.glucodatahandler.notification.AlarmNotification import de.michelinside.glucodatahandler.common.notifier.* import de.michelinside.glucodatahandler.common.receiver.XDripBroadcastReceiver import de.michelinside.glucodatahandler.common.utils.GlucoDataUtils +import de.michelinside.glucodatahandler.notification.PermanentNotification import de.michelinside.glucodatahandler.tasker.setWearConnectionState import de.michelinside.glucodatahandler.watch.WatchDrip import de.michelinside.glucodatahandler.widget.FloatingWidget @@ -59,6 +61,7 @@ class GlucoDataServiceMobile: GlucoDataService(AppSource.PHONE_APP), NotifierInt WatchDrip.init(applicationContext) floatingWidget.create() LockScreenWallpaper.create(this) + AlarmNotification.initNotifications(this) } catch (exc: Exception) { Log.e(LOG_ID, "onCreate exception: " + exc.message.toString() ) } @@ -75,6 +78,7 @@ class GlucoDataServiceMobile: GlucoDataService(AppSource.PHONE_APP), NotifierInt try { Log.d(LOG_ID, "onDestroy called") PermanentNotification.destroy() + AlarmNotification.destroy(this) CarModeReceiver.cleanup(applicationContext) WatchDrip.close(applicationContext) floatingWidget.destroy() diff --git a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/AlarmNotification.kt similarity index 61% rename from common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt rename to mobile/src/main/java/de/michelinside/glucodatahandler/notification/AlarmNotification.kt index 2eeae2624..27ba39bc1 100644 --- a/common/src/main/java/de/michelinside/glucodatahandler/common/notification/AlarmNotification.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/AlarmNotification.kt @@ -1,16 +1,29 @@ -package de.michelinside.glucodatahandler.common.notification +package de.michelinside.glucodatahandler.notification import android.app.Notification import android.app.NotificationChannelGroup +import android.app.PendingIntent import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.Paint import android.media.AudioAttributes import android.net.Uri import android.os.Handler import android.util.Log +import android.widget.RemoteViews import android.widget.Toast +import de.michelinside.glucodatahandler.MainActivity +import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.GlucoDataService -import de.michelinside.glucodatahandler.common.R +import de.michelinside.glucodatahandler.common.R as CR +import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.ReceiveData +import de.michelinside.glucodatahandler.common.notification.AlarmType +import de.michelinside.glucodatahandler.common.notification.ChannelType +import de.michelinside.glucodatahandler.common.notification.Channels +import de.michelinside.glucodatahandler.common.utils.BitmapUtils +import de.michelinside.glucodatahandler.common.utils.Utils import java.io.FileOutputStream object AlarmNotification { @@ -21,10 +34,16 @@ object AlarmNotification { createNotificationChannels(context) } + fun destroy(context: Context) { + stopNotifications(AlarmType.VERY_LOW, context) + } + fun stopNotifications(alarmType: AlarmType, context: Context? = null) { - val notify_id = getNotificationId(alarmType) - if (notify_id > 0) - Channels.getNotificationManager(context).cancel(notify_id) + stopNotifications(getNotificationId(alarmType)) + } + fun stopNotifications(noticationId: Int, context: Context? = null) { + if (noticationId > 0) + Channels.getNotificationManager(context).cancel(noticationId) } fun triggerNotification(alarmType: AlarmType, context: Context) { @@ -40,7 +59,7 @@ object AlarmNotification { } private fun createNotificationChannels(context: Context) { - val groupName = context.resources.getString(R.string.alarm_notification_group_name) + val groupName = context.resources.getString(CR.string.alarm_notification_group_name) Channels.getNotificationManager(context).createNotificationChannelGroup( NotificationChannelGroup(ALARM_GROUP_ID, groupName)) createNotificationChannel(context, AlarmType.VERY_LOW, true) @@ -63,21 +82,51 @@ object AlarmNotification { } } + private fun createSnoozeIntent(context: Context, snoozeTime: Int, noticationId: Int): PendingIntent { + val intent = Intent(Constants.ALARM_SNOOZE_ACTION) + intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES) + intent.putExtra(Constants.ALARM_SNOOZE_EXTRA_TIME, snoozeTime) + intent.putExtra(Constants.ALARM_SNOOZE_EXTRA_NOTIFY_ID, noticationId) + intent.setPackage(context.packageName) + return PendingIntent.getBroadcast(context, snoozeTime, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT) + } + private fun createNotification(context: Context, alarmType: AlarmType): Notification? { val channelId = getChannelId(alarmType) - if (channelId.isNullOrEmpty()) + val resId = getAlarmTextRes(alarmType) + if (channelId.isNullOrEmpty() || resId == null) return null + + val remoteViews = RemoteViews(GlucoDataService.context!!.packageName, R.layout.alarm_notification) + remoteViews.setTextViewText(R.id.alarm, context.getString(resId)) + remoteViews.setTextViewText(R.id.snooze, context.getString(CR.string.snooze)) + remoteViews.setTextViewText(R.id.glucose, ReceiveData.getClucoseAsString()) + remoteViews.setTextColor(R.id.glucose, ReceiveData.getClucoseColor()) + remoteViews.setImageViewBitmap(R.id.trendImage, BitmapUtils.getRateAsBitmap()) + remoteViews.setTextViewText(R.id.deltaText, "Δ " + ReceiveData.getDeltaAsString()) + remoteViews.setOnClickPendingIntent(R.id.snooze_60, createSnoozeIntent(context, 60, getNotificationId(alarmType))) + remoteViews.setOnClickPendingIntent(R.id.snooze_90, createSnoozeIntent(context, 90, getNotificationId(alarmType))) + remoteViews.setOnClickPendingIntent(R.id.snooze_120, createSnoozeIntent(context, 120, getNotificationId(alarmType))) + if (ReceiveData.isObsolete(Constants.VALUE_OBSOLETE_SHORT_SEC)) { + if (!ReceiveData.isObsolete()) + remoteViews.setInt(R.id.glucose, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG or Paint.ANTI_ALIAS_FLAG) + remoteViews.setTextColor(R.id.deltaText, Color.GRAY ) + } + val notification = Notification.Builder(context, channelId) .setSmallIcon(R.mipmap.ic_launcher) + .setContentIntent(Utils.getAppIntent(context, MainActivity::class.java, 8, false)) .setOnlyAlertOnce(false) .setAutoCancel(true) .setShowWhen(true) + .setCustomContentView(remoteViews) + .setCustomBigContentView(null) + .setStyle(Notification.DecoratedCustomViewStyle()) .setCategory(Notification.CATEGORY_ALARM) .setVisibility(Notification.VISIBILITY_PUBLIC) .setWhen(ReceiveData.time) - .setContentTitle(context.getString(R.string.info_label_alarm) + ": " + context.getString( - alarmType.resId)) - .setContentText(ReceiveData.getClucoseAsString() + " (Δ " + ReceiveData.getDeltaAsString() + ")") + .setContentTitle("") + .setContentText("") .build() return notification @@ -106,7 +155,14 @@ object AlarmNotification { fun getAlarmSoundRes(alarmType: AlarmType): Int? { return when(alarmType) { - AlarmType.VERY_LOW -> R.raw.gdh_alarm_very_low + AlarmType.VERY_LOW -> CR.raw.gdh_alarm_very_low + else -> null + } + } + + fun getAlarmTextRes(alarmType: AlarmType): Int? { + return when(alarmType) { + AlarmType.VERY_LOW -> CR.string.very_low_alarm_text else -> null } } @@ -152,7 +208,7 @@ object AlarmNotification { outputStream.close() } } - val text = context.resources.getText(R.string.alarm_saved) + val text = context.resources.getText(CR.string.alarm_saved) Handler(GlucoDataService.context!!.mainLooper).post { Toast.makeText(GlucoDataService.context!!, text, Toast.LENGTH_SHORT).show() } diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/PermanentNotification.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/PermanentNotification.kt similarity index 98% rename from mobile/src/main/java/de/michelinside/glucodatahandler/PermanentNotification.kt rename to mobile/src/main/java/de/michelinside/glucodatahandler/notification/PermanentNotification.kt index 2c0f8266b..68ab5ee5a 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/PermanentNotification.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/PermanentNotification.kt @@ -1,4 +1,4 @@ -package de.michelinside.glucodatahandler +package de.michelinside.glucodatahandler.notification import android.app.Notification import android.content.Context @@ -10,6 +10,8 @@ import android.os.Bundle import android.util.Log import android.view.View import android.widget.RemoteViews +import de.michelinside.glucodatahandler.MainActivity +import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.GlucoDataService import de.michelinside.glucodatahandler.common.ReceiveData diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/notification/SnoozeAlarmReceiver.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/SnoozeAlarmReceiver.kt new file mode 100644 index 000000000..90a9629e5 --- /dev/null +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/notification/SnoozeAlarmReceiver.kt @@ -0,0 +1,17 @@ +package de.michelinside.glucodatahandler.notification + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.util.Log +import de.michelinside.glucodatahandler.common.Constants +import de.michelinside.glucodatahandler.common.utils.Utils + +class SnoozeAlarmReceiver: BroadcastReceiver() { + private val LOG_ID = "GDH.AlarmSnoozeReceiver" + override fun onReceive(context: Context, intent: Intent) { + Log.i(LOG_ID, "Intent ${intent.action} received: ${Utils.dumpBundle(intent.extras)}" ) + AlarmNotification.stopNotifications(intent.getIntExtra(Constants.ALARM_SNOOZE_EXTRA_NOTIFY_ID, 0), context) + } + +} \ No newline at end of file diff --git a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt index ba8c8f10e..bdf7b1f30 100644 --- a/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt +++ b/mobile/src/main/java/de/michelinside/glucodatahandler/preferences/AlarmFragment.kt @@ -7,7 +7,7 @@ import android.media.MediaScannerConnection import android.net.Uri import android.os.Bundle import android.os.Environment -import android.os.Environment.DIRECTORY_ALARMS +import android.os.Environment.DIRECTORY_NOTIFICATIONS import android.provider.DocumentsContract import android.provider.Settings import android.util.Log @@ -19,7 +19,7 @@ import androidx.preference.PreferenceFragmentCompat import de.michelinside.glucodatahandler.R import de.michelinside.glucodatahandler.common.Constants import de.michelinside.glucodatahandler.common.notification.AlarmHandler -import de.michelinside.glucodatahandler.common.notification.AlarmNotification +import de.michelinside.glucodatahandler.notification.AlarmNotification import de.michelinside.glucodatahandler.common.notification.AlarmType import de.michelinside.glucodatahandler.common.notifier.InternalNotifier import de.michelinside.glucodatahandler.common.notifier.NotifySource @@ -137,7 +137,8 @@ class AlarmFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPref if (pref != null && resId != null) { pref.setOnPreferenceClickListener { var alarmUri: Uri? = null - MediaScannerConnection.scanFile(requireContext(), arrayOf(Environment.getExternalStoragePublicDirectory(DIRECTORY_ALARMS).absolutePath), null + MediaScannerConnection.scanFile(requireContext(), arrayOf(Environment.getExternalStoragePublicDirectory( + DIRECTORY_NOTIFICATIONS).absolutePath), null ) { s: String, uri: Uri -> Log.v(LOG_ID, "Set URI $uri for path $s") alarmUri = uri diff --git a/mobile/src/main/res/layout/alarm_notification.xml b/mobile/src/main/res/layout/alarm_notification.xml new file mode 100644 index 000000000..5158a4b9e --- /dev/null +++ b/mobile/src/main/res/layout/alarm_notification.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + +