From 7b85f2af24ff187e8e90d6a8d0d0261ca9a9e538 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Tue, 8 Jun 2021 20:21:05 +0800 Subject: [PATCH 1/2] 'Free up space' uses CardPreference For material next style. Bug: 188599776 Test: make RunSettingsRoboTests ROBOTEST_FILTER=CardPreferenceTest Change-Id: Ibaf4d11ab44017453498676db00cff1e49c83b9d --- res/xml/storage_category_fragment.xml | 2 +- res/xml/storage_dashboard_fragment.xml | 2 +- .../deviceinfo/StorageCategoryFragment.java | 8 +++-- .../deviceinfo/StorageDashboardFragment.java | 8 +++-- .../settings/widget/CardPreference.java | 26 ++++++++++++++++ .../settings/widget/CardPreferenceTest.java | 30 +++++++++++++++++++ 6 files changed, 70 insertions(+), 6 deletions(-) diff --git a/res/xml/storage_category_fragment.xml b/res/xml/storage_category_fragment.xml index fb62beeaecf..08f3f272f87 100644 --- a/res/xml/storage_category_fragment.xml +++ b/res/xml/storage_category_fragment.xml @@ -19,7 +19,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/storage_settings"> - - mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private Preference mFreeUpSpacePreference; + private CardPreference mFreeUpSpacePreference; /** * Refresh UI for specified storageEntry. @@ -145,8 +146,11 @@ public class StorageCategoryFragment extends DashboardFragment } private void initializePreference() { - mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); + mFreeUpSpacePreference = (CardPreference) getPreferenceScreen() + .findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference.setOnPreferenceClickListener(this); + mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(), + com.android.internal.R.attr.colorSurface)); } @Override diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 6dbc3aa9a7e..0fce8fac61b 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -56,6 +56,7 @@ import com.android.settings.deviceinfo.storage.UserIconLoader; import com.android.settings.deviceinfo.storage.VolumeSizesLoader; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.widget.CardPreference; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.core.AbstractPreferenceController; @@ -109,7 +110,7 @@ public class StorageDashboardFragment extends DashboardFragment private List mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private Preference mFreeUpSpacePreference; + private CardPreference mFreeUpSpacePreference; private final StorageEventListener mStorageEventListener = new StorageEventListener() { @Override @@ -281,8 +282,11 @@ public class StorageDashboardFragment extends DashboardFragment } private void initializePreference() { - mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); + mFreeUpSpacePreference = (CardPreference) getPreferenceScreen() + .findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference.setOnPreferenceClickListener(this); + mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(), + com.android.internal.R.attr.colorSurface)); } @Override diff --git a/src/com/android/settings/widget/CardPreference.java b/src/com/android/settings/widget/CardPreference.java index 20ea7109e48..80d9da2f96f 100644 --- a/src/com/android/settings/widget/CardPreference.java +++ b/src/com/android/settings/widget/CardPreference.java @@ -19,7 +19,9 @@ package com.android.settings.widget; import android.content.Context; import android.util.AttributeSet; +import androidx.annotation.ColorInt; import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; import com.android.settings.R; @@ -29,6 +31,11 @@ import com.google.android.material.card.MaterialCardView; * Preference that wrapped by {@link MaterialCardView}, only support to set icon, title and summary */ public class CardPreference extends Preference { + + private static final @ColorInt int INVALID_COLOR = -1; + + private @ColorInt int mCardBackgroundColor = INVALID_COLOR; + public CardPreference(Context context) { this(context, null /* attrs */); } @@ -36,4 +43,23 @@ public class CardPreference extends Preference { public CardPreference(Context context, AttributeSet attrs) { super(context, attrs, R.attr.cardPreferenceStyle); } + + /** Set card background color of the MaterialCardView in CardPreference. */ + public void setCardBackgroundColor(@ColorInt int color) { + if (mCardBackgroundColor == color) { + return; + } + mCardBackgroundColor = color; + notifyChanged(); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder view) { + super.onBindViewHolder(view); + + if (mCardBackgroundColor != INVALID_COLOR) { + final MaterialCardView cardView = (MaterialCardView) view.findViewById(R.id.container); + cardView.setCardBackgroundColor(mCardBackgroundColor); + } + } } diff --git a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java index 6d4a6bbd4d8..617dad58552 100644 --- a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java @@ -18,13 +18,26 @@ package com.android.settings.widget; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + import android.content.Context; +import android.view.View; + +import androidx.annotation.ColorInt; +import androidx.preference.PreferenceViewHolder; import com.android.settings.R; +import com.google.android.material.card.MaterialCardView; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -33,12 +46,20 @@ public class CardPreferenceTest { private Context mContext; private CardPreference mCardPreference; + @Mock + private PreferenceViewHolder mPreferenceViewHolder; + @Mock + private MaterialCardView mCardView; @Before public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; mContext.setTheme(R.style.SettingsPreferenceTheme); mCardPreference = new CardPreference(mContext); + mPreferenceViewHolder = spy(PreferenceViewHolder.createInstanceForTests(mock(View.class))); + doReturn(mCardView).when(mPreferenceViewHolder).findViewById(R.id.container); } @Test @@ -46,4 +67,13 @@ public class CardPreferenceTest { assertThat(mCardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout); } + @Test + public void setCardBackgroundColor_shouldUseCorrectColor() { + final @ColorInt int testColor = 0xABCDEF; + + mCardPreference.setCardBackgroundColor(testColor); + mCardPreference.onBindViewHolder(mPreferenceViewHolder); + + verify(mCardView).setCardBackgroundColor(testColor); + } } From bdb70b1078ac8c78eff81e29ab93eccf0309091f Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Wed, 9 Jun 2021 09:23:00 +0800 Subject: [PATCH 2/2] Tweak UI of CardPreference and ContextualCard - CardPreference uses settingslib_preference layout to fix title/summary alignment issue. - Remove stroke for CardPreference and ContextualCard. - Set colorSurface as default card background color. Bug: 188599776 Test: manual visual Change-Id: Id0ee40be60de1f7605849490ee43eae4b9420abb --- color-check-baseline.xml | 32 ------------------- res/layout/card_preference_layout.xml | 2 +- res/values/colors.xml | 2 -- res/values/styles.xml | 7 ++-- .../deviceinfo/StorageCategoryFragment.java | 8 ++--- .../deviceinfo/StorageDashboardFragment.java | 8 ++--- .../settings/widget/CardPreference.java | 25 --------------- .../settings/widget/CardPreferenceTest.java | 31 ------------------ 8 files changed, 8 insertions(+), 107 deletions(-) diff --git a/color-check-baseline.xml b/color-check-baseline.xml index 48a204f2cd2..27f2bd16fa2 100644 --- a/color-check-baseline.xml +++ b/color-check-baseline.xml @@ -1117,22 +1117,6 @@ column="5"/> - - - - - - - - + layout="@layout/settingslib_preference" /> diff --git a/res/values/colors.xml b/res/values/colors.xml index edef6ef257b..fd5f8c8304e 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -103,9 +103,7 @@ #E51AD1 #DD4C9D - #1f000000 @*android:color/material_grey_100 - @*android:color/background_device_default_light @*android:color/material_grey_600 diff --git a/res/values/styles.xml b/res/values/styles.xml index 6021a7c226e..be0a2f22e11 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -13,7 +13,8 @@ limitations under the License. --> - + diff --git a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java index ffce2259d90..98736e39a48 100644 --- a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java +++ b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java @@ -44,7 +44,6 @@ import com.android.settings.deviceinfo.storage.StorageItemPreferenceController; import com.android.settings.deviceinfo.storage.UserIconLoader; import com.android.settings.deviceinfo.storage.VolumeSizesLoader; import com.android.settings.overlay.FeatureFactory; -import com.android.settings.widget.CardPreference; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.core.AbstractPreferenceController; @@ -91,7 +90,7 @@ public class StorageCategoryFragment extends DashboardFragment private List mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private CardPreference mFreeUpSpacePreference; + private Preference mFreeUpSpacePreference; /** * Refresh UI for specified storageEntry. @@ -146,11 +145,8 @@ public class StorageCategoryFragment extends DashboardFragment } private void initializePreference() { - mFreeUpSpacePreference = (CardPreference) getPreferenceScreen() - .findPreference(FREE_UP_SPACE_PREF_KEY); + mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference.setOnPreferenceClickListener(this); - mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(), - com.android.internal.R.attr.colorSurface)); } @Override diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 0fce8fac61b..6dbc3aa9a7e 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -56,7 +56,6 @@ import com.android.settings.deviceinfo.storage.UserIconLoader; import com.android.settings.deviceinfo.storage.VolumeSizesLoader; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settings.widget.CardPreference; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.core.AbstractPreferenceController; @@ -110,7 +109,7 @@ public class StorageDashboardFragment extends DashboardFragment private List mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private CardPreference mFreeUpSpacePreference; + private Preference mFreeUpSpacePreference; private final StorageEventListener mStorageEventListener = new StorageEventListener() { @Override @@ -282,11 +281,8 @@ public class StorageDashboardFragment extends DashboardFragment } private void initializePreference() { - mFreeUpSpacePreference = (CardPreference) getPreferenceScreen() - .findPreference(FREE_UP_SPACE_PREF_KEY); + mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference.setOnPreferenceClickListener(this); - mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(), - com.android.internal.R.attr.colorSurface)); } @Override diff --git a/src/com/android/settings/widget/CardPreference.java b/src/com/android/settings/widget/CardPreference.java index 80d9da2f96f..c04155222a0 100644 --- a/src/com/android/settings/widget/CardPreference.java +++ b/src/com/android/settings/widget/CardPreference.java @@ -19,9 +19,7 @@ package com.android.settings.widget; import android.content.Context; import android.util.AttributeSet; -import androidx.annotation.ColorInt; import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; import com.android.settings.R; @@ -32,10 +30,6 @@ import com.google.android.material.card.MaterialCardView; */ public class CardPreference extends Preference { - private static final @ColorInt int INVALID_COLOR = -1; - - private @ColorInt int mCardBackgroundColor = INVALID_COLOR; - public CardPreference(Context context) { this(context, null /* attrs */); } @@ -43,23 +37,4 @@ public class CardPreference extends Preference { public CardPreference(Context context, AttributeSet attrs) { super(context, attrs, R.attr.cardPreferenceStyle); } - - /** Set card background color of the MaterialCardView in CardPreference. */ - public void setCardBackgroundColor(@ColorInt int color) { - if (mCardBackgroundColor == color) { - return; - } - mCardBackgroundColor = color; - notifyChanged(); - } - - @Override - public void onBindViewHolder(PreferenceViewHolder view) { - super.onBindViewHolder(view); - - if (mCardBackgroundColor != INVALID_COLOR) { - final MaterialCardView cardView = (MaterialCardView) view.findViewById(R.id.container); - cardView.setCardBackgroundColor(mCardBackgroundColor); - } - } } diff --git a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java index 617dad58552..85ab609ba49 100644 --- a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java @@ -18,26 +18,13 @@ package com.android.settings.widget; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - import android.content.Context; -import android.view.View; - -import androidx.annotation.ColorInt; -import androidx.preference.PreferenceViewHolder; import com.android.settings.R; -import com.google.android.material.card.MaterialCardView; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -46,34 +33,16 @@ public class CardPreferenceTest { private Context mContext; private CardPreference mCardPreference; - @Mock - private PreferenceViewHolder mPreferenceViewHolder; - @Mock - private MaterialCardView mCardView; @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; mContext.setTheme(R.style.SettingsPreferenceTheme); mCardPreference = new CardPreference(mContext); - mPreferenceViewHolder = spy(PreferenceViewHolder.createInstanceForTests(mock(View.class))); - doReturn(mCardView).when(mPreferenceViewHolder).findViewById(R.id.container); } @Test public void getLayoutResource() { assertThat(mCardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout); } - - @Test - public void setCardBackgroundColor_shouldUseCorrectColor() { - final @ColorInt int testColor = 0xABCDEF; - - mCardPreference.setCardBackgroundColor(testColor); - mCardPreference.onBindViewHolder(mPreferenceViewHolder); - - verify(mCardView).setCardBackgroundColor(testColor); - } }