Merge "Strings for USI low battery notifications." into tm-qpr-dev

This commit is contained in:
Vania Januar
2023-01-11 12:50:45 +00:00
committed by Android (Google) Code Review
3 changed files with 40 additions and 18 deletions

View File

@@ -2772,6 +2772,9 @@
<!-- Text for education page content description for unfolded animation. [CHAR_LIMIT=NONE] --> <!-- Text for education page content description for unfolded animation. [CHAR_LIMIT=NONE] -->
<string name="rear_display_accessibility_unfolded_animation">Foldable device being flipped around</string> <string name="rear_display_accessibility_unfolded_animation">Foldable device being flipped around</string>
<!-- Title for notification of low stylus battery. [CHAR_LIMIT=NONE] --> <!-- Title for notification of low stylus battery with percentage. "percentage" is
<string name="stylus_battery_low">Stylus battery low</string> the value of the battery capacity remaining [CHAR LIMIT=none]-->
<string name="stylus_battery_low_percentage"><xliff:g id="percentage" example="16%">%s</xliff:g> battery remaining</string>
<!-- Subtitle for the notification sent when a stylus battery is low. [CHAR LIMIT=none]-->
<string name="stylus_battery_low_subtitle">Connect your stylus to a charger</string>
</resources> </resources>

View File

