diff --git a/packages/SystemUI/res-keyguard/layout/footer_actions.xml b/packages/SystemUI/res-keyguard/layout/footer_actions.xml index dfc3e63a4e2bf..ecb3cb3961a43 100644 --- a/packages/SystemUI/res-keyguard/layout/footer_actions.xml +++ b/packages/SystemUI/res-keyguard/layout/footer_actions.xml @@ -22,21 +22,6 @@ android:layout_height="48dp" android:gravity="center_vertical"> - - - + diff --git a/packages/SystemUI/res/drawable/qs_detail_background.xml b/packages/SystemUI/res/drawable/qs_detail_background.xml index e5c7352807f80..c23649d629bde 100644 --- a/packages/SystemUI/res/drawable/qs_detail_background.xml +++ b/packages/SystemUI/res/drawable/qs_detail_background.xml @@ -17,7 +17,7 @@ Copyright (C) 2014 The Android Open Source Project - + diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml index e70084b803083..5cd9e9485fda8 100644 --- a/packages/SystemUI/res/layout/qs_footer_impl.xml +++ b/packages/SystemUI/res/layout/qs_footer_impl.xml @@ -43,7 +43,6 @@ android:id="@+id/build" android:layout_width="0dp" android:layout_height="match_parent" - android:paddingStart="@dimen/qs_tile_margin_horizontal" android:paddingEnd="4dp" android:layout_weight="1" android:clickable="true" @@ -61,10 +60,23 @@ android:layout_gravity="center_vertical" android:visibility="gone" /> - + android:layout_weight="1"> + + diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index fc28f09760138..461a598e93418 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -23,7 +23,6 @@ #00000000 #29ffffff #B3FFFFFF - #66FFFFFF #FFFFFFFF #9E9E9E diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt index e10e4d8a825c7..7ac9205c7922c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt @@ -56,7 +56,6 @@ import javax.inject.Named */ class FooterActionsController @Inject constructor( view: FooterActionsView, - private val qsPanelController: QSPanelController, private val activityStarter: ActivityStarter, private val userManager: UserManager, private val userTracker: UserTracker, @@ -82,7 +81,6 @@ 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 editButton: View = view.findViewById(android.R.id.edit) private val powerMenuLite: View = view.findViewById(R.id.pm_lite) private val onUserInfoChangedListener = OnUserInfoChangedListener { _, picture, _ -> @@ -176,13 +174,6 @@ class FooterActionsController @Inject constructor( powerMenuLite.visibility = View.GONE } settingsButton.setOnClickListener(onClickListener) - editButton.setOnClickListener(View.OnClickListener { view: View? -> - if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { - return@OnClickListener - } - activityStarter.postQSRunnableDismissingKeyguard { qsPanelController.showEdit(view) } - }) - updateView() } diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt index dd4dc87d8a9f8..7694be51cba61 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControllerBuilder.kt @@ -36,7 +36,6 @@ import javax.inject.Inject import javax.inject.Named class FooterActionsControllerBuilder @Inject constructor( - private val qsPanelController: QSPanelController, private val activityStarter: ActivityStarter, private val userManager: UserManager, private val userTracker: UserTracker, @@ -66,7 +65,7 @@ class FooterActionsControllerBuilder @Inject constructor( } fun build(): FooterActionsController { - return FooterActionsController(view, qsPanelController, activityStarter, userManager, + return FooterActionsController(view, activityStarter, userManager, userTracker, userInfoController, multiUserSwitchControllerFactory.create(view), deviceProvisionedController, falsingManager, metricsLogger, tunerService, globalActionsDialog, uiEventLogger, showPMLiteButton, buttonsVisibleState, diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsView.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsView.kt index f81f7bf73f64a..e6fa2ae8dad1b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsView.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsView.kt @@ -43,7 +43,6 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout( private lateinit var multiUserSwitch: MultiUserSwitch private lateinit var multiUserAvatar: ImageView private lateinit var tunerIcon: View - private lateinit var editTilesButton: View private var settingsCogAnimator: TouchAnimator? = null @@ -52,7 +51,6 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout( override fun onFinishInflate() { super.onFinishInflate() - editTilesButton = requireViewById(android.R.id.edit) settingsButton = findViewById(R.id.settings_button) settingsContainer = findViewById(R.id.settings_button_container) multiUserSwitch = findViewById(R.id.multi_user_switch) @@ -130,7 +128,6 @@ class FooterActionsView(context: Context?, attrs: AttributeSet?) : LinearLayout( private fun updateClickabilities() { multiUserSwitch.isClickable = multiUserSwitch.visibility == VISIBLE - editTilesButton.isClickable = editTilesButton.visibility == VISIBLE settingsButton.isClickable = settingsButton.visibility == VISIBLE } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java index 066a286b271d9..4622660a6c15d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java @@ -47,6 +47,7 @@ public class QSFooterView extends FrameLayout { private PageIndicator mPageIndicator; private TextView mBuildText; private View mActionsContainer; + private View mEditButton; @Nullable protected TouchAnimator mFooterAnimator; @@ -79,6 +80,7 @@ public class QSFooterView extends FrameLayout { mPageIndicator = findViewById(R.id.footer_page_indicator); mActionsContainer = requireViewById(R.id.qs_footer_actions); mBuildText = findViewById(R.id.build); + mEditButton = findViewById(android.R.id.edit); updateResources(); setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); @@ -130,6 +132,7 @@ public class QSFooterView extends FrameLayout { .addFloat(mActionsContainer, "alpha", 0, 1) .addFloat(mPageIndicator, "alpha", 0, 1) .addFloat(mBuildText, "alpha", 0, 1) + .addFloat(mEditButton, "alpha", 0, 1) .setStartDelay(0.9f); return builder.build(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java index e7c06e3c7eded..5327b7e3ba26a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java @@ -26,6 +26,8 @@ import android.widget.TextView; import android.widget.Toast; import com.android.systemui.R; +import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.plugins.FalsingManager; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.settings.UserTracker; import com.android.systemui.util.ViewController; @@ -45,10 +47,15 @@ public class QSFooterViewController extends ViewController impleme private final FooterActionsController mFooterActionsController; private final TextView mBuildText; private final PageIndicator mPageIndicator; + private final View mEditButton; + private final FalsingManager mFalsingManager; + private final ActivityStarter mActivityStarter; @Inject QSFooterViewController(QSFooterView view, UserTracker userTracker, + FalsingManager falsingManager, + ActivityStarter activityStarter, QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController, @Named(QS_FOOTER) FooterActionsController footerActionsController) { @@ -57,9 +64,12 @@ public class QSFooterViewController extends ViewController impleme mQsPanelController = qsPanelController; mQuickQSPanelController = quickQSPanelController; mFooterActionsController = footerActionsController; + mFalsingManager = falsingManager; + mActivityStarter = activityStarter; mBuildText = mView.findViewById(R.id.build); mPageIndicator = mView.findViewById(R.id.footer_page_indicator); + mEditButton = mView.findViewById(android.R.id.edit); } @Override @@ -91,6 +101,14 @@ public class QSFooterViewController extends ViewController impleme } return false; }); + + mEditButton.setOnClickListener(view -> { + if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { + return; + } + mActivityStarter + .postQSRunnableDismissingKeyguard(() -> mQsPanelController.showEdit(view)); + }); mQsPanelController.setFooterPageIndicator(mPageIndicator); mView.updateEverything(); } @@ -103,6 +121,7 @@ public class QSFooterViewController extends ViewController impleme @Override public void setVisibility(int visibility) { mView.setVisibility(visibility); + mEditButton.setClickable(visibility == View.VISIBLE); } @Override 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 26f04fc4e7b58..354bb51922511 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/FooterActionsControllerTest.kt @@ -54,8 +54,6 @@ class FooterActionsControllerTest : LeakCheckedTest() { @Mock private lateinit var userInfoController: UserInfoController @Mock - private lateinit var qsPanelController: QSPanelController - @Mock private lateinit var multiUserSwitchController: MultiUserSwitchController @Mock private lateinit var globalActionsDialog: GlobalActionsDialogLite @@ -81,7 +79,7 @@ class FooterActionsControllerTest : LeakCheckedTest() { view = LayoutInflater.from(context) .inflate(R.layout.footer_actions, null) as FooterActionsView - controller = FooterActionsController(view, qsPanelController, activityStarter, + controller = FooterActionsController(view, activityStarter, userManager, userTracker, userInfoController, multiUserSwitchController, deviceProvisionedController, falsingManager, metricsLogger, fakeTunerService, globalActionsDialog, uiEventLogger, showPMLiteButton = true, diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java index 8b19c50f915e0..f43e68f3e5757 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java @@ -18,7 +18,11 @@ package com.android.systemui.qs; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.content.ClipData; @@ -31,6 +35,8 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; import com.android.systemui.R; +import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.plugins.FalsingManager; import com.android.systemui.settings.UserTracker; import com.android.systemui.utils.leaks.LeakCheckedTest; @@ -60,13 +66,20 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { private TextView mBuildText; @Mock private FooterActionsController mFooterActionsController; + @Mock + private FalsingManager mFalsingManager; + @Mock + private ActivityStarter mActivityStarter; private QSFooterViewController mController; + private View mEditButton; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); + mEditButton = new View(mContext); + injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); mContext.addMockSystemService(ClipboardManager.class, mClipboardManager); @@ -77,9 +90,11 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { when(mView.isAttachedToWindow()).thenReturn(true); when(mView.findViewById(R.id.build)).thenReturn(mBuildText); + when(mView.findViewById(android.R.id.edit)).thenReturn(mEditButton); - mController = new QSFooterViewController(mView, mUserTracker, mQSPanelController, - mQuickQSPanelController, mFooterActionsController); + mController = new QSFooterViewController(mView, mUserTracker, mFalsingManager, + mActivityStarter, mQSPanelController, mQuickQSPanelController, + mFooterActionsController); mController.init(); } @@ -99,4 +114,27 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { verify(mClipboardManager).setPrimaryClip(captor.capture()); assertThat(captor.getValue().getItemAt(0).getText()).isEqualTo(text); } + + @Test + public void testEditButton_falseTap() { + when(mFalsingManager.isFalseTap(anyInt())).thenReturn(true); + + mEditButton.performClick(); + + verify(mQSPanelController, never()).showEdit(any()); + verifyZeroInteractions(mActivityStarter); + } + + @Test + public void testEditButton_realTap() { + when(mFalsingManager.isFalseTap(anyInt())).thenReturn(false); + + mEditButton.performClick(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Runnable.class); + + verify(mActivityStarter).postQSRunnableDismissingKeyguard(captor.capture()); + captor.getValue().run(); + verify(mQSPanelController).showEdit(mEditButton); + } }