Merge "Stop listening to ACTION_USER_SWITCHED in BD"
This commit is contained in:
committed by
Android (Google) Code Review
commit
198c17f4cc
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -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)
|
||||
@@ -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) {
|
||||
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
@@ -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>()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user