@@ -123,13 +123,13 @@ constructor(
.setSmallIcon(R.drawable.ic_power_low) .setSmallIcon(R.drawable.ic_power_low)
.setDeleteIntent(getPendingBroadcast(ACTION_DISMISSED_LOW_BATTERY)) .setDeleteIntent(getPendingBroadcast(ACTION_DISMISSED_LOW_BATTERY))
.setContentIntent(getPendingBroadcast(ACTION_CLICKED_LOW_BATTERY)) .setContentIntent(getPendingBroadcast(ACTION_CLICKED_LOW_BATTERY))
.setContentTitle(context.getString(R.string.stylus_battery_low)) .setContentTitle(
.setContentText(
context.getString( context.getString(
R.string.battery_low_percent_format, R.string.stylus_battery_low_percentage,
NumberFormat.getPercentInstance().format(batteryCapacity) NumberFormat.getPercentInstance().format(batteryCapacity)
) )
) )
.setContentText(context.getString(R.string.stylus_battery_low_subtitle))
.setPriority(NotificationCompat.PRIORITY_DEFAULT) .setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setLocalOnly(true) .setLocalOnly(true)
.setAutoCancel(true) .setAutoCancel(true)
@@ -177,7 +177,7 @@ constructor(
// https://source.chromium.org/chromium/chromium/src/+/main:ash/system/power/peripheral_battery_notifier.cc;l=41 // https://source.chromium.org/chromium/chromium/src/+/main:ash/system/power/peripheral_battery_notifier.cc;l=41
private const val LOW_BATTERY_THRESHOLD = 0.16f private const val LOW_BATTERY_THRESHOLD = 0.16f
private val USI_NOTIFICATION_ID = R.string.stylus_battery_low private val USI_NOTIFICATION_ID = R.string.stylus_battery_low_percentage
private const val ACTION_DISMISSED_LOW_BATTERY = "StylusUsiPowerUI.dismiss" private const val ACTION_DISMISSED_LOW_BATTERY = "StylusUsiPowerUI.dismiss"
private const val ACTION_CLICKED_LOW_BATTERY = "StylusUsiPowerUI.click" private const val ACTION_CLICKED_LOW_BATTERY = "StylusUsiPowerUI.click"

View File

@@ -16,6 +16,7 @@
package com.android.systemui.stylus package com.android.systemui.stylus
import android.app.Notification
import android.hardware.BatteryState import android.hardware.BatteryState
import android.hardware.input.InputManager import android.hardware.input.InputManager
import android.os.Handler import android.os.Handler
@@ -28,10 +29,13 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.whenever
import junit.framework.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Ignore import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Captor
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.inOrder import org.mockito.Mockito.inOrder
import org.mockito.Mockito.times import org.mockito.Mockito.times
@@ -46,6 +50,7 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
@Mock lateinit var inputManager: InputManager @Mock lateinit var inputManager: InputManager
@Mock lateinit var handler: Handler @Mock lateinit var handler: Handler
@Mock lateinit var btStylusDevice: InputDevice @Mock lateinit var btStylusDevice: InputDevice
@Captor lateinit var notificationCaptor: ArgumentCaptor<Notification>
private lateinit var stylusUsiPowerUi: StylusUsiPowerUI private lateinit var stylusUsiPowerUi: StylusUsiPowerUI
@@ -70,7 +75,8 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
fun updateBatteryState_capacityBelowThreshold_notifies() { fun updateBatteryState_capacityBelowThreshold_notifies() {
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f))
verify(notificationManager, times(1)).notify(eq(R.string.stylus_battery_low), any()) verify(notificationManager, times(1))
.notify(eq(R.string.stylus_battery_low_percentage), any())
verifyNoMoreInteractions(notificationManager) verifyNoMoreInteractions(notificationManager)
} }
@@ -78,7 +84,7 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
fun updateBatteryState_capacityAboveThreshold_cancelsNotificattion() { fun updateBatteryState_capacityAboveThreshold_cancelsNotificattion() {
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.8f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.8f))
verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low) verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low_percentage)
verifyNoMoreInteractions(notificationManager) verifyNoMoreInteractions(notificationManager)
} }
@@ -88,8 +94,9 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.8f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.8f))
inOrder(notificationManager).let { inOrder(notificationManager).let {
it.verify(notificationManager, times(1)).notify(eq(R.string.stylus_battery_low), any()) it.verify(notificationManager, times(1))
it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low) .notify(eq(R.string.stylus_battery_low_percentage), any())
it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low_percentage)
it.verifyNoMoreInteractions() it.verifyNoMoreInteractions()
} }
} }
@@ -99,7 +106,16 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f))
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.15f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.15f))
verify(notificationManager, times(2)).notify(eq(R.string.stylus_battery_low), any()) verify(notificationManager, times(2))
.notify(eq(R.string.stylus_battery_low_percentage), notificationCaptor.capture())
assertEquals(
notificationCaptor.value.extras.getString(Notification.EXTRA_TITLE),
context.getString(R.string.stylus_battery_low_percentage, "15%")
)
assertEquals(
notificationCaptor.value.extras.getString(Notification.EXTRA_TEXT),
context.getString(R.string.stylus_battery_low_subtitle)
)
verifyNoMoreInteractions(notificationManager) verifyNoMoreInteractions(notificationManager)
} }
@@ -110,9 +126,11 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f)) stylusUsiPowerUi.updateBatteryState(FixedCapacityBatteryState(0.1f))
inOrder(notificationManager).let { inOrder(notificationManager).let {
it.verify(notificationManager, times(1)).notify(eq(R.string.stylus_battery_low), any()) it.verify(notificationManager, times(1))
it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low) .notify(eq(R.string.stylus_battery_low_percentage), any())
it.verify(notificationManager, times(1)).notify(eq(R.string.stylus_battery_low), any()) it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low_percentage)
it.verify(notificationManager, times(1))
.notify(eq(R.string.stylus_battery_low_percentage), any())
it.verifyNoMoreInteractions() it.verifyNoMoreInteractions()
} }
} }
@@ -121,7 +139,7 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
fun updateSuppression_noExistingNotification_cancelsNotification() { fun updateSuppression_noExistingNotification_cancelsNotification() {
stylusUsiPowerUi.updateSuppression(true) stylusUsiPowerUi.updateSuppression(true)
verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low) verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low_percentage)
verifyNoMoreInteractions(notificationManager) verifyNoMoreInteractions(notificationManager)
} }
@@ -132,8 +150,9 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
stylusUsiPowerUi.updateSuppression(true) stylusUsiPowerUi.updateSuppression(true)
inOrder(notificationManager).let { inOrder(notificationManager).let {
it.verify(notificationManager, times(1)).notify(eq(R.string.stylus_battery_low), any()) it.verify(notificationManager, times(1))
it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low) .notify(eq(R.string.stylus_battery_low_percentage), any())
it.verify(notificationManager, times(1)).cancel(R.string.stylus_battery_low_percentage)
it.verifyNoMoreInteractions() it.verifyNoMoreInteractions()
} }
} }
@@ -156,7 +175,7 @@ class StylusUsiPowerUiTest : SysuiTestCase() {
stylusUsiPowerUi.refresh() stylusUsiPowerUi.refresh()
verify(notificationManager).cancel(R.string.stylus_battery_low) verify(notificationManager).cancel(R.string.stylus_battery_low_percentage)
} }
class FixedCapacityBatteryState(private val capacity: Float) : BatteryState() { class FixedCapacityBatteryState(private val capacity: Float) : BatteryState() {