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
This commit is contained in:
@@ -36,7 +36,7 @@ class FooterActionsControllerBuilder @Inject constructor(
|
|||||||
private val activityStarter: ActivityStarter,
|
private val activityStarter: ActivityStarter,
|
||||||
private val userManager: UserManager,
|
private val userManager: UserManager,
|
||||||
private val userInfoController: UserInfoController,
|
private val userInfoController: UserInfoController,
|
||||||
private val multiUserSwitchController: MultiUserSwitchController,
|
private val multiUserSwitchControllerFactory: MultiUserSwitchController.Factory,
|
||||||
private val deviceProvisionedController: DeviceProvisionedController,
|
private val deviceProvisionedController: DeviceProvisionedController,
|
||||||
private val falsingManager: FalsingManager,
|
private val falsingManager: FalsingManager,
|
||||||
private val metricsLogger: MetricsLogger,
|
private val metricsLogger: MetricsLogger,
|
||||||
@@ -60,8 +60,8 @@ class FooterActionsControllerBuilder @Inject constructor(
|
|||||||
|
|
||||||
fun build(): FooterActionsController {
|
fun build(): FooterActionsController {
|
||||||
return FooterActionsController(view, qsPanelController, activityStarter, userManager,
|
return FooterActionsController(view, qsPanelController, activityStarter, userManager,
|
||||||
userInfoController, multiUserSwitchController, deviceProvisionedController,
|
userInfoController, multiUserSwitchControllerFactory.create(view),
|
||||||
falsingManager, metricsLogger, tunerService, globalActionsDialog, uiEventLogger,
|
deviceProvisionedController, falsingManager, metricsLogger, tunerService,
|
||||||
showPMLiteButton, buttonsVisibleState)
|
globalActionsDialog, uiEventLogger, showPMLiteButton, buttonsVisibleState)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,6 +42,7 @@ import com.android.systemui.qs.logging.QSLogger;
|
|||||||
import com.android.systemui.settings.brightness.BrightnessController;
|
import com.android.systemui.settings.brightness.BrightnessController;
|
||||||
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
|
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
|
||||||
import com.android.systemui.settings.brightness.BrightnessSlider;
|
import com.android.systemui.settings.brightness.BrightnessSlider;
|
||||||
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
private final QSCustomizerController mQsCustomizerController;
|
private final QSCustomizerController mQsCustomizerController;
|
||||||
private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
|
private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
|
||||||
private final FalsingManager mFalsingManager;
|
private final FalsingManager mFalsingManager;
|
||||||
|
private final CommandQueue mCommandQueue;
|
||||||
private final BrightnessController mBrightnessController;
|
private final BrightnessController mBrightnessController;
|
||||||
private final BrightnessSlider mBrightnessSlider;
|
private final BrightnessSlider mBrightnessSlider;
|
||||||
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
|
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
|
||||||
@@ -97,7 +99,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
QSTileRevealController.Factory qsTileRevealControllerFactory,
|
QSTileRevealController.Factory qsTileRevealControllerFactory,
|
||||||
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
|
||||||
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
|
QSLogger qsLogger, BrightnessController.Factory brightnessControllerFactory,
|
||||||
BrightnessSlider.Factory brightnessSliderFactory, FalsingManager falsingManager) {
|
BrightnessSlider.Factory brightnessSliderFactory, FalsingManager falsingManager,
|
||||||
|
CommandQueue commandQueue) {
|
||||||
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
|
super(view, qstileHost, qsCustomizerController, usingMediaPlayer, mediaHost,
|
||||||
metricsLogger, uiEventLogger, qsLogger, dumpManager);
|
metricsLogger, uiEventLogger, qsLogger, dumpManager);
|
||||||
mQsSecurityFooter = qsSecurityFooter;
|
mQsSecurityFooter = qsSecurityFooter;
|
||||||
@@ -105,6 +108,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
mQsCustomizerController = qsCustomizerController;
|
mQsCustomizerController = qsCustomizerController;
|
||||||
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
|
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
|
||||||
mFalsingManager = falsingManager;
|
mFalsingManager = falsingManager;
|
||||||
|
mCommandQueue = commandQueue;
|
||||||
mQsSecurityFooter.setHostEnvironment(qstileHost);
|
mQsSecurityFooter.setHostEnvironment(qstileHost);
|
||||||
|
|
||||||
mBrightnessSlider = brightnessSliderFactory.create(getContext(), mView);
|
mBrightnessSlider = brightnessSliderFactory.create(getContext(), mView);
|
||||||
@@ -274,6 +278,14 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
|
|||||||
|
|
||||||
/** */
|
/** */
|
||||||
public void showDetailAdapter(DetailAdapter detailAdapter, int x, int y) {
|
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});
|
mView.showDetailAdapter(true, detailAdapter, new int[]{x, y});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import com.android.systemui.qs.QSPanel;
|
|||||||
import com.android.systemui.qs.QuickQSPanel;
|
import com.android.systemui.qs.QuickQSPanel;
|
||||||
import com.android.systemui.qs.QuickStatusBarHeader;
|
import com.android.systemui.qs.QuickStatusBarHeader;
|
||||||
import com.android.systemui.qs.customize.QSCustomizer;
|
import com.android.systemui.qs.customize.QSCustomizer;
|
||||||
import com.android.systemui.statusbar.phone.MultiUserSwitch;
|
|
||||||
|
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@@ -80,12 +79,6 @@ public interface QSFragmentModule {
|
|||||||
return qsFragment.getView();
|
return qsFragment.getView();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
static MultiUserSwitch providesMultiUserSWitch(QSFooterView qsFooterView) {
|
|
||||||
return qsFooterView.findViewById(R.id.multi_user_switch);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
static QSPanel provideQSPanel(@RootView View view) {
|
static QSPanel provideQSPanel(@RootView View view) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.android.systemui.R;
|
|||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
import com.android.systemui.plugins.qs.DetailAdapter;
|
import com.android.systemui.plugins.qs.DetailAdapter;
|
||||||
|
import com.android.systemui.qs.FooterActionsView;
|
||||||
import com.android.systemui.qs.QSDetailDisplayer;
|
import com.android.systemui.qs.QSDetailDisplayer;
|
||||||
import com.android.systemui.qs.dagger.QSScope;
|
import com.android.systemui.qs.dagger.QSScope;
|
||||||
import com.android.systemui.qs.user.UserSwitchDialogController;
|
import com.android.systemui.qs.user.UserSwitchDialogController;
|
||||||
@@ -35,7 +36,6 @@ import com.android.systemui.util.ViewController;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/** View Controller for {@link MultiUserSwitch}. */
|
/** View Controller for {@link MultiUserSwitch}. */
|
||||||
@QSScope
|
|
||||||
public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
|
public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
|
||||||
private final UserManager mUserManager;
|
private final UserManager mUserManager;
|
||||||
private final UserSwitcherController mUserSwitcherController;
|
private final UserSwitcherController mUserSwitcherController;
|
||||||
@@ -68,8 +68,35 @@ public class MultiUserSwitchController extends ViewController<MultiUserSwitch> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Inject
|
@QSScope
|
||||||
public MultiUserSwitchController(MultiUserSwitch view, UserManager userManager,
|
public static class Factory {
|
||||||
|
private final UserManager mUserManager;
|
||||||
|
private final UserSwitcherController mUserSwitcherController;
|
||||||
|
private final QSDetailDisplayer mQsDetailDisplayer;
|
||||||
|
private final FalsingManager mFalsingManager;
|
||||||
|
private final UserSwitchDialogController mUserSwitchDialogController;
|
||||||
|
private final FeatureFlags mFeatureFlags;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public Factory(UserManager userManager, UserSwitcherController userSwitcherController,
|
||||||
|
QSDetailDisplayer qsDetailDisplayer, FalsingManager falsingManager,
|
||||||
|
UserSwitchDialogController userSwitchDialogController, FeatureFlags featureFlags) {
|
||||||
|
mUserManager = userManager;
|
||||||
|
mUserSwitcherController = userSwitcherController;
|
||||||
|
mQsDetailDisplayer = qsDetailDisplayer;
|
||||||
|
mFalsingManager = falsingManager;
|
||||||
|
mUserSwitchDialogController = userSwitchDialogController;
|
||||||
|
mFeatureFlags = featureFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiUserSwitchController create(FooterActionsView view) {
|
||||||
|
return new MultiUserSwitchController(view.findViewById(R.id.multi_user_switch),
|
||||||
|
mUserManager, mUserSwitcherController, mQsDetailDisplayer,
|
||||||
|
mFalsingManager, mUserSwitchDialogController, mFeatureFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private MultiUserSwitchController(MultiUserSwitch view, UserManager userManager,
|
||||||
UserSwitcherController userSwitcherController, QSDetailDisplayer qsDetailDisplayer,
|
UserSwitcherController userSwitcherController, QSDetailDisplayer qsDetailDisplayer,
|
||||||
FalsingManager falsingManager, UserSwitchDialogController userSwitchDialogController,
|
FalsingManager falsingManager, UserSwitchDialogController userSwitchDialogController,
|
||||||
FeatureFlags featureFlags) {
|
FeatureFlags featureFlags) {
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl;
|
|||||||
import com.android.systemui.settings.brightness.BrightnessController;
|
import com.android.systemui.settings.brightness.BrightnessController;
|
||||||
import com.android.systemui.settings.brightness.BrightnessSlider;
|
import com.android.systemui.settings.brightness.BrightnessSlider;
|
||||||
import com.android.systemui.settings.brightness.ToggleSlider;
|
import com.android.systemui.settings.brightness.ToggleSlider;
|
||||||
|
import com.android.systemui.statusbar.CommandQueue;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.animation.DisappearParameters;
|
import com.android.systemui.util.animation.DisappearParameters;
|
||||||
|
|
||||||
@@ -94,6 +95,8 @@ public class QSPanelControllerTest extends SysuiTestCase {
|
|||||||
QSTileView mQSTileView;
|
QSTileView mQSTileView;
|
||||||
@Mock
|
@Mock
|
||||||
PagedTileLayout mPagedTileLayout;
|
PagedTileLayout mPagedTileLayout;
|
||||||
|
@Mock
|
||||||
|
CommandQueue mCommandQueue;
|
||||||
FalsingManagerFake mFalsingManager = new FalsingManagerFake();
|
FalsingManagerFake mFalsingManager = new FalsingManagerFake();
|
||||||
|
|
||||||
private QSPanelController mController;
|
private QSPanelController mController;
|
||||||
@@ -121,7 +124,7 @@ public class QSPanelControllerTest extends SysuiTestCase {
|
|||||||
mQSTileHost, mQSCustomizerController, true, mMediaHost,
|
mQSTileHost, mQSCustomizerController, true, mMediaHost,
|
||||||
mQSTileRevealControllerFactory, mDumpManager, mMetricsLogger, mUiEventLogger,
|
mQSTileRevealControllerFactory, mDumpManager, mMetricsLogger, mUiEventLogger,
|
||||||
mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory,
|
mQSLogger, mBrightnessControllerFactory, mToggleSliderViewControllerFactory,
|
||||||
mFalsingManager
|
mFalsingManager, mCommandQueue
|
||||||
);
|
);
|
||||||
|
|
||||||
mController.init();
|
mController.init();
|
||||||
|
|||||||
Reference in New Issue
Block a user