Merge "Stop listening to ACTION_USER_SWITCHED in BD"

This commit is contained in:
Fabian Kozynski
2020-09-03 13:21:07 +00:00
committed by Android (Google) Code Review
5 changed files with 22 additions and 37 deletions

View File

@@ -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)
}
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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))
}

View File

@@ -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>()