summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt15
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt46
2 files changed, 45 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
index 118fcbb20f26..19200e48fc5c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -439,13 +439,14 @@ class ControlsControllerImpl @Inject constructor (
Log.d(TAG, "Controls not available")
return
}
- executor.execute {
- val changed = Favorites.updateControls(
- componentName,
- listOf(control)
- )
- if (changed) {
- persistenceWrapper.storeFavorites(Favorites.getAllStructures())
+
+ // Assume that non STATUS_OK responses may contain incomplete or invalid information about
+ // the control, and do not attempt to update it
+ if (control.getStatus() == Control.STATUS_OK) {
+ executor.execute {
+ if (Favorites.updateControls(componentName, listOf(control))) {
+ persistenceWrapper.storeFavorites(Favorites.getAllStructures())
+ }
}
}
uiController.onRefreshState(componentName, listOf(control))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
index eb4d438600d8..93aee33cc1c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
@@ -161,7 +161,7 @@ class ControlsControllerImplTest : SysuiTestCase() {
verify(listingController).addCallback(capture(listingCallbackCaptor))
}
- private fun builderFromInfo(
+ private fun statelessBuilderFromInfo(
controlInfo: ControlInfo,
structure: CharSequence = ""
): Control.StatelessBuilder {
@@ -170,6 +170,15 @@ class ControlsControllerImplTest : SysuiTestCase() {
.setSubtitle(controlInfo.controlSubtitle).setStructure(structure)
}
+ private fun statefulBuilderFromInfo(
+ controlInfo: ControlInfo,
+ structure: CharSequence = ""
+ ): Control.StatefulBuilder {
+ return Control.StatefulBuilder(controlInfo.controlId, pendingIntent)
+ .setDeviceType(controlInfo.deviceType).setTitle(controlInfo.controlTitle)
+ .setSubtitle(controlInfo.controlSubtitle).setStructure(structure)
+ }
+
@Test
fun testStartOnUser() {
assertEquals(user, controller.currentUserId)
@@ -236,7 +245,7 @@ class ControlsControllerImplTest : SysuiTestCase() {
@Test
fun testLoadForComponent_noFavorites() {
var loaded = false
- val control = builderFromInfo(TEST_CONTROL_INFO).build()
+ val control = statelessBuilderFromInfo(TEST_CONTROL_INFO).build()
controller.loadForComponent(TEST_COMPONENT, Consumer { data ->
val controls = data.allControls
@@ -263,8 +272,8 @@ class ControlsControllerImplTest : SysuiTestCase() {
@Test
fun testLoadForComponent_favorites() {
var loaded = false
- val control = builderFromInfo(TEST_CONTROL_INFO).build()
- val control2 = builderFromInfo(TEST_CONTROL_INFO_2).build()
+ val control = statelessBuilderFromInfo(TEST_CONTROL_INFO).build()
+ val control2 = statelessBuilderFromInfo(TEST_CONTROL_INFO_2).build()
controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO_2)
delayableExecutor.runAllReady()
@@ -445,7 +454,7 @@ class ControlsControllerImplTest : SysuiTestCase() {
delayableExecutor.runAllReady()
val newControlInfo = TEST_CONTROL_INFO.copy(controlTitle = TEST_CONTROL_TITLE_2)
- val control = builderFromInfo(newControlInfo).build()
+ val control = statelessBuilderFromInfo(newControlInfo).build()
controller.loadForComponent(TEST_COMPONENT, Consumer {})
@@ -461,11 +470,11 @@ class ControlsControllerImplTest : SysuiTestCase() {
}
@Test
- fun testFavoriteInformationModifiedOnRefresh() {
+ fun testFavoriteInformationModifiedOnRefreshWithOkStatus() {
controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
val newControlInfo = TEST_CONTROL_INFO.copy(controlTitle = TEST_CONTROL_TITLE_2)
- val control = builderFromInfo(newControlInfo).build()
+ val control = statefulBuilderFromInfo(newControlInfo).setStatus(Control.STATUS_OK).build()
controller.refreshStatus(TEST_COMPONENT, control)
@@ -477,6 +486,23 @@ class ControlsControllerImplTest : SysuiTestCase() {
}
@Test
+ fun testFavoriteInformationNotModifiedOnRefreshWithNonOkStatus() {
+ controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
+
+ val newControlInfo = TEST_CONTROL_INFO.copy(controlTitle = TEST_CONTROL_TITLE_2)
+ val control = statefulBuilderFromInfo(newControlInfo).setStatus(Control.STATUS_ERROR)
+ .build()
+
+ controller.refreshStatus(TEST_COMPONENT, control)
+
+ delayableExecutor.runAllReady()
+
+ val favorites = controller.getFavorites().flatMap { it.controls }
+ assertEquals(1, favorites.size)
+ assertEquals(TEST_CONTROL_INFO, favorites[0])
+ }
+
+ @Test
fun testSwitchUsers() {
controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
delayableExecutor.runAllReady()
@@ -762,7 +788,8 @@ class ControlsControllerImplTest : SysuiTestCase() {
@Test
fun testSeedFavoritesForComponent() {
var succeeded = false
- val control = builderFromInfo(TEST_CONTROL_INFO, TEST_STRUCTURE_INFO.structure).build()
+ val control = statelessBuilderFromInfo(TEST_CONTROL_INFO, TEST_STRUCTURE_INFO.structure)
+ .build()
controller.seedFavoritesForComponent(TEST_COMPONENT, Consumer { accepted ->
succeeded = accepted
@@ -803,7 +830,8 @@ class ControlsControllerImplTest : SysuiTestCase() {
fun testSeedFavoritesForComponent_inProgressCallback() {
var succeeded = false
var seeded = false
- val control = builderFromInfo(TEST_CONTROL_INFO, TEST_STRUCTURE_INFO.structure).build()
+ val control = statelessBuilderFromInfo(TEST_CONTROL_INFO, TEST_STRUCTURE_INFO.structure)
+ .build()
controller.seedFavoritesForComponent(TEST_COMPONENT, Consumer { accepted ->
succeeded = accepted