Listen for REQUEST_LISTENING on all users.
If a secondary user installed an app that provided and ACTIVE_TILE
TileService, that tile's requests for listening would go unnoticed
before this CL.
Test: manual with ACTIVE TILE apk
Test: atest TileServices
Fixes: 157539282
Change-Id: Ibbf018dc0fcbcef95a3e49ddbc7d6c5a9396848c
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
index db7c6ad..2863d08 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java
@@ -69,10 +69,14 @@
mHost = host;
mContext = mHost.getContext();
mBroadcastDispatcher = broadcastDispatcher;
- mBroadcastDispatcher.registerReceiver(mRequestListeningReceiver,
- new IntentFilter(TileService.ACTION_REQUEST_LISTENING));
mHandler = new Handler(looper);
mMainHandler = new Handler(Looper.getMainLooper());
+ mBroadcastDispatcher.registerReceiver(
+ mRequestListeningReceiver,
+ new IntentFilter(TileService.ACTION_REQUEST_LISTENING),
+ null, // Use the default Executor
+ UserHandle.ALL
+ );
}
public Context getContext() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
index 2fc3d72..53ed4cf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
@@ -18,13 +18,22 @@
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
+import android.content.IntentFilter;
import android.os.Handler;
import android.os.Looper;
+import android.os.UserHandle;
import android.service.quicksettings.Tile;
+import android.service.quicksettings.TileService;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -50,7 +59,6 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
@@ -99,7 +107,7 @@
mTunerService,
() -> mAutoTileManager,
mDumpManager,
- mBroadcastDispatcher,
+ mock(BroadcastDispatcher.class),
Optional.of(mStatusBar),
mQSLogger,
mUiEventLogger);
@@ -113,6 +121,14 @@
}
@Test
+ public void testActiveTileListenerRegisteredOnAllUsers() {
+ ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class);
+ verify(mBroadcastDispatcher).registerReceiver(any(), captor.capture(), any(), eq(
+ UserHandle.ALL));
+ assertTrue(captor.getValue().hasAction(TileService.ACTION_REQUEST_LISTENING));
+ }
+
+ @Test
public void testRecalculateBindAllowance() {
// Add some fake tiles.
for (int i = 0; i < NUM_FAKES; i++) {
@@ -125,10 +141,9 @@
}
mTileService.recalculateBindAllowance();
for (int i = 0; i < NUM_FAKES; i++) {
- Mockito.verify(mManagers.get(i), Mockito.times(1)).calculateBindPriority(
- Mockito.anyLong());
+ verify(mManagers.get(i), times(1)).calculateBindPriority(anyLong());
ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
- Mockito.verify(mManagers.get(i), Mockito.times(1)).setBindAllowed(captor.capture());
+ verify(mManagers.get(i), times(1)).setBindAllowed(captor.capture());
assertEquals("" + i + "th service", i >= (NUM_FAKES - TileServices.DEFAULT_MAX_BOUND),
(boolean) captor.getValue());
@@ -142,7 +157,7 @@
for (int i = 0; i < NUM_FAKES; i++) {
ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
- Mockito.verify(mManagers.get(i), Mockito.times(2)).setBindAllowed(captor.capture());
+ verify(mManagers.get(i), times(2)).setBindAllowed(captor.capture());
assertEquals("" + i + "th service", i >= (NUM_FAKES - TileServices.REDUCED_MAX_BOUND),
(boolean) captor.getValue());
@@ -158,12 +173,12 @@
for (int i = 0; i < TileServices.DEFAULT_MAX_BOUND - 1; i++) {
// Shouldn't get bind prioirities calculated when there are less than the max services.
- Mockito.verify(mManagers.get(i), Mockito.never()).calculateBindPriority(
- Mockito.anyLong());
+ verify(mManagers.get(i), never()).calculateBindPriority(
+ anyLong());
// All should be bound since there are less than the max services.
ArgumentCaptor<Boolean> captor = ArgumentCaptor.forClass(Boolean.class);
- Mockito.verify(mManagers.get(i), Mockito.times(1)).setBindAllowed(captor.capture());
+ verify(mManagers.get(i), times(1)).setBindAllowed(captor.capture());
assertTrue(captor.getValue());
}