diff options
5 files changed, 33 insertions, 50 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 48d2fa68d198..0a2a9255c3ea 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt @@ -170,7 +170,7 @@ open class ControlsBindingControllerImpl @Inject constructor( override fun bindServices(components: List<ComponentName>) { components.forEach { val provider = retrieveLifecycleManager(it) - backgroundExecutor.execute { provider.bindPermanently() } + backgroundExecutor.execute { provider.bindService() } } } @@ -233,7 +233,7 @@ open class ControlsBindingControllerImpl @Inject constructor( provider.lastLoadCallback?.invoke(list) ?: run { Log.w(TAG, "Null callback") } - provider.maybeUnbindAndRemoveCallback() + provider.unbindService() } } diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt index 739ca7ec0c29..b4bd82c84e1a 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt @@ -56,9 +56,7 @@ class ControlsProviderLifecycleManager( val token: IBinder = Binder() @GuardedBy("subscriptions") private val subscriptions = mutableListOf<IControlsSubscription>() - private var unbindImmediate = false private var requiresBound = false - private var isBound = false @GuardedBy("queuedMessages") private val queuedMessages: MutableSet<Message> = ArraySet() private var wrapper: ServiceWrapper? = null @@ -98,30 +96,22 @@ class ControlsProviderLifecycleManager( } bindTryCount++ try { - isBound = context.bindServiceAsUser(intent, serviceConnection, BIND_FLAGS, user) + context.bindServiceAsUser(intent, serviceConnection, BIND_FLAGS, user) } catch (e: SecurityException) { Log.e(TAG, "Failed to bind to service", e) - isBound = false } } else { if (DEBUG) { Log.d(TAG, "Unbinding service $intent") } bindTryCount = 0 - wrapper = null - if (isBound) { + wrapper?.run { context.unbindService(serviceConnection) - isBound = false } + wrapper = null } } - fun bindPermanently() { - unbindImmediate = false - unqueueMessage(Message.Unbind) - bindService(true) - } - private val serviceConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName, service: IBinder) { if (DEBUG) Log.d(TAG, "onServiceConnected $name") @@ -135,7 +125,7 @@ class ControlsProviderLifecycleManager( override fun onServiceDisconnected(name: ComponentName?) { if (DEBUG) Log.d(TAG, "onServiceDisconnected $name") - isBound = false + wrapper = null bindService(false) } } @@ -197,6 +187,15 @@ class ControlsProviderLifecycleManager( } } + private fun invokeOrQueue(f: () -> Unit, msg: Message) { + wrapper?.run { + f() + } ?: run { + queueMessage(msg) + bindService(true) + } + } + fun maybeBindAndLoad(callback: LoadCallback) { unqueueMessage(Message.Unbind) lastLoadCallback = callback @@ -205,22 +204,12 @@ class ControlsProviderLifecycleManager( Log.d(TAG, "Timeout waiting onLoad for $componentName") loadCallbackService.accept(token, emptyList()) }, LOAD_TIMEOUT, TimeUnit.MILLISECONDS) - if (isBound) { - load() - } else { - queueMessage(Message.Load) - unbindImmediate = true - bindService(true) - } + + invokeOrQueue(::load, Message.Load) } fun maybeBindAndSubscribe(controlIds: List<String>) { - if (isBound) { - subscribe(controlIds) - } else { - queueMessage(Message.Subscribe(controlIds)) - bindService(true) - } + invokeOrQueue({ subscribe(controlIds) }, Message.Subscribe(controlIds)) } private fun subscribe(controlIds: List<String>) { @@ -234,12 +223,7 @@ class ControlsProviderLifecycleManager( } fun maybeBindAndSendAction(controlId: String, action: ControlAction) { - if (isBound) { - action(controlId, action) - } else { - queueMessage(Message.Action(controlId, action)) - bindService(true) - } + invokeOrQueue({ action(controlId, action) }, Message.Action(controlId, action)) } private fun action(controlId: String, action: ControlAction) { @@ -276,25 +260,23 @@ class ControlsProviderLifecycleManager( } } - fun maybeUnbindAndRemoveCallback() { + fun bindService() { + unqueueMessage(Message.Unbind) + bindService(true) + } + + fun unbindService() { lastLoadCallback = null onLoadCanceller?.run() onLoadCanceller = null - if (unbindImmediate) { - bindService(false) - } - } - fun unbindService() { - unbindImmediate = true - maybeUnbindAndRemoveCallback() + bindService(false) } override fun toString(): String { return StringBuilder("ControlsProviderLifecycleManager(").apply { append("component=$componentName") append(", user=$user") - append(", bound=$isBound") append(")") }.toString() } @@ -314,4 +296,4 @@ class ControlsProviderLifecycleManager( override val type = MSG_ACTION } } -}
\ No newline at end of file +} diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java index f33c931479ba..45c07a3e4693 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java @@ -1801,6 +1801,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, void dismissImmediately() { mShowing = false; + if (mControlsUiController != null) mControlsUiController.hide(); dismissPanel(); resetOrientation(); completeDismiss(); 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 c1ebae735c7a..89c1636e953f 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 @@ -103,7 +103,7 @@ class ControlsBindingControllerTest : SysuiTestCase() { assertEquals(setOf(TEST_COMPONENT_NAME_1, TEST_COMPONENT_NAME_2), providers.map { it.componentName }.toSet()) providers.forEach { - verify(it).bindPermanently() + verify(it).bindService() } } @@ -215,4 +215,4 @@ class TestableControlsBindingControllerImpl( providers.add(provider) return provider } -}
\ No newline at end of file +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt index 3f1435be8b3f..40566dc39c9e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt @@ -99,13 +99,13 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() { @Test fun testBindService() { - manager.bindPermanently() + manager.bindService() assertTrue(mContext.isBound(componentName)) } @Test fun testUnbindService() { - manager.bindPermanently() + manager.bindService() manager.unbindService() assertFalse(mContext.isBound(componentName)) } @@ -125,7 +125,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() { fun testMaybeUnbind_bindingAndCallback() { manager.maybeBindAndLoad {} - manager.maybeUnbindAndRemoveCallback() + manager.unbindService() assertFalse(mContext.isBound(componentName)) assertNull(manager.lastLoadCallback) } |