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

Commit 7292f254 authored by Evan Laird's avatar Evan Laird
Browse files

Replace StatusBarUserSwitcherController with UserInteractor

Originally, the user chip in the status bar was controlled by
StatusBarUserSwitcherController, which was backed by
UserInfoControllerImpl. This data source would sometimes show incorrect
data for the current user name.

Since UserRepository/UserInteractor exist now, this CL hooks up the
existing StatusBarUserSwitcherContainer view to a new class,
StatusBarUserChipViewModel, which is backed by the new repository class.

This allows us to fix 2 bugs at once:

1. The chip now only shows when there are > 1 users AND the config is
   true
2. Hooking the chip up to the same data source that populates the user
   switcher screen means that the names will always be consistent

Also removed the now-unused StatusBarUserSwitcherController, and its
associated feature controller and tracker classes.

Test: atest StatusBarUserChipViewModelTest
Test: atest UserInteractorRefactoredTest
Test: atest KeyguardStatusBarViewControllerTest
Test: atest PhoneStatusBarViewControllerTest

Bug: 254246505
Bug: 254680435
Change-Id: I3f5e212fed485b5697dedbe0510ab6c34d3b2ade
parent 27ff98f7
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -21,10 +21,7 @@ import com.android.systemui.R;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherControllerImpl;

import dagger.Binds;
import dagger.Module;
import dagger.Provides;

