From 57cd823b631fcccf6e25f136442f2f8de21d1d32 Mon Sep 17 00:00:00 2001 From: darken Date: Sun, 23 Jan 2022 20:52:39 +0100 Subject: [PATCH] Improve notification layouts --- .../cards/pods/BasicSingleApplePodsCardVH.kt | 1 + .../ui/overview/cards/pods/PodDeviceVH.kt | 15 --- .../cards/pods/SingleApplePodsCardVH.kt | 1 + .../ui/MonitorNotificationViewFactory.kt | 44 +++++---- .../capod/pods/core/PodDeviceExtensions.kt | 14 +++ .../monitor_notification_dual_pods_small.xml | 94 +++++++++++++++---- ...r_notification_single_pods_basic_small.xml | 30 ++++-- ...monitor_notification_single_pods_small.xml | 38 ++++++-- app/src/main/res/values/styles.xml | 1 - 9 files changed, 167 insertions(+), 71 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/BasicSingleApplePodsCardVH.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/BasicSingleApplePodsCardVH.kt index 6353f80a..80dd66ca 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/BasicSingleApplePodsCardVH.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/BasicSingleApplePodsCardVH.kt @@ -7,6 +7,7 @@ import eu.darken.capod.R import eu.darken.capod.common.lists.binding import eu.darken.capod.databinding.OverviewPodsAppleSingleBasicItemBinding import eu.darken.capod.pods.core.apple.BasicSingleApplePods +import eu.darken.capod.pods.core.getBatteryDrawable import eu.darken.capod.pods.core.getBatteryLevelHeadset import eu.darken.capod.pods.core.getSignalQuality import eu.darken.capod.pods.core.lastSeenFormatted diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/PodDeviceVH.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/PodDeviceVH.kt index a1da9e84..1a26d88c 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/PodDeviceVH.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/PodDeviceVH.kt @@ -1,10 +1,8 @@ package eu.darken.capod.main.ui.overview.cards.pods import android.view.ViewGroup -import androidx.annotation.DrawableRes import androidx.annotation.LayoutRes import androidx.viewbinding.ViewBinding -import eu.darken.capod.R import eu.darken.capod.common.lists.BindableVH import eu.darken.capod.common.lists.differ.DifferItem import eu.darken.capod.common.lists.modular.ModularAdapter @@ -17,19 +15,6 @@ abstract class PodDeviceVH( parent: ViewGroup ) : ModularAdapter.VH(layoutId, parent), BindableVH { - @DrawableRes - fun getBatteryDrawable(percent: Float?): Int = when { - percent == null -> R.drawable.ic_baseline_battery_unknown_24 - percent > 0.95f -> R.drawable.ic_baseline_battery_full_24 - percent > 0.80f -> R.drawable.ic_baseline_battery_6_bar_24 - percent > 0.65f -> R.drawable.ic_baseline_battery_5_bar_24 - percent > 0.50f -> R.drawable.ic_baseline_battery_4_bar_24 - percent > 0.35f -> R.drawable.ic_baseline_battery_3_bar_24 - percent > 0.20f -> R.drawable.ic_baseline_battery_2_bar_24 - percent > 0.05f -> R.drawable.ic_baseline_battery_1_bar_24 - else -> R.drawable.ic_baseline_battery_0_bar_24 - } - interface Item : OverviewAdapter.Item { val now: Instant diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SingleApplePodsCardVH.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SingleApplePodsCardVH.kt index e2cc2c24..365d3b90 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SingleApplePodsCardVH.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/pods/SingleApplePodsCardVH.kt @@ -8,6 +8,7 @@ import eu.darken.capod.R import eu.darken.capod.common.lists.binding import eu.darken.capod.databinding.OverviewPodsAppleSingleItemBinding import eu.darken.capod.pods.core.apple.SingleApplePods +import eu.darken.capod.pods.core.getBatteryDrawable import eu.darken.capod.pods.core.getBatteryLevelHeadset import eu.darken.capod.pods.core.getSignalQuality import eu.darken.capod.pods.core.lastSeenFormatted 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 b634d665..f89e2299 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 @@ -1,6 +1,7 @@ package eu.darken.capod.monitor.ui import android.content.Context +import android.view.View import android.widget.RemoteViews import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.R @@ -26,38 +27,45 @@ class MonitorNotificationViewFactory @Inject constructor( context.packageName, R.layout.monitor_notification_dual_pods_small ).apply { - device.getBatteryLevelLeftPod(context) - .let { if (device.isLeftPodCharging) "$it⚡" else it } - .run { setTextViewText(R.id.pod_left, this) } + device.apply { + // Left + setTextViewText(R.id.pod_left_label, getBatteryLevelLeftPod(context)) + setViewVisibility(R.id.pod_left_charging, if (isLeftPodCharging) View.VISIBLE else View.GONE) + setViewVisibility(R.id.pod_left_ear, if (isLeftPodInEar) View.VISIBLE else View.GONE) - device.getBatteryLevelCase(context) - .let { if (device.isCaseCharging) "$it⚡" else it } - .run { setTextViewText(R.id.pod_case, this) } + // Case + setTextViewText(R.id.pod_case_label, getBatteryLevelCase(context)) + setViewVisibility(R.id.pod_case_charging, if (isCaseCharging) View.VISIBLE else View.GONE) - device.getBatteryLevelRightPod(context) - .let { if (device.isRightPodCharging) "$it⚡" else it } - .run { setTextViewText(R.id.pod_right, this) } + // Right + setTextViewText(R.id.pod_right_label, getBatteryLevelRightPod(context)) + setViewVisibility(R.id.pod_right_charging, if (isRightPodCharging) View.VISIBLE else View.GONE) + setViewVisibility(R.id.pod_right_ear, if (isRightPodInEar) View.VISIBLE else View.GONE) + } } private fun createSingleApplePods(device: SingleApplePods): RemoteViews = RemoteViews( context.packageName, R.layout.monitor_notification_single_pods_small ).apply { - setTextViewText(R.id.headphones_label, device.getLabel(context)) - - device.getBatteryLevelHeadset(context) - .let { if (!device.isHeadsetBeingCharged) "$it⚡" else it } - .run { setTextViewText(R.id.headphones, this) } + device.apply { + setTextViewText(R.id.headphones_label, getLabel(context)) + setImageViewResource(R.id.headphones_battery_icon, getBatteryDrawable(batteryHeadsetPercent)) + setTextViewText(R.id.headphones_battery_label, getBatteryLevelHeadset(context)) + setViewVisibility(R.id.headphones_charging, if (isHeadsetBeingCharged) View.VISIBLE else View.GONE) + setViewVisibility(R.id.headphones_worn, if (isHeadphonesBeingWorn) View.VISIBLE else View.GONE) + } } private fun createSingleBasicApplePods(device: BasicSingleApplePods): RemoteViews = RemoteViews( context.packageName, R.layout.monitor_notification_single_pods_basic_small ).apply { - setTextViewText(R.id.headphones_label, device.getLabel(context)) - - device.getBatteryLevelHeadset(context) - .run { setTextViewText(R.id.headphones, this) } + device.apply { + setTextViewText(R.id.headphones_label, getLabel(context)) + setImageViewResource(R.id.headphones_battery_icon, getBatteryDrawable(batteryHeadsetPercent)) + setTextViewText(R.id.headphones_battery_label, getBatteryLevelHeadset(context)) + } } private fun createUnknownDevice(device: PodDevice): RemoteViews = RemoteViews( diff --git a/app/src/main/java/eu/darken/capod/pods/core/PodDeviceExtensions.kt b/app/src/main/java/eu/darken/capod/pods/core/PodDeviceExtensions.kt index 7a20595f..bdcf0186 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/PodDeviceExtensions.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/PodDeviceExtensions.kt @@ -2,6 +2,7 @@ package eu.darken.capod.pods.core import android.content.Context import android.icu.text.RelativeDateTimeFormatter +import androidx.annotation.DrawableRes import eu.darken.capod.R import java.time.Duration import java.time.Instant @@ -28,6 +29,19 @@ fun PodDevice.getSignalQuality(context: Context): String { return "~${percentage.roundToInt()}%" } +@DrawableRes +fun getBatteryDrawable(percent: Float?): Int = when { + percent == null -> R.drawable.ic_baseline_battery_unknown_24 + percent > 0.95f -> R.drawable.ic_baseline_battery_full_24 + percent > 0.80f -> R.drawable.ic_baseline_battery_6_bar_24 + percent > 0.65f -> R.drawable.ic_baseline_battery_5_bar_24 + percent > 0.50f -> R.drawable.ic_baseline_battery_4_bar_24 + percent > 0.35f -> R.drawable.ic_baseline_battery_3_bar_24 + percent > 0.20f -> R.drawable.ic_baseline_battery_2_bar_24 + percent > 0.05f -> R.drawable.ic_baseline_battery_1_bar_24 + else -> R.drawable.ic_baseline_battery_0_bar_24 +} + private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance() fun PodDevice.lastSeenFormatted(now: Instant): String { 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 f223b0c3..ff9626c6 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 @@ -1,8 +1,8 @@ @@ -11,43 +11,97 @@ android:layout_height="0dp" android:layout_weight="1" /> - + android:orientation="horizontal"> + + + + + + + + + - + android:orientation="horizontal"> + + + + + + + - + android:orientation="horizontal"> + + + + + + + + + + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + tools:text="Beats Solo 3" /> - + android:layout_marginHorizontal="8dp" + android:orientation="horizontal"> + + + + + \ No newline at end of file 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 2c9577cd..6fe00db3 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,7 +2,8 @@ + android:layout_height="wrap_content" + android:gravity="center_horizontal"> - + android:layout_marginHorizontal="8dp" + android:orientation="horizontal"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8a4c3a83..25eadee5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -10,6 +10,5 @@ \ No newline at end of file