Loading packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt +5 −25 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui.broadcast import android.app.ActivityManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent Loading @@ -33,6 +32,7 @@ import com.android.internal.util.IndentingPrintWriter import com.android.systemui.Dumpable import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import java.io.FileDescriptor import java.io.PrintWriter import java.util.concurrent.Executor Loading @@ -47,8 +47,6 @@ data class ReceiverData( private const val MSG_ADD_RECEIVER = 0 private const val MSG_REMOVE_RECEIVER = 1 private const val MSG_REMOVE_RECEIVER_FOR_USER = 2 private const val MSG_USER_SWITCH = 3 private const val MSG_SET_STARTING_USER = 99 private const val TAG = "BroadcastDispatcher" private const val DEBUG = true Loading @@ -68,23 +66,15 @@ open class BroadcastDispatcher constructor ( private val bgLooper: Looper, private val bgExecutor: Executor, private val dumpManager: DumpManager, private val logger: BroadcastDispatcherLogger ) : Dumpable, BroadcastReceiver() { private val logger: BroadcastDispatcherLogger, private val userTracker: UserTracker ) : Dumpable { // Only modify in BG thread private val receiversByUser = SparseArray<UserBroadcastDispatcher>(20) fun initialize() { dumpManager.registerDumpable(javaClass.name, this) handler.sendEmptyMessage(MSG_SET_STARTING_USER) registerReceiver(this, IntentFilter(Intent.ACTION_USER_SWITCHED), null, UserHandle.ALL) } override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_USER_SWITCHED) { val user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) handler.obtainMessage(MSG_USER_SWITCH, user, 0).sendToTarget() } } /** Loading Loading @@ -181,7 +171,6 @@ open class BroadcastDispatcher constructor ( pw.println("Broadcast dispatcher:") val ipw = IndentingPrintWriter(pw, " ") ipw.increaseIndent() ipw.println("Current user: ${handler.currentUser}") for (index in 0 until receiversByUser.size()) { ipw.println("User ${receiversByUser.keyAt(index)}") receiversByUser.valueAt(index).dump(fd, ipw, args) Loading @@ -190,7 +179,6 @@ open class BroadcastDispatcher constructor ( } private val handler = object : Handler(bgLooper) { var currentUser = UserHandle.USER_SYSTEM override fun handleMessage(msg: Message) { when (msg.what) { Loading @@ -199,7 +187,7 @@ open class BroadcastDispatcher constructor ( // If the receiver asked to be registered under the current user, we register // under the actual current user. val userId = if (data.user.identifier == UserHandle.USER_CURRENT) { currentUser userTracker.userId } else { data.user.identifier } Loading @@ -221,14 +209,6 @@ open class BroadcastDispatcher constructor ( MSG_REMOVE_RECEIVER_FOR_USER -> { receiversByUser.get(msg.arg1)?.unregisterReceiver(msg.obj as BroadcastReceiver) } MSG_USER_SWITCH -> { currentUser = msg.arg1 } MSG_SET_STARTING_USER -> { currentUser = ActivityManager.getCurrentUser() } else -> super.handleMessage(msg) } } Loading packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +4 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.systemui.plugins.PluginInitializerImpl; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManagerImpl; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading Loading @@ -269,10 +270,11 @@ public class DependencyProvider { @Background Looper backgroundLooper, @Background Executor backgroundExecutor, DumpManager dumpManager, BroadcastDispatcherLogger logger BroadcastDispatcherLogger logger, UserTracker userTracker ) { BroadcastDispatcher bD = new BroadcastDispatcher(context, backgroundLooper, backgroundExecutor, dumpManager, logger); backgroundExecutor, dumpManager, logger, userTracker); bD.initialize(); return bD; } Loading packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +2 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager; Loading Loading @@ -78,7 +79,7 @@ public abstract class SysuiTestCase { Dependency.setInstance(mDependency); mFakeBroadcastDispatcher = new FakeBroadcastDispatcher(mContext, mock(Looper.class), mock(Executor.class), mock(DumpManager.class), mock(BroadcastDispatcherLogger.class)); mock(BroadcastDispatcherLogger.class), mock(UserTracker.class)); mRealInstrumentation = InstrumentationRegistry.getInstrumentation(); Instrumentation inst = spy(mRealInstrumentation); Loading packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt +7 −7 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.broadcast import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Handler import android.os.Looper Loading @@ -30,6 +29,7 @@ import android.testing.TestableLooper import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock import junit.framework.Assert.assertSame Loading Loading @@ -80,6 +80,8 @@ class BroadcastDispatcherTest : SysuiTestCase() { private lateinit var mockHandler: Handler @Mock private lateinit var logger: BroadcastDispatcherLogger @Mock private lateinit var userTracker: UserTracker private lateinit var executor: Executor Loading @@ -101,6 +103,7 @@ class BroadcastDispatcherTest : SysuiTestCase() { mock(Executor::class.java), mock(DumpManager::class.java), logger, userTracker, mapOf(0 to mockUBRUser0, 1 to mockUBRUser1)) // These should be valid filters Loading Loading @@ -178,11 +181,7 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testRegisterCurrentAsActualUser() { val intent = Intent(Intent.ACTION_USER_SWITCHED).apply { putExtra(Intent.EXTRA_USER_HANDLE, user1.identifier) } broadcastDispatcher.onReceive(mockContext, intent) testableLooper.processAllMessages() `when`(userTracker.userId).thenReturn(user1.identifier) broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, mockHandler, UserHandle.CURRENT) Loading Loading @@ -250,8 +249,9 @@ class BroadcastDispatcherTest : SysuiTestCase() { executor: Executor, dumpManager: DumpManager, logger: BroadcastDispatcherLogger, userTracker: UserTracker, var mockUBRMap: Map<Int, UserBroadcastDispatcher> ) : BroadcastDispatcher(context, bgLooper, executor, dumpManager, logger) { ) : BroadcastDispatcher(context, bgLooper, executor, dumpManager, logger, userTracker) { override fun createUBRForUser(userId: Int): UserBroadcastDispatcher { return mockUBRMap.getOrDefault(userId, mock(UserBroadcastDispatcher::class.java)) } Loading packages/SystemUI/tests/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt +4 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.util.Log import com.android.systemui.SysuiTestableContext import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import java.util.concurrent.Executor class FakeBroadcastDispatcher( Loading @@ -33,8 +34,9 @@ class FakeBroadcastDispatcher( looper: Looper, executor: Executor, dumpManager: DumpManager, logger: BroadcastDispatcherLogger ) : BroadcastDispatcher(context, looper, executor, dumpManager, logger) { logger: BroadcastDispatcherLogger, userTracker: UserTracker ) : BroadcastDispatcher(context, looper, executor, dumpManager, logger, userTracker) { private val registeredReceivers = ArraySet<BroadcastReceiver>() Loading Loading
packages/SystemUI/src/com/android/systemui/broadcast/BroadcastDispatcher.kt +5 −25 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.systemui.broadcast import android.app.ActivityManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent Loading @@ -33,6 +32,7 @@ import com.android.internal.util.IndentingPrintWriter import com.android.systemui.Dumpable import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import java.io.FileDescriptor import java.io.PrintWriter import java.util.concurrent.Executor Loading @@ -47,8 +47,6 @@ data class ReceiverData( private const val MSG_ADD_RECEIVER = 0 private const val MSG_REMOVE_RECEIVER = 1 private const val MSG_REMOVE_RECEIVER_FOR_USER = 2 private const val MSG_USER_SWITCH = 3 private const val MSG_SET_STARTING_USER = 99 private const val TAG = "BroadcastDispatcher" private const val DEBUG = true Loading @@ -68,23 +66,15 @@ open class BroadcastDispatcher constructor ( private val bgLooper: Looper, private val bgExecutor: Executor, private val dumpManager: DumpManager, private val logger: BroadcastDispatcherLogger ) : Dumpable, BroadcastReceiver() { private val logger: BroadcastDispatcherLogger, private val userTracker: UserTracker ) : Dumpable { // Only modify in BG thread private val receiversByUser = SparseArray<UserBroadcastDispatcher>(20) fun initialize() { dumpManager.registerDumpable(javaClass.name, this) handler.sendEmptyMessage(MSG_SET_STARTING_USER) registerReceiver(this, IntentFilter(Intent.ACTION_USER_SWITCHED), null, UserHandle.ALL) } override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_USER_SWITCHED) { val user = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL) handler.obtainMessage(MSG_USER_SWITCH, user, 0).sendToTarget() } } /** Loading Loading @@ -181,7 +171,6 @@ open class BroadcastDispatcher constructor ( pw.println("Broadcast dispatcher:") val ipw = IndentingPrintWriter(pw, " ") ipw.increaseIndent() ipw.println("Current user: ${handler.currentUser}") for (index in 0 until receiversByUser.size()) { ipw.println("User ${receiversByUser.keyAt(index)}") receiversByUser.valueAt(index).dump(fd, ipw, args) Loading @@ -190,7 +179,6 @@ open class BroadcastDispatcher constructor ( } private val handler = object : Handler(bgLooper) { var currentUser = UserHandle.USER_SYSTEM override fun handleMessage(msg: Message) { when (msg.what) { Loading @@ -199,7 +187,7 @@ open class BroadcastDispatcher constructor ( // If the receiver asked to be registered under the current user, we register // under the actual current user. val userId = if (data.user.identifier == UserHandle.USER_CURRENT) { currentUser userTracker.userId } else { data.user.identifier } Loading @@ -221,14 +209,6 @@ open class BroadcastDispatcher constructor ( MSG_REMOVE_RECEIVER_FOR_USER -> { receiversByUser.get(msg.arg1)?.unregisterReceiver(msg.obj as BroadcastReceiver) } MSG_USER_SWITCH -> { currentUser = msg.arg1 } MSG_SET_STARTING_USER -> { currentUser = ActivityManager.getCurrentUser() } else -> super.handleMessage(msg) } } Loading
packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java +4 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.systemui.plugins.PluginInitializerImpl; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.Recents; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManagerImpl; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading Loading @@ -269,10 +270,11 @@ public class DependencyProvider { @Background Looper backgroundLooper, @Background Executor backgroundExecutor, DumpManager dumpManager, BroadcastDispatcherLogger logger BroadcastDispatcherLogger logger, UserTracker userTracker ) { BroadcastDispatcher bD = new BroadcastDispatcher(context, backgroundLooper, backgroundExecutor, dumpManager, logger); backgroundExecutor, dumpManager, logger, userTracker); bD.initialize(); return bD; } Loading
packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +2 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger; import com.android.systemui.classifier.FalsingManagerFake; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.notification.row.NotificationBlockingHelperManager; Loading Loading @@ -78,7 +79,7 @@ public abstract class SysuiTestCase { Dependency.setInstance(mDependency); mFakeBroadcastDispatcher = new FakeBroadcastDispatcher(mContext, mock(Looper.class), mock(Executor.class), mock(DumpManager.class), mock(BroadcastDispatcherLogger.class)); mock(BroadcastDispatcherLogger.class), mock(UserTracker.class)); mRealInstrumentation = InstrumentationRegistry.getInstrumentation(); Instrumentation inst = spy(mRealInstrumentation); Loading
packages/SystemUI/tests/src/com/android/systemui/broadcast/BroadcastDispatcherTest.kt +7 −7 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.systemui.broadcast import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Handler import android.os.Looper Loading @@ -30,6 +29,7 @@ import android.testing.TestableLooper import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock import junit.framework.Assert.assertSame Loading Loading @@ -80,6 +80,8 @@ class BroadcastDispatcherTest : SysuiTestCase() { private lateinit var mockHandler: Handler @Mock private lateinit var logger: BroadcastDispatcherLogger @Mock private lateinit var userTracker: UserTracker private lateinit var executor: Executor Loading @@ -101,6 +103,7 @@ class BroadcastDispatcherTest : SysuiTestCase() { mock(Executor::class.java), mock(DumpManager::class.java), logger, userTracker, mapOf(0 to mockUBRUser0, 1 to mockUBRUser1)) // These should be valid filters Loading Loading @@ -178,11 +181,7 @@ class BroadcastDispatcherTest : SysuiTestCase() { @Test fun testRegisterCurrentAsActualUser() { val intent = Intent(Intent.ACTION_USER_SWITCHED).apply { putExtra(Intent.EXTRA_USER_HANDLE, user1.identifier) } broadcastDispatcher.onReceive(mockContext, intent) testableLooper.processAllMessages() `when`(userTracker.userId).thenReturn(user1.identifier) broadcastDispatcher.registerReceiverWithHandler(broadcastReceiver, intentFilter, mockHandler, UserHandle.CURRENT) Loading Loading @@ -250,8 +249,9 @@ class BroadcastDispatcherTest : SysuiTestCase() { executor: Executor, dumpManager: DumpManager, logger: BroadcastDispatcherLogger, userTracker: UserTracker, var mockUBRMap: Map<Int, UserBroadcastDispatcher> ) : BroadcastDispatcher(context, bgLooper, executor, dumpManager, logger) { ) : BroadcastDispatcher(context, bgLooper, executor, dumpManager, logger, userTracker) { override fun createUBRForUser(userId: Int): UserBroadcastDispatcher { return mockUBRMap.getOrDefault(userId, mock(UserBroadcastDispatcher::class.java)) } Loading
packages/SystemUI/tests/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt +4 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.util.Log import com.android.systemui.SysuiTestableContext import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserTracker import java.util.concurrent.Executor class FakeBroadcastDispatcher( Loading @@ -33,8 +34,9 @@ class FakeBroadcastDispatcher( looper: Looper, executor: Executor, dumpManager: DumpManager, logger: BroadcastDispatcherLogger ) : BroadcastDispatcher(context, looper, executor, dumpManager, logger) { logger: BroadcastDispatcherLogger, userTracker: UserTracker ) : BroadcastDispatcher(context, looper, executor, dumpManager, logger, userTracker) { private val registeredReceivers = ArraySet<BroadcastReceiver>() Loading