@@ -50,10 +47,4 @@ public abstract class KeyguardStatusBarViewModule {
    static StatusBarUserSwitcherContainer getUserSwitcherContainer(KeyguardStatusBarView view) {
        return view.findViewById(R.id.user_switcher_container);
    }

    /** */
    @Binds
    @KeyguardStatusBarViewScope
    abstract StatusBarUserSwitcherController bindStatusBarUserSwitcherController(
            StatusBarUserSwitcherControllerImpl controller);
}
+10 −3
Original line number Diff line number Diff line
@@ -48,6 +48,9 @@ import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
import com.android.systemui.user.ui.binder.StatusBarUserChipViewBinder;
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -70,7 +73,7 @@ public class KeyguardStatusBarView extends RelativeLayout {
    private ImageView mMultiUserAvatar;
    private BatteryMeterView mBatteryView;
    private StatusIconContainer mStatusIconContainer;
    private ViewGroup mUserSwitcherContainer;
    private StatusBarUserSwitcherContainer mUserSwitcherContainer;

    private boolean mKeyguardUserSwitcherEnabled;
    private boolean mKeyguardUserAvatarEnabled;
@@ -121,8 +124,12 @@ public class KeyguardStatusBarView extends RelativeLayout {
        loadDimens();
    }

    public ViewGroup getUserSwitcherContainer() {
        return mUserSwitcherContainer;
    /**
     * Should only be called from {@link KeyguardStatusBarViewController}
     * @param viewModel view model for the status bar user chip
     */
    void init(StatusBarUserChipViewModel viewModel) {
        StatusBarUserChipViewBinder.bind(mUserSwitcherContainer, viewModel);
    }

    @Override
+6 −18
Original line number Diff line number Diff line
@@ -59,13 +59,11 @@ import com.android.systemui.statusbar.notification.stack.AnimationProperties;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
import com.android.systemui.statusbar.phone.fragment.StatusBarIconBlocklistKt;
import com.android.systemui.statusbar.phone.fragment.StatusBarSystemEventAnimator;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserInfoTracker;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherFeatureController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.settings.SecureSettings;

@@ -110,9 +108,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    private final SysuiStatusBarStateController mStatusBarStateController;
    private final StatusBarContentInsetsProvider mInsetsProvider;
    private final UserManager mUserManager;
    private final StatusBarUserSwitcherFeatureController mFeatureController;
    private final StatusBarUserSwitcherController mUserSwitcherController;
    private final StatusBarUserInfoTracker mStatusBarUserInfoTracker;
    private final StatusBarUserChipViewModel mStatusBarUserChipViewModel;
    private final SecureSettings mSecureSettings;
    private final CommandQueue mCommandQueue;
    private final Executor mMainExecutor;
@@ -276,9 +272,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
            SysuiStatusBarStateController statusBarStateController,
            StatusBarContentInsetsProvider statusBarContentInsetsProvider,
            UserManager userManager,
            StatusBarUserSwitcherFeatureController featureController,
            StatusBarUserSwitcherController userSwitcherController,
            StatusBarUserInfoTracker statusBarUserInfoTracker,
            StatusBarUserChipViewModel userChipViewModel,
            SecureSettings secureSettings,
            CommandQueue commandQueue,
            @Main Executor mainExecutor,
@@ -301,9 +295,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        mStatusBarStateController = statusBarStateController;
        mInsetsProvider = statusBarContentInsetsProvider;
        mUserManager = userManager;
        mFeatureController = featureController;
        mUserSwitcherController = userSwitcherController;
        mStatusBarUserInfoTracker = statusBarUserInfoTracker;
        mStatusBarUserChipViewModel = userChipViewModel;
        mSecureSettings = secureSettings;
        mCommandQueue = commandQueue;
        mMainExecutor = mainExecutor;
@@ -328,8 +320,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                R.dimen.header_notifications_collide_distance);

        mView.setKeyguardUserAvatarEnabled(
                !mFeatureController.isStatusBarUserSwitcherFeatureEnabled());
        mFeatureController.addCallback(enabled -> mView.setKeyguardUserAvatarEnabled(!enabled));
                !mStatusBarUserChipViewModel.getChipEnabled());
        mSystemEventAnimator = new StatusBarSystemEventAnimator(mView, r);

        mDisableStateTracker = new DisableStateTracker(
@@ -344,11 +335,11 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        super.onInit();
        mCarrierTextController.init();
        mBatteryMeterViewController.init();
        mUserSwitcherController.init();
    }

    @Override
    protected void onViewAttached() {
        mView.init(mStatusBarUserChipViewModel);
        mConfigurationController.addCallback(mConfigurationListener);
        mAnimationScheduler.addCallback(mAnimationCallback);
        mUserInfoController.addCallback(mOnUserInfoChangedListener);
@@ -394,9 +385,6 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    /** Sets whether user switcher is enabled. */
    public void setKeyguardUserSwitcherEnabled(boolean enabled) {
        mView.setKeyguardUserSwitcherEnabled(enabled);
        // We don't have a listener for when the user switcher setting changes, so this is
        // where we re-check the state
        mStatusBarUserInfoTracker.checkEnabled();
    }

    /** Sets whether this controller should listen to battery updates. */
+8 −0
Original line number Diff line number Diff line
@@ -38,6 +38,9 @@ import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
import com.android.systemui.user.ui.binder.StatusBarUserChipViewBinder;
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel;
import com.android.systemui.util.leak.RotationUtils;

import java.util.Objects;
@@ -73,6 +76,11 @@ public class PhoneStatusBarView extends FrameLayout {
        mTouchEventHandler = handler;
    }

    void init(StatusBarUserChipViewModel viewModel) {
        StatusBarUserSwitcherContainer container = findViewById(R.id.user_switcher_container);
        StatusBarUserChipViewBinder.bind(container, viewModel);
    }

    @Override
    public void onFinishInflate() {
        super.onFinishInflate();
+6 −6
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@ import android.view.ViewGroup
import android.view.ViewTreeObserver
import com.android.systemui.R
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.unfold.SysUIUnfoldComponent
import com.android.systemui.unfold.UNFOLD_STATUS_BAR
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
import com.android.systemui.user.ui.viewmodel.StatusBarUserChipViewModel
import com.android.systemui.util.ViewController
import com.android.systemui.util.kotlin.getOrNull
import com.android.systemui.util.view.ViewUtil
@@ -40,7 +40,7 @@ class PhoneStatusBarViewController private constructor(
    view: PhoneStatusBarView,
    @Named(UNFOLD_STATUS_BAR) private val progressProvider: ScopedUnfoldTransitionProgressProvider?,
    private val moveFromCenterAnimationController: StatusBarMoveFromCenterAnimationController?,
    private val userSwitcherController: StatusBarUserSwitcherController,
    private val userChipViewModel: StatusBarUserChipViewModel,
    private val viewUtil: ViewUtil,
    touchEventHandler: PhoneStatusBarView.TouchEventHandler,
    private val configurationController: ConfigurationController
@@ -91,10 +91,10 @@ class PhoneStatusBarViewController private constructor(

    init {
        mView.setTouchEventHandler(touchEventHandler)
        mView.init(userChipViewModel)
    }

    override fun onInit() {
        userSwitcherController.init()
    }

    fun setImportantForAccessibility(mode: Int) {
@@ -156,9 +156,9 @@ class PhoneStatusBarViewController private constructor(
        private val unfoldComponent: Optional<SysUIUnfoldComponent>,
        @Named(UNFOLD_STATUS_BAR)
        private val progressProvider: Optional<ScopedUnfoldTransitionProgressProvider>,
        private val userSwitcherController: StatusBarUserSwitcherController,
        private val userChipViewModel: StatusBarUserChipViewModel,
        private val viewUtil: ViewUtil,
        private val configurationController: ConfigurationController
        private val configurationController: ConfigurationController,
    ) {
        fun create(
            view: PhoneStatusBarView,
@@ -168,7 +168,7 @@ class PhoneStatusBarViewController private constructor(
                view,
                progressProvider.getOrNull(),
                unfoldComponent.getOrNull()?.getStatusBarMoveFromCenterAnimationController(),
                userSwitcherController,
                userChipViewModel,
                viewUtil,
                touchEventHandler,
                configurationController
Loading