Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Loading
+2 −1
Original line number Diff line number Diff line
@@ -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" />
+1 −2
Original line number Diff line number Diff line
@@ -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"
+2 −2
Original line number Diff line number Diff line
@@ -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.
+49 −6
Original line number Diff line number Diff line
@@ -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;
                }
            }
        }
    }
}