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

Commit 3629e45a authored by Chris Poultney's avatar Chris Poultney Committed by Android (Google) Code Review
Browse files

Merge "Fixes spacing of color options in wallpaper picker." into tm-qpr-dev

parents 108dc0a4 54ad5a0a
Loading
Loading
Loading
Loading
+58 −60
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.customization.model.CustomizationManager;
import com.android.customization.model.CustomizationOption;
import com.android.wallpaper.R;
import com.android.wallpaper.widget.GridPaddingDecoration;
import com.android.wallpaper.widget.GridRowSpacerDecoration;

import java.util.HashSet;
import java.util.List;
@@ -84,7 +85,8 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
    private final RecyclerView mContainer;
    private final List<T> mOptions;
    private final boolean mUseGrid;
    @CheckmarkStyle private final int mCheckmarkStyle;
    @CheckmarkStyle
    private final int mCheckmarkStyle;

    private final Set<OptionSelectedListener> mListeners = new HashSet<>();
    private RecyclerView.Adapter<TileViewHolder> mAdapter;
@@ -141,7 +143,6 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
    /**
     * Mark an option as the one which is currently applied on the device. This will result in a
     * check being displayed in the lower-right corner of the corresponding ViewHolder.
     * @param option
     */
    public void setAppliedOption(T option) {
        if (!mOptions.contains(option)) {
@@ -157,6 +158,7 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {

    /**
     * Notify that a given option has changed.
     *
     * @param option the option that changed
     */
    public void optionChanged(T option) {
@@ -282,51 +284,44 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
        };

        Resources res = mContainer.getContext().getResources();
        if (mUseGrid) {
            mContainer.setLayoutManager(new GridLayoutManager(mContainer.getContext(),
                    res.getInteger(R.integer.options_grid_num_columns)));
        } else {
            mContainer.setLayoutManager(new LinearLayoutManager(mContainer.getContext(),
                    LinearLayoutManager.HORIZONTAL, false));
        }

        mContainer.setAdapter(mAdapter);

        // Measure RecyclerView to get to the total amount of space used by all options.
        mContainer.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        int fixWidth = res.getDimensionPixelSize(R.dimen.options_container_width);
        int availableWidth;
        if (fixWidth == 0) {
            DisplayMetrics metrics = new DisplayMetrics();
        final int padding = res.getDimensionPixelSize(
                R.dimen.option_tile_grid_padding_horizontal);
        final int fixWidth = res.getDimensionPixelSize(R.dimen.options_container_width);
        final DisplayMetrics metrics = new DisplayMetrics();
        mContainer.getContext().getSystemService(WindowManager.class)
                .getDefaultDisplay().getMetrics(metrics);
            availableWidth = metrics.widthPixels;
        } else {
            availableWidth = fixWidth;
        }
        int totalWidth = mContainer.getMeasuredWidth();
        int widthPerItem = res.getDimensionPixelOffset(R.dimen.option_tile_width);
        // This is based on the assumption that the parent view is the same width as the screen.
        final int availableDynamicWidth = metrics.widthPixels - 2 * res.getDimensionPixelSize(
                R.dimen.section_horizontal_padding) - 2 * padding;
        final int availableWidth = (fixWidth != 0) ? fixWidth : availableDynamicWidth;
        final boolean hasDecoration = mContainer.getItemDecorationCount() != 0;
        final int widthPerItem = res.getDimensionPixelSize(R.dimen.option_tile_width) + (
                hasDecoration ? 0 : 2 * padding);

        if (mUseGrid) {
            int numColumns = res.getInteger(R.integer.options_grid_num_columns);
            int extraSpace = availableWidth - widthPerItem * numColumns;
            while (extraSpace < 0) {
            GridLayoutManager gridLayoutManager = new GridLayoutManager(mContainer.getContext(),
                    numColumns);
            mContainer.setLayoutManager(gridLayoutManager);
            // Measure RecyclerView to get to the total amount of space used by all options.
            mContainer.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
            while (mContainer.getMeasuredWidth() > availableWidth && numColumns > 1) {
                numColumns -= 1;
                extraSpace = availableWidth - widthPerItem * numColumns;
                gridLayoutManager.setSpanCount(numColumns);
                mContainer.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
            }

            if (mContainer.getLayoutManager() != null) {
                ((GridLayoutManager) mContainer.getLayoutManager()).setSpanCount(numColumns);
            if (!hasDecoration) {
                mContainer.addItemDecoration(new GridPaddingDecoration(padding, 0));
                if (numColumns > 1) {
                    mContainer.addItemDecoration(new GridRowSpacerDecoration(2 * padding));
                }
            if (mContainer.getItemDecorationCount() == 0) {
                mContainer.addItemDecoration(new GridPaddingDecoration(
                        mContainer.getContext().getResources().getDimensionPixelSize(
                                R.dimen.option_tile_grid_padding_horizontal), 0));
            }
            return;
        }

        int extraSpace = availableWidth - totalWidth;
        } else {
            mContainer.setLayoutManager(new LinearLayoutManager(mContainer.getContext(),
                    LinearLayoutManager.HORIZONTAL, false));
            int extraSpace = availableWidth - mContainer.getMeasuredWidth();
            if (extraSpace >= 0) {
                mContainer.setOverScrollMode(View.OVER_SCROLL_NEVER);
            }
@@ -338,7 +333,8 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
                int itemEndMargin =
                        spaceBetweenItems / (int) mLinearLayoutHorizontalDisplayOptionsMax;
                if (itemEndMargin <= 0) {
                itemEndMargin = res.getDimensionPixelOffset(R.dimen.option_tile_margin_horizontal);
                    itemEndMargin = res.getDimensionPixelOffset(
                            R.dimen.option_tile_margin_horizontal);
                }
                mContainer.addItemDecoration(new ItemEndHorizontalSpaceItemDecoration(
                        mContainer.getContext(), itemEndMargin));
@@ -349,6 +345,7 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
            int itemSideMargin = spaceBetweenItems / 2;
            mContainer.addItemDecoration(new HorizontalSpacerItemDecoration(itemSideMargin));
        }
    }

    public void resetOptions(List<T> options) {
        mOptions.clear();
@@ -382,6 +379,7 @@ public class OptionSelectorController<T extends CustomizationOption<T>> {
        /**
         * Set the content description for this holder using the given string id.
         * If the option does not have a label, the description will be set on the tile view.
         *
         * @param context The view's context
         * @param option  The customization option
         * @param id      Resource ID of the string to use for the content description