Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86741b96 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Migrate to new UserTracker for currentUser

This is a partial migration, mostly in classes I'm familiar with. This
means that the current user is meant to be retrieved async as part of
initialization or user action, with the execption of
PrivacyItemController that uses the new listener.

Test: atest SystemUITests
Test: manual
Bug: 163579262
Change-Id: I32b5a47194fa0f9607df19f210f30a0e416f7464
parent c8c572d1
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

@@ -121,6 +122,7 @@ public class ScreenDecorations extends SystemUI implements Tunable {
    private final TunerService mTunerService;
    private DisplayManager.DisplayListener mDisplayListener;
    private CameraAvailabilityListener mCameraListener;
    private final UserTracker mUserTracker;

    //TODO: These are piecemeal being updated to Points for now to support non-square rounded
    // corners. for now it is only supposed when reading the intrinsic size from the drawables with
@@ -198,11 +200,13 @@ public class ScreenDecorations extends SystemUI implements Tunable {
    public ScreenDecorations(Context context,
            @Main Handler handler,
            BroadcastDispatcher broadcastDispatcher,
            TunerService tunerService) {
            TunerService tunerService,
            UserTracker userTracker) {
        super(context);
        mMainHandler = handler;
        mBroadcastDispatcher = broadcastDispatcher;
        mTunerService = tunerService;
        mUserTracker = userTracker;
    }

    @Override
@@ -306,7 +310,8 @@ public class ScreenDecorations extends SystemUI implements Tunable {
            // Watch color inversion and invert the overlay as needed.
            if (mColorInversionSetting == null) {
                mColorInversionSetting = new SecureSetting(mContext, mHandler,
                        Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
                        Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
                        mUserTracker.getUserId()) {
                    @Override
                    protected void handleValueChanged(int value, boolean observedChange) {
                        updateColorInversion(value);
+4 −3
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.controls.controller

import android.app.ActivityManager
import android.content.ComponentName
import android.content.Context
import android.os.IBinder
@@ -30,6 +29,7 @@ import android.util.Log
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.concurrency.DelayableExecutor
import dagger.Lazy
import java.util.concurrent.atomic.AtomicBoolean
@@ -40,7 +40,8 @@ import javax.inject.Inject
open class ControlsBindingControllerImpl @Inject constructor(
    private val context: Context,
    @Background private val backgroundExecutor: DelayableExecutor,
    private val lazyController: Lazy<ControlsController>
    private val lazyController: Lazy<ControlsController>,
    userTracker: UserTracker
) : ControlsBindingController {

    companion object {
@@ -56,7 +57,7 @@ open class ControlsBindingControllerImpl @Inject constructor(
        }
    }

    private var currentUser = UserHandle.of(ActivityManager.getCurrentUser())
    private var currentUser = userTracker.userHandle

    override val currentUserId: Int
        get() = currentUser.identifier
+11 −10
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.controls.controller

import android.app.ActivityManager
import android.app.PendingIntent
import android.app.backup.BackupManager
import android.content.BroadcastReceiver
@@ -46,6 +45,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dump.DumpManager
import com.android.systemui.globalactions.GlobalActionsDialog
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.concurrency.DelayableExecutor
import java.io.FileDescriptor
import java.io.PrintWriter
@@ -63,7 +63,8 @@ class ControlsControllerImpl @Inject constructor (
    private val listingController: ControlsListingController,
    private val broadcastDispatcher: BroadcastDispatcher,
    optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>,
        dumpManager: DumpManager
    dumpManager: DumpManager,
    userTracker: UserTracker
) : Dumpable, ControlsController {

    companion object {
@@ -85,7 +86,7 @@ class ControlsControllerImpl @Inject constructor (
    private var seedingInProgress = false
    private val seedingCallbacks = mutableListOf<Consumer<Boolean>>()

    private var currentUser = UserHandle.of(ActivityManager.getCurrentUser())
    private var currentUser = userTracker.userHandle
    override val currentUserId
        get() = currentUser.identifier

+7 −5
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.systemui.controls.management

import android.app.ActivityManager
import android.content.ComponentName
import android.content.Context
import android.content.pm.ServiceInfo
@@ -29,6 +28,7 @@ import com.android.settingslib.widget.CandidateInfo
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.settings.UserTracker
import java.util.concurrent.Executor
import java.util.concurrent.atomic.AtomicInteger
import javax.inject.Inject
@@ -56,14 +56,16 @@ private fun createServiceListing(context: Context): ServiceListing {
class ControlsListingControllerImpl @VisibleForTesting constructor(
    private val context: Context,
    @Background private val backgroundExecutor: Executor,
    private val serviceListingBuilder: (Context) -> ServiceListing
    private val serviceListingBuilder: (Context) -> ServiceListing,
    userTracker: UserTracker
) : ControlsListingController {

    @Inject
    constructor(context: Context, executor: Executor): this(
    constructor(context: Context, executor: Executor, userTracker: UserTracker): this(
            context,
            executor,
            ::createServiceListing
            ::createServiceListing,
            userTracker
    )

    private var serviceListing = serviceListingBuilder(context)
@@ -78,7 +80,7 @@ class ControlsListingControllerImpl @VisibleForTesting constructor(
    private var availableServices = emptyList<ServiceInfo>()
    private var userChangeInProgress = AtomicInteger(0)

    override var currentUserId = ActivityManager.getCurrentUser()
    override var currentUserId = userTracker.userId
        private set

    private val serviceListingCallback = ServiceListing.Callback {
+16 −26
Original line number Diff line number Diff line
@@ -16,25 +16,23 @@

package com.android.systemui.privacy

import android.app.ActivityManager
import android.app.AppOpsManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.UserInfo
import android.os.UserHandle
import android.os.UserManager
import android.provider.DeviceConfig
import com.android.internal.annotations.VisibleForTesting
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags
import com.android.systemui.Dumpable
import com.android.systemui.appops.AppOpItem
import com.android.systemui.appops.AppOpsController
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.DeviceConfigProxy
import com.android.systemui.util.concurrency.DelayableExecutor
import java.io.FileDescriptor
@@ -48,9 +46,8 @@ class PrivacyItemController @Inject constructor(
    private val appOpsController: AppOpsController,
    @Main uiExecutor: DelayableExecutor,
    @Background private val bgExecutor: Executor,
    private val broadcastDispatcher: BroadcastDispatcher,
    private val deviceConfigProxy: DeviceConfigProxy,
    private val userManager: UserManager,
    private val userTracker: UserTracker,
    dumpManager: DumpManager
) : Dumpable {

@@ -153,11 +150,14 @@ class PrivacyItemController @Inject constructor(
    }

    @VisibleForTesting
    internal var userSwitcherReceiver = Receiver()
        set(value) {
            unregisterReceiver()
            field = value
            if (listening) registerReceiver()
    internal var userTrackerCallback = object : UserTracker.Callback {
        override fun onUserChanged(newUser: Int, userContext: Context) {
            update(true)
        }

        override fun onProfilesChanged(profiles: List<UserInfo>) {
            update(true)
        }
    }

    init {
@@ -168,20 +168,18 @@ class PrivacyItemController @Inject constructor(
        dumpManager.registerDumpable(TAG, this)
    }

    private fun unregisterReceiver() {
        broadcastDispatcher.unregisterReceiver(userSwitcherReceiver)
    private fun unregisterListener() {
        userTracker.removeCallback(userTrackerCallback)
    }

    private fun registerReceiver() {
        broadcastDispatcher.registerReceiver(userSwitcherReceiver, intentFilter,
                null /* handler */, UserHandle.ALL)
        userTracker.addCallback(userTrackerCallback, bgExecutor)
    }

    private fun update(updateUsers: Boolean) {
        bgExecutor.execute {
            if (updateUsers) {
                val currentUser = ActivityManager.getCurrentUser()
                currentUserIds = userManager.getProfiles(currentUser).map { it.id }
                currentUserIds = userTracker.userProfiles.map { it.id }
            }
            updateListAndNotifyChanges.run()
        }
@@ -206,7 +204,7 @@ class PrivacyItemController @Inject constructor(
            update(true)
        } else {
            appOpsController.removeCallback(OPS, cb)
            unregisterReceiver()
            unregisterListener()
            // Make sure that we remove all indicators and notify listeners if we are not
            // listening anymore due to indicators being disabled
            update(false)
@@ -275,14 +273,6 @@ class PrivacyItemController @Inject constructor(
        fun onFlagMicCameraChanged(flag: Boolean) {}
    }

    internal inner class Receiver : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (intentFilter.hasAction(intent.action)) {
                update(true)
            }
        }
    }

    private class NotifyChangesToCallback(
        private val callback: Callback?,
        private val list: List<PrivacyItem>
Loading