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

Commit 00b3a5cd authored by Victor Truong's avatar Victor Truong
Browse files

Add NoDreamViewHolder for a different layout for NoDreamItem.

Bug: 243389115
Test: Manually tested
Change-Id: Id7549d55721c474cf8baddc0b336fe3600ccb5e3
parent 50c7cb83
Loading
Loading
Loading
Loading
+34 −21
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.text.TextUtils;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -41,10 +42,9 @@ import java.util.List;
 */
public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private final List<IDreamItem> mItemList;
    @LayoutRes
    private final int mLayoutRes;
    private int mLastSelectedPos = -1;
    private boolean mEnabled = true;
    private SparseIntArray mLayouts = new SparseIntArray();

    /**
     * View holder for each {@link IDreamItem}.
@@ -83,16 +83,6 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
                mSummaryView.setVisibility(View.VISIBLE);
            }

            final Drawable previewImage = item.getPreviewImage();
            if (previewImage != null) {
                mPreviewView.setImageDrawable(previewImage);
                mPreviewView.setClipToOutline(true);
                mPreviewPlaceholderView.setVisibility(View.GONE);
            } else {
                mPreviewView.setImageDrawable(null);
                mPreviewPlaceholderView.setVisibility(View.VISIBLE);
            }

            final Drawable icon = item.isActive()
                    ? mContext.getDrawable(R.drawable.ic_dream_check_circle)
                    : item.getIcon().mutate();
@@ -122,12 +112,24 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
                itemView.setClickable(true);
            }

            if (item.viewType() != DreamItemViewTypes.NO_DREAM_ITEM) {
                final Drawable previewImage = item.getPreviewImage();
                if (previewImage != null) {
                    mPreviewView.setImageDrawable(previewImage);
                    mPreviewView.setClipToOutline(true);
                    mPreviewPlaceholderView.setVisibility(View.GONE);
                } else {
                    mPreviewView.setImageDrawable(null);
                    mPreviewPlaceholderView.setVisibility(View.VISIBLE);
                }

                mCustomizeButton.setOnClickListener(v -> item.onCustomizeClicked());
                mCustomizeButton.setVisibility(
                        item.allowCustomization() && mEnabled ? View.VISIBLE : View.GONE);
                // This must be called AFTER itemView.setSelected above, in order to keep the
                // customize button in an unselected state.
                mCustomizeButton.setSelected(false);
            }

            setEnabledStateOnViews(itemView, mEnabled);
        }
@@ -149,16 +151,22 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
        }
    }

    public DreamAdapter(SparseIntArray layouts, List<IDreamItem> itemList) {
        mItemList = itemList;
        mLayouts = layouts;
    }

    public DreamAdapter(@LayoutRes int layoutRes, List<IDreamItem> itemList) {
        mItemList = itemList;
        mLayoutRes = layoutRes;
        mLayouts.append(DreamItemViewTypes.DREAM_ITEM, layoutRes);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
                                                      @DreamItemViewTypes.ViewType int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(mLayoutRes, viewGroup, false);
                .inflate(mLayouts.get(viewType), viewGroup, false);
        return new DreamViewHolder(view, viewGroup.getContext());
    }

@@ -167,6 +175,11 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
        ((DreamViewHolder) viewHolder).bindView(mItemList.get(i), i);
    }

    @Override
    public @DreamItemViewTypes.ViewType int getItemViewType(int position) {
        return mItemList.get(position).viewType();
    }

    @Override
    public int getItemCount() {
        return mItemList.size();
+43 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.dream;

import android.annotation.IntDef;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Class representing a dream item view types.
 */
public final class DreamItemViewTypes {

    /**
     * The default dream item layout
     */
    public static final int DREAM_ITEM = 0;

    /**
     * The dream item layout indicating no dream item selected.
     */
    public static final int NO_DREAM_ITEM = 1;


    @Retention(RetentionPolicy.SOURCE)
    @IntDef({DreamItemViewTypes.DREAM_ITEM, DreamItemViewTypes.NO_DREAM_ITEM})
    public @interface ViewType {}
}
+7 −0
Original line number Diff line number Diff line
@@ -67,4 +67,11 @@ public interface IDreamItem {
    default boolean allowCustomization() {
        return false;
    }

    /**
     * Returns whether or not this item is the no screensaver item.
     */
    default @DreamItemViewTypes.ViewType int viewType() {
        return DreamItemViewTypes.DREAM_ITEM;
    }
}