From 6340f73d614cd9d2f877ab21da15799214fd877a Mon Sep 17 00:00:00 2001 From: darken Date: Sat, 5 Nov 2022 12:01:40 +0100 Subject: [PATCH 1/3] Throttle pod device data for the UI, notifications or widgets. We don't need faster updates than 1 per second. (We keep reactions at maximum speed tho) --- .../java/eu/darken/capod/common/flow/FlowExtensions.kt | 8 ++++++++ .../darken/capod/wear/ui/overview/OverviewFragmentVM.kt | 3 ++- app/src/main/java/eu/darken/capod/App.kt | 2 ++ .../darken/capod/main/ui/overview/OverviewFragmentVM.kt | 2 ++ .../eu/darken/capod/monitor/core/worker/MonitorWorker.kt | 2 ++ 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app-common/src/main/java/eu/darken/capod/common/flow/FlowExtensions.kt b/app-common/src/main/java/eu/darken/capod/common/flow/FlowExtensions.kt index d3e13ead..cc372160 100644 --- a/app-common/src/main/java/eu/darken/capod/common/flow/FlowExtensions.kt +++ b/app-common/src/main/java/eu/darken/capod/common/flow/FlowExtensions.kt @@ -7,6 +7,7 @@ import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.error.hasCause import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlin.time.Duration @@ -71,4 +72,11 @@ fun Flow.setupCommonEventHandlers(tag: String, identifier: () -> String) log(tag, ERROR) { "${identifier()} failed: ${it.asLog()}" } throw it } + } + +fun Flow.throttleLatest(delayMillis: Long): Flow = this + .conflate() + .transform { + emit(it) + delay(delayMillis) } \ No newline at end of file diff --git a/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt b/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt index b13589ee..9b9c8ac3 100644 --- a/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt +++ b/app-wear/src/main/java/eu/darken/capod/wear/ui/overview/OverviewFragmentVM.kt @@ -9,6 +9,7 @@ import eu.darken.capod.common.debug.autoreport.DebugSettings import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.flow.combine +import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.common.livedata.SingleLiveEvent import eu.darken.capod.common.permissions.Permission import eu.darken.capod.common.uix.ViewModel3 @@ -76,7 +77,7 @@ class OverviewFragmentVM @Inject constructor( permissionTool.missingPermissions, debugSettings.isDebugModeEnabled.flow, bluetoothManager.isBluetoothEnabled, - podMonitor.mainDevice, + podMonitor.mainDevice.throttleLatest(1000), ) { _, permissions, isDebugMode, isBluetoothEnabled, _ -> val items = mutableListOf() diff --git a/app/src/main/java/eu/darken/capod/App.kt b/app/src/main/java/eu/darken/capod/App.kt index ded7aab7..2217d66a 100644 --- a/app/src/main/java/eu/darken/capod/App.kt +++ b/app/src/main/java/eu/darken/capod/App.kt @@ -8,6 +8,7 @@ import dagger.hilt.android.HiltAndroidApp import eu.darken.capod.common.coroutine.AppScope import eu.darken.capod.common.debug.autoreport.AutoReporting import eu.darken.capod.common.debug.logging.* +import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.ui.widget.WidgetManager import eu.darken.capod.monitor.core.PodMonitor @@ -49,6 +50,7 @@ open class App : Application(), Configuration.Provider { podMonitor.mainDevice .distinctUntilChanged() + .throttleLatest(1000) .onEach { log(TAG) { "Main device changed, refreshing widgets." } widgetManager.refreshWidgets() diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt index 73f4b03c..87b5ac29 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewFragmentVM.kt @@ -9,6 +9,7 @@ import eu.darken.capod.common.coroutine.DispatcherProvider import eu.darken.capod.common.debug.autoreport.DebugSettings import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.flow.combine +import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.common.livedata.SingleLiveEvent import eu.darken.capod.common.navigation.navVia import eu.darken.capod.common.permissions.Permission @@ -96,6 +97,7 @@ class OverviewFragmentVM @Inject constructor( } } .catch { errorEvents.postValue(it) } + .throttleLatest(1000) val listItems: LiveData> = combine( updateTicker, diff --git a/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorWorker.kt b/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorWorker.kt index 4f22cec9..12fc8e32 100644 --- a/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorWorker.kt +++ b/app/src/main/java/eu/darken/capod/monitor/core/worker/MonitorWorker.kt @@ -17,6 +17,7 @@ import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.flow.setupCommonEventHandlers +import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.main.core.GeneralSettings import eu.darken.capod.main.core.MonitorMode import eu.darken.capod.main.core.PermissionTool @@ -101,6 +102,7 @@ class MonitorWorker @AssistedInject constructor( .setupCommonEventHandlers(TAG) { "PodMonitor" } .onStart { setForeground(monitorNotifications.getForegroundInfo(null)) } .distinctUntilChanged() + .throttleLatest(1000) .onEach { currentDevice -> notificationManager.notify( MonitorNotifications.NOTIFICATION_ID, From 1ef09124af7c24685d853d319d5833bc13d53213 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn Date: Sat, 5 Nov 2022 12:11:33 +0100 Subject: [PATCH 2/3] Improve notification theming (#47) * Make notification themes more dynamic to adapt to day/night/system themes. * Fix broken style references --- .../layout/monitor_notification_dual_pods_small.xml | 1 + .../monitor_notification_single_pods_small.xml | 1 + .../monitor_notification_unknown_device_small.xml | 1 + app/src/main/res/values/styles.xml | 12 ++++++++++++ 4 files changed, 15 insertions(+) diff --git a/app/src/main/res/layout/monitor_notification_dual_pods_small.xml b/app/src/main/res/layout/monitor_notification_dual_pods_small.xml index a886634d..3424f53e 100644 --- a/app/src/main/res/layout/monitor_notification_dual_pods_small.xml +++ b/app/src/main/res/layout/monitor_notification_dual_pods_small.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + style="@style/Notification.Container" android:layout_marginHorizontal="8dp" android:orientation="horizontal"> diff --git a/app/src/main/res/layout/monitor_notification_single_pods_small.xml b/app/src/main/res/layout/monitor_notification_single_pods_small.xml index ef802ffa..8d9d7520 100644 --- a/app/src/main/res/layout/monitor_notification_single_pods_small.xml +++ b/app/src/main/res/layout/monitor_notification_single_pods_small.xml @@ -2,6 +2,7 @@ diff --git a/app/src/main/res/layout/monitor_notification_unknown_device_small.xml b/app/src/main/res/layout/monitor_notification_unknown_device_small.xml index b79e8b64..8ac90963 100644 --- a/app/src/main/res/layout/monitor_notification_unknown_device_small.xml +++ b/app/src/main/res/layout/monitor_notification_unknown_device_small.xml @@ -1,6 +1,7 @@ diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ebd3559f..5d863d15 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,14 +7,26 @@ 8dp + + + +