Merge "Strings for USI low battery notifications." into tm-qpr-dev
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user