From 974d2fe0809700fe1bfd866c7a7238cac1c1c773 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 27 Oct 2017 15:29:00 -0700 Subject: [PATCH] Update UI to use a smaller icon for ManageApplication page. - Rewrite preference_app.xml to have a small icon - Update ApplicationViewHolder to hide/show summary row dynamically - but only do this for notification settings - this UI has empty summary for most row. For other UI, just keep the empty summary row until summary comes in. If we also hide/show summary row there will be a height change animation which is janky. Bug : 65182905 Fixes: 63582851 Test: robotests Change-Id: Ice67324f08c67e014a018dfc51e00fe4449036dd --- res/layout/app_header.xml | 58 ------------- res/layout/app_item.xml | 81 ------------------- res/layout/data_usage_item.xml | 25 ------ res/layout/preference_app.xml | 67 ++++++++++++++- .../RecentAppsPreferenceController.java | 1 + .../ApplicationViewHolder.java | 38 +++++++-- .../ManageApplications.java | 36 ++++----- .../MusicViewHolderController.java | 5 +- .../PhotosViewHolderController.java | 5 +- .../datausage/AppDataUsagePreference.java | 2 +- .../settings/development/AppViewHolder.java | 13 ++- .../widget/RadioButtonPickerFragment.java | 17 ++++ .../ApplicationViewHolderTest.java | 10 ++- .../ManageApplicationsTest.java | 21 ++++- .../MusicViewHolderControllerTest.java | 6 +- .../PhotosViewHolderControllerTest.java | 6 +- ...agementSwitchPreferenceControllerTest.java | 10 +++ 17 files changed, 178 insertions(+), 223 deletions(-) delete mode 100644 res/layout/app_header.xml delete mode 100644 res/layout/app_item.xml delete mode 100644 res/layout/data_usage_item.xml diff --git a/res/layout/app_header.xml b/res/layout/app_header.xml deleted file mode 100644 index 2d8a099be75..00000000000 --- a/res/layout/app_header.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - diff --git a/res/layout/app_item.xml b/res/layout/app_item.xml deleted file mode 100644 index d53afc965e8..00000000000 --- a/res/layout/app_item.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/res/layout/data_usage_item.xml b/res/layout/data_usage_item.xml deleted file mode 100644 index 5e931f92893..00000000000 --- a/res/layout/data_usage_item.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - diff --git a/res/layout/preference_app.xml b/res/layout/preference_app.xml index 526d5af5031..9ed5c542275 100644 --- a/res/layout/preference_app.xml +++ b/res/layout/preference_app.xml @@ -13,13 +13,74 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - + + + + + + + + + + + + + + diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index b6ae1ee54fc..205fedb1327 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -231,6 +231,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController Preference pref = appPreferences.remove(pkgName); if (pref == null) { pref = new Preference(prefContext); + pref.setLayoutResource(R.layout.preference_app); rebindPref = false; } pref.setKey(pkgName); diff --git a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java index 9ac2167bfcb..e968b1c38ab 100644 --- a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java +++ b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java @@ -22,6 +22,7 @@ import android.graphics.drawable.Drawable; import android.support.annotation.StringRes; import android.support.annotation.VisibleForTesting; import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -38,33 +39,39 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder { private final TextView mAppName; private final ImageView mAppIcon; + private final boolean mKeepStableHeight; + + @VisibleForTesting + View mSummaryContainer; @VisibleForTesting final TextView mSummary; @VisibleForTesting final TextView mDisabled; - ApplicationViewHolder(View itemView) { + + ApplicationViewHolder(View itemView, boolean keepStableHeight) { super(itemView); mAppName = itemView.findViewById(android.R.id.title); mAppIcon = itemView.findViewById(android.R.id.icon); - mSummary = itemView.findViewById(R.id.widget_text1); - mDisabled = itemView.findViewById(R.id.widget_text2); + mSummaryContainer = itemView.findViewById(R.id.summary_container); + mSummary = itemView.findViewById(android.R.id.summary); + mDisabled = itemView.findViewById(R.id.appendix); + mKeepStableHeight = keepStableHeight; } - static View newView(LayoutInflater inflater, ViewGroup parent) { - final View root = LayoutInflater.from(parent.getContext()) + static View newView(ViewGroup parent) { + return LayoutInflater.from(parent.getContext()) .inflate(R.layout.preference_app, parent, false); - inflater.inflate(R.layout.widget_text_views, - root.findViewById(android.R.id.widget_frame)); - return root; } void setSummary(CharSequence summary) { mSummary.setText(summary); + updateSummaryContainer(); } void setSummary(@StringRes int summary) { mSummary.setText(summary); + updateSummaryContainer(); } void setEnabled(boolean isEnabled) { @@ -78,6 +85,10 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder { mAppName.setText(title); } + void setIcon(int drawableRes) { + mAppIcon.setImageResource(drawableRes); + } + void setIcon(Drawable icon) { if (icon == null) { return; @@ -96,6 +107,17 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder { } else { mDisabled.setVisibility(View.GONE); } + updateSummaryContainer(); + } + + void updateSummaryContainer() { + if (mKeepStableHeight) { + mSummaryContainer.setVisibility(View.VISIBLE); + return; + } + final boolean hasContent = + !TextUtils.isEmpty(mDisabled.getText()) || !TextUtils.isEmpty(mSummary.getText()); + mSummaryContainer.setVisibility(hasContent ? View.VISIBLE : View.GONE); } void updateSizeText(AppEntry entry, CharSequence invalidSizeStr, int whichSize) { diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 33762e4e480..7dc8951ac07 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -412,20 +412,6 @@ public class ManageApplications extends InstrumentedPreferenceFragment return null; } - private boolean isFastScrollEnabled() { - switch (mListType) { - case LIST_TYPE_MAIN: - case LIST_TYPE_NOTIFICATION: - case LIST_TYPE_STORAGE: - case LIST_TYPE_GAMES: - case LIST_TYPE_MOVIES: - case LIST_TYPE_PHOTOGRAPHY: - return mSortOrder == R.id.sort_order_alpha; - default: - return false; - } - } - @Override public int getMetricsCategory() { switch (mListType) { @@ -924,9 +910,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment @Override public ApplicationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - final View view = ApplicationViewHolder.newView( - LayoutInflater.from(parent.getContext()), parent); - return new ApplicationViewHolder(view); + final View view = ApplicationViewHolder.newView(parent); + return new ApplicationViewHolder(view, + shouldUseStableItemHeight(mManageApplications.mListType)); } @Override @@ -994,7 +980,21 @@ public class ManageApplications extends InstrumentedPreferenceFragment }); } - static private boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) { + @VisibleForTesting + static boolean shouldUseStableItemHeight(int listType) { + switch (listType) { + case LIST_TYPE_NOTIFICATION: + // Most entries in notification type has no summary. Don't use stable height + // so height is short for most entries. + return false; + default: + // Other types have non-empty summary, so keep the height as we expect summary + // to fill in. + return true; + } + } + + private static boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) { if (info1 == null || info2 == null) { return false; } diff --git a/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java b/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java index 2a2ac3b85e1..14d08aac936 100644 --- a/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java +++ b/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java @@ -19,7 +19,6 @@ package com.android.settings.applications.manageapplications; import android.app.Fragment; import android.content.Context; import android.content.Intent; -import android.graphics.drawable.InsetDrawable; import android.os.UserHandle; import android.provider.DocumentsContract; import android.support.annotation.WorkerThread; @@ -39,7 +38,6 @@ public class MusicViewHolderController implements FileViewHolderController { private static final String TAG = "MusicViewHolderCtrl"; private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents"; - private static final int INSET_SIZE = 24; // dp private Context mContext; private StorageStatsSource mSource; @@ -73,8 +71,7 @@ public class MusicViewHolderController implements FileViewHolderController { @Override public void setupView(ApplicationViewHolder holder) { - holder.setIcon( - new InsetDrawable(mContext.getDrawable(R.drawable.ic_headset_24dp), INSET_SIZE)); + holder.setIcon(R.drawable.ic_headset_24dp); holder.setTitle(mContext.getText(R.string.audio_files_title)); holder.setSummary(Formatter.formatFileSize(mContext, mMusicSize)); } diff --git a/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java b/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java index fafa875a31c..73330e987f7 100644 --- a/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java +++ b/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java @@ -19,7 +19,6 @@ package com.android.settings.applications.manageapplications; import android.app.Fragment; import android.content.Context; import android.content.Intent; -import android.graphics.drawable.InsetDrawable; import android.os.UserHandle; import android.support.annotation.WorkerThread; import android.text.format.Formatter; @@ -36,7 +35,6 @@ public class PhotosViewHolderController implements FileViewHolderController { private static final String TAG = "PhotosViewHolderCtrl"; private static final String IMAGE_MIME_TYPE = "image/*"; - private static final int INSET_SIZE = 24; // dp private Context mContext; private StorageStatsSource mSource; @@ -72,8 +70,7 @@ public class PhotosViewHolderController implements FileViewHolderController { @Override public void setupView(ApplicationViewHolder holder) { - holder.setIcon( - new InsetDrawable(mContext.getDrawable(R.drawable.ic_photo_library), INSET_SIZE)); + holder.setIcon(R.drawable.ic_photo_library); holder.setTitle(mContext.getText(R.string.storage_detail_images)); holder.setSummary(Formatter.formatFileSize(mContext, mFilesSize)); } diff --git a/src/com/android/settings/datausage/AppDataUsagePreference.java b/src/com/android/settings/datausage/AppDataUsagePreference.java index 35f1fe2f2fa..14b057d4dfe 100644 --- a/src/com/android/settings/datausage/AppDataUsagePreference.java +++ b/src/com/android/settings/datausage/AppDataUsagePreference.java @@ -38,7 +38,7 @@ public class AppDataUsagePreference extends Preference { super(context); mItem = item; mPercent = percent; - setLayoutResource(R.layout.data_usage_item); + setLayoutResource(R.layout.preference_app); setWidgetLayoutResource(R.layout.widget_progress_bar); if (item.restricted && item.total <= 0) { diff --git a/src/com/android/settings/development/AppViewHolder.java b/src/com/android/settings/development/AppViewHolder.java index 7a90bcf153c..1082efe38ce 100644 --- a/src/com/android/settings/development/AppViewHolder.java +++ b/src/com/android/settings/development/AppViewHolder.java @@ -18,7 +18,6 @@ package com.android.settings.development; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; @@ -37,23 +36,21 @@ public class AppViewHolder { static public AppViewHolder createOrRecycle(LayoutInflater inflater, View convertView) { if (convertView == null) { convertView = inflater.inflate(R.layout.preference_app, null); - inflater.inflate(R.layout.widget_text_views, - (ViewGroup) convertView.findViewById(android.R.id.widget_frame)); // Creates a ViewHolder and store references to the two children views // we want to bind data to. AppViewHolder holder = new AppViewHolder(); holder.rootView = convertView; - holder.appName = (TextView) convertView.findViewById(android.R.id.title); - holder.appIcon = (ImageView) convertView.findViewById(android.R.id.icon); - holder.summary = (TextView) convertView.findViewById(R.id.widget_text1); - holder.disabled = (TextView) convertView.findViewById(R.id.widget_text2); + holder.appName = convertView.findViewById(android.R.id.title); + holder.appIcon = convertView.findViewById(android.R.id.icon); + holder.summary = convertView.findViewById(android.R.id.summary); + holder.disabled = convertView.findViewById(R.id.appendix); convertView.setTag(holder); return holder; } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. - return (AppViewHolder)convertView.getTag(); + return (AppViewHolder) convertView.getTag(); } } } \ No newline at end of file diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java index e44634063a7..53bb7d99966 100644 --- a/src/com/android/settings/widget/RadioButtonPickerFragment.java +++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java @@ -22,6 +22,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; +import android.support.annotation.XmlRes; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; @@ -133,8 +134,13 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr final String systemDefaultKey = getSystemDefaultKey(); final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); + + final int customLayoutResId = getRadioButtomPreferenceCustomLayoutResId(); if (shouldShowItemNone()) { final RadioButtonPreference nonePref = new RadioButtonPreference(getPrefContext()); + if (customLayoutResId > 0) { + nonePref.setLayoutResource(customLayoutResId); + } nonePref.setIcon(R.drawable.ic_remove_circle); nonePref.setTitle(R.string.app_list_preference_none); nonePref.setChecked(TextUtils.isEmpty(defaultKey)); @@ -144,6 +150,9 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr if (candidateList != null) { for (CandidateInfo info : candidateList) { RadioButtonPreference pref = new RadioButtonPreference(getPrefContext()); + if (customLayoutResId > 0) { + pref.setLayoutResource(customLayoutResId); + } bindPreference(pref, info.getKey(), info, defaultKey); bindPreferenceExtra(pref, info.getKey(), info, defaultKey, systemDefaultKey); screen.addPreference(pref); @@ -206,6 +215,14 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr return null; } + /** + * Provides a custom layout for each candidate row. + */ + @XmlRes + protected int getRadioButtomPreferenceCustomLayoutResId() { + return 0; + } + public static abstract class CandidateInfo { public final boolean enabled; diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java index cf2403b5b3d..c32b262719d 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java @@ -22,7 +22,6 @@ import static org.mockito.Mockito.mock; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -48,9 +47,8 @@ public class ApplicationViewHolderTest { @Before public void seUp() { mContext = RuntimeEnvironment.application; - mView = ApplicationViewHolder.newView(LayoutInflater.from(mContext), - new FrameLayout(mContext)); - mHolder = new ApplicationViewHolder(mView); + mView = ApplicationViewHolder.newView(new FrameLayout(mContext)); + mHolder = new ApplicationViewHolder(mView, false /* useStableHeight */); } @Test @@ -71,6 +69,10 @@ public class ApplicationViewHolderTest { mHolder.setSummary(R.string.disabled); assertThat(mHolder.mSummary.getText()).isEqualTo(mContext.getText(R.string.disabled)); + assertThat(mHolder.mSummaryContainer.getVisibility()).isEqualTo(View.VISIBLE); + + mHolder.setSummary(null); + assertThat(mHolder.mSummaryContainer.getVisibility()).isEqualTo(View.GONE); } @Test diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java index 9eb36ef8d30..a0b014693c4 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java @@ -18,6 +18,10 @@ package com.android.settings.applications.manageapplications; import static com.android.settings.applications.manageapplications.AppFilterRegistry .FILTER_APPS_ALL; +import static com.android.settings.applications.manageapplications.ManageApplications + .LIST_TYPE_MAIN; +import static com.android.settings.applications.manageapplications.ManageApplications + .LIST_TYPE_NOTIFICATION; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; @@ -102,7 +106,7 @@ public class ManageApplicationsTest { @Test public void updateMenu_mainListType_showAppReset() { setUpOptionMenus(); - ReflectionHelpers.setField(mFragment, "mListType", ManageApplications.LIST_TYPE_MAIN); + ReflectionHelpers.setField(mFragment, "mListType", LIST_TYPE_MAIN); ReflectionHelpers.setField(mFragment, "mOptionsMenu", mMenu); mFragment.updateOptionsMenu(); @@ -182,6 +186,21 @@ public class ManageApplicationsTest { verify(loadingViewController).showLoadingViewDelayed(); } + @Test + public void shouldUseStableItemHeight_mainType_yes() { + assertThat(ManageApplications.ApplicationsAdapter.shouldUseStableItemHeight( + LIST_TYPE_MAIN)) + .isTrue(); + assertThat(ManageApplications.ApplicationsAdapter.shouldUseStableItemHeight( + LIST_TYPE_NOTIFICATION)) + .isFalse(); + } + + @Test + public void shouldUseStableItemHeight_notificationType_no() { + + } + @Test public void onRebuildComplete_shouldHideLoadingView() { final Context context = RuntimeEnvironment.application; diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java index 28ac9d97094..fc761ccb253 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java @@ -27,7 +27,6 @@ import android.content.Intent; import android.os.UserHandle; import android.os.storage.VolumeInfo; import android.provider.DocumentsContract; -import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -68,9 +67,8 @@ public class MusicViewHolderControllerTest { mController = new MusicViewHolderController(mContext, mSource, mVolume.fsUuid, new UserHandle(0)); - LayoutInflater inflater = LayoutInflater.from(mContext); - mView = ApplicationViewHolder.newView(inflater, new FrameLayout(mContext)); - mHolder = new ApplicationViewHolder(mView); + mView = ApplicationViewHolder.newView(new FrameLayout(mContext)); + mHolder = new ApplicationViewHolder(mView, false /* useStableHeight */); } @Test diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java index 2a26e312557..0a147ac32fd 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java @@ -26,7 +26,6 @@ import android.content.Context; import android.content.Intent; import android.os.UserHandle; import android.os.storage.VolumeInfo; -import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -67,9 +66,8 @@ public class PhotosViewHolderControllerTest { new PhotosViewHolderController( mContext, mSource, mVolume.fsUuid, new UserHandle(0)); - final LayoutInflater inflater = LayoutInflater.from(mContext); - mView = ApplicationViewHolder.newView(inflater, new FrameLayout(mContext)); - mHolder = new ApplicationViewHolder(mView); + mView = ApplicationViewHolder.newView(new FrameLayout(mContext)); + mHolder = new ApplicationViewHolder(mView, false /* useStableHeight */); } @Test diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceControllerTest.java index b737d1f6341..7d47fc26c33 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceControllerTest.java @@ -32,6 +32,7 @@ import android.content.Context; import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.TestConfig; import com.android.settings.core.instrumentation.MetricsFeatureProvider; @@ -41,6 +42,8 @@ import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; import com.android.settings.widget.MasterSwitchPreference; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -83,6 +86,10 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest { mContext, mMetricsFeature, mFragmentManager); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); } + @After + public void tearDown() { + SettingsShadowSystemProperties.clear(); + } @Test public void isAvailable_shouldReturnTrue_forHighRamDevice() { @@ -146,6 +153,9 @@ public class AutomaticStorageManagementSwitchPreferenceControllerTest { public void togglingOnShouldTriggerWarningFragment() { FragmentTransaction transaction = mock(FragmentTransaction.class); when (mFragmentManager.beginTransaction()).thenReturn(transaction); + SettingsShadowSystemProperties.set( + AutomaticStorageManagementSwitchPreferenceController + .STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY, "false"); mController.onSwitchToggled(true);