[Sound panel] Update Ui layout to match with mertial next
please check bug for before/after screenshot.
Bug: 191317779
Test: verified on device
Change-Id: Ia570dde71ce9f18376eaba48102cecde6adb85bb
diff --git a/res/drawable/volume_dialog_button_background_outline.xml b/res/drawable/volume_dialog_button_background_outline.xml
new file mode 100644
index 0000000..78f3fcf
--- /dev/null
+++ b/res/drawable/volume_dialog_button_background_outline.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:shape="rectangle">
+ <stroke
+ android:color="?androidprv:attr/colorAccentPrimaryVariant"
+ android:width="1dp"/>
+ <corners android:radius="24dp"/>
+ <padding
+ android:left="16dp"
+ android:right="16dp"
+ android:top="8dp"
+ android:bottom="8dp" />
+ <solid android:color="@android:color/transparent" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/volume_dialog_button_background_solid.xml b/res/drawable/volume_dialog_button_background_solid.xml
new file mode 100644
index 0000000..1fa8f20
--- /dev/null
+++ b/res/drawable/volume_dialog_button_background_solid.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:shape="rectangle">
+ <stroke
+ android:color="@android:color/transparent"
+ android:width="1dp"/>
+ <corners android:radius="20dp"/>
+ <padding
+ android:left="16dp"
+ android:right="16dp"
+ android:top="8dp"
+ android:bottom="8dp" />
+ <solid android:color="?androidprv:attr/colorAccentPrimary" />
+</shape>
\ No newline at end of file
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index 4258c20..4625a3a 100644
--- a/res/layout/panel_layout.xml
+++ b/res/layout/panel_layout.xml
@@ -86,7 +86,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/settings_panel_title_margin"
- android:layout_marginBottom="@dimen/settings_panel_title_margin"
+ android:layout_marginBottom="@dimen/settings_panel_title_margin_bottom"
android:gravity="center"
android:textColor="?android:attr/textColorPrimary"
android:textSize="24sp"
@@ -102,31 +102,23 @@
android:visibility="gone"
style="@style/TrimmedHorizontalProgressBar"/>
- <include
- android:id="@+id/header_divider"
- layout="@layout/horizontal_divider"/>
-
<!-- Note: There is a landscape version of panel_slice_list which supports scrolling. -->
<include layout="@layout/panel_slice_list"/>
- <include
- android:id="@+id/footer_divider"
- layout="@layout/horizontal_divider"
- android:visibility="gone"/>
-
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
+ android:layout_marginTop="16dp"
+ android:layout_marginHorizontal="24dp"
+ android:layout_marginBottom="18dp">
<Button
android:id="@+id/see_more"
- style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+ style="@style/PanelOptionRoundedOutlinedButton"
android:layout_width="wrap_content"
- android:layout_height="48dp"
- android:layout_marginStart="12dp"
+ android:layout_height="36dp"
+ android:minWidth="0dp"
android:text="@string/see_more"/>
<Space
@@ -136,10 +128,10 @@
<Button
android:id="@+id/done"
- style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+ style="@style/PanelOptionRoundedSolidButton"
android:layout_width="wrap_content"
- android:layout_height="48dp"
- android:layout_marginEnd="12dp"
+ android:layout_height="36dp"
+ android:minWidth="0dp"
android:text="@string/done"/>
</LinearLayout>
</LinearLayout>
diff --git a/res/layout/panel_slice_row.xml b/res/layout/panel_slice_row.xml
index 69a36f60..b31e913 100644
--- a/res/layout/panel_slice_row.xml
+++ b/res/layout/panel_slice_row.xml
@@ -25,6 +25,6 @@
style="@style/Widget.SliceView.Panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingStart="8dp"
- android:paddingEnd="8dp"/>
+ android:paddingVertical="@dimen/panel_slice_vertical_padding"
+ android:paddingHorizontal="@dimen/panel_slice_Horizontal_padding"/>
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/panel_slice_slider_row.xml b/res/layout/panel_slice_slider_row.xml
index a7659d3..f42ef90 100644
--- a/res/layout/panel_slice_slider_row.xml
+++ b/res/layout/panel_slice_slider_row.xml
@@ -26,6 +26,6 @@
style="@style/Widget.SliceView.Panel.Slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingStart="0dp"
- android:paddingEnd="0dp"/>
+ android:paddingVertical="@dimen/panel_slice_vertical_padding"
+ android:paddingHorizontal="@dimen/panel_slice_Horizontal_padding"/>
</LinearLayout>
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e1d7584..e041128 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -426,8 +426,13 @@
<!-- Settings panel related dimensions -->
<dimen name="settings_panel_corner_radius">28dp</dimen>
<dimen name="settings_panel_title_margin">24dp</dimen>
+ <dimen name="settings_panel_title_margin_bottom">16dp</dimen>
<dimen name="settings_panel_width">@dimen/match_parent</dimen>
+ <!-- Panel slices dimensions -->
+ <dimen name="panel_slice_vertical_padding">8dp</dimen>
+ <dimen name="panel_slice_Horizontal_padding">24dp</dimen>
+
<!-- Text padding for EmptyTextSettings -->
<dimen name="empty_text_padding">24dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5f2fd54..2e36ea6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12885,7 +12885,7 @@
<string name="manual_mode_disallowed_summary">Unavailable when connected to <xliff:g id="carrier" example="verizon">%1$s</xliff:g></string>
<!-- See more items in contextual homepage [CHAR LIMIT=30]-->
- <string name="see_more">See more</string>
+ <string name="see_more">Settings</string>
<!-- See less items in contextual homepage [CHAR LIMIT=30]-->
<string name="see_less">See less</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 5b3b1c8..c8f33f3 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -585,15 +585,16 @@
</style>
<style name="SliceRow.Slider">
- <!-- Padding between content and the start icon is 0dp -->
- <item name="contentStartPadding">0dp</item>
- <item name="contentEndPadding">36dp</item>
+ <!-- Padding between content and the start icon is 5dp -->
+ <item name="contentStartPadding">5dp</item>
+ <item name="contentEndPadding">0dp</item>
<!-- 0dp start padding for the end item -->
<item name="endItemStartPadding">0dp</item>
<!-- 8dp end padding for the end item -->
<item name="endItemEndPadding">8dp</item>
+ <item name="titleSize">20sp</item>
<!-- Align text with slider -->
<item name="titleStartPadding">11dp</item>
<item name="subContentStartPadding">11dp</item>
@@ -624,6 +625,15 @@
<item name="android:paddingEnd">8dp</item>
</style>
+ <style name="PanelOptionRoundedOutlinedButton" parent="@android:style/Widget.Material.Button">
+ <item name="android:background">@drawable/volume_dialog_button_background_outline</item>
+ </style>
+
+ <style name="PanelOptionRoundedSolidButton" parent="@android:style/Widget.Material.Button">
+ <item name="android:textColor">@android:color/system_neutral1_900</item>
+ <item name="android:background">@drawable/volume_dialog_button_background_solid</item>
+ </style>
+
<style name="SetupWizardPartnerResource">
<!-- Disable to use partner overlay theme for outside setupwizard flow. -->
<item name="sucUsePartnerResource">@bool/config_suc_use_partner_resource</item>
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index cd2bb50..04ae311 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -100,10 +100,8 @@
private TextView mHeaderTitle;
private TextView mHeaderSubtitle;
private int mMaxHeight;
- private View mFooterDivider;
private boolean mPanelCreating;
private ProgressBar mProgressBar;
- private View mHeaderDivider;
private final Map<Uri, LiveData<Slice>> mSliceLiveData = new LinkedHashMap<>();
@@ -210,9 +208,7 @@
mHeaderLayout = mLayoutView.findViewById(R.id.header_layout);
mHeaderTitle = mLayoutView.findViewById(R.id.header_title);
mHeaderSubtitle = mLayoutView.findViewById(R.id.header_subtitle);
- mFooterDivider = mLayoutView.findViewById(R.id.footer_divider);
mProgressBar = mLayoutView.findViewById(R.id.progress_bar);
- mHeaderDivider = mLayoutView.findViewById(R.id.header_divider);
// Make the panel layout gone here, to avoid janky animation when updating from old panel.
// We will make it visible once the panel is ready to load.
@@ -257,8 +253,6 @@
enableTitle(title);
}
- mFooterDivider.setVisibility(View.GONE);
-
mSeeMoreButton.setOnClickListener(getSeeMoreListener());
mDoneButton.setOnClickListener(getCloseListener());
@@ -324,10 +318,8 @@
private void updateProgressBar() {
if (mPanel.isProgressBarVisible()) {
mProgressBar.setVisibility(View.VISIBLE);
- mHeaderDivider.setVisibility(View.GONE);
} else {
mProgressBar.setVisibility(View.GONE);
- mHeaderDivider.setVisibility(View.VISIBLE);
}
}
diff --git a/src/com/android/settings/panel/PanelSlicesAdapter.java b/src/com/android/settings/panel/PanelSlicesAdapter.java
index d398074..2486361 100644
--- a/src/com/android/settings/panel/PanelSlicesAdapter.java
+++ b/src/com/android/settings/panel/PanelSlicesAdapter.java
@@ -16,7 +16,8 @@
package com.android.settings.panel;
-import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
+import static android.app.slice.Slice.HINT_ERROR;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -31,6 +32,7 @@
import androidx.lifecycle.LiveData;
import androidx.recyclerview.widget.RecyclerView;
import androidx.slice.Slice;
+import androidx.slice.SliceItem;
import androidx.slice.widget.SliceView;
import com.android.settings.R;
@@ -113,8 +115,6 @@
public class SliceRowViewHolder extends RecyclerView.ViewHolder
implements DividerItemDecoration.DividedViewHolder {
- private boolean mDividerAllowedAbove = true;
-
@VisibleForTesting
final SliceView sliceView;
@VisibleForTesting
@@ -137,8 +137,10 @@
// Do not show the divider above media devices switcher slice per request
final Slice slice = sliceLiveData.getValue();
- if (slice == null || slice.getUri().equals(MEDIA_OUTPUT_INDICATOR_SLICE_URI)) {
- mDividerAllowedAbove = false;
+
+ // Hides slice which reports with error hint or not contain any slice sub-item.
+ if (slice == null || !isValidSlice(slice)) {
+ sliceView.setVisibility(View.GONE);
}
// Log Panel interaction
@@ -156,14 +158,26 @@
);
}
+ private boolean isValidSlice(Slice slice) {
+ if (slice.getHints().contains(HINT_ERROR)) {
+ return false;
+ }
+ for (SliceItem item : slice.getItems()) {
+ if (item.getFormat().equals(FORMAT_SLICE)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public boolean isDividerAllowedAbove() {
- return mDividerAllowedAbove;
+ return false;
}
@Override
public boolean isDividerAllowedBelow() {
- return true;
+ return false;
}
}
}
diff --git a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
index 1333d27..7d0bf99 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
@@ -17,8 +17,6 @@
package com.android.settings.panel;
-import static com.android.settings.panel.PanelContent.VIEW_TYPE_SLIDER;
-
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -213,38 +211,6 @@
}
@Test
- public void sliderPanelType_notDisplayFooterDivider() {
- mFakePanelContent.setViewType(VIEW_TYPE_SLIDER);
- final ActivityController<FakeSettingsPanelActivity> activityController =
- Robolectric.buildActivity(FakeSettingsPanelActivity.class);
- activityController.setup();
- final PanelFragment panelFragment = (PanelFragment)
- Objects.requireNonNull(activityController
- .get()
- .getSupportFragmentManager()
- .findFragmentById(R.id.main_content));
- final View footerDivider = panelFragment.mLayoutView.findViewById(R.id.footer_divider);
- // Check visibility
- assertThat(footerDivider.getVisibility()).isEqualTo(View.GONE);
- }
-
- @Test
- public void defaultPanelType_notDisplayFooterDivider() {
- mFakePanelContent.setViewType(0 /* viewType */);
- final ActivityController<FakeSettingsPanelActivity> activityController =
- Robolectric.buildActivity(FakeSettingsPanelActivity.class);
- activityController.setup();
- final PanelFragment panelFragment = (PanelFragment)
- Objects.requireNonNull(activityController
- .get()
- .getSupportFragmentManager()
- .findFragmentById(R.id.main_content));
- final View footerDivider = panelFragment.mLayoutView.findViewById(R.id.footer_divider);
- // Check visibility
- assertThat(footerDivider.getVisibility()).isEqualTo(View.GONE);
- }
-
- @Test
public void onHeaderChanged_updateHeader_verifyTitle() {
mFakePanelContent.setIcon(IconCompat.createWithResource(mContext, R.drawable.ic_android));
mFakePanelContent.setTitle(TITLE);
diff --git a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
index ac74fe5..cc5b2f8 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
@@ -19,7 +19,6 @@
import static com.android.settings.panel.PanelContent.VIEW_TYPE_SLIDER;
import static com.android.settings.panel.PanelSlicesAdapter.MAX_NUM_OF_SLICES;
import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
-import static com.android.settings.slices.CustomSliceRegistry.VOLUME_MEDIA_URI;
import static com.google.common.truth.Truth.assertThat;
@@ -125,53 +124,6 @@
}
@Test
- public void mediaOutputIndicatorSlice_shouldNotAllowDividerAbove() {
- addTestLiveData(MEDIA_OUTPUT_INDICATOR_SLICE_URI);
-
- final PanelSlicesAdapter adapter =
- new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
- final int position = 0;
- final ViewGroup view = new FrameLayout(mContext);
- final SliceRowViewHolder viewHolder =
- adapter.onCreateViewHolder(view, 0 /* view type*/);
-
- adapter.onBindViewHolder(viewHolder, position);
-
- assertThat(viewHolder.isDividerAllowedAbove()).isFalse();
- }
-
- @Test
- public void sliderPanelType_shouldAllowDividerBelow() {
- addTestLiveData(VOLUME_MEDIA_URI);
- mFakePanelContent.setViewType(PanelContent.VIEW_TYPE_SLIDER);
-
- final PanelSlicesAdapter adapter =
- new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
- final int position = 0;
- final ViewGroup view = new FrameLayout(mContext);
- final SliceRowViewHolder viewHolder =
- adapter.onCreateViewHolder(view, PanelContent.VIEW_TYPE_SLIDER);
- adapter.onBindViewHolder(viewHolder, position);
-
- assertThat(viewHolder.isDividerAllowedBelow()).isTrue();
- }
-
- @Test
- public void defaultPanelType_shouldAllowDividerBelow() {
- addTestLiveData(VOLUME_MEDIA_URI);
- mFakePanelContent.setViewType(0 /* viewType */);
-
- final PanelSlicesAdapter adapter =
- new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
- final int position = 0;
- final ViewGroup view = new FrameLayout(mContext);
- final SliceRowViewHolder viewHolder = adapter.onCreateViewHolder(view, 0/* viewType */);
- adapter.onBindViewHolder(viewHolder, position);
-
- assertThat(viewHolder.isDividerAllowedBelow()).isTrue();
- }
-
- @Test
public void mediaOutputIndicatorSlice_notSliderPanel_noSliderLayout() {
addTestLiveData(MEDIA_OUTPUT_INDICATOR_SLICE_URI);