summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/controller/ControlsBindingControllerImpl.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManager.kt68
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java1
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsBindingControllerImplTest.kt4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsProviderLifecycleManagerTest.kt6
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)
}