Loading res/layout/fragment_grid_picker.xml +2 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,8 @@ android:layout_width="match_parent" android:layout_height="@dimen/options_container_height" android:layout_marginBottom="@dimen/grid_options_container_bottom_margin" android:layout_marginHorizontal="@dimen/grid_options_container_horizontal_margin" android:paddingHorizontal="@dimen/grid_options_container_horizontal_margin" android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> Loading res/layout/grid_option.xml +1 −2 Original line number Diff line number Diff line Loading @@ -15,9 +15,8 @@ limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingHorizontal="@dimen/option_padding_horizontal" android:paddingBottom="@dimen/option_bottom_margin" android:clipChildren="false" android:clipToPadding="false" Loading src/com/android/customization/picker/grid/GridFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading src/com/android/customization/widget/OptionSelectorController.java +49 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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)); } Loading Loading @@ -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; } } } } } src_overridecustom/com/android/customization/picker/CustomizationPickerActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -516,7 +516,7 @@ public class CustomizationPickerActivity extends FragmentActivity implements Wal return; } if (!ActivityUtils.isLaunchedFromSettings(getIntent())) { if (!ActivityUtils.isLaunchedFromSettingsRelated(getIntent())) { Intent intent = new Intent(Settings.ACTION_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); Loading Loading
res/layout/fragment_grid_picker.xml +2 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,8 @@ android:layout_width="match_parent" android:layout_height="@dimen/options_container_height" android:layout_marginBottom="@dimen/grid_options_container_bottom_margin" android:layout_marginHorizontal="@dimen/grid_options_container_horizontal_margin" android:paddingHorizontal="@dimen/grid_options_container_horizontal_margin" android:clipToPadding="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> Loading
res/layout/grid_option.xml +1 −2 Original line number Diff line number Diff line Loading @@ -15,9 +15,8 @@ limitations under the License. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingHorizontal="@dimen/option_padding_horizontal" android:paddingBottom="@dimen/option_bottom_margin" android:clipChildren="false" android:clipToPadding="false" Loading
src/com/android/customization/picker/grid/GridFragment.java +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading
src/com/android/customization/widget/OptionSelectorController.java +49 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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)); } Loading Loading @@ -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; } } } } }
src_overridecustom/com/android/customization/picker/CustomizationPickerActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -516,7 +516,7 @@ public class CustomizationPickerActivity extends FragmentActivity implements Wal return; } if (!ActivityUtils.isLaunchedFromSettings(getIntent())) { if (!ActivityUtils.isLaunchedFromSettingsRelated(getIntent())) { Intent intent = new Intent(Settings.ACTION_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); Loading