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:
78
res/layout/homepage_condition_full_tile.xml
Normal file
78
res/layout/homepage_condition_full_tile.xml
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2018 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/ContextualCardStyle">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/homepage_condition_full_card_height"
|
||||||
|
android:paddingStart="@dimen/homepage_card_padding_start"
|
||||||
|
android:paddingEnd="@dimen/homepage_card_padding_end"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@android:id/icon"
|
||||||
|
android:layout_width="@dimen/suggestion_card_icon_size"
|
||||||
|
android:layout_height="@dimen/suggestion_card_icon_size"
|
||||||
|
android:tint="?android:attr/colorAccent"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:paddingStart="@dimen/homepage_condition_full_card_padding_start"
|
||||||
|
android:paddingEnd="@dimen/homepage_condition_full_card_padding_end"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="@dimen/homepage_condition_card_title_margin_bottom"
|
||||||
|
style="@style/TextAppearance.ConditionCardTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/summary"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/TextAppearance.ConditionCardSummary"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider"
|
||||||
|
android:layout_width="@dimen/homepage_condition_full_card_divider_width"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="@dimen/homepage_condition_full_card_divider_padding_top"
|
||||||
|
android:layout_marginBottom="@dimen/homepage_condition_full_card_divider_padding_bottom"
|
||||||
|
android:background="?android:attr/dividerVertical" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/first_action"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/ConditionFullCardBorderlessButton"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
63
res/layout/homepage_condition_half_tile.xml
Normal file
63
res/layout/homepage_condition_half_tile.xml
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2018 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/homepage_condition_half_card_height"
|
||||||
|
style="@style/ContextualCardStyle">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingStart="@dimen/homepage_card_padding_start"
|
||||||
|
android:paddingEnd="@dimen/homepage_card_padding_end"
|
||||||
|
android:paddingTop="@dimen/homepage_condition_half_card_padding_top"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@android:id/icon"
|
||||||
|
android:layout_width="@dimen/suggestion_card_icon_size"
|
||||||
|
android:layout_height="@dimen/suggestion_card_icon_size"
|
||||||
|
android:tint="?android:attr/colorAccent"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/homepage_condition_half_card_title_margin_top"
|
||||||
|
android:layout_marginBottom="@dimen/homepage_condition_card_title_margin_bottom"
|
||||||
|
style="@style/TextAppearance.ConditionCardTitle"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@android:id/summary"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/TextAppearance.ConditionCardSummary"/>
|
||||||
|
|
||||||
|
<include layout="@layout/horizontal_divider"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/first_action"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/ConditionHalfCardBorderlessButton"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
@@ -1,97 +0,0 @@
|
|||||||
<!--
|
|
||||||
Copyright (C) 2018 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/ContextualCardStyle">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/content"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:minHeight="@dimen/condition_header_height"
|
|
||||||
android:background="?android:attr/selectableItemBackground"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@android:id/icon"
|
|
||||||
android:layout_width="@dimen/suggestion_card_icon_size"
|
|
||||||
android:layout_height="@dimen/suggestion_card_icon_size"
|
|
||||||
android:layout_marginTop="12dp"
|
|
||||||
android:layout_marginStart="14dp"
|
|
||||||
android:layout_marginEnd="24dp"
|
|
||||||
android:tint="?android:attr/colorAccent"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@android:id/title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="14dp"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@android:id/summary"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingStart="62dp"
|
|
||||||
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
|
||||||
android:alpha=".7"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"/>
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.ButtonBarLayout
|
|
||||||
android:id="@+id/buttonBar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingStart="62dp"
|
|
||||||
android:paddingBottom="1dp"
|
|
||||||
style="?android:attr/buttonBarStyle"
|
|
||||||
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/first_action"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:paddingStart="0dp"
|
|
||||||
android:alpha=".8"
|
|
||||||
android:textAlignment="viewStart"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
style="?android:attr/buttonBarButtonStyle"/>
|
|
||||||
|
|
||||||
<Space
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"/>
|
|
||||||
|
|
||||||
</androidx.appcompat.widget.ButtonBarLayout>
|
|
||||||
|
|
||||||
<include layout="@layout/horizontal_divider"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
|
@@ -346,6 +346,16 @@
|
|||||||
<!-- Signal icon in NetworkSelectSetting -->
|
<!-- Signal icon in NetworkSelectSetting -->
|
||||||
<dimen name="signal_strength_icon_size">24dp</dimen>
|
<dimen name="signal_strength_icon_size">24dp</dimen>
|
||||||
|
|
||||||
|
<!-- Condition cards size and padding -->
|
||||||
|
<dimen name="homepage_condition_card_title_margin_bottom">2dp</dimen>
|
||||||
|
<dimen name="homepage_condition_half_card_height">150dp</dimen>
|
||||||
|
<dimen name="homepage_condition_half_card_padding_top">12dp</dimen>
|
||||||
|
<dimen name="homepage_condition_half_card_title_margin_top">12dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_height">72dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_padding_start">24dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_padding_end">24dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_divider_width">.75dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_divider_padding_top">12dp</dimen>
|
||||||
|
<dimen name="homepage_condition_full_card_divider_padding_bottom">12dp</dimen>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -308,6 +308,16 @@
|
|||||||
<item name="android:textColor">?android:attr/colorAccent</item>
|
<item name="android:textColor">?android:attr/colorAccent</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.ConditionCardTitle"
|
||||||
|
parent="@android:style/TextAppearance.Material.Body2">
|
||||||
|
<item name="android:textSize">16sp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.ConditionCardSummary"
|
||||||
|
parent="@android:style/TextAppearance.Material.Body1">
|
||||||
|
<item name="android:textColor">?android:attr/textColorSecondary</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
<style name="TextAppearance.EntityHeaderTitle"
|
<style name="TextAppearance.EntityHeaderTitle"
|
||||||
parent="@android:style/TextAppearance.Material.Subhead">
|
parent="@android:style/TextAppearance.Material.Subhead">
|
||||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
||||||
@@ -463,4 +473,24 @@
|
|||||||
<item name="cardElevation">@dimen/homepage_card_elevation</item>
|
<item name="cardElevation">@dimen/homepage_card_elevation</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="ConditionCardBorderlessButton"
|
||||||
|
parent="android:Widget.DeviceDefault.Button.Borderless">
|
||||||
|
<item name="android:textColor">?android:attr/colorAccent</item>
|
||||||
|
<item name="android:textSize">14sp</item>
|
||||||
|
<item name="android:textAllCaps">false</item>
|
||||||
|
<item name="android:fontFamily">sans-serif-medium</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="ConditionHalfCardBorderlessButton"
|
||||||
|
parent="@style/ConditionCardBorderlessButton">
|
||||||
|
<item name="android:textAlignment">viewStart</item>
|
||||||
|
<item name="android:paddingStart">0dp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="ConditionFullCardBorderlessButton"
|
||||||
|
parent="@style/ConditionCardBorderlessButton">
|
||||||
|
<item name="android:textAlignment">viewEnd</item>
|
||||||
|
<item name="android:paddingEnd">0dp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -42,6 +42,7 @@ public class ContextualCard {
|
|||||||
int CONDITIONAL = 3;
|
int CONDITIONAL = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Builder mBuilder;
|
||||||
private final String mName;
|
private final String mName;
|
||||||
@CardType
|
@CardType
|
||||||
private final int mCardType;
|
private final int mCardType;
|
||||||
@@ -142,7 +143,12 @@ public class ContextualCard {
|
|||||||
return TextUtils.isEmpty(mSliceUri);
|
return TextUtils.isEmpty(mSliceUri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder mutate() {
|
||||||
|
return mBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
public ContextualCard(Builder builder) {
|
public ContextualCard(Builder builder) {
|
||||||
|
mBuilder = builder;
|
||||||
mName = builder.mName;
|
mName = builder.mName;
|
||||||
mCardType = builder.mCardType;
|
mCardType = builder.mCardType;
|
||||||
mRankingScore = builder.mRankingScore;
|
mRankingScore = builder.mRankingScore;
|
||||||
@@ -164,28 +170,47 @@ public class ContextualCard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ContextualCard(Cursor c) {
|
ContextualCard(Cursor c) {
|
||||||
|
mBuilder = new Builder();
|
||||||
mName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.NAME));
|
mName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.NAME));
|
||||||
|
mBuilder.setName(mName);
|
||||||
mCardType = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.TYPE));
|
mCardType = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.TYPE));
|
||||||
|
mBuilder.setCardType(mCardType);
|
||||||
mRankingScore = c.getDouble(c.getColumnIndex(CardDatabaseHelper.CardColumns.SCORE));
|
mRankingScore = c.getDouble(c.getColumnIndex(CardDatabaseHelper.CardColumns.SCORE));
|
||||||
|
mBuilder.setRankingScore(mRankingScore);
|
||||||
mSliceUri = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SLICE_URI));
|
mSliceUri = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SLICE_URI));
|
||||||
|
mBuilder.setSliceUri(Uri.parse(mSliceUri));
|
||||||
mCategory = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CATEGORY));
|
mCategory = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CATEGORY));
|
||||||
|
mBuilder.setCategory(mCategory);
|
||||||
mLocalizedToLocale = c.getString(
|
mLocalizedToLocale = c.getString(
|
||||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.LOCALIZED_TO_LOCALE));
|
c.getColumnIndex(CardDatabaseHelper.CardColumns.LOCALIZED_TO_LOCALE));
|
||||||
|
mBuilder.setLocalizedToLocale(mLocalizedToLocale);
|
||||||
mPackageName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.PACKAGE_NAME));
|
mPackageName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.PACKAGE_NAME));
|
||||||
|
mBuilder.setPackageName(mPackageName);
|
||||||
mAppVersion = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.APP_VERSION));
|
mAppVersion = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.APP_VERSION));
|
||||||
|
mBuilder.setAppVersion(mAppVersion);
|
||||||
mTitleResName = c.getString(
|
mTitleResName = c.getString(
|
||||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_RES_NAME));
|
c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_RES_NAME));
|
||||||
|
mBuilder.setTitleResName(mTitleResName);
|
||||||
mTitleText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_TEXT));
|
mTitleText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.TITLE_TEXT));
|
||||||
|
mBuilder.setTitleText(mTitleText);
|
||||||
mSummaryResName = c.getString(
|
mSummaryResName = c.getString(
|
||||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_RES_NAME));
|
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_RES_NAME));
|
||||||
|
mBuilder.setSummaryResName(mSummaryResName);
|
||||||
mSummaryText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_TEXT));
|
mSummaryText = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.SUMMARY_TEXT));
|
||||||
|
mBuilder.setSummaryText(mSummaryText);
|
||||||
mIconResName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_NAME));
|
mIconResName = c.getString(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_NAME));
|
||||||
|
mBuilder.setIconResName(mIconResName);
|
||||||
mIconResId = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_ID));
|
mIconResId = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.ICON_RES_ID));
|
||||||
|
mBuilder.setIconResId(mIconResId);
|
||||||
mCardAction = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CARD_ACTION));
|
mCardAction = c.getInt(c.getColumnIndex(CardDatabaseHelper.CardColumns.CARD_ACTION));
|
||||||
|
mBuilder.setCardAction(mCardAction);
|
||||||
mExpireTimeMS = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.EXPIRE_TIME_MS));
|
mExpireTimeMS = c.getLong(c.getColumnIndex(CardDatabaseHelper.CardColumns.EXPIRE_TIME_MS));
|
||||||
|
mBuilder.setExpireTimeMS(mExpireTimeMS);
|
||||||
mIsHalfWidth = (c.getInt(
|
mIsHalfWidth = (c.getInt(
|
||||||
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1);
|
c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1);
|
||||||
|
mBuilder.setIsHalfWidth(mIsHalfWidth);
|
||||||
mIconDrawable = null;
|
mIconDrawable = null;
|
||||||
|
mBuilder.setIconDrawable(mIconDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -62,7 +62,11 @@ public class ContextualCardLookupTable {
|
|||||||
static final Set<ControllerRendererMapping> LOOKUP_TABLE =
|
static final Set<ControllerRendererMapping> LOOKUP_TABLE =
|
||||||
new TreeSet<ControllerRendererMapping>() {{
|
new TreeSet<ControllerRendererMapping>() {{
|
||||||
add(new ControllerRendererMapping(CardType.CONDITIONAL,
|
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,
|
ConditionContextualCardController.class,
|
||||||
ConditionContextualCardRenderer.class));
|
ConditionContextualCardRenderer.class));
|
||||||
add(new ControllerRendererMapping(CardType.SLICE,
|
add(new ControllerRendererMapping(CardType.SLICE,
|
||||||
|
@@ -79,6 +79,7 @@ public class AirplaneModeConditionController implements ConditionalCardControlle
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_airplane_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_airplane_title).toString())
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_airplane_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_airplane_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_airplanemode_active))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_airplanemode_active))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -73,6 +73,7 @@ public class BackgroundDataConditionController implements ConditionalCardControl
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_bg_data_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_bg_data_title).toString())
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_bg_data_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_bg_data_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_data_saver))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_data_saver))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -82,6 +82,7 @@ public class BatterySaverConditionController implements ConditionalCardControlle
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_battery_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_battery_title).toString())
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_battery_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_battery_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_battery_saver_accent_24dp))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_battery_saver_accent_24dp))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -89,6 +89,7 @@ public class CellularDataConditionController implements ConditionalCardControlle
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_cellular_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_cellular_title).toString())
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_cellular_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_cellular_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_cellular_off))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_cellular_off))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -85,6 +85,14 @@ public class ConditionContextualCardController implements ContextualCardControll
|
|||||||
public void onConditionsChanged() {
|
public void onConditionsChanged() {
|
||||||
final List<ContextualCard> conditionCards = mConditionManager.getDisplayableCards();
|
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) {
|
if (mListener != null) {
|
||||||
final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
|
final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
|
||||||
conditionalCards.put(ContextualCard.CardType.CONDITIONAL, conditionCards);
|
conditionalCards.put(ContextualCard.CardType.CONDITIONAL, conditionCards);
|
||||||
|
@@ -37,7 +37,8 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
|||||||
* Card renderer for {@link ConditionalContextualCard}.
|
* Card renderer for {@link ConditionalContextualCard}.
|
||||||
*/
|
*/
|
||||||
public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
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 Context mContext;
|
||||||
private final ControllerRendererPool mControllerRendererPool;
|
private final ControllerRendererPool mControllerRendererPool;
|
||||||
@@ -50,7 +51,11 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getViewType(boolean isHalfWidth) {
|
public int getViewType(boolean isHalfWidth) {
|
||||||
return VIEW_TYPE;
|
if (isHalfWidth) {
|
||||||
|
return HALF_WIDTH_VIEW_TYPE;
|
||||||
|
} else {
|
||||||
|
return FULL_WIDTH_VIEW_TYPE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,15 +93,12 @@ public class ConditionContextualCardRenderer implements ContextualCardRenderer {
|
|||||||
view.icon.setImageDrawable(card.getIconDrawable());
|
view.icon.setImageDrawable(card.getIconDrawable());
|
||||||
view.title.setText(card.getTitleText());
|
view.title.setText(card.getTitleText());
|
||||||
view.summary.setText(card.getSummaryText());
|
view.summary.setText(card.getSummaryText());
|
||||||
|
|
||||||
setViewVisibility(view.itemView, R.id.divider, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeActionButton(ConditionalCardHolder view, ConditionalContextualCard card,
|
private void initializeActionButton(ConditionalCardHolder view, ConditionalContextualCard card,
|
||||||
MetricsFeatureProvider metricsFeatureProvider) {
|
MetricsFeatureProvider metricsFeatureProvider) {
|
||||||
final CharSequence action = card.getActionText();
|
final CharSequence action = card.getActionText();
|
||||||
final boolean hasButtons = !TextUtils.isEmpty(action);
|
final boolean hasButtons = !TextUtils.isEmpty(action);
|
||||||
setViewVisibility(view.itemView, R.id.buttonBar, hasButtons);
|
|
||||||
|
|
||||||
final Button button = view.itemView.findViewById(R.id.first_action);
|
final Button button = view.itemView.findViewById(R.id.first_action);
|
||||||
if (hasButtons) {
|
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 static class ConditionalCardHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
public final ImageView icon;
|
public final ImageView icon;
|
||||||
|
@@ -100,6 +100,7 @@ public class DndConditionCardController implements ConditionalCardController {
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_zen_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_zen_title).toString())
|
||||||
.setSummaryText(getSummary().toString())
|
.setSummaryText(getSummary().toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -99,6 +99,7 @@ public class HotspotConditionController implements ConditionalCardController {
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_hotspot_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_hotspot_title).toString())
|
||||||
.setSummaryText(getSummary().toString())
|
.setSummaryText(getSummary().toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_hotspot))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_hotspot))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -78,6 +78,7 @@ public class NightDisplayConditionController implements ConditionalCardControlle
|
|||||||
.setSummaryText(
|
.setSummaryText(
|
||||||
mAppContext.getText(R.string.condition_night_display_summary).toString())
|
mAppContext.getText(R.string.condition_night_display_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_settings_night_display))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_settings_night_display))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@ public class RingerMutedConditionController extends AbnormalRingerConditionContr
|
|||||||
.setSummaryText(
|
.setSummaryText(
|
||||||
mAppContext.getText(R.string.condition_device_muted_summary).toString())
|
mAppContext.getText(R.string.condition_device_muted_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_notifications_off_24dp))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_notifications_off_24dp))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -60,6 +60,7 @@ public class RingerVibrateConditionController extends AbnormalRingerConditionCon
|
|||||||
.setSummaryText(
|
.setSummaryText(
|
||||||
mAppContext.getText(R.string.condition_device_vibrate_summary).toString())
|
mAppContext.getText(R.string.condition_device_vibrate_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_volume_ringer_vibrate))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_volume_ringer_vibrate))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -93,6 +93,7 @@ public class WorkModeConditionController implements ConditionalCardController {
|
|||||||
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
.setTitleText(mAppContext.getText(R.string.condition_work_title).toString())
|
||||||
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
.setSummaryText(mAppContext.getText(R.string.condition_work_summary).toString())
|
||||||
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
.setIconDrawable(mAppContext.getDrawable(R.drawable.ic_signal_workmode_enable))
|
||||||
|
.setIsHalfWidth(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user