Move edit button next to page dots
Test: atest SystemUITests
Fixes: 215687235
Change-Id: I521a2f3e541403afe2b504926d515fb71bc90593
diff --git a/packages/SystemUI/res-keyguard/layout/footer_actions.xml b/packages/SystemUI/res-keyguard/layout/footer_actions.xml
index dfc3e63..ecb3cb3 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">
- <com.android.systemui.statusbar.AlphaOptimizedImageView
- android:id="@android:id/edit"
- android:layout_width="0dp"
- android:layout_height="@dimen/qs_footer_action_button_size"
- android:layout_marginEnd="@dimen/qs_tile_margin_horizontal"
- android:layout_weight="1"
- android:background="@drawable/qs_footer_action_chip_background"
- android:clickable="true"
- android:clipToPadding="false"
- android:contentDescription="@string/accessibility_quick_settings_edit"
- android:focusable="true"
- android:padding="@dimen/qs_footer_icon_padding"
- android:src="@*android:drawable/ic_mode_edit"
- android:tint="?android:attr/textColorPrimary" />
-
<com.android.systemui.statusbar.phone.MultiUserSwitch
android:id="@+id/multi_user_switch"
android:layout_width="0dp"
diff --git a/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml b/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml
index ed8f61a..6fa9eac 100644
--- a/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml
+++ b/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml
@@ -15,7 +15,7 @@
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape>
- <solid android:color="@color/qs_detail_transition"/>
+ <solid android:color="@android:color/transparent"/>
<corners android:radius="?android:attr/dialogCornerRadius" />
</shape>
</inset>
diff --git a/packages/SystemUI/res/drawable/qs_detail_background.xml b/packages/SystemUI/res/drawable/qs_detail_background.xml
index e5c7352..c23649d 100644
--- a/packages/SystemUI/res/drawable/qs_detail_background.xml
+++ b/packages/SystemUI/res/drawable/qs_detail_background.xml
@@ -17,7 +17,7 @@
<item>
<inset>
<shape>
- <solid android:color="@color/qs_detail_transition"/>
+ <solid android:color="@android:color/transparent"/>
<corners android:radius="@dimen/qs_footer_action_corner_radius" />
</shape>
</inset>
diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml
index e70084b..5cd9e94 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" />
- <View
+ <FrameLayout
android:layout_width="0dp"
android:layout_height="match_parent"
- android:layout_weight="1" />
+ android:layout_weight="1">
+ <com.android.systemui.statusbar.AlphaOptimizedImageView
+ android:id="@android:id/edit"
+ android:layout_width="@dimen/qs_footer_action_button_size"
+ android:layout_height="@dimen/qs_footer_action_button_size"
+ android:layout_gravity="center_vertical|end"
+ android:background="?android:attr/selectableItemBackground"
+ android:clickable="true"
+ android:contentDescription="@string/accessibility_quick_settings_edit"
+ android:focusable="true"
+ android:padding="@dimen/qs_footer_icon_padding"
+ android:src="@*android:drawable/ic_mode_edit"
+ android:tint="?android:attr/textColorPrimary" />
+ </FrameLayout>
</LinearLayout>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index fc28f09..461a598 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -23,7 +23,6 @@
<color name="system_bar_background_transparent">#00000000</color>
<color name="qs_tile_divider">#29ffffff</color><!-- 16% white -->
<color name="qs_detail_button_white">#B3FFFFFF</color><!-- 70% white -->
- <color name="qs_detail_transition">#66FFFFFF</color>
<color name="status_bar_clock_color">#FFFFFFFF</color>
<color name="qs_tile_disabled_color">#9E9E9E</color> <!-- 38% black -->
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt b/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt
index e10e4d8..7ac9205 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 @@
*/
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 @@
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 @@
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 dd4dc87..7694be5 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.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 @@
}
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 f81f7bf..e6fa2ae 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 @@
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 @@
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 @@
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 066a286..4622660 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 @@
private PageIndicator mPageIndicator;
private TextView mBuildText;
private View mActionsContainer;
+ private View mEditButton;
@Nullable
protected TouchAnimator mFooterAnimator;
@@ -79,6 +80,7 @@
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 @@
.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 e7c06e3..5327b7e 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.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 @@
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 @@
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 @@
}
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 @@
@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 26f04fc..354bb51 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 @@
@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 @@
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 8b19c50..f43e68f 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 @@
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 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 @@
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 @@
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 @@
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<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
+
+ verify(mActivityStarter).postQSRunnableDismissingKeyguard(captor.capture());
+ captor.getValue().run();
+ verify(mQSPanelController).showEdit(mEditButton);
+ }
}