Loading src/com/android/settings/dream/DreamAdapter.java +34 −21 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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}. Loading Loading @@ -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(); Loading Loading @@ -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); } Loading @@ -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()); } Loading @@ -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(); Loading src/com/android/settings/dream/DreamItemViewTypes.java 0 → 100644 +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 {} } src/com/android/settings/dream/IDreamItem.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; } } Loading
src/com/android/settings/dream/DreamAdapter.java +34 −21 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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}. Loading Loading @@ -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(); Loading Loading @@ -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); } Loading @@ -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()); } Loading @@ -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(); Loading
src/com/android/settings/dream/DreamItemViewTypes.java 0 → 100644 +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 {} }
src/com/android/settings/dream/IDreamItem.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; } }