From cdf6067fbc432970d048e808b3a69ed4fc3065da Mon Sep 17 00:00:00 2001 From: Anton Potapov Date: Tue, 6 Jun 2023 18:02:11 +0100 Subject: [PATCH] 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 --- .../controls/controller/ControlsBindingControllerImpl.kt | 1 + .../controller/ControlsBindingControllerImplTest.kt | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt index 18bd467566603..ccbde011334d5 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt @@ -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) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt index 26cbd7703075b..724c9d1dfc426 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt @@ -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) {} - } + 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