Loading res/layout/panel_slice_slider_row.xml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/slice_slider_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> Loading res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -427,4 +427,7 @@ <!-- Developer options shared data screens related dimensions --> <dimen name="list_preferred_item_padding">16dp</dimen> <!-- Output switcher panel related dimensions --> <dimen name="output_switcher_slice_padding_top">12dp</dimen> </resources> src/com/android/settings/panel/PanelSlicesAdapter.java +21 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } /** Loading Loading @@ -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<Slice> sliceLiveData) { /** * Called when the view is displayed. */ public void onBind(LiveData<Slice> sliceLiveData, int position) { sliceLiveData.observe(mPanelFragment.getViewLifecycleOwner(), sliceView); // Do not show the divider above media devices switcher slice per request Loading @@ -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) -> { Loading tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java +54 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading Loading
res/layout/panel_slice_slider_row.xml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/slice_slider_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> Loading
res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -427,4 +427,7 @@ <!-- Developer options shared data screens related dimensions --> <dimen name="list_preferred_item_padding">16dp</dimen> <!-- Output switcher panel related dimensions --> <dimen name="output_switcher_slice_padding_top">12dp</dimen> </resources>
src/com/android/settings/panel/PanelSlicesAdapter.java +21 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } /** Loading Loading @@ -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<Slice> sliceLiveData) { /** * Called when the view is displayed. */ public void onBind(LiveData<Slice> sliceLiveData, int position) { sliceLiveData.observe(mPanelFragment.getViewLifecycleOwner(), sliceView); // Do not show the divider above media devices switcher slice per request Loading @@ -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) -> { Loading
tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java +54 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading