diff --git a/res/layout/panel_slice_slider_row.xml b/res/layout/panel_slice_slider_row.xml index ff2b10fb2b6..c1c076cfa21 100644 --- a/res/layout/panel_slice_slider_row.xml +++ b/res/layout/panel_slice_slider_row.xml @@ -16,6 +16,7 @@ --> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index e695c4d39bf..a7e003c5e5b 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -427,4 +427,7 @@ 16dp + + + 12dp diff --git a/src/com/android/settings/panel/PanelSlicesAdapter.java b/src/com/android/settings/panel/PanelSlicesAdapter.java index 1b69cc269b9..2f2932c8883 100644 --- a/src/com/android/settings/panel/PanelSlicesAdapter.java +++ b/src/com/android/settings/panel/PanelSlicesAdapter.java @@ -16,7 +16,9 @@ package com.android.settings.panel; +import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_GROUP_SLICE_URI; import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI; +import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI; import android.app.settings.SettingsEnums; import android.content.Context; @@ -24,6 +26,7 @@ import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; @@ -81,7 +84,7 @@ public class PanelSlicesAdapter @Override public void onBindViewHolder(@NonNull SliceRowViewHolder sliceRowViewHolder, int position) { - sliceRowViewHolder.onBind(mSliceLiveData.get(position)); + sliceRowViewHolder.onBind(mSliceLiveData.get(position), position); } /** @@ -116,15 +119,21 @@ public class PanelSlicesAdapter @VisibleForTesting final SliceView sliceView; + @VisibleForTesting + final LinearLayout mSliceSliderLayout; public SliceRowViewHolder(View view) { super(view); sliceView = view.findViewById(R.id.slice_view); sliceView.setMode(SliceView.MODE_LARGE); sliceView.setShowTitleItems(true); + mSliceSliderLayout = view.findViewById(R.id.slice_slider_layout); } - public void onBind(LiveData sliceLiveData) { + /** + * Called when the view is displayed. + */ + public void onBind(LiveData sliceLiveData, int position) { sliceLiveData.observe(mPanelFragment.getViewLifecycleOwner(), sliceView); // Do not show the divider above media devices switcher slice per request @@ -133,6 +142,16 @@ public class PanelSlicesAdapter mDividerAllowedAbove = false; } + // Customize output switcher slice top padding + if (position == 0 && (slice.getUri().equals(MEDIA_OUTPUT_SLICE_URI) + || slice.getUri().equals(MEDIA_OUTPUT_GROUP_SLICE_URI))) { + final int paddingTop = mPanelFragment.getResources().getDimensionPixelSize( + R.dimen.output_switcher_slice_padding_top); + mSliceSliderLayout.setPadding(mSliceSliderLayout.getPaddingLeft(), paddingTop, + mSliceSliderLayout.getPaddingRight(), + mSliceSliderLayout.getPaddingBottom()); + } + // Log Panel interaction sliceView.setOnSliceActionListener( ((eventInfo, sliceItem) -> { diff --git a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java index 9e96d0f40cf..e5f78f34bc9 100644 --- a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java +++ b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java @@ -18,7 +18,9 @@ package com.android.settings.panel; 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_GROUP_SLICE_URI; import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI; +import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_SLICE_URI; import static com.google.common.truth.Truth.assertThat; @@ -139,6 +141,58 @@ public class PanelSlicesAdapterTest { assertThat(viewHolder.isDividerAllowedAbove()).isFalse(); } + @Test + public void outputSwitcherSlice_shouldAddFirstItemPadding() { + addTestLiveData(MEDIA_OUTPUT_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.mSliceSliderLayout.getPaddingTop()).isEqualTo( + mPanelFragment.getResources().getDimensionPixelSize( + R.dimen.output_switcher_slice_padding_top)); + } + + @Test + public void outputSwitcherGroupSlice_shouldAddFirstItemPadding() { + addTestLiveData(MEDIA_OUTPUT_GROUP_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.mSliceSliderLayout.getPaddingTop()).isEqualTo( + mPanelFragment.getResources().getDimensionPixelSize( + R.dimen.output_switcher_slice_padding_top)); + } + + @Test + public void mediaOutputIndicatorSlice_shouldNotAddFirstItemPadding() { + 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.mSliceSliderLayout.getPaddingTop()).isEqualTo(0); + } + @Test public void onCreateViewHolder_viewTypeSlider_verifyLayout() { final PanelSlicesAdapter adapter =