summaryrefslogtreecommitdiff
path: root/src/com/android
diff options
context:
space:
mode:
authorChihhang Chuang <chihhangchuang@google.com>2021-05-25 13:07:24 +0800
committerChihhang Chuang <chihhangchuang@google.com>2021-05-27 00:45:28 +0800
commitd0c5979f4f7946673e2e1c40c11638cf9fcbb97e (patch)
tree4550b6896760bf7d88aa770aa01d4f491044579c /src/com/android
parentb7dc51db6e8584b83959cbbcf2b0645233035f7d (diff)
downloadThemePicker-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.java4
-rw-r--r--src/com/android/customization/widget/OptionSelectorController.java55
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;
+ }
+ }
+ }
+ }
}