Update new UI of conditional cards
- Add half-width and full-width layouts for conditional cards - Keep origin strings of conditional cards, that could make conditional cards truncate its title and summary in half-width card. - Add default value of isHalfWidth to each condition controller. Bug: 113451905 Test: robotests, visual Change-Id: Ib0055f32c4ab9e73c0e0a57c6b0ef586d52942e0
This commit is contained in:
@@ -42,6 +42,7 @@ public class ContextualCard {
|
||||
int CONDITIONAL = 3;
|
||||
}
|
||||
|
||||
private final Builder mBuilder;
|
||||
private final String mName;
|
||||
@CardType
|
||||
private final int mCardType;
|
||||
@@ -142,7 +143,12 @@ public class ContextualCard {
|
||||
return TextUtils.isEmpty(mSliceUri);
|
||||
}
|
||||
|
||||
public Builder mutate() {
|
||||
return mBuilder;
|
||||
}
|
||||
|
||||
public ContextualCard(Builder builder) {
|
||||
mBuilder = builder;
|
||||
mName = builder.mName;
|
||||
mCardType = builder.mCardType;
|
||||
mRankingScore = builder.mRankingScore;
|
||||
@@ -164,28 +170,47 @@ public class ContextualCard {
|
||||
}
|
||||
|
||||
ContextualCard(Cursor c) {
|
||||
mBuilder = new Builder();
|
||||
mName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.NAME));
|
||||
mBuilder.setName(mName);
|
||||
mCardType = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.TYPE));
|
||||
mBuilder.setCardType(mCardType);
|
||||
mRankingScore = c.getDouble(c.getColumnIndex(CardDatabaseHelper.CardColumns.SCORE));
|
||||
mBuilder.setRankingScore(mRankingScore);
|
||||
mSliceUri = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SLICE_URI));
|
||||
mBuilder.setSliceUri(Uri.parse(mSliceUri));
|
||||
mCategory = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CATEGORY));
|
||||
mBuilder.setCategory(mCategory);
|
||||
mLocalizedToLocale = c.getString(
|
||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.LOCALIZED_TO_LOCALE));
|
||||
mBuilder.setLocalizedToLocale(mLocalizedToLocale);
|
||||
mPackageName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.PACKAGE_NAME));
|
||||
mBuilder.setPackageName(mPackageName);
|
||||
mAppVersion = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.APP_VERSION));
|
||||
mBuilder.setAppVersion(mAppVersion);
|
||||
mTitleResName = c.getString(
|
||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_RES_NAME));
|
||||
mBuilder.setTitleResName(mTitleResName);
|
||||
mTitleText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_TEXT));
|
||||
mBuilder.setTitleText(mTitleText);
|
||||
mSummaryResName = c.getString(
|
||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_RES_NAME));
|
||||
mBuilder.setSummaryResName(mSummaryResName);
|
||||
mSummaryText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_TEXT));
|
||||
mBuilder.setSummaryText(mSummaryText);
|
||||
mIconResName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_NAME));
|
||||
mBuilder.setIconResName(mIconResName);
|
||||
mIconResId = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_ID));
|
||||
mBuilder.setIconResId(mIconResId);
|
||||
mCardAction = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CARD_ACTION));
|
||||
mBuilder.setCardAction(mCardAction);
|
||||
mExpireTimeMS = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.EXPIRE_TIME_MS));
|
||||
mBuilder.setExpireTimeMS(mExpireTimeMS);
|
||||
mIsHalfWidth = (c.getInt(
|
||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1);
|
||||
mBuilder.setIsHalfWidth(mIsHalfWidth);
|
||||
mIconDrawable = null;
|
||||
mBuilder.setIconDrawable(mIconDrawable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -62,7 +62,11 @@ public class ContextualCardLookupTable {
|
||||
static final Set<ControllerRendererMapping> LOOKUP_TABLE =
|
||||
new TreeSet<ControllerRendererMapping>() {{
|
||||
add(new ControllerRendererMapping(CardType.CONDITIONAL,
|
||||
ConditionContextualCardRenderer.VIEW_TYPE,
|
||||
ConditionContextualCardRenderer.HALF_WIDTH_VIEW_TYPE,
|
||||
ConditionContextualCardController.class,
|
||||
ConditionContextualCardRenderer.class));
|
||||
add(new ControllerRendererMapping(CardType.CONDITIONAL,
|
||||
ConditionContextualCardRenderer.FULL_WIDTH_VIEW_TYPE,
|
||||
ConditionContextualCardController.class,
|
||||
ConditionContextualCardRenderer.class));
|
||||
add(new ControllerRendererMapping(CardType.SLICE,
|
||||
|
@@ -79,6 +79,7 @@ public class AirplaneModeConditionController implements ConditionalCardControlle
|
||||
.setTitleText(mAppContext.getText(R.string.condition_airplane_title).toString())
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_airplane_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_airplanemode_active))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -73,6 +73,7 @@ public class BackgroundDataConditionController implements ConditionalCardControl
|
||||
.setTitleText(mAppContext.getText(R.string.condition_bg_data_title).toString())
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_bg_data_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_data_saver))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -82,6 +82,7 @@ public class BatterySaverConditionController implements ConditionalCardControlle
|
||||
.setTitleText(mAppContext.getText(R.string.condition_battery_title).toString())
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_battery_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_battery_saver_accent_24dp))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -89,6 +89,7 @@ public class CellularDataConditionController implements ConditionalCardControlle
|
||||
.setTitleText(mAppContext.getText(R.string.condition_cellular_title).toString())
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_cellular_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_cellular_off))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -85,6 +85,14 @@ public class ConditionContextualCardController implements ContextualCardControll
|
||||
public void onConditionsChanged() {
|
||||
final List<ContextualCard> conditionCards = mConditionManager.getDisplayableCards();
|
||||
|
||||
final boolean isOddNumber = conditionCards.size() % 2 == 1;
|
||||
if (isOddNumber) {
|
||||
final int lastIndex = conditionCards.size() - 1;
|
||||
final ConditionalContextualCard card = (ConditionalContextualCard) conditionCards.get(
|
||||
lastIndex);
|
||||
conditionCards.set(lastIndex, card.mutate().setIsHalfWidth(false).build());
|
||||
}
|
||||
|
||||
if (mListener != null) {
|
||||
final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
|
||||
conditionalCards.put(ContextualCard.CardType.CONDITIONAL, conditionCards);
|
||||
|
@@ -37,7 +37,8 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
* Card renderer for {@link ConditionalContextualCard}.
|
||||
*/
|
||||
public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
||||
public static final int VIEW_TYPE = R.layout.homepage_condition_tile;
|
||||
public static final int HALF_WIDTH_VIEW_TYPE = R.layout.homepage_condition_half_tile;
|
||||
public static final int FULL_WIDTH_VIEW_TYPE = R.layout.homepage_condition_full_tile;
|
||||
|
||||
private final Context mContext;
|
||||
private final ControllerRendererPool mControllerRendererPool;
|
||||
@@ -50,7 +51,11 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
||||
|
||||
@Override
|
||||
public int getViewType(boolean isHalfWidth) {
|
||||
return VIEW_TYPE;
|
||||
if (isHalfWidth) {
|
||||
return HALF_WIDTH_VIEW_TYPE;
|
||||
} else {
|
||||
return FULL_WIDTH_VIEW_TYPE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -88,15 +93,12 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
||||
view.icon.setImageDrawable(card.getIconDrawable());
|
||||
view.title.setText(card.getTitleText());
|
||||
view.summary.setText(card.getSummaryText());
|
||||
|
||||
setViewVisibility(view.itemView, R.id.divider, false);
|
||||
}
|
||||
|
||||
private void initializeActionButton(ConditionalCardHolder view, ConditionalContextualCard card,
|
||||
MetricsFeatureProvider metricsFeatureProvider) {
|
||||
final CharSequence action = card.getActionText();
|
||||
final boolean hasButtons = !TextUtils.isEmpty(action);
|
||||
setViewVisibility(view.itemView, R.id.buttonBar, hasButtons);
|
||||
|
||||
final Button button = view.itemView.findViewById(R.id.first_action);
|
||||
if (hasButtons) {
|
||||
@@ -115,13 +117,6 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
private void setViewVisibility(View containerView, int viewId, boolean visible) {
|
||||
View view = containerView.findViewById(viewId);
|
||||
if (view != null) {
|
||||
view.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ConditionalCardHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public final ImageView icon;
|
||||
|
@@ -100,6 +100,7 @@ public class DndConditionCardController implements ConditionalCardController {
|
||||
.setTitleText(mAppContext.getText(R.string.condition_zen_title).toString())
|
||||
.setSummaryText(getSummary().toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -99,6 +99,7 @@ public class HotspotConditionController implements ConditionalCardController {
|
||||
.setTitleText(mAppContext.getText(R.string.condition_hotspot_title).toString())
|
||||
.setSummaryText(getSummary().toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_hotspot))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -78,6 +78,7 @@ public class NightDisplayConditionController implements ConditionalCardControlle
|
||||
.setSummaryText(
|
||||
mAppContext.getText(R.string.condition_night_display_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_settings_night_display))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -72,6 +72,7 @@ public class RingerMutedConditionController extends AbnormalRingerConditionContr
|
||||
.setSummaryText(
|
||||
mAppContext.getText(R.string.condition_device_muted_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_notifications_off_24dp))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@@ -60,6 +60,7 @@ public class RingerVibrateConditionController extends AbnormalRingerConditionCon
|
||||
.setSummaryText(
|
||||
mAppContext.getText(R.string.condition_device_vibrate_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_volume_ringer_vibrate))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@@ -93,6 +93,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
||||
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
||||
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
||||
.setIsHalfWidth(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user