1717package com.android.systemui.controls.controller
1818
1919import android.content.ComponentName
20+ import android.content.Context
21+ import android.content.Intent
22+ import android.content.ServiceConnection
2023import android.os.UserHandle
2124import android.service.controls.IControlsActionCallback
2225import android.service.controls.IControlsProvider
@@ -43,6 +46,8 @@ import org.mockito.ArgumentMatchers.eq
4346import org.mockito.Captor
4447import org.mockito.Mock
4548import org.mockito.Mockito.`when`
49+ import org.mockito.Mockito.anyInt
50+ import org.mockito.Mockito.mock
4651import org.mockito.Mockito.never
4752import org.mockito.Mockito.verify
4853import org.mockito.MockitoAnnotations
@@ -57,8 +62,6 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
5762 private lateinit var subscriberService: IControlsSubscriber .Stub
5863 @Mock
5964 private lateinit var service: IControlsProvider .Stub
60- @Mock
61- private lateinit var loadCallback: ControlsBindingController .LoadCallback
6265
6366 @Captor
6467 private lateinit var wrapperCaptor: ArgumentCaptor <ControlActionWrapper >
@@ -75,7 +78,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
7578 fun setUp () {
7679 MockitoAnnotations .initMocks(this )
7780
78- mContext .addMockService(componentName, service)
81+ context .addMockService(componentName, service)
7982 executor = FakeExecutor (FakeSystemClock ())
8083 `when `(service.asBinder()).thenCallRealMethod()
8184 `when `(service.queryLocalInterface(ArgumentMatchers .anyString())).thenReturn(service)
@@ -98,7 +101,36 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
98101 fun testBindService () {
99102 manager.bindService()
100103 executor.runAllReady()
101- assertTrue(mContext.isBound(componentName))
104+ assertTrue(context.isBound(componentName))
105+ }
106+
107+ @Test
108+ fun testNullBinding () {
109+ val mockContext = mock(Context ::class .java)
110+ lateinit var serviceConnection: ServiceConnection
111+ `when `(mockContext.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer {
112+ val component = (it.arguments[0 ] as Intent ).component
113+ if (component == componentName) {
114+ serviceConnection = it.arguments[1 ] as ServiceConnection
115+ serviceConnection.onNullBinding(component)
116+ true
117+ } else {
118+ false
119+ }
120+ }
121+
122+ val nullManager = ControlsProviderLifecycleManager (
123+ mockContext,
124+ executor,
125+ actionCallbackService,
126+ UserHandle .of(0 ),
127+ componentName
128+ )
129+
130+ nullManager.bindService()
131+ executor.runAllReady()
132+
133+ verify(mockContext).unbindService(serviceConnection)
102134 }
103135
104136 @Test
@@ -109,7 +141,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
109141 manager.unbindService()
110142 executor.runAllReady()
111143
112- assertFalse(mContext .isBound(componentName))
144+ assertFalse(context .isBound(componentName))
113145 }
114146
115147 @Test
@@ -119,7 +151,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
119151
120152 verify(service).load(subscriberService)
121153
122- assertTrue(mContext .isBound(componentName))
154+ assertTrue(context .isBound(componentName))
123155 }
124156
125157 @Test
@@ -129,7 +161,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
129161
130162 manager.unbindService()
131163 executor.runAllReady()
132- assertFalse(mContext .isBound(componentName))
164+ assertFalse(context .isBound(componentName))
133165 }
134166
135167 @Test
@@ -162,7 +194,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
162194 manager.maybeBindAndSubscribe(list, subscriberService)
163195 executor.runAllReady()
164196
165- assertTrue(mContext .isBound(componentName))
197+ assertTrue(context .isBound(componentName))
166198 verify(service).subscribe(list, subscriberService)
167199 }
168200
@@ -173,7 +205,7 @@ class ControlsProviderLifecycleManagerTest : SysuiTestCase() {
173205 manager.maybeBindAndSendAction(controlId, action)
174206 executor.runAllReady()
175207
176- assertTrue(mContext .isBound(componentName))
208+ assertTrue(context .isBound(componentName))
177209 verify(service).action(eq(controlId), capture(wrapperCaptor),
178210 eq(actionCallbackService))
179211 assertEquals(action, wrapperCaptor.getValue().getWrappedAction())
0 commit comments