diff options
author | Chihhang Chuang <chihhangchuang@google.com> | 2021-05-25 13:07:24 +0800 |
---|---|---|
committer | Chihhang Chuang <chihhangchuang@google.com> | 2021-05-27 00:45:28 +0800 |
commit | d0c5979f4f7946673e2e1c40c11638cf9fcbb97e (patch) | |
tree | 4550b6896760bf7d88aa770aa01d4f491044579c /src/com/android | |
parent | b7dc51db6e8584b83959cbbcf2b0645233035f7d (diff) | |
download | ThemePicker-d0c5979f4f7946673e2e1c40c11638cf9fcbb97e.tar.gz |
Update layout for grid options
Spec:
https://screenshot.googleplex.com/HeqNgrqnsaiMoia.png
Screenshot (1-5 options):
https://screenshot.googleplex.com/4sShjAjyu2xC8nw.png
https://screenshot.googleplex.com/3TThvJLr8omoMsm.png
https://screenshot.googleplex.com/BpGbpTdzPSNGCt5.png
https://screenshot.googleplex.com/BM3z8g9mcrTktr3.png
https://screenshot.googleplex.com/BegfDpyXwvMw6j3.png
Fixes: 187138127
Test: Manually
Change-Id: I92c541ce54a5c3144d6048407b2434d468680ca5
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/customization/picker/grid/GridFragment.java | 4 | ||||
-rw-r--r-- | src/com/android/customization/widget/OptionSelectorController.java | 55 |
2 files changed, 51 insertions, 8 deletions
diff --git a/src/com/android/customization/picker/grid/GridFragment.java b/src/com/android/customization/picker/grid/GridFragment.java index b0802cf6..2aeb3487 100644 --- a/src/com/android/customization/picker/grid/GridFragment.java +++ b/src/com/android/customization/picker/grid/GridFragment.java @@ -46,6 +46,7 @@ import com.android.customization.picker.ViewOnlyFullPreviewActivity; import com.android.customization.picker.WallpaperPreviewer; import com.android.customization.util.LaunchUtils; import com.android.customization.widget.OptionSelectorController; +import com.android.customization.widget.OptionSelectorController.CheckmarkStyle; import com.android.wallpaper.R; import com.android.wallpaper.model.WallpaperInfo; import com.android.wallpaper.module.CurrentWallpaperInfoFactory; @@ -205,8 +206,7 @@ public class GridFragment extends AppbarFragment { public void onOptionsLoaded(List<GridOption> options) { mLoading.hide(); mOptionsController = new OptionSelectorController<>( - mOptionsContainer, options, true, - OptionSelectorController.CheckmarkStyle.CENTER); + mOptionsContainer, options, /* useGrid= */ false, CheckmarkStyle.CENTER); mOptionsController.initOptions(mGridManager); // Find the selected Grid option. diff --git a/src/com/android/customization/widget/OptionSelectorController.java b/src/com/android/customization/widget/OptionSelectorController.java index f1d14c5b..9ecc0d26 100644 --- a/src/com/android/customization/widget/OptionSelectorController.java +++ b/src/com/android/customization/widget/OptionSelectorController.java @@ -15,8 +15,11 @@ */ package com.android.customization.widget; +import static com.android.internal.util.Preconditions.checkNotNull; + import android.content.Context; import android.content.res.Resources; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.text.TextUtils; @@ -72,6 +75,8 @@ public class OptionSelectorController<T extends CustomizationOption<T>> { int CENTER = 2; } + private static final float LINEAR_LAYOUT_HORIZONTAL_DISPLAY_OPTIONS_MAX = 4.35f; + private final RecyclerView mContainer; private final List<T> mOptions; private final boolean mUseGrid; @@ -296,10 +301,10 @@ public class OptionSelectorController<T extends CustomizationOption<T>> { availableWidth = fixWidth; } int totalWidth = mContainer.getMeasuredWidth(); + int widthPerItem = res.getDimensionPixelOffset(R.dimen.option_tile_width); if (mUseGrid) { int numColumns = res.getInteger(R.integer.options_grid_num_columns); - int widthPerItem = res.getDimensionPixelOffset(R.dimen.option_tile_width); int extraSpace = availableWidth - widthPerItem * numColumns; while (extraSpace < 0) { numColumns -= 1; @@ -316,12 +321,19 @@ public class OptionSelectorController<T extends CustomizationOption<T>> { if (extraSpace >= 0) { mContainer.setOverScrollMode(View.OVER_SCROLL_NEVER); } - int itemSideMargin = res.getDimensionPixelOffset(R.dimen.option_tile_margin_horizontal); - int defaultTotalPadding = itemSideMargin * (mAdapter.getItemCount() * 2 + 2); - if (extraSpace > defaultTotalPadding) { - int spaceBetweenItems = extraSpace / (mAdapter.getItemCount() + 1); - itemSideMargin = spaceBetweenItems / 2; + + if (mAdapter.getItemCount() >= LINEAR_LAYOUT_HORIZONTAL_DISPLAY_OPTIONS_MAX) { + int spaceBetweenItems = availableWidth + - Math.round(widthPerItem * LINEAR_LAYOUT_HORIZONTAL_DISPLAY_OPTIONS_MAX) + - mContainer.getPaddingLeft(); + mContainer.addItemDecoration(new HorizontalBehindSpaceItemDecoration( + mContainer.getContext(), + spaceBetweenItems / (int) LINEAR_LAYOUT_HORIZONTAL_DISPLAY_OPTIONS_MAX)); + return; } + + int spaceBetweenItems = extraSpace / (mAdapter.getItemCount() + 1); + int itemSideMargin = spaceBetweenItems / 2; mContainer.addItemDecoration(new HorizontalSpacerItemDecoration(itemSideMargin)); } @@ -423,4 +435,35 @@ public class OptionSelectorController<T extends CustomizationOption<T>> { return super.onRequestSendAccessibilityEvent(host, child, event); } } + + /** Custom ItemDecorator to add specific spacing between items in the list. */ + private static final class HorizontalBehindSpaceItemDecoration + extends RecyclerView.ItemDecoration { + private final int mHorizontalSpacePx; + private final boolean mDirectionLTR; + + private HorizontalBehindSpaceItemDecoration(Context context, int horizontalSpacePx) { + mDirectionLTR = context.getResources().getConfiguration().getLayoutDirection() + == View.LAYOUT_DIRECTION_LTR; + mHorizontalSpacePx = horizontalSpacePx; + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView recyclerView, + RecyclerView.State state) { + if (recyclerView.getAdapter() == null) { + return; + } + + if (recyclerView.getChildAdapterPosition(view) + != checkNotNull(recyclerView.getAdapter()).getItemCount() - 1) { + // Don't add spacing behind the last item + if (mDirectionLTR) { + outRect.right = mHorizontalSpacePx; + } else { + outRect.left = mHorizontalSpacePx; + } + } + } + } } |