From c7709aebb3e40a010684aba65f952ee99a2e5633 Mon Sep 17 00:00:00 2001 From: Lucas Silva Date: Wed, 23 Feb 2022 18:54:32 +0000 Subject: [PATCH] Add dream descriptions to dream settings UI. The dream descriptions will now be shown underneath the title, if the dream has provided one. We also cleaned up the icon view, instead merging it with the title view to ensure proper alignment between the icon and title. Bug: 221078654 Test: locally on device Test: atest DreamPickerControllerTest Change-Id: I00fd69c294f1a5fbcbc5392eba342f2896f6d9ed --- res/layout/dream_preference_layout.xml | 38 ++++++++++--------- res/values/dimens.xml | 8 ++-- .../android/settings/dream/DreamAdapter.java | 18 +++++++-- .../settings/dream/DreamPickerController.java | 5 +++ .../android/settings/dream/IDreamItem.java | 29 ++++++++++++++ 5 files changed, 74 insertions(+), 24 deletions(-) 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; }