Synchronously call callback when load is cancelled

This prevents the case when controller unbinds and nulls the provider
used by the callback with a slight delay. Callback is ignored when there
is no provider and ControlsController gets stuck in seeding state.

Test: manual with the steps from the comment#18
Test: atest ControlsBindingControllerImplTest
Fixes: 283888863
Change-Id: I5683170b71ad47702c924fbb2df293118937cb37
This commit is contained in:
Anton Potapov
2023-06-06 18:02:11 +01:00
parent b9777bc49b
commit cdf6067fbc
2 changed files with 3 additions and 5 deletions

View File

@@ -312,6 +312,7 @@ open class ControlsBindingControllerImpl @Inject constructor(
Log.d(TAG, "Canceling loadSubscribtion")
it.invoke()
}
callback.error("Load cancelled")
}
override fun onSubscribe(token: IBinder, subs: IControlsSubscription) {

View File

@@ -116,11 +116,7 @@ class ControlsBindingControllerImplTest : SysuiTestCase() {
@Test
fun testBindAndLoad_cancel() {
val callback = object : ControlsBindingController.LoadCallback {
override fun error(message: String) {}
override fun accept(t: List<Control>) {}
}
val callback = mock(ControlsBindingController.LoadCallback::class.java)
val subscription = mock(IControlsSubscription::class.java)
val canceller = controller.bindAndLoad(TEST_COMPONENT_NAME_1, callback)
@@ -130,6 +126,7 @@ class ControlsBindingControllerImplTest : SysuiTestCase() {
canceller.run()
verify(providers[0]).cancelSubscription(subscription)
verify(callback).error(any())
}
@Test