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

Commit 170542de authored by Michal Brzezinski's avatar Michal Brzezinski
Browse files

Making multiuser button work in collapsed QS in split shade

The issue was caused by MultiUserSwitchController always having reference and acting upon multiuser button in expanded QS - that's a different button than collapsed QS.
That reference was provided by dagger and while this issue could be fixed in dagger, that would require providing separate multiuser button and separate MultiUserSwitchController. That would require adding qualifier like @Named in multiple places (both providers and receivers) so seems like too much boilerplate (or opportunity for separate module?) and I went with adding factory for MultiUserSwitchController.

Another issue is MultiUserSwitchController opening multiuser detail always in expanded QS - collapsed QS currently doesn't support opening detail view. Looks like that requires non-trivial code changes, so for now I did it in a hacky way - forcing panel to expand and only then showing multiuser detail (as seen in QSPanelController). I think this hacky way is better than having non-functioning button.

Fixes: 196805122
Test: enable multiuser support -> expand split shade (but not expand QS)
-> click on multiuser button -> multiuser panel should open within QS

Change-Id: I76c9bb77c870b8a1a4e25221c63821786057d7f2
Merged-In: I76c9bb77c870b8a1a4e25221c63821786057d7f2
parent 61246e7f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ class FooterActionsControllerBuilder @Inject constructor(
    private val activityStarter: ActivityStarter,
    private val userManager: UserManager,
    private val userInfoController: UserInfoController,
    private val multiUserSwitchController: MultiUserSwitchController,
    private val multiUserSwitchControllerFactory: MultiUserSwitchController.Factory,
    private val deviceProvisionedController: DeviceProvisionedController,
    private val falsingManager: FalsingManager,
    private val metricsLogger: MetricsLogger,
@@ -60,8 +60,8 @@ class FooterActionsControllerBuilder @Inject constructor(

    fun build(): FooterActionsController {
        return FooterActionsController(view, qsPanelController, activityStarter, userManager,
                userInfoController, multiUserSwitchController, deviceProvisionedController,
                falsingManager, metricsLogger, tunerService, globalActionsDialog, uiEventLogger,
                showPMLiteButton, buttonsVisibleState)
                userInfoController, multiUserSwitchControllerFactory.create(view),
                deviceProvisionedController, falsingManager, metricsLogger, tunerService,
                globalActionsDialog, uiEventLogger, showPMLiteButton, buttonsVisibleState)
    }
}
 No newline at end of file
+13 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.settings.brightness.BrightnessController;
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
import com.android.systemui.settings.brightness.BrightnessSlider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.tuner.TunerService;

@@ -60,6 +61,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    private final QSCustomizerController mQsCustomizerController;
    private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
    private final FalsingManager mFalsingManager;
    private final CommandQueue mCommandQueue;
    private final BrightnessController mBrightnessController;
    private final BrightnessSlider mBrightnessSlider;
    private final BrightnessMirrorHandler mBrightnessMirrorHandler;
@@ -97,7 +99,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
            QSTileRevealController.Factory qsTileRevealControllerFactory,
            DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
            QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
            BrightnessSlider.Factory brightnessSliderFactory, FalsingManager falsingManager) {
            BrightnessSlider.Factory brightnessSliderFactory, FalsingManager falsingManager,
            CommandQueue commandQueue) {
        super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
                metricsLogger, uiEventLogger, qsLogger, dumpManager);
        mQsSecurityFooter = qsSecurityFooter;
@@ -105,6 +108,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
        mQsCustomizerController = qsCustomizerController;
        mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
        mFalsingManager = falsingManager;
        mCommandQueue = commandQueue;
        mQsSecurityFooter.setHostEnvironment(qstileHost);

        mBrightnessSlider = brightnessSliderFactory.create(getContext(), mView);
@@ -274,6 +278,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {

    /** */
    public void showDetailAdapter(DetailAdapter detailAdapter, int x, int y) {
        // TODO(b/199296365)
        // Workaround for opening detail from QQS, when there might not be enough space to
        // display e.g. in case of multiuser detail from split shade. Currently showing detail works
        // only for QS (mView below) and that's why expanding panel (thus showing QS instead of QQS)
        // makes it displayed correctly.
        if (!isExpanded()) {
            mCommandQueue.animateExpandSettingsPanel(null);
        }
        mView.showDetailAdapter(true, detailAdapter, new int[]{x, y});
    }

+0 −7
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.qs.QuickStatusBarHeader;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.statusbar.phone.MultiUserSwitch;

import javax.inject.Named;

@@ -80,12 +79,6 @@ public interface QSFragmentModule {
        return qsFragment.getView();
    }

    /** */
    @Provides
    static MultiUserSwitch providesMultiUserSWitch(QSFooterView qsFooterView) {
        return qsFooterView.findViewById(R.id.multi_user_switch);
    }

    /** */
    @Provides
    static QSPanel provideQSPanel(@RootView View view) {
+25 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.ViewGroup;
import com.android.systemui.R;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.qs.FooterActionsView;
import com.android.systemui.qs.QSDetailDisplayer;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.statusbar.policy.UserSwitcherController;
@@ -33,7 +34,6 @@ import com.android.systemui.util.ViewController;
import javax.inject.Inject;

/** View Controller for {@link MultiUserSwitch}. */
@QSScope
public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
    private final UserManager mUserManager;
    private final UserSwitcherController mUserSwitcherController;
@@ -60,8 +60,30 @@ public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
        }
    };

    @QSScope
    public static class Factory {
        private final UserManager mUserManager;
        private final UserSwitcherController mUserSwitcherController;
        private final QSDetailDisplayer mQsDetailDisplayer;
        private final FalsingManager mFalsingManager;

        @Inject
    public MultiUserSwitchController(MultiUserSwitch view, UserManager userManager,
        public Factory(UserManager userManager, UserSwitcherController userSwitcherController,
                QSDetailDisplayer qsDetailDisplayer, FalsingManager falsingManager) {
            mUserManager = userManager;
            mUserSwitcherController = userSwitcherController;
            mQsDetailDisplayer = qsDetailDisplayer;
            mFalsingManager = falsingManager;
        }

        public MultiUserSwitchController create(FooterActionsView view) {
            return new MultiUserSwitchController(view.findViewById(R.id.multi_user_switch),
                    mUserManager, mUserSwitcherController, mQsDetailDisplayer,
                    mFalsingManager);
        }
    }

    private MultiUserSwitchController(MultiUserSwitch view, UserManager userManager,
            UserSwitcherController userSwitcherController, QSDetailDisplayer qsDetailDisplayer,
            FalsingManager falsingManager) {
        super(view);
+4 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.settings.brightness.BrightnessController;
import com.android.systemui.settings.brightness.BrightnessSlider;
import com.android.systemui.settings.brightness.ToggleSlider;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.animation.DisappearParameters;

@@ -94,6 +95,8 @@ public class QSPanelControllerTest extends SysuiTestCase {
    QSTileView mQSTileView;
    @Mock
    PagedTileLayout mPagedTileLayout;
    @Mock
    CommandQueue mCommandQueue;
    FalsingManagerFake mFalsingManager = new FalsingManagerFake();

    private QSPanelController mController;
@@ -121,7 +124,7 @@ public class QSPanelControllerTest extends SysuiTestCase {
                mQSTileHost, mQSCustomizerController, true, mMediaHost,
                mQSTileRevealControllerFactory, mDumpManager, mMetricsLogger, mUiEventLogger,
                mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory,
                mFalsingManager
                mFalsingManager, mCommandQueue
        );

        mController.init();