diff --git a/res/layout/dream_preference_layout.xml b/res/layout/dream_preference_layout.xml
index abb2a34d922..894ac32acba 100644
--- a/res/layout/dream_preference_layout.xml
+++ b/res/layout/dream_preference_layout.xml
@@ -64,36 +64,38 @@
app:layout_constraintStart_toStartOf="@+id/preview"
app:layout_constraintEnd_toEndOf="@+id/preview"/>
-
-
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/summary_text"/>
+
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 78dbccee23e..5cd1ebb244e 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -445,10 +445,12 @@
28dp
8dp
20dp
- 18dp
+ 14sp
+ 16dp
8dp
- 18dp
- 10dp
+ 16sp
+ 18dp
+ 8dp
16dp
20dp
48dp
diff --git a/src/com/android/settings/dream/DreamAdapter.java b/src/com/android/settings/dream/DreamAdapter.java
index 4e16ccb2240..8e487d4da3e 100644
--- a/src/com/android/settings/dream/DreamAdapter.java
+++ b/src/com/android/settings/dream/DreamAdapter.java
@@ -19,6 +19,7 @@ package com.android.settings.dream;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -45,8 +46,8 @@ public class DreamAdapter extends RecyclerView.Adapter
* View holder for each {@link IDreamItem}.
*/
private class DreamViewHolder extends RecyclerView.ViewHolder {
- private final ImageView mIconView;
private final TextView mTitleView;
+ private final TextView mSummaryView;
private final ImageView mPreviewView;
private final ImageView mPreviewPlaceholderView;
private final Button mCustomizeButton;
@@ -57,8 +58,8 @@ public class DreamAdapter extends RecyclerView.Adapter
mContext = context;
mPreviewView = view.findViewById(R.id.preview);
mPreviewPlaceholderView = view.findViewById(R.id.preview_placeholder);
- mIconView = view.findViewById(R.id.icon);
mTitleView = view.findViewById(R.id.title_text);
+ mSummaryView = view.findViewById(R.id.summary_text);
mCustomizeButton = view.findViewById(R.id.customize_button);
}
@@ -68,6 +69,14 @@ public class DreamAdapter extends RecyclerView.Adapter
public void bindView(IDreamItem item, int position) {
mTitleView.setText(item.getTitle());
+ final CharSequence summary = item.getSummary();
+ if (TextUtils.isEmpty(summary)) {
+ mSummaryView.setVisibility(View.GONE);
+ } else {
+ mSummaryView.setText(summary);
+ mSummaryView.setVisibility(View.VISIBLE);
+ }
+
final Drawable previewImage = item.getPreviewImage();
if (previewImage != null) {
mPreviewView.setImageDrawable(previewImage);
@@ -82,7 +91,10 @@ public class DreamAdapter extends RecyclerView.Adapter
icon.setTint(Utils.getColorAttrDefaultColor(mContext,
com.android.internal.R.attr.colorAccentPrimaryVariant));
}
- mIconView.setImageDrawable(icon);
+ final int iconSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.dream_item_icon_size);
+ icon.setBounds(0, 0, iconSize, iconSize);
+ mTitleView.setCompoundDrawablesRelative(icon, null, null, null);
if (item.isActive()) {
mLastSelectedPos = position;
diff --git a/src/com/android/settings/dream/DreamPickerController.java b/src/com/android/settings/dream/DreamPickerController.java
index b7ba6142413..af8c3645251 100644
--- a/src/com/android/settings/dream/DreamPickerController.java
+++ b/src/com/android/settings/dream/DreamPickerController.java
@@ -111,6 +111,11 @@ public class DreamPickerController extends BasePreferenceController {
return mDreamInfo.caption;
}
+ @Override
+ public CharSequence getSummary() {
+ return mDreamInfo.description;
+ }
+
@Override
public Drawable getIcon() {
return mDreamInfo.icon;
diff --git a/src/com/android/settings/dream/IDreamItem.java b/src/com/android/settings/dream/IDreamItem.java
index c462fe25502..49c82bec42a 100644
--- a/src/com/android/settings/dream/IDreamItem.java
+++ b/src/com/android/settings/dream/IDreamItem.java
@@ -18,23 +18,52 @@ package com.android.settings.dream;
import android.graphics.drawable.Drawable;
+import androidx.annotation.Nullable;
+
/**
* Interface representing a dream item to be displayed.
*/
public interface IDreamItem {
+ /**
+ * Gets the title of this dream.
+ */
CharSequence getTitle();
+ /**
+ * Gets the summary of this dream, or null if the dream doesn't provide one.
+ */
+ @Nullable
+ CharSequence getSummary();
+
+ /**
+ * Gets the icon for the dream.
+ */
Drawable getIcon();
+ /**
+ * Callback which can be implemented to handle clicks on this dream.
+ */
void onItemClicked();
+ /**
+ * Callback which can be implemented to handle the customization of this dream.
+ */
default void onCustomizeClicked() {
}
+ /**
+ * Gets the preview image of this dream.
+ */
Drawable getPreviewImage();
+ /**
+ * Returns whether or not this dream is currently active.
+ */
boolean isActive();
+ /**
+ * Returns whether to allow customization of this dream or not.
+ */
default boolean allowCustomization() {
return false;
}