diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml index 10a2f4c625c6e..2c29f071dcbcf 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml @@ -57,16 +57,6 @@ android:focusable="true" android:paddingBottom="24dp" android:importantForAccessibility="yes"> - - diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt index 7ac9205c7922c..398ac4cb8311b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt @@ -34,8 +34,6 @@ import com.android.systemui.animation.ActivityLaunchAnimator import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.FalsingManager -import com.android.systemui.qs.FooterActionsController.ExpansionState.COLLAPSED -import com.android.systemui.qs.FooterActionsController.ExpansionState.EXPANDED import com.android.systemui.qs.dagger.QSFlagsModule.PM_LITE_ENABLED import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.MultiUserSwitchController @@ -56,11 +54,11 @@ import javax.inject.Named */ class FooterActionsController @Inject constructor( view: FooterActionsView, + multiUserSwitchControllerFactory: MultiUserSwitchController.Factory, private val activityStarter: ActivityStarter, private val userManager: UserManager, private val userTracker: UserTracker, private val userInfoController: UserInfoController, - private val multiUserSwitchController: MultiUserSwitchController, private val deviceProvisionedController: DeviceProvisionedController, private val falsingManager: FalsingManager, private val metricsLogger: MetricsLogger, @@ -68,13 +66,10 @@ class FooterActionsController @Inject constructor( private val globalActionsDialog: GlobalActionsDialogLite, private val uiEventLogger: UiEventLogger, @Named(PM_LITE_ENABLED) private val showPMLiteButton: Boolean, - private val buttonsVisibleState: ExpansionState, private val globalSetting: GlobalSettings, private val handler: Handler ) : ViewController(view) { - enum class ExpansionState { COLLAPSED, EXPANDED } - private var listening: Boolean = false var expanded = false @@ -82,6 +77,7 @@ class FooterActionsController @Inject constructor( private val settingsButton: SettingsButton = view.findViewById(R.id.settings_button) private val settingsButtonContainer: View? = view.findViewById(R.id.settings_button_container) private val powerMenuLite: View = view.findViewById(R.id.pm_lite) + private val multiUserSwitchController = multiUserSwitchControllerFactory.create(view) private val onUserInfoChangedListener = OnUserInfoChangedListener { _, picture, _ -> val isGuestUser: Boolean = userManager.isGuestUser(KeyguardUpdateMonitor.getCurrentUser()) @@ -99,9 +95,8 @@ class FooterActionsController @Inject constructor( } private val onClickListener = View.OnClickListener { v -> - // Don't do anything until views are unhidden. Don't do anything if the tap looks - // suspicious. - if (!buttonsVisible() || falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { + // Don't do anything if the tap looks suspicious. + if (!expanded || falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { return@OnClickListener } if (v === settingsButton) { @@ -110,9 +105,7 @@ class FooterActionsController @Inject constructor( activityStarter.postQSRunnableDismissingKeyguard {} return@OnClickListener } - metricsLogger.action( - if (expanded) MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH - else MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH) + metricsLogger.action(MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH) if (settingsButton.isTunerClick) { activityStarter.postQSRunnableDismissingKeyguard { if (isTunerEnabled()) { @@ -135,26 +128,10 @@ class FooterActionsController @Inject constructor( } } - private fun buttonsVisible(): Boolean { - return when (buttonsVisibleState) { - EXPANDED -> expanded - COLLAPSED -> !expanded - } - } - override fun onInit() { multiUserSwitchController.init() } - fun hideFooter() { - mView.visibility = View.GONE - } - - fun showFooter() { - mView.visibility = View.VISIBLE - updateView() - } - private fun startSettingsActivity() { val animationController = settingsButtonContainer?.let { ActivityLaunchAnimator.Controller.fromView( @@ -215,13 +192,5 @@ class FooterActionsController @Inject constructor( mView.setKeyguardShowing() } - fun refreshVisibility(shouldBeVisible: Boolean) { - if (shouldBeVisible) { - showFooter() - } else { - hideFooter() - } - } - private fun isTunerEnabled() = tunerService.isTunerEnabled } diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt deleted file mode 100644 index 7694be51cba61..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.qs - -import android.os.Handler -import android.os.UserManager -import com.android.internal.logging.MetricsLogger -import com.android.internal.logging.UiEventLogger -import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.globalactions.GlobalActionsDialogLite -import com.android.systemui.plugins.ActivityStarter -import com.android.systemui.plugins.FalsingManager -import com.android.systemui.qs.FooterActionsController.ExpansionState -import com.android.systemui.qs.dagger.QSFlagsModule -import com.android.systemui.settings.UserTracker -import com.android.systemui.statusbar.phone.MultiUserSwitchController -import com.android.systemui.statusbar.policy.DeviceProvisionedController -import com.android.systemui.statusbar.policy.UserInfoController -import com.android.systemui.tuner.TunerService -import com.android.systemui.util.settings.GlobalSettings -import javax.inject.Inject -import javax.inject.Named - -class FooterActionsControllerBuilder @Inject constructor( - private val activityStarter: ActivityStarter, - private val userManager: UserManager, - private val userTracker: UserTracker, - private val userInfoController: UserInfoController, - private val multiUserSwitchControllerFactory: MultiUserSwitchController.Factory, - private val deviceProvisionedController: DeviceProvisionedController, - private val falsingManager: FalsingManager, - private val metricsLogger: MetricsLogger, - private val tunerService: TunerService, - private val globalActionsDialog: GlobalActionsDialogLite, - private val uiEventLogger: UiEventLogger, - @Named(QSFlagsModule.PM_LITE_ENABLED) private val showPMLiteButton: Boolean, - private val globalSettings: GlobalSettings, - @Main private val handler: Handler -) { - private lateinit var view: FooterActionsView - private lateinit var buttonsVisibleState: ExpansionState - - fun withView(view: FooterActionsView): FooterActionsControllerBuilder { - this.view = view - return this - } - - fun withButtonsVisibleWhen(state: ExpansionState): FooterActionsControllerBuilder { - buttonsVisibleState = state - return this - } - - fun build(): FooterActionsController { - return FooterActionsController(view, activityStarter, userManager, - userTracker, userInfoController, multiUserSwitchControllerFactory.create(view), - deviceProvisionedController, falsingManager, metricsLogger, tunerService, - globalActionsDialog, uiEventLogger, showPMLiteButton, buttonsVisibleState, - globalSettings, handler) - } -} \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index ded6ae0ac2ff6..d1b569f7f438c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -14,9 +14,6 @@ package com.android.systemui.qs; -import static com.android.systemui.qs.dagger.QSFragmentModule.QQS_FOOTER; -import static com.android.systemui.qs.dagger.QSFragmentModule.QS_FOOTER; - import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.util.Log; @@ -49,7 +46,6 @@ import java.util.List; import java.util.concurrent.Executor; import javax.inject.Inject; -import javax.inject.Named; /** */ @QSScope @@ -88,8 +84,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha private final QSFgsManagerFooter mFgsManagerFooter; private final QSSecurityFooter mSecurityFooter; private final QS mQs; - private final View mQSFooterActions; - private final View mQQSFooterActions; @Nullable private PagedTileLayout mPagedLayout; @@ -154,16 +148,12 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha QuickQSPanelController quickQSPanelController, QSTileHost qsTileHost, QSFgsManagerFooter fgsManagerFooter, QSSecurityFooter securityFooter, @Main Executor executor, TunerService tunerService, - QSExpansionPathInterpolator qsExpansionPathInterpolator, - @Named(QS_FOOTER) FooterActionsView qsFooterActionsView, - @Named(QQS_FOOTER) FooterActionsView qqsFooterActionsView) { + QSExpansionPathInterpolator qsExpansionPathInterpolator) { mQs = qs; mQuickQsPanel = quickPanel; mQsPanelController = qsPanelController; mQuickQSPanelController = quickQSPanelController; mQuickStatusBarHeader = quickStatusBarHeader; - mQQSFooterActions = qqsFooterActionsView; - mQSFooterActions = qsFooterActionsView; mFgsManagerFooter = fgsManagerFooter; mSecurityFooter = securityFooter; mHost = qsTileHost; @@ -476,12 +466,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha .setListener(this) .build(); - if (mQQSFooterActions.getVisibility() != View.GONE) { - // only when qqs footer is present (which means split shade mode) it needs to - // be animated - updateQQSFooterAnimation(); - } - // Fade in the security footer and the divider as we reach the final position Builder builder = new Builder().setStartDelay(EXPANDED_TILE_DELAY); builder.addFloat(mFgsManagerFooter.getView(), "alpha", 0, 1); @@ -627,14 +611,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha } } - private void updateQQSFooterAnimation() { - int translationY = getRelativeTranslationY(mQSFooterActions, mQQSFooterActions); - mQQSFooterActionsAnimator = new TouchAnimator.Builder() - .addFloat(mQQSFooterActions, "translationY", 0, translationY) - .build(); - mAnimatedQsViews.add(mQSFooterActions); - } - private int getRelativeTranslationY(View view1, View view2) { int[] qsPosition = new int[2]; int[] qqsPosition = new int[2]; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java index 5327b7e3ba26a..f13553901ba1f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java @@ -16,8 +16,6 @@ package com.android.systemui.qs; -import static com.android.systemui.qs.dagger.QSFragmentModule.QS_FOOTER; - import android.content.ClipData; import android.content.ClipboardManager; import android.text.TextUtils; @@ -33,7 +31,6 @@ import com.android.systemui.settings.UserTracker; import com.android.systemui.util.ViewController; import javax.inject.Inject; -import javax.inject.Named; /** * Controller for {@link QSFooterView}. @@ -58,7 +55,7 @@ public class QSFooterViewController extends ViewController impleme ActivityStarter activityStarter, QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController, - @Named(QS_FOOTER) FooterActionsController footerActionsController) { + FooterActionsController footerActionsController) { super(view); mUserTracker = userTracker; mQsPanelController = qsPanelController; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java index 92690c7d12025..2d2fa1f08452e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java @@ -17,7 +17,6 @@ package com.android.systemui.qs; import static com.android.systemui.media.dagger.MediaModule.QUICK_QS_PANEL; -import static com.android.systemui.qs.dagger.QSFragmentModule.QQS_FOOTER; import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_MEDIA_PLAYER; import com.android.internal.logging.MetricsLogger; @@ -54,7 +53,6 @@ public class QuickQSPanelController extends QSPanelControllerBase // brightness is visible only in split shade private final QuickQSBrightnessController mBrightnessController; private final BrightnessMirrorHandler mBrightnessMirrorHandler; - private final FooterActionsController mFooterActionsController; @Inject QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost, @@ -63,14 +61,12 @@ public class QuickQSPanelController extends QSPanelControllerBase @Named(QUICK_QS_PANEL) MediaHost mediaHost, MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger, DumpManager dumpManager, - QuickQSBrightnessController quickQSBrightnessController, - @Named(QQS_FOOTER) FooterActionsController footerActionsController + QuickQSBrightnessController quickQSBrightnessController ) { super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, uiEventLogger, qsLogger, dumpManager); mBrightnessController = quickQSBrightnessController; mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController); - mFooterActionsController = footerActionsController; } @Override @@ -80,8 +76,6 @@ public class QuickQSPanelController extends QSPanelControllerBase mMediaHost.setShowsOnlyActiveMedia(true); mMediaHost.init(MediaHierarchyManager.LOCATION_QQS); mBrightnessController.init(mShouldUseSplitNotificationShade); - mFooterActionsController.init(); - mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade); } @Override @@ -102,7 +96,6 @@ public class QuickQSPanelController extends QSPanelControllerBase void setListening(boolean listening) { super.setListening(listening); mBrightnessController.setListening(listening); - mFooterActionsController.setListening(listening); } public boolean isListening() { @@ -123,7 +116,6 @@ public class QuickQSPanelController extends QSPanelControllerBase @Override protected void onConfigurationChanged() { mBrightnessController.refreshVisibility(mShouldUseSplitNotificationShade); - mFooterActionsController.refreshVisibility(mShouldUseSplitNotificationShade); } @Override 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 1958cafb0fb9c..4598fed03d171 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java +++ b/packages/SystemUI/src/com/android/systemui/qs/dagger/QSFragmentModule.java @@ -27,9 +27,6 @@ import com.android.systemui.battery.BatteryMeterView; import com.android.systemui.dagger.qualifiers.RootView; import com.android.systemui.plugins.qs.QS; import com.android.systemui.privacy.OngoingPrivacyChip; -import com.android.systemui.qs.FooterActionsController; -import com.android.systemui.qs.FooterActionsController.ExpansionState; -import com.android.systemui.qs.FooterActionsControllerBuilder; import com.android.systemui.qs.FooterActionsView; import com.android.systemui.qs.QSContainerImpl; import com.android.systemui.qs.QSFooter; @@ -55,8 +52,6 @@ import dagger.Provides; public interface QSFragmentModule { String QS_FGS_MANAGER_FOOTER_VIEW = "qs_fgs_manager_footer"; String QS_SECURITY_FOOTER_VIEW = "qs_security_footer"; - String QQS_FOOTER = "qqs_footer"; - String QS_FOOTER = "qs_footer"; String QS_USING_MEDIA_PLAYER = "qs_using_media_player"; /** @@ -124,42 +119,10 @@ public interface QSFragmentModule { /** */ @Provides - @Named(QS_FOOTER) static FooterActionsView providesQSFooterActionsView(@RootView View view) { return view.findViewById(R.id.qs_footer_actions); } - /** */ - @Provides - @Named(QQS_FOOTER) - static FooterActionsView providesQQSFooterActionsView(@RootView View view) { - return view.findViewById(R.id.qqs_footer_actions); - } - - /** */ - @Provides - @Named(QQS_FOOTER) - static FooterActionsController providesQQSFooterActionsController( - FooterActionsControllerBuilder footerActionsControllerBuilder, - @Named(QQS_FOOTER) FooterActionsView qqsFooterActionsView) { - return footerActionsControllerBuilder - .withView(qqsFooterActionsView) - .withButtonsVisibleWhen(ExpansionState.COLLAPSED) - .build(); - } - - /** */ - @Provides - @Named(QS_FOOTER) - static FooterActionsController providesQSFooterActionsController( - FooterActionsControllerBuilder footerActionsControllerBuilder, - @Named(QS_FOOTER) FooterActionsView qsFooterActionsView) { - return footerActionsControllerBuilder - .withView(qsFooterActionsView) - .withButtonsVisibleWhen(ExpansionState.EXPANDED) - .build(); - } - /** */ @Provides @QSScope diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt index 354bb51922511..de9340d4f3047 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt @@ -17,7 +17,6 @@ import com.android.systemui.R import com.android.systemui.classifier.FalsingManagerFake import com.android.systemui.globalactions.GlobalActionsDialogLite import com.android.systemui.plugins.ActivityStarter -import com.android.systemui.qs.FooterActionsController.ExpansionState import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.MultiUserSwitchController import com.android.systemui.statusbar.policy.DeviceProvisionedController @@ -54,6 +53,8 @@ class FooterActionsControllerTest : LeakCheckedTest() { @Mock private lateinit var userInfoController: UserInfoController @Mock + private lateinit var multiUserSwitchControllerFactory: MultiUserSwitchController.Factory + @Mock private lateinit var multiUserSwitchController: MultiUserSwitchController @Mock private lateinit var globalActionsDialog: GlobalActionsDialogLite @@ -76,14 +77,16 @@ class FooterActionsControllerTest : LeakCheckedTest() { injectLeakCheckedDependencies(*LeakCheckedTest.ALL_SUPPORTED_CLASSES) val fakeTunerService = Dependency.get(TunerService::class.java) as FakeTunerService + whenever(multiUserSwitchControllerFactory.create(any())) + .thenReturn(multiUserSwitchController) + view = LayoutInflater.from(context) .inflate(R.layout.footer_actions, null) as FooterActionsView - controller = FooterActionsController(view, activityStarter, - userManager, userTracker, userInfoController, multiUserSwitchController, + controller = FooterActionsController(view, multiUserSwitchControllerFactory, + activityStarter, userManager, userTracker, userInfoController, deviceProvisionedController, falsingManager, metricsLogger, fakeTunerService, - globalActionsDialog, uiEventLogger, showPMLiteButton = true, - buttonsVisibleState = ExpansionState.EXPANDED, fakeSettings, + globalActionsDialog, uiEventLogger, showPMLiteButton = true, fakeSettings, Handler(testableLooper.looper)) controller.init() ViewUtils.attachView(view) diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt index 59948d310b4ff..09c6d9e86a440 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt @@ -68,8 +68,6 @@ class QuickQSPanelControllerTest : SysuiTestCase() { private lateinit var tileView: QSTileView @Mock private lateinit var quickQsBrightnessController: QuickQSBrightnessController - @Mock - private lateinit var footerActionsController: FooterActionsController @Captor private lateinit var captor: ArgumentCaptor @@ -95,8 +93,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() { uiEventLogger, qsLogger, dumpManager, - quickQsBrightnessController, - footerActionsController + quickQsBrightnessController ) controller.init() @@ -128,14 +125,12 @@ class QuickQSPanelControllerTest : SysuiTestCase() { } @Test - fun testBrightnessAndFooterVisibilityRefreshedWhenConfigurationChanged() { + fun testBrightnessRefreshedWhenConfigurationChanged() { // times(2) because both controller and base controller are registering their listeners verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture()) captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) } verify(quickQsBrightnessController).refreshVisibility(anyBoolean()) - // times(2) because footer visibility is also refreshed on controller init - verify(footerActionsController, times(2)).refreshVisibility(anyBoolean()) } }