diff --git a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt
index d0439a94..66e2a226 100644
--- a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt
+++ b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt
@@ -15,6 +15,7 @@ import eu.darken.capod.pods.core.SinglePodDevice
import eu.darken.capod.pods.core.formatBatteryPercent
import eu.darken.capod.pods.core.getBatteryDrawable
import javax.inject.Inject
+import kotlin.math.roundToInt
class MonitorNotificationViewFactory @Inject constructor(
@@ -78,9 +79,79 @@ class MonitorNotificationViewFactory @Inject constructor(
private fun createUnknownDevice(device: PodDevice): RemoteViews = RemoteViews(
context.packageName,
- R.layout.monitor_notification_dual_pods_small
+ R.layout.monitor_notification_unknown_device_small
).apply {
setTextViewText(R.id.device, device.getLabel(context))
}
+ fun createBigContentView(device: PodDevice): RemoteViews = when (device) {
+ is DualPodDevice -> createDualPodsBig(device)
+ is SinglePodDevice -> createSinglePodBig(device)
+ else -> createUnknownDeviceBig(device)
+ }
+
+ private fun createDualPodsBig(device: DualPodDevice): RemoteViews = RemoteViews(
+ context.packageName,
+ R.layout.monitor_notification_dual_pods_big
+ ).apply {
+ // Left
+ val leftPercent = device.batteryLeftPodPercent
+ setImageViewResource(R.id.pod_left_icon, device.leftPodIcon)
+ setProgressBar(R.id.pod_left_progress, 100, percentToInt(leftPercent), false)
+ setTextViewText(R.id.pod_left_label, formatBatteryPercent(context, leftPercent))
+ val isLeftPodCharging = (device as? HasChargeDetectionDual)?.isLeftPodCharging ?: false
+ setViewVisibility(R.id.pod_left_charging, if (isLeftPodCharging) View.VISIBLE else View.GONE)
+ val isLeftPodInEar = (device as? HasEarDetectionDual)?.isLeftPodInEar ?: false
+ setViewVisibility(R.id.pod_left_ear, if (isLeftPodInEar) View.VISIBLE else View.GONE)
+
+ // Case
+ setViewVisibility(R.id.pod_case_container, if (device is HasCase) View.VISIBLE else View.GONE)
+ (device as? HasCase)?.let { case ->
+ setImageViewResource(R.id.pod_case_icon, device.caseIcon)
+ val casePercent = case.batteryCasePercent
+ setProgressBar(R.id.pod_case_progress, 100, percentToInt(casePercent), false)
+ setTextViewText(R.id.pod_case_label, formatBatteryPercent(context, casePercent))
+ setViewVisibility(R.id.pod_case_charging, if (case.isCaseCharging) View.VISIBLE else View.GONE)
+ }
+
+ // Right
+ val rightPercent = device.batteryRightPodPercent
+ setImageViewResource(R.id.pod_right_icon, device.rightPodIcon)
+ setProgressBar(R.id.pod_right_progress, 100, percentToInt(rightPercent), false)
+ setTextViewText(R.id.pod_right_label, formatBatteryPercent(context, rightPercent))
+ val isRightPodCharging = (device as? HasChargeDetectionDual)?.isRightPodCharging ?: false
+ setViewVisibility(R.id.pod_right_charging, if (isRightPodCharging) View.VISIBLE else View.GONE)
+ val isRightPodInEar = (device as? HasEarDetectionDual)?.isRightPodInEar ?: false
+ setViewVisibility(R.id.pod_right_ear, if (isRightPodInEar) View.VISIBLE else View.GONE)
+ }
+
+ private fun createSinglePodBig(device: SinglePodDevice): RemoteViews = RemoteViews(
+ context.packageName,
+ R.layout.monitor_notification_single_pods_big
+ ).apply {
+ val headsetPercent = device.batteryHeadsetPercent
+ setTextViewText(R.id.headphones_label, device.getLabel(context))
+ setImageViewResource(R.id.headphones_icon, device.iconRes)
+ setProgressBar(R.id.headphones_battery_progress, 100, percentToInt(headsetPercent), false)
+ setTextViewText(R.id.headphones_battery_label, formatBatteryPercent(context, headsetPercent))
+ if (device is HasEarDetection) {
+ setViewVisibility(R.id.headphones_worn, if (device.isBeingWorn) View.VISIBLE else View.GONE)
+ }
+ if (device is HasChargeDetectionDual) {
+ setViewVisibility(R.id.headphones_charging, if (device.isHeadsetBeingCharged) View.VISIBLE else View.GONE)
+ }
+ }
+
+ private fun createUnknownDeviceBig(device: PodDevice): RemoteViews = RemoteViews(
+ context.packageName,
+ R.layout.monitor_notification_unknown_device_big
+ ).apply {
+ setTextViewText(R.id.device, device.getLabel(context))
+ }
+
+ private fun percentToInt(percent: Float?): Int {
+ if (percent == null) return 0
+ return (percent * 100).roundToInt().coerceIn(0, 100)
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt
index 6d8730c1..77bed4af 100644
--- a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt
+++ b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt
@@ -128,7 +128,8 @@ class MonitorNotifications @Inject constructor(
}
setStyle(NotificationCompat.DecoratedCustomViewStyle())
- setCustomBigContentView(notificationViewFactory.createContentView(device))
+ setCustomContentView(notificationViewFactory.createContentView(device))
+ setCustomBigContentView(notificationViewFactory.createBigContentView(device))
setContentTitle("$batteryText ~ $stateText")
setSubText(null)
log(TAG, VERBOSE) { "updatingNotification(): $device" }
diff --git a/app/src/main/res/drawable/notification_battery_progress.xml b/app/src/main/res/drawable/notification_battery_progress.xml
new file mode 100644
index 00000000..ee7373ff
--- /dev/null
+++ b/app/src/main/res/drawable/notification_battery_progress.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/monitor_notification_dual_pods_big.xml b/app/src/main/res/layout/monitor_notification_dual_pods_big.xml
new file mode 100644
index 00000000..8c026fad
--- /dev/null
+++ b/app/src/main/res/layout/monitor_notification_dual_pods_big.xml
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/monitor_notification_single_pods_big.xml b/app/src/main/res/layout/monitor_notification_single_pods_big.xml
new file mode 100644
index 00000000..b5d6bf7f
--- /dev/null
+++ b/app/src/main/res/layout/monitor_notification_single_pods_big.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/monitor_notification_unknown_device_big.xml b/app/src/main/res/layout/monitor_notification_unknown_device_big.xml
new file mode 100644
index 00000000..ada6b253
--- /dev/null
+++ b/app/src/main/res/layout/monitor_notification_unknown_device_big.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+