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());
         }