feat(popup): Move signal quality indicator to top-right corner

Always show signal quality when available instead of gating on debug
mode. Position icon + percentage text in the top-right corner of the
card, aligned with the title. Remove unused DebugSettings dependency.
This commit is contained in:
darken
2026-02-21 19:22:07 +01:00
committed by Matthias Urhahn
parent 99aa44b448
commit a6482c7d76
3 changed files with 38 additions and 42 deletions
@@ -9,7 +9,6 @@ import androidx.core.view.isGone
import androidx.core.view.isVisible
import dagger.hilt.android.qualifiers.ApplicationContext
import eu.darken.capod.R
import eu.darken.capod.common.debug.DebugSettings
import eu.darken.capod.databinding.PopupNotificationDualPodsBinding
import eu.darken.capod.databinding.PopupNotificationSinglePodsBinding
import eu.darken.capod.pods.core.DualPodDevice
@@ -24,7 +23,6 @@ import javax.inject.Inject
class PopUpPodViewFactory @Inject constructor(
@ApplicationContext private val appContext: Context,
private val debugSettings: DebugSettings,
) {
private val context = ContextThemeWrapper(appContext, R.style.AppTheme)
@@ -41,7 +39,8 @@ class PopUpPodViewFactory @Inject constructor(
PopupNotificationDualPodsBinding.inflate(layoutInflater, parent, false).apply {
podLabel.text = device.getLabel(context)
signal.text = device.getSignalQuality(context)
signal.isGone = !debugSettings.isDebugModeEnabled.value
signalIcon.isGone = signal.text.isNullOrBlank()
signal.isGone = signal.text.isNullOrBlank()
// Left
val leftPercent = device.batteryLeftPodPercent
@@ -74,7 +73,8 @@ class PopUpPodViewFactory @Inject constructor(
headphonesIcon.imageTintList = null
headphonesLabel.text = device.getLabel(context)
signal.text = device.getSignalQuality(context)
signal.isGone = !debugSettings.isDebugModeEnabled.value
signalIcon.isGone = signal.text.isNullOrBlank()
signal.isGone = signal.text.isNullOrBlank()
val headsetPercent = device.batteryHeadsetPercent
headphonesBatteryIcon.setImageResource(getBatteryDrawable(headsetPercent))
@@ -19,28 +19,26 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="AirPods Pro" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/signal"
style="@style/TextAppearance.Material3.LabelMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintEnd_toStartOf="@+id/signal_icon"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/pod_label"
tools:text="29%" />
<ImageView
android:id="@+id/signal_icon"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginStart="3dp"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginEnd="4dp"
android:src="@drawable/ic_baseline_signal_cellular_alt_24"
app:layout_constraintBottom_toBottomOf="@id/signal"
app:layout_constraintBottom_toBottomOf="@id/pod_label"
app:layout_constraintEnd_toStartOf="@id/signal"
app:layout_constraintTop_toTopOf="@id/pod_label" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/signal"
style="@style/TextAppearance.Material3.LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@id/pod_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/signal"
app:layout_constraintTop_toTopOf="@id/signal" />
app:layout_constraintTop_toTopOf="@id/pod_label"
tools:text="29%" />
<!-- Pod columns container with LTR direction to prevent RTL mirroring physical L/R -->
<androidx.constraintlayout.widget.ConstraintLayout
@@ -51,7 +49,7 @@
android:layoutDirection="ltr"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/signal">
app:layout_constraintTop_toBottomOf="@id/pod_label">
<!-- LEFT POD column -->
<androidx.constraintlayout.widget.ConstraintLayout
@@ -19,28 +19,26 @@
app:layout_constraintTop_toTopOf="parent"
tools:text="AirPods Max" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/signal"
style="@style/TextAppearance.Material3.LabelMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintEnd_toStartOf="@+id/signal_icon"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/headphones_label"
tools:text="29%" />
<ImageView
android:id="@+id/signal_icon"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginStart="3dp"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginEnd="4dp"
android:src="@drawable/ic_baseline_signal_cellular_alt_24"
app:layout_constraintBottom_toBottomOf="@id/signal"
app:layout_constraintBottom_toBottomOf="@id/headphones_label"
app:layout_constraintEnd_toStartOf="@id/signal"
app:layout_constraintTop_toTopOf="@id/headphones_label" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/signal"
style="@style/TextAppearance.Material3.LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@id/headphones_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/signal"
app:layout_constraintTop_toTopOf="@id/signal" />
app:layout_constraintTop_toTopOf="@id/headphones_label"
tools:text="29%" />
<ImageView
android:id="@+id/headphones_icon"
@@ -49,7 +47,7 @@
android:src="@drawable/device_earbuds_generic_both"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/signal" />
app:layout_constraintTop_toBottomOf="@id/headphones_label" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/headphones_container"