diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt index fcfa72a82acb6..f6c89a9c66a2f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt @@ -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 diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index 6e09f22fba631..90254270f3c6c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -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 { 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 { 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 { 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 { /** */ 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}); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java index 386769cd399e4..b11420afa529a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitchController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitchController.java index 2cacf92123d2b..d69b31fc84aaf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitchController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/MultiUserSwitchController.java @@ -26,6 +26,7 @@ import com.android.systemui.R; import com.android.systemui.flags.FeatureFlags; 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.qs.user.UserSwitchDialogController; @@ -35,7 +36,6 @@ import com.android.systemui.util.ViewController; import javax.inject.Inject; /** View Controller for {@link MultiUserSwitch}. */ -@QSScope public class MultiUserSwitchController extends ViewController { private final UserManager mUserManager; private final UserSwitcherController mUserSwitcherController; @@ -68,8 +68,35 @@ public class MultiUserSwitchController extends ViewController { } }; - @Inject - public MultiUserSwitchController(MultiUserSwitch view, UserManager userManager, + @QSScope + 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, FalsingManager falsingManager, UserSwitchDialogController userSwitchDialogController, FeatureFlags featureFlags) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java index 1a87975f0e4d7..a21f4887038c4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java @@ -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();