diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt index da9b9ef702..af9967f71a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt +++ b/wear/src/main/java/info/nightscout/androidaps/comm/DataHandlerWear.kt @@ -68,8 +68,8 @@ class DataHandlerWear @Inject constructor( addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) putExtras( Bundle().also { bundle -> - bundle.putString("title", it.title) - bundle.putString("message", it.message) + bundle.putString(DataLayerListenerServiceWear.KEY_TITLE, it.title) + bundle.putString(DataLayerListenerServiceWear.KEY_MESSAGE, it.message) bundle.putString(DataLayerListenerServiceWear.KEY_ACTION_DATA, it.returnCommand?.serialize()) } ) @@ -123,11 +123,7 @@ class DataHandlerWear @Inject constructor( .subscribe { aapsLogger.debug(LTag.WEAR, "Status received from ${it.sourceNodeId}") persistence.store(it) - LocalBroadcastManager.getInstance(context).sendBroadcast( - Intent(DataLayerListenerServiceWear.INTENT_NEW_DATA).apply { - putExtra(DataLayerListenerServiceWear.KEY_STATUS_DATA, it.serialize()) - } - ) + LocalBroadcastManager.getInstance(context).sendBroadcast(Intent(DataLayerListenerServiceWear.INTENT_NEW_DATA)) } disposable += rxBus .toObservable(EventData.SingleBg::class.java) @@ -135,11 +131,6 @@ class DataHandlerWear @Inject constructor( .subscribe { aapsLogger.debug(LTag.WEAR, "SingleBg received from ${it.sourceNodeId}") persistence.store(it) - LocalBroadcastManager.getInstance(context).sendBroadcast( - Intent(DataLayerListenerServiceWear.INTENT_NEW_DATA).apply { - putExtra(DataLayerListenerServiceWear.KEY_SINGLE_BG_DATA, it.serialize()) - } - ) } disposable += rxBus .toObservable(EventData.GraphData::class.java) @@ -147,11 +138,6 @@ class DataHandlerWear @Inject constructor( .subscribe { aapsLogger.debug(LTag.WEAR, "GraphData received from ${it.sourceNodeId}") persistence.store(it) - LocalBroadcastManager.getInstance(context).sendBroadcast( - Intent(DataLayerListenerServiceWear.INTENT_NEW_DATA).apply { - putExtra(DataLayerListenerServiceWear.KEY_GRAPH_DATA, it.serialize()) - } - ) } disposable += rxBus .toObservable(EventData.TreatmentData::class.java) @@ -159,11 +145,6 @@ class DataHandlerWear @Inject constructor( .subscribe { aapsLogger.debug(LTag.WEAR, "TreatmentData received from ${it.sourceNodeId}") persistence.store(it) - LocalBroadcastManager.getInstance(context).sendBroadcast( - Intent(DataLayerListenerServiceWear.INTENT_NEW_DATA).apply { - putExtra(DataLayerListenerServiceWear.KEY_TREATMENTS_DATA, it.serialize()) - } - ) } disposable += rxBus .toObservable(EventData.Preferences::class.java) @@ -282,8 +263,8 @@ class DataHandlerWear @Inject constructor( val intent = Intent(context, AcceptActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) putExtras(Bundle().also { bundle -> - bundle.putString("title", command.title) - bundle.putString("message", command.message) + bundle.putString(DataLayerListenerServiceWear.KEY_TITLE, command.title) + bundle.putString(DataLayerListenerServiceWear.KEY_MESSAGE, command.message) bundle.putString(DataLayerListenerServiceWear.KEY_ACTION_DATA, command.returnCommand?.serialize()) }) } diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/DataLayerListenerServiceWear.kt b/wear/src/main/java/info/nightscout/androidaps/comm/DataLayerListenerServiceWear.kt index 3950cd0c10..e027d0fcbd 100644 --- a/wear/src/main/java/info/nightscout/androidaps/comm/DataLayerListenerServiceWear.kt +++ b/wear/src/main/java/info/nightscout/androidaps/comm/DataLayerListenerServiceWear.kt @@ -1,5 +1,6 @@ package info.nightscout.androidaps.comm +import android.app.NotificationManager import android.content.Intent import android.os.Handler import android.os.HandlerThread @@ -100,6 +101,9 @@ class DataLayerListenerServiceWear : WearableListenerService() { aapsLogger.debug(LTag.WEAR, "onMessageReceived: ${String(messageEvent.data)}") val command = EventData.deserialize(String(messageEvent.data)) rxBus.send(command.also { it.sourceNodeId = messageEvent.sourceNodeId }) + // Use this sender + transcriptionNodeId = messageEvent.sourceNodeId + aapsLogger.debug(LTag.WEAR, "Updated node: $transcriptionNodeId") } } } @@ -107,13 +111,15 @@ class DataLayerListenerServiceWear : WearableListenerService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { when (intent?.action) { - INTENT_CANCEL_BOLUS -> { + INTENT_CANCEL_BOLUS -> { //dismiss notification NotificationManagerCompat.from(this).cancel(BOLUS_PROGRESS_NOTIF_ID) //send cancel-request to phone. rxBus.send(EventWearToMobile(EventData.CancelBolus(System.currentTimeMillis()))) } + INTENT_WEAR_TO_MOBILE -> sendMessage(rxPath, intent.extras?.getString(KEY_ACTION_DATA)) + INTENT_CANCEL_NOTIFICATION -> (getSystemService(NOTIFICATION_SERVICE) as NotificationManager).cancel(CHANGE_NOTIF_ID) } return START_STICKY } @@ -125,7 +131,7 @@ class DataLayerListenerServiceWear : WearableListenerService() { capabilityClient.getCapability(PHONE_CAPABILITY, CapabilityClient.FILTER_REACHABLE) ) aapsLogger.debug(LTag.WEAR, "Nodes: ${capabilityInfo.nodes.joinToString(", ") { it.displayName + "(" + it.id + ")" }}") - transcriptionNodeId = pickBestNodeId(capabilityInfo.nodes) + pickBestNodeId(capabilityInfo.nodes)?.let { transcriptionNodeId = it } aapsLogger.debug(LTag.WEAR, "Selected node: $transcriptionNodeId") } @@ -156,16 +162,16 @@ class DataLayerListenerServiceWear : WearableListenerService() { } private fun sendMessage(path: String, data: String?) { - aapsLogger.debug(LTag.WEAR, "sendMessage: $path $data") transcriptionNodeId?.also { nodeId -> + aapsLogger.debug(LTag.WEAR, "sendMessage: $path $data") messageClient .sendMessage(nodeId, path, data?.toByteArray() ?: byteArrayOf()).apply { addOnSuccessListener { } addOnFailureListener { - aapsLogger.debug(LTag.WEAR, "sendMessage: $path failure") + aapsLogger.debug(LTag.WEAR, "sendMessage: $path failure $it") } } - } + } ?: aapsLogger.debug(LTag.WEAR, "sendMessage: Ignoring message. No node selected.") } @Suppress("unused") @@ -187,17 +193,16 @@ class DataLayerListenerServiceWear : WearableListenerService() { const val PHONE_CAPABILITY = "androidaps_mobile" // Accepted intents - val INTENT_CANCEL_BOLUS = DataLayerListenerServiceWear::class.java.name + ".CancelBolus" val INTENT_NEW_DATA = DataLayerListenerServiceWear::class.java.name + ".NewData" + val INTENT_CANCEL_BOLUS = DataLayerListenerServiceWear::class.java.name + ".CancelBolus" + val INTENT_WEAR_TO_MOBILE = DataLayerListenerServiceWear::class.java.name + ".WearToMobile" + val INTENT_CANCEL_NOTIFICATION = DataLayerListenerServiceWear::class.java.name + ".CancelNotification" //data keys const val KEY_ACTION_DATA = "actionData" const val KEY_ACTION = "action" const val KEY_MESSAGE = "message" - const val KEY_SINGLE_BG_DATA = "single_bg_data" - const val KEY_TREATMENTS_DATA = "treatments_data" - const val KEY_GRAPH_DATA = "graph_data" - const val KEY_STATUS_DATA = "status_data" + const val KEY_TITLE = "title" const val BOLUS_PROGRESS_NOTIF_ID = 1 const val CONFIRM_NOTIF_ID = 2 diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/IntentCancelNotification.kt b/wear/src/main/java/info/nightscout/androidaps/comm/IntentCancelNotification.kt new file mode 100644 index 0000000000..3c8b557ceb --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/comm/IntentCancelNotification.kt @@ -0,0 +1,11 @@ +package info.nightscout.androidaps.comm + +import android.content.Context +import android.content.Intent + +class IntentCancelNotification(context: Context) : Intent(context, DataLayerListenerServiceWear::class.java) { + init { + action = DataLayerListenerServiceWear.INTENT_CANCEL_NOTIFICATION + addFlags(FLAG_ACTIVITY_NEW_TASK) + } +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/comm/IntentWearToMobile.kt b/wear/src/main/java/info/nightscout/androidaps/comm/IntentWearToMobile.kt new file mode 100644 index 0000000000..bea1f9a157 --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/comm/IntentWearToMobile.kt @@ -0,0 +1,19 @@ +package info.nightscout.androidaps.comm + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import info.nightscout.shared.weardata.EventData + +class IntentWearToMobile(context: Context, command: String) : Intent(context, DataLayerListenerServiceWear::class.java) { + init { + action = DataLayerListenerServiceWear.INTENT_WEAR_TO_MOBILE + addFlags(FLAG_ACTIVITY_NEW_TASK) + putExtras(Bundle().also { bundle -> + bundle.putString(DataLayerListenerServiceWear.KEY_ACTION_DATA, command) + }) + } + + @Suppress("unused") + constructor(context: Context, command: EventData) : this(context, command.serialize()) +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/BaseComplicationProviderService.java b/wear/src/main/java/info/nightscout/androidaps/complications/BaseComplicationProviderService.java index 9593474390..0db70ad7e1 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/BaseComplicationProviderService.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/BaseComplicationProviderService.java @@ -40,6 +40,7 @@ import info.nightscout.shared.weardata.EventData; *

* Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public abstract class BaseComplicationProviderService extends ComplicationProviderService { @Inject Inevitable inevitable; @@ -56,9 +57,6 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid super.onCreate(); } - public static final String KEY_COMPLICATIONS = "complications"; - private static final String KEY_LAST_SHOWN_SINCE_VALUE = "lastSince"; - private static final String KEY_STALE_REPORTED = "staleReported"; private static final String TASK_ID_REFRESH_COMPLICATION = "refresh-complication"; @@ -201,7 +199,7 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid persistence.putString("complication_" + complicationId, getProviderCanonicalName()); persistence.putBoolean("complication_" + complicationId + "_since", usesSinceField()); - persistence.addToSet(KEY_COMPLICATIONS, "complication_" + complicationId); + persistence.addToSet(Persistence.KEY_COMPLICATIONS, "complication_" + complicationId); IntentFilter messageFilter = new IntentFilter(DataLayerListenerServiceWear.Companion.getINTENT_NEW_DATA()); @@ -237,15 +235,15 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid getApplicationContext(), thisProvider, complicationId, getComplicationAction()); final RawDisplayData raw = new RawDisplayData(); - raw.updateForComplicationsFromPersistence(persistence); + raw.updateFromPersistence(persistence); aapsLogger.warn(LTag.WEAR, "Complication data: " + raw.toDebugString()); // store what is currently rendered in 'SGV since' field, to detect if it was changed and need update - persistence.putString(KEY_LAST_SHOWN_SINCE_VALUE, + persistence.putString(Persistence.KEY_LAST_SHOWN_SINCE_VALUE, displayFormat.shortTimeSince(raw.getSingleBg().getTimeStamp())); // by each render we clear stale flag to ensure it is re-rendered at next refresh detection round - persistence.putBoolean(KEY_STALE_REPORTED, false); + persistence.putBoolean(Persistence.KEY_STALE_REPORTED, false); ComplicationData complicationData; @@ -280,7 +278,7 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid public void onComplicationDeactivated(int complicationId) { aapsLogger.warn(LTag.WEAR, "onComplicationDeactivated(): " + complicationId); - persistence.removeFromSet(KEY_COMPLICATIONS, "complication_" + complicationId); + persistence.removeFromSet(Persistence.KEY_COMPLICATIONS, "complication_" + complicationId); if (localBroadcastManager != null && messageReceiver != null) { localBroadcastManager.unregisterReceiver(messageReceiver); @@ -297,7 +295,7 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid */ public void checkIfUpdateNeeded() { - aapsLogger.warn(LTag.WEAR, "Pending check if update needed - " + persistence.getString(KEY_COMPLICATIONS, "")); + aapsLogger.warn(LTag.WEAR, "Pending check if update needed - " + persistence.getString(Persistence.KEY_COMPLICATIONS, "")); inevitable.task(TASK_ID_REFRESH_COMPLICATION, 15 * Constants.SECOND_IN_MS, () -> { if (wearUtil.isBelowRateLimit("complication-checkIfUpdateNeeded", 5)) { @@ -316,19 +314,19 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid */ private void requestUpdateIfSinceChanged() { final RawDisplayData raw = new RawDisplayData(); - raw.updateForComplicationsFromPersistence(persistence); + raw.updateFromPersistence(persistence); - final String lastSince = persistence.getString(KEY_LAST_SHOWN_SINCE_VALUE, "-"); + final String lastSince = persistence.getString(Persistence.KEY_LAST_SHOWN_SINCE_VALUE, "-"); final String calcSince = displayFormat.shortTimeSince(raw.getSingleBg().getTimeStamp()); final boolean isStale = (wearUtil.msSince(persistence.whenDataUpdated()) > Constants.STALE_MS) || (wearUtil.msSince(raw.getSingleBg().getTimeStamp()) > Constants.STALE_MS); - final boolean staleWasRefreshed = persistence.getBoolean(KEY_STALE_REPORTED, false); + final boolean staleWasRefreshed = persistence.getBoolean(Persistence.KEY_STALE_REPORTED, false); final boolean sinceWasChanged = !lastSince.equals(calcSince); if (sinceWasChanged || (isStale && !staleWasRefreshed)) { - persistence.putString(KEY_LAST_SHOWN_SINCE_VALUE, calcSince); - persistence.putBoolean(KEY_STALE_REPORTED, isStale); + persistence.putString(Persistence.KEY_LAST_SHOWN_SINCE_VALUE, calcSince); + persistence.putBoolean(Persistence.KEY_STALE_REPORTED, isStale); aapsLogger.warn(LTag.WEAR, "Detected refresh of time needed! Reason: " + (isStale ? "- stale detected" : "") @@ -367,7 +365,7 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid */ private Set getActiveProviderClasses() { Set providers = new HashSet<>(); - Set complications = persistence.getSetOf(KEY_COMPLICATIONS); + Set complications = persistence.getSetOf(Persistence.KEY_COMPLICATIONS); for (String complication : complications) { final String providerClass = persistence.getString(complication, ""); if (providerClass.length() > 0) { @@ -384,7 +382,7 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid */ private Set getSinceDependingProviderClasses() { Set providers = new HashSet<>(); - Set complications = persistence.getSetOf(KEY_COMPLICATIONS); + Set complications = persistence.getSetOf(Persistence.KEY_COMPLICATIONS); for (String complication : complications) { final String providerClass = persistence.getString(complication, ""); final boolean dependOnSince = persistence.getBoolean(complication + "_since", false); @@ -401,14 +399,16 @@ public abstract class BaseComplicationProviderService extends ComplicationProvid public class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - Set complications = persistence.getSetOf(KEY_COMPLICATIONS); - if (complications.size() > 0) { - checkIfUpdateNeeded(); - // We request all active providers - requestUpdate(getActiveProviderClasses()); - } + updateAll(); } } - + private void updateAll() { + Set complications = persistence.getSetOf(Persistence.KEY_COMPLICATIONS); + if (complications.size() > 0) { + checkIfUpdateNeeded(); + // We request all active providers + requestUpdate(getActiveProviderClasses()); + } + } } diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/BrCobIobComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/BrCobIobComplication.java index bdbc079793..48c4171d91 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/BrCobIobComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/BrCobIobComplication.java @@ -15,6 +15,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class BrCobIobComplication extends BaseComplicationProviderService { @Inject DisplayFormat displayFormat; diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/CobDetailedComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/CobDetailedComplication.java index 3f77ca3fb5..17693f8547 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/CobDetailedComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/CobDetailedComplication.java @@ -11,6 +11,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class CobDetailedComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/CobIconComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/CobIconComplication.java index c679635e4c..a0dcde11b7 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/CobIconComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/CobIconComplication.java @@ -12,6 +12,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class CobIconComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/CobIobComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/CobIobComplication.java index 411b1e943b..b50ebba72f 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/CobIobComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/CobIobComplication.java @@ -11,6 +11,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class CobIobComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/ComplicationTapBroadcastReceiver.java b/wear/src/main/java/info/nightscout/androidaps/complications/ComplicationTapBroadcastReceiver.java index 96b0b36412..cd6f956720 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/ComplicationTapBroadcastReceiver.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/ComplicationTapBroadcastReceiver.java @@ -29,6 +29,7 @@ import info.nightscout.shared.sharedPreferences.SP; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class ComplicationTapBroadcastReceiver extends DaggerBroadcastReceiver { @Inject WearUtil wearUtil; @@ -64,7 +65,7 @@ public class ComplicationTapBroadcastReceiver extends DaggerBroadcastReceiver { action = remapActionWithUserPreferences(action); // Request an update for the complication that has just been tapped. - ProviderUpdateRequester requester = new ProviderUpdateRequester(context, provider); + ProviderUpdateRequester requester = new ProviderUpdateRequester(context, provider); requester.requestUpdate(complicationId); Intent intentOpen = null; diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/IobDetailedComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/IobDetailedComplication.java index 55b6f7168c..23db29f49a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/IobDetailedComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/IobDetailedComplication.java @@ -11,6 +11,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class IobDetailedComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/IobIconComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/IobIconComplication.java index 632ac70c05..d9f66de4ac 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/IobIconComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/IobIconComplication.java @@ -13,6 +13,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class IobIconComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusComplication.java index ad03acfab4..3131b09161 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusComplication.java @@ -14,6 +14,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class LongStatusComplication extends BaseComplicationProviderService { @Inject DisplayFormat displayFormat; diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusFlippedComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusFlippedComplication.java index c66c994d69..e8f4f0a9c2 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusFlippedComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/LongStatusFlippedComplication.java @@ -14,6 +14,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class LongStatusFlippedComplication extends BaseComplicationProviderService { @Inject DisplayFormat displayFormat; diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/SgvComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/SgvComplication.java index 62d08ad8ba..8934a8df2d 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/SgvComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/SgvComplication.java @@ -14,6 +14,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class SgvComplication extends BaseComplicationProviderService { @Inject DisplayFormat displayFormat; diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/UploaderBatteryComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/UploaderBatteryComplication.java index 6211641bb8..9e5e0b52c8 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/UploaderBatteryComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/UploaderBatteryComplication.java @@ -14,6 +14,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public class UploaderBatteryComplication extends BaseComplicationProviderService { public ComplicationData buildComplicationData(int dataType, RawDisplayData raw, PendingIntent complicationPendingIntent) { diff --git a/wear/src/main/java/info/nightscout/androidaps/complications/WallpaperComplication.java b/wear/src/main/java/info/nightscout/androidaps/complications/WallpaperComplication.java index dfceeb4a03..e18b81e98a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/complications/WallpaperComplication.java +++ b/wear/src/main/java/info/nightscout/androidaps/complications/WallpaperComplication.java @@ -19,6 +19,7 @@ import info.nightscout.shared.logging.LTag; /* * Created by dlvoy on 2019-11-12 */ +@SuppressWarnings("deprecation") public abstract class WallpaperComplication extends BaseComplicationProviderService { public abstract String getWallpaperAssetsFileName(); diff --git a/wear/src/main/java/info/nightscout/androidaps/data/RawDisplayData.kt b/wear/src/main/java/info/nightscout/androidaps/data/RawDisplayData.kt index ece27dee0d..471fc91b42 100644 --- a/wear/src/main/java/info/nightscout/androidaps/data/RawDisplayData.kt +++ b/wear/src/main/java/info/nightscout/androidaps/data/RawDisplayData.kt @@ -1,7 +1,5 @@ package info.nightscout.androidaps.data -import android.content.Intent -import info.nightscout.androidaps.comm.DataLayerListenerServiceWear import info.nightscout.androidaps.interaction.utils.Persistence import info.nightscout.shared.weardata.EventData @@ -11,17 +9,23 @@ import info.nightscout.shared.weardata.EventData * passing it to complications via persistence layer. * * Created by dlvoy on 2019-11-12 + * Refactored by MilosKozak 24/04/2022 + * */ class RawDisplayData { - // bg data bundle var singleBg = EventData.SingleBg( timeStamp = 0, + sgvString = "---", + glucoseUnits = "-", + slopeArrow = "--", + delta = "--", + avgDelta = "--", + sgvLevel = 0, sgv = 0.0, high = 0.0, low = 0.0, - color = 0 - ) + color = 0) // status bundle var status = EventData.Status( @@ -39,16 +43,15 @@ class RawDisplayData { batteryLevel = 1 ) - // basals bundle var graphData = EventData.GraphData( - entries = ArrayList() + entries = ArrayList() ) var treatmentData = EventData.TreatmentData( - temps = ArrayList(), - basals = ArrayList(), - boluses = ArrayList(), - predictions = ArrayList() + temps = ArrayList(), + basals = ArrayList(), + boluses = ArrayList(), + predictions = ArrayList() ) fun toDebugString(): String = @@ -60,36 +63,4 @@ class RawDisplayData { persistence.readStatus()?.let { status = it } persistence.readTreatments()?.let { treatmentData = it } } - - /* - * Since complications do not need Basals, we skip them for performance - */ - fun updateForComplicationsFromPersistence(persistence: Persistence) { - persistence.readSingleBg()?.let { singleBg = it } - persistence.readGraphData()?.let { graphData = it } - persistence.readStatus()?.let { status = it } - } - - fun updateFromMessage(intent: Intent) { - intent.getStringExtra(DataLayerListenerServiceWear.KEY_SINGLE_BG_DATA)?.let{ - singleBg = EventData.deserialize(it) as EventData.SingleBg - } - intent.getStringExtra(DataLayerListenerServiceWear.KEY_STATUS_DATA)?.let{ - status = EventData.deserialize(it) as EventData.Status - } - intent.getStringExtra(DataLayerListenerServiceWear.KEY_TREATMENTS_DATA)?.let{ - treatmentData = EventData.deserialize(it) as EventData.TreatmentData - } - intent.getStringExtra(DataLayerListenerServiceWear.KEY_GRAPH_DATA)?.let{ - graphData = EventData.deserialize(it) as EventData.GraphData - } - } - - companion object { - - const val BG_DATA_PERSISTENCE_KEY = "raw_data" - const val GRAPH_DATA_PERSISTENCE_KEY = "raw_data" - const val BASALS_PERSISTENCE_KEY = "raw_basals" - const val STATUS_PERSISTENCE_KEY = "raw_status" - } } \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt index 20f380df43..2134f60f6d 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/actions/AcceptActivity.kt @@ -19,9 +19,8 @@ import androidx.core.view.MotionEventCompat import androidx.core.view.ViewConfigurationCompat import info.nightscout.androidaps.R import info.nightscout.androidaps.comm.DataLayerListenerServiceWear -import info.nightscout.androidaps.events.EventWearToMobile -import info.nightscout.shared.weardata.EventData.CancelNotification -import info.nightscout.shared.weardata.EventData.Companion.deserialize +import info.nightscout.androidaps.comm.IntentCancelNotification +import info.nightscout.androidaps.comm.IntentWearToMobile import kotlin.math.roundToInt class AcceptActivity : ViewSelectorActivity() { @@ -35,9 +34,9 @@ class AcceptActivity : ViewSelectorActivity() { dismissThread = DismissThread() dismissThread?.start() val extras = intent.extras - message = extras?.getString("message", "") ?: "" + message = extras?.getString(DataLayerListenerServiceWear.KEY_MESSAGE, "") ?: "" actionKey = extras?.getString(DataLayerListenerServiceWear.KEY_ACTION_DATA, "") ?: "" - if (message.isEmpty() || actionKey.isEmpty()) { + if (message.isEmpty()) { finish() return } @@ -84,9 +83,8 @@ class AcceptActivity : ViewSelectorActivity() { view = LayoutInflater.from(applicationContext).inflate(R.layout.action_confirm_ok, container, false) val confirmButton = view.findViewById(R.id.confirmbutton) confirmButton.setOnClickListener { - val returnCommand = deserialize(actionKey) - rxBus.send(EventWearToMobile(returnCommand)) - rxBus.send(CancelNotification(System.currentTimeMillis())) + if (actionKey.isNotEmpty()) startService(IntentWearToMobile(this@AcceptActivity, actionKey)) + startService(IntentCancelNotification(this@AcceptActivity)) finishAffinity() } container.addView(view) diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.java b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.java deleted file mode 100644 index a0856395d9..0000000000 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.java +++ /dev/null @@ -1,185 +0,0 @@ -package info.nightscout.androidaps.interaction.utils; - -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Base64; - -import androidx.annotation.Nullable; - -import java.util.HashSet; -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import info.nightscout.androidaps.complications.BaseComplicationProviderService; -import info.nightscout.androidaps.data.RawDisplayData; -import info.nightscout.shared.logging.AAPSLogger; -import info.nightscout.shared.logging.LTag; -import info.nightscout.shared.weardata.EventData; - -/** - * Created by dlvoy on 2019-11-12 - */ -@Singleton -public class Persistence { - - private final AAPSLogger aapsLogger; - private final WearUtil wearUtil; - private final SharedPreferences preferences; - private final String COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY = - "info.nightscout.androidaps.complications.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY"; - - @Inject - public Persistence(Context context, AAPSLogger aapsLogger, WearUtil wearUtil) { - this.aapsLogger = aapsLogger; - this.wearUtil = wearUtil; - preferences = context.getSharedPreferences(COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0); - } - - // For mocking only - public byte[] base64decode(String str, int flags) { - return Base64.decode(str, flags); - } - - // For mocking only - public String base64encodeToString(byte[] input, int flags) { - return Base64.encodeToString(input, flags); - } - - public String getString(String key, String defaultValue) { - return preferences.getString(key, defaultValue); - } - - public void putString(String key, String value) { - preferences.edit().putString(key, value).apply(); - } - - public boolean getBoolean(String key, boolean defaultValue) { - return preferences.getBoolean(key, defaultValue); - } - - public void putBoolean(String key, boolean value) { - preferences.edit().putBoolean(key, value).apply(); - } - - public long whenDataUpdated() { - return preferences.getLong("data_updated_at", 0); - } - - private void markDataUpdated() { - preferences.edit().putLong("data_updated_at", wearUtil.timestamp()).apply(); - } - - public Set getSetOf(String key) { - return explodeSet(getString(key, ""), "|"); - } - - public void addToSet(String key, String value) { - final Set set = explodeSet(getString(key, ""), "|"); - set.add(value); - putString(key, joinSet(set, "|")); - } - - public void removeFromSet(String key, String value) { - final Set set = explodeSet(getString(key, ""), "|"); - set.remove(value); - putString(key, joinSet(set, "|")); - } - - public void store(EventData.SingleBg singleBg) { - putString(RawDisplayData.BG_DATA_PERSISTENCE_KEY, singleBg.serialize()); - markDataUpdated(); - } - - @Nullable - public EventData.SingleBg readSingleBg() { - try { - String s = getString(RawDisplayData.BG_DATA_PERSISTENCE_KEY, null); - if (s != null) { - return (EventData.SingleBg) EventData.Companion.deserialize(s); - } - } catch (Exception ignored) {} - return null; - } - - @Nullable - public EventData.Status readStatus() { - try { - String s = getString(RawDisplayData.STATUS_PERSISTENCE_KEY, null); - if (s != null) { - return (EventData.Status) EventData.Companion.deserialize(s); - } - } catch (Exception ignored) {} - return null; - } - - @Nullable - public EventData.TreatmentData readTreatments() { - try { - String s = getString(RawDisplayData.BASALS_PERSISTENCE_KEY, null); - if (s != null) { - return (EventData.TreatmentData) EventData.Companion.deserialize(s); - } - } catch (Exception ignored) {} - return null; - } - - @Nullable - public EventData.GraphData readGraphData() { - try { - String s = getString(RawDisplayData.BG_DATA_PERSISTENCE_KEY, null); - if (s != null) { - return (EventData.GraphData) EventData.Companion.deserialize(s); - } - } catch (Exception ignored) {} - return null; - } - - public void store(EventData.GraphData graphData) { - putString(RawDisplayData.GRAPH_DATA_PERSISTENCE_KEY, graphData.serialize()); - } - - public void store(EventData.TreatmentData treatmentData) { - putString(RawDisplayData.BASALS_PERSISTENCE_KEY, treatmentData.serialize()); - } - - public void store(EventData.Status status) { - putString(RawDisplayData.STATUS_PERSISTENCE_KEY, status.serialize()); - } - - public String joinSet(Set set, String separator) { - StringBuilder sb = new StringBuilder(); - int i = 0; - for (String item : set) { - final String itemToAdd = item.trim(); - if (itemToAdd.length() > 0) { - if (i > 0) { - sb.append(separator); - } - i++; - sb.append(itemToAdd); - } - } - return sb.toString(); - } - - public Set explodeSet(String joined, String separator) { - // special RegEx literal \\Q starts sequence we escape, \\E ends is - // we use it to escape separator for use in RegEx - String[] items = joined.split("\\Q"+separator+"\\E"); - Set set = new HashSet<>(); - for (String item : items) { - final String itemToAdd = item.trim(); - if (itemToAdd.length() > 0) { - set.add(itemToAdd); - } - } - return set; - } - - public void turnOff() { - aapsLogger.debug(LTag.WEAR, "TURNING OFF all active complications"); - putString(BaseComplicationProviderService.KEY_COMPLICATIONS, ""); - } -} diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.kt b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.kt new file mode 100644 index 0000000000..a41a0b5453 --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/Persistence.kt @@ -0,0 +1,195 @@ +package info.nightscout.androidaps.interaction.utils + +import android.util.Base64 +import info.nightscout.androidaps.utils.DateUtil +import info.nightscout.shared.logging.AAPSLogger +import info.nightscout.shared.logging.LTag +import info.nightscout.shared.sharedPreferences.SP +import info.nightscout.shared.weardata.EventData +import info.nightscout.shared.weardata.EventData.Companion.deserialize +import info.nightscout.shared.weardata.EventData.SingleBg +import info.nightscout.shared.weardata.EventData.TreatmentData +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Created by dlvoy on 2019-11-12 + * Refactored by MilosKozak 25/04/2022 + */ +@Singleton +class Persistence @Inject constructor( + private val aapsLogger: AAPSLogger, + private val dateUtil: DateUtil, + private val sp: SP +) { + + companion object { + + const val BG_DATA_PERSISTENCE_KEY = "bg_data" + const val GRAPH_DATA_PERSISTENCE_KEY = "graph_data" + const val TREATMENT_PERSISTENCE_KEY = "treatment_data" + const val STATUS_PERSISTENCE_KEY = "status_data" + + const val KEY_COMPLICATIONS = "complications" + const val KEY_LAST_SHOWN_SINCE_VALUE = "lastSince" + const val KEY_STALE_REPORTED = "staleReported" + const val KEY_DATA_UPDATED = "data_updated_at" + + } + + // For mocking only + fun base64decode(str: String, flags: Int): ByteArray { + return Base64.decode(str, flags) + } + + // For mocking only + fun base64encodeToString(input: ByteArray, flags: Int): String { + return Base64.encodeToString(input, flags) + } + + fun getString(key: String, defaultValue: String): String { + return sp.getString(key, defaultValue) + } + + fun putString(key: String, value: String) { + sp.putString(key, value) + } + + fun getBoolean(key: String, defaultValue: Boolean): Boolean { + return sp.getBoolean(key, defaultValue) + } + + fun putBoolean(key: String, value: Boolean) { + sp.putBoolean(key, value) + } + + fun whenDataUpdated(): Long { + return sp.getLong(KEY_DATA_UPDATED, 0) + } + + private fun markDataUpdated() { + sp.putLong(KEY_DATA_UPDATED, dateUtil.now()) + } + + fun getSetOf(key: String): Set { + return explodeSet(getString(key, ""), "|") + } + + fun addToSet(key: String, value: String) { + val set = explodeSet(getString(key, ""), "|") + set.add(value) + putString(key, joinSet(set, "|")) + } + + fun removeFromSet(key: String, value: String) { + val set = explodeSet(getString(key, ""), "|") + set.remove(value) + putString(key, joinSet(set, "|")) + } + + fun readSingleBg(): SingleBg? { + try { + val s = sp.getStringOrNull(BG_DATA_PERSISTENCE_KEY, null) + //aapsLogger.debug(LTag.WEAR, "Loaded BG data: $s") + if (s != null) { + return deserialize(s) as SingleBg + } + } catch (exception: Exception) { + aapsLogger.error(LTag.WEAR, exception.toString()) + } + return null + } + + fun readStatus(): EventData.Status? { + try { + val s = sp.getStringOrNull(STATUS_PERSISTENCE_KEY, null) + //aapsLogger.debug(LTag.WEAR, "Loaded Status data: $s") + if (s != null) { + return deserialize(s) as EventData.Status + } + } catch (exception: Exception) { + aapsLogger.error(LTag.WEAR, exception.toString()) + } + return null + } + + fun readTreatments(): TreatmentData? { + try { + val s = sp.getStringOrNull(TREATMENT_PERSISTENCE_KEY, null) + //aapsLogger.debug(LTag.WEAR, "Loaded Treatments data: $s") + if (s != null) { + return deserialize(s) as TreatmentData + } + } catch (exception: Exception) { + aapsLogger.error(LTag.WEAR, exception.toString()) + } + return null + } + + fun readGraphData(): EventData.GraphData? { + try { + val s = sp.getStringOrNull(GRAPH_DATA_PERSISTENCE_KEY, null) + //aapsLogger.debug(LTag.WEAR, "Loaded Graph data: $s") + if (s != null) { + return deserialize(s) as EventData.GraphData + } + } catch (exception: Exception) { + aapsLogger.error(LTag.WEAR, exception.toString()) + } + return null + } + + fun store(singleBg: SingleBg) { + putString(BG_DATA_PERSISTENCE_KEY, singleBg.serialize()) + aapsLogger.debug(LTag.WEAR, "Stored BG data: $singleBg") + markDataUpdated() + } + + fun store(graphData: EventData.GraphData) { + putString(GRAPH_DATA_PERSISTENCE_KEY, graphData.serialize()) + aapsLogger.debug(LTag.WEAR, "Stored Graph data: $graphData") + } + + fun store(treatmentData: TreatmentData) { + putString(TREATMENT_PERSISTENCE_KEY, treatmentData.serialize()) + aapsLogger.debug(LTag.WEAR, "Stored Treatments data: $treatmentData") + } + + fun store(status: EventData.Status) { + putString(STATUS_PERSISTENCE_KEY, status.serialize()) + aapsLogger.debug(LTag.WEAR, "Stored Status data: $status") + } + + fun joinSet(set: Set, separator: String?): String { + val sb = StringBuilder() + var i = 0 + for (item in set) { + val itemToAdd = item.trim { it <= ' ' } + if (itemToAdd.isNotEmpty()) { + if (i > 0) sb.append(separator) + i++ + sb.append(itemToAdd) + } + } + return sb.toString() + } + + fun explodeSet(joined: String, separator: String): MutableSet { + // special RegEx literal \\Q starts sequence we escape, \\E ends is + // we use it to escape separator for use in RegEx + val items = joined.split("\\Q$separator\\E").toTypedArray() + val set: MutableSet = HashSet() + for (item in items) { + val itemToAdd = item.trim { it <= ' ' } + if (itemToAdd.isNotEmpty()) { + set.add(itemToAdd) + } + } + return set + } + + fun turnOff() { + aapsLogger.debug(LTag.WEAR, "TURNING OFF all active complications") + putString(KEY_COMPLICATIONS, "") + } +} \ No newline at end of file diff --git a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.java b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.java index 429537bf07..64503f089e 100644 --- a/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.java +++ b/wear/src/main/java/info/nightscout/androidaps/interaction/utils/PlusMinusEditText.java @@ -23,17 +23,16 @@ import java.util.concurrent.TimeUnit; public class PlusMinusEditText implements View.OnKeyListener, View.OnTouchListener, View.OnClickListener, View.OnGenericMotionListener { - Integer editTextID; public TextView editText; ImageView minusImage; ImageView plusImage; Double value; - Double minValue = 0d; - Double maxValue = 1d; - Double step = 1d; + Double minValue; + Double maxValue; + Double step; NumberFormat formatter; - boolean allowZero = false; + boolean allowZero; boolean roundRobin; private int mChangeCounter = 0; @@ -50,14 +49,13 @@ public class PlusMinusEditText implements View.OnKeyListener, private int repeated = 0; private int multiplier = 1; - private final int doubleLimit = 5; - public UpdateCounterTask(boolean inc) { mInc = inc; } public void run() { Message msg = new Message(); + int doubleLimit = 5; if (repeated % doubleLimit == 0) multiplier *= 2; repeated++; msg.arg1 = multiplier; @@ -125,10 +123,6 @@ public class PlusMinusEditText implements View.OnKeyListener, return value; } - public void setStep(Double step) { - this.step = step; - } - private void inc(int multiplier) { value += step * multiplier; if (value > maxValue) { diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt index 96f4e09fc0..12ea214fac 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.kt @@ -1,3 +1,5 @@ +@file:Suppress("DEPRECATION") + package info.nightscout.androidaps.watchfaces import android.annotation.SuppressLint @@ -25,6 +27,7 @@ import com.ustwo.clockwise.common.WatchShape import com.ustwo.clockwise.wearable.WatchFace import dagger.android.AndroidInjection import info.nightscout.androidaps.R +import info.nightscout.androidaps.data.RawDisplayData import info.nightscout.androidaps.events.EventWearPreferenceChange import info.nightscout.androidaps.events.EventWearToMobile import info.nightscout.androidaps.extensions.toVisibility @@ -66,10 +69,12 @@ abstract class BaseWatchFace : WatchFace() { private var disposable = CompositeDisposable() - protected var singleBg = SingleBg(0, "---", "-", "--", "--", "--", 0, 0.0, 0.0, 0.0, 0) - protected var status = EventData.Status("no status", "IOB", "-.--", false, "--g", "-.--U/h", "--", "--", -1, "--", false, 1) - protected var treatmentData = TreatmentData(ArrayList(), ArrayList(), ArrayList(), ArrayList()) - protected var graphData = EventData.GraphData(ArrayList()) + private val rawData = RawDisplayData() + + protected val singleBg get() = rawData.singleBg + protected val status get() = rawData.status + protected val treatmentData get() = rawData.treatmentData + protected val graphData get() = rawData.graphData // Layout @LayoutRes abstract fun layoutResource(): Int @@ -169,30 +174,19 @@ abstract class BaseWatchFace : WatchFace() { if (layoutSet) setDataFields() invalidate() } - disposable += rxBus - .toObservable(SingleBg::class.java) - .observeOn(aapsSchedulers.main) - .subscribe { event: SingleBg -> singleBg = event } - disposable += rxBus - .toObservable(TreatmentData::class.java) - .observeOn(aapsSchedulers.main) - .subscribe { event: TreatmentData -> treatmentData = event } - disposable += rxBus - .toObservable(EventData.GraphData::class.java) - .observeOn(aapsSchedulers.main) - .subscribe { event: EventData.GraphData -> graphData = event } disposable += rxBus .toObservable(EventData.Status::class.java) .observeOn(aapsSchedulers.main) - .subscribe { event: EventData.Status -> - status = event + .subscribe { // this event is received as last batch of data + rawData.updateFromPersistence(persistence) if (!isSimpleUi || !needUpdate()) { setupCharts() setDataFields() } invalidate() } + rawData.updateFromPersistence(persistence) persistence.turnOff() setupBatteryReceiver() setupSimpleUi() diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CircleWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CircleWatchface.kt index 6584b64d1f..20e9f511ce 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/CircleWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/CircleWatchface.kt @@ -20,8 +20,10 @@ import com.ustwo.clockwise.common.WatchFaceTime import com.ustwo.clockwise.wearable.WatchFace import dagger.android.AndroidInjection import info.nightscout.androidaps.R +import info.nightscout.androidaps.data.RawDisplayData import info.nightscout.androidaps.events.EventWearToMobile import info.nightscout.androidaps.interaction.menus.MainMenuActivity +import info.nightscout.androidaps.interaction.utils.Persistence import info.nightscout.androidaps.plugins.bus.RxBus import info.nightscout.androidaps.utils.rx.AapsSchedulers import info.nightscout.shared.logging.AAPSLogger @@ -45,11 +47,15 @@ class CircleWatchface : WatchFace() { @Inject lateinit var aapsSchedulers: AapsSchedulers @Inject lateinit var aapsLogger: AAPSLogger @Inject lateinit var sp: SP + @Inject lateinit var persistence: Persistence private var disposable = CompositeDisposable() - private var singleBg = SingleBg(0, "---", "-", "--", "--", "--", 0, 0.0, 0.0, 0.0, 0) - private var graphData = EventData.GraphData(ArrayList()) - private var status = EventData.Status("no status", "IOB", "-.--", false, "--g", "-.--U/h", "--", "--", -1, "--", false, 1) + + private val rawData = RawDisplayData() + + private val singleBg get() = rawData.singleBg + private val status get() = rawData.status + private val graphData get() = rawData.graphData companion object { @@ -96,21 +102,13 @@ class CircleWatchface : WatchFace() { myLayout = inflater.inflate(R.layout.activity_circle, null) prepareLayout() prepareDrawTime() - disposable += rxBus - .toObservable(SingleBg::class.java) - .observeOn(aapsSchedulers.main) - .subscribe { event -> singleBg = event } - disposable += rxBus - .toObservable(EventData.GraphData::class.java) - .observeOn(aapsSchedulers.main) - .subscribe { event -> graphData = event } disposable += rxBus .toObservable(EventData.Status::class.java) .observeOn(aapsSchedulers.main) - .subscribe { event -> + .subscribe { // this event is received as last batch of data aapsLogger.debug(LTag.WEAR, "Status received") - status = event + rawData.updateFromPersistence(persistence) addToWatchSet() prepareLayout() prepareDrawTime() @@ -124,6 +122,7 @@ class CircleWatchface : WatchFace() { prepareLayout() invalidate() } + rawData.updateFromPersistence(persistence) rxBus.send(EventWearToMobile(ActionResendData("CircleWatchFace::onCreate"))) wakeLock.release() } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt b/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt index 6f12bde236..3bc0c08ae1 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/SteampunkWatchface.kt @@ -1,3 +1,5 @@ +@file:Suppress("DEPRECATION") + package info.nightscout.androidaps.watchfaces import android.view.animation.Animation