'Free up space' uses CardPreference

For material next style.

Bug: 188599776
Test: make RunSettingsRoboTests ROBOTEST_FILTER=CardPreferenceTest
Change-Id: Ibaf4d11ab44017453498676db00cff1e49c83b9d
This commit is contained in:
Arc Wang
2021-06-08 20:21:05 +08:00
parent 603cd6c44c
commit 7b85f2af24
6 changed files with 70 additions and 6 deletions

View File

@@ -19,7 +19,7 @@
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto" xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/storage_settings"> android:title="@string/storage_settings">
<Preference <com.android.settings.widget.CardPreference
android:key="free_up_space" android:key="free_up_space"
android:order="4" android:order="4"
android:title="@string/storage_free_up_space_title" android:title="@string/storage_free_up_space_title"

View File

@@ -37,7 +37,7 @@
android:icon="@drawable/ic_storage" android:icon="@drawable/ic_storage"
android:order="3" android:order="3"
settings:controller="com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController"/> settings:controller="com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController"/>
<Preference <com.android.settings.widget.CardPreference
android:key="free_up_space" android:key="free_up_space"
android:order="4" android:order="4"
android:title="@string/storage_free_up_space_title" android:title="@string/storage_free_up_space_title"

View File

@@ -44,6 +44,7 @@ import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
import com.android.settings.deviceinfo.storage.UserIconLoader; import com.android.settings.deviceinfo.storage.UserIconLoader;
import com.android.settings.deviceinfo.storage.VolumeSizesLoader; import com.android.settings.deviceinfo.storage.VolumeSizesLoader;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.CardPreference;
import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -90,7 +91,7 @@ public class StorageCategoryFragment extends DashboardFragment
private List<AbstractPreferenceController> mSecondaryUsers; private List<AbstractPreferenceController> mSecondaryUsers;
private boolean mIsWorkProfile; private boolean mIsWorkProfile;
private int mUserId; private int mUserId;
private Preference mFreeUpSpacePreference; private CardPreference mFreeUpSpacePreference;
/** /**
* Refresh UI for specified storageEntry. * Refresh UI for specified storageEntry.
@@ -145,8 +146,11 @@ public class StorageCategoryFragment extends DashboardFragment
} }
private void initializePreference() { private void initializePreference() {
mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference = (CardPreference) getPreferenceScreen()
.findPreference(FREE_UP_SPACE_PREF_KEY);
mFreeUpSpacePreference.setOnPreferenceClickListener(this); mFreeUpSpacePreference.setOnPreferenceClickListener(this);
mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(),
com.android.internal.R.attr.colorSurface));
} }
@Override @Override

View File

@@ -56,6 +56,7 @@ import com.android.settings.deviceinfo.storage.UserIconLoader;
import com.android.settings.deviceinfo.storage.VolumeSizesLoader; import com.android.settings.deviceinfo.storage.VolumeSizesLoader;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.CardPreference;
import com.android.settings.widget.EntityHeaderController; import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -109,7 +110,7 @@ public class StorageDashboardFragment extends DashboardFragment
private List<AbstractPreferenceController> mSecondaryUsers; private List<AbstractPreferenceController> mSecondaryUsers;
private boolean mIsWorkProfile; private boolean mIsWorkProfile;
private int mUserId; private int mUserId;
private Preference mFreeUpSpacePreference; private CardPreference mFreeUpSpacePreference;
private final StorageEventListener mStorageEventListener = new StorageEventListener() { private final StorageEventListener mStorageEventListener = new StorageEventListener() {
@Override @Override
@@ -281,8 +282,11 @@ public class StorageDashboardFragment extends DashboardFragment
} }
private void initializePreference() { private void initializePreference() {
mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); mFreeUpSpacePreference = (CardPreference) getPreferenceScreen()
.findPreference(FREE_UP_SPACE_PREF_KEY);
mFreeUpSpacePreference.setOnPreferenceClickListener(this); mFreeUpSpacePreference.setOnPreferenceClickListener(this);
mFreeUpSpacePreference.setCardBackgroundColor(Utils.getColorAttrDefaultColor(getContext(),
com.android.internal.R.attr.colorSurface));
} }
@Override @Override

View File

@@ -19,7 +19,9 @@ package com.android.settings.widget;
import android.content.Context; import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import androidx.annotation.ColorInt;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R; 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 * Preference that wrapped by {@link MaterialCardView}, only support to set icon, title and summary
*/ */
public class CardPreference extends Preference { public class CardPreference extends Preference {
private static final @ColorInt int INVALID_COLOR = -1;
private @ColorInt int mCardBackgroundColor = INVALID_COLOR;
public CardPreference(Context context) { public CardPreference(Context context) {
this(context, null /* attrs */); this(context, null /* attrs */);
} }
@@ -36,4 +43,23 @@ public class CardPreference extends Preference {
public CardPreference(Context context, AttributeSet attrs) { public CardPreference(Context context, AttributeSet attrs) {
super(context, attrs, R.attr.cardPreferenceStyle); 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);
}
}
} }

View File

@@ -18,13 +18,26 @@ package com.android.settings.widget;
import static com.google.common.truth.Truth.assertThat; 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.content.Context;
import android.view.View;
import androidx.annotation.ColorInt;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R; import com.android.settings.R;
import com.google.android.material.card.MaterialCardView;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@@ -33,12 +46,20 @@ public class CardPreferenceTest {
private Context mContext; private Context mContext;
private CardPreference mCardPreference; private CardPreference mCardPreference;
@Mock
private PreferenceViewHolder mPreferenceViewHolder;
@Mock
private MaterialCardView mCardView;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mContext.setTheme(R.style.SettingsPreferenceTheme); mContext.setTheme(R.style.SettingsPreferenceTheme);
mCardPreference = new CardPreference(mContext); mCardPreference = new CardPreference(mContext);
mPreferenceViewHolder = spy(PreferenceViewHolder.createInstanceForTests(mock(View.class)));
doReturn(mCardView).when(mPreferenceViewHolder).findViewById(R.id.container);
} }
@Test @Test
@@ -46,4 +67,13 @@ public class CardPreferenceTest {
assertThat(mCardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout); 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);
}
} }