Add NoDreamViewHolder for a different layout for NoDreamItem.
Bug: 243389115 Test: Manually tested Change-Id: Id7549d55721c474cf8baddc0b336fe3600ccb5e3
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
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);
|
||||
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
src/com/android/settings/dream/DreamItemViewTypes.java
Normal file
43
src/com/android/settings/dream/DreamItemViewTypes.java
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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 {}
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user