diff --git a/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml b/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml new file mode 100644 index 0000000000000..34675ab891c14 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_footer_action_chip_background.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml b/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml new file mode 100644 index 0000000000000..596ed711dd437 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_footer_action_chip_background_borderless.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/qs_footer_impl.xml b/packages/SystemUI/res/layout/qs_footer_impl.xml index 93dd1a12f147c..02179722b35c5 100644 --- a/packages/SystemUI/res/layout/qs_footer_impl.xml +++ b/packages/SystemUI/res/layout/qs_footer_impl.xml @@ -89,7 +89,7 @@ android:background="?android:attr/selectableItemBackgroundBorderless" android:clickable="true" android:clipToPadding="false" - android:contentDescription="@string/accessibility_quick_settings_edit" + android:contentDescription="@string/accessibility_quick_settings_power_menu" android:focusable="true" android:padding="@dimen/qs_footer_icon_padding" android:src="@*android:drawable/ic_lock_power_off" diff --git a/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml b/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml new file mode 100644 index 0000000000000..726e69f6e50cf --- /dev/null +++ b/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index 77f17439c487e..d29cf872fd26f 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -42,7 +42,10 @@ android:background="@android:color/transparent" android:focusable="true" android:accessibilityTraversalBefore="@android:id/edit"> - + diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index c36f7cd630a9d..424172458b80d 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -36,6 +36,7 @@ #FFFFFFFF #9E9E9E @color/GM2_grey_300 + #2E312C #F5F5F5 diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ea0ea5e9472a9..ab29c6fde2c99 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -415,6 +415,9 @@ @dimen/qs_footer_height + + 2dp + 2dp diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index b5ded012b3bd4..bc3b05d07569a 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2315,6 +2315,9 @@ Edit order of settings. + + Power menu + Page %1$d of %2$d diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java index 7e20be6826dc8..3d8784b29e4c8 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java @@ -94,7 +94,7 @@ public class QSFooterView extends FrameLayout { @Override protected void onFinishInflate() { super.onFinishInflate(); - mEdit = findViewById(android.R.id.edit); + mEdit = requireViewById(android.R.id.edit); mPageIndicator = findViewById(R.id.footer_page_indicator); @@ -104,14 +104,15 @@ public class QSFooterView extends FrameLayout { mMultiUserSwitch = findViewById(R.id.multi_user_switch); mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar); - mActionsContainer = findViewById(R.id.qs_footer_actions_container); + mActionsContainer = requireViewById(R.id.qs_footer_actions_container); mEditContainer = findViewById(R.id.qs_footer_actions_edit_container); mBuildText = findViewById(R.id.build); // RenderThread is doing more harm than good when touching the header (to expand quick // settings), so disable it for this view - ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true); - + if (mSettingsButton.getBackground() instanceof RippleDrawable) { + ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true); + } updateResources(); setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES); @@ -143,7 +144,7 @@ public class QSFooterView extends FrameLayout { int defSpace = mContext.getResources().getDimensionPixelOffset(R.dimen.default_gear_space); mSettingsCogAnimator = new Builder() - .addFloat(mSettingsContainer, "translationX", + .addFloat(mSettingsButton, "translationX", isLayoutRtl() ? (remaining - defSpace) : -(remaining - defSpace), 0) .addFloat(mSettingsButton, "rotation", -120, 0) .build(); @@ -173,12 +174,15 @@ public class QSFooterView extends FrameLayout { @Nullable private TouchAnimator createFooterAnimator() { - return new TouchAnimator.Builder() + TouchAnimator.Builder builder = new TouchAnimator.Builder() .addFloat(mActionsContainer, "alpha", 0, 1) - .addFloat(mEditContainer, "alpha", 0, 1) .addFloat(mPageIndicator, "alpha", 0, 1) - .setStartDelay(0.9f) - .build(); + .addFloat(mBuildText, "alpha", 0, 1) + .setStartDelay(0.9f); + if (mEditContainer != null) { + builder.addFloat(mEditContainer, "alpha", 0, 1); + } + return builder.build(); } /** */ @@ -273,8 +277,10 @@ public class QSFooterView extends FrameLayout { mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility( isTunerEnabled ? View.VISIBLE : View.INVISIBLE); final boolean isDemo = UserManager.isDeviceInDemoMode(mContext); - mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.INVISIBLE); - mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); + mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.GONE); + if (mEditContainer != null) { + mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); + } mSettingsButton.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE); mBuildText.setVisibility(mExpanded && mShouldShowBuildText ? View.VISIBLE : View.GONE); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java index 2bea72cc0c7e0..f1f4e16206a17 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java @@ -153,8 +153,8 @@ public class QSFooterViewController extends ViewController impleme @Override protected void onViewAttached() { - if (mShowPMLiteButton) { - mPowerMenuLite.setVisibility(View.VISIBLE); + if (!mShowPMLiteButton) { + mPowerMenuLite.setVisibility(View.GONE); } mView.addOnLayoutChangeListener( (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 7657dcead583e..ff9b9120c6e18 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -32,6 +32,7 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewStub; import android.widget.LinearLayout; import com.android.internal.logging.UiEventLogger; @@ -127,8 +128,21 @@ public class QSPanel extends LinearLayout implements Tunable { } + protected void inflateQSFooter(boolean newFooter) { + ViewStub stub = findViewById(R.id.qs_footer_stub); + if (stub != null) { + stub.setLayoutResource( + newFooter ? R.layout.qs_footer_impl_two_lines : R.layout.qs_footer_impl); + stub.inflate(); + mFooter = findViewById(R.id.qs_footer); + } + } + void initialize(boolean sideLabels) { mSideLabels = sideLabels; + + inflateQSFooter(sideLabels); + mRegularTileLayout = createRegularTileLayout(); mTileLayout = mRegularTileLayout; @@ -344,7 +358,6 @@ public class QSPanel extends LinearLayout implements Tunable { @Override protected void onFinishInflate() { super.onFinishInflate(); - mFooter = findViewById(R.id.qs_footer); mDivider = findViewById(R.id.divider); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 9b66b59c06dfd..f51d7ef381eeb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -55,6 +55,11 @@ public class QuickQSPanel extends QSPanel { applyBottomMargin((View) mRegularTileLayout); } + @Override + protected void inflateQSFooter(boolean newFooter) { + // No footer + } + private void applyBottomMargin(View view) { int margin = getResources().getDimensionPixelSize(R.dimen.qs_header_tile_margin_bottom); MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();