Merge "Controls Ui - Do not update controls without STATUS_OK" into rvc-dev am: ad9c1a8816 am: 505418d89a

Change-Id: Iacd4806bbf583ee6545eee36af1442f8d5da84e1
This commit is contained in:
Matt Pietal
2020-03-27 18:53:09 +00:00
committed by Automerger Merge Worker
2 changed files with 45 additions and 16 deletions

View File

@@ -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))

View File

@@ -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)
@@ -476,6 +485,23 @@ class ControlsControllerImplTest : SysuiTestCase() {
assertEquals(newControlInfo, favorites[0])
}
@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)
@@ -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