diff --git a/res/drawable/ic_files_go_round.xml b/res/drawable/ic_files_go_round.xml deleted file mode 100644 index 2025b000ea8..00000000000 --- a/res/drawable/ic_files_go_round.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/layout/card_preference.xml b/res/layout/card_preference.xml new file mode 100644 index 00000000000..be49ca3d41d --- /dev/null +++ b/res/layout/card_preference.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/card_preference_icon_frame.xml b/res/layout/card_preference_icon_frame.xml new file mode 100644 index 00000000000..c8003effb7d --- /dev/null +++ b/res/layout/card_preference_icon_frame.xml @@ -0,0 +1,38 @@ + + + + + + + \ No newline at end of file diff --git a/res/layout/card_preference_layout.xml b/res/layout/card_preference_layout.xml index 5ac4afc1035..83736370ac9 100644 --- a/res/layout/card_preference_layout.xml +++ b/res/layout/card_preference_layout.xml @@ -29,5 +29,5 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="-8dp" - layout="@layout/settingslib_preference"/> + layout="@layout/card_preference"/> diff --git a/res/xml/storage_category_fragment.xml b/res/xml/storage_category_fragment.xml index 08f3f272f87..973183614c4 100644 --- a/res/xml/storage_category_fragment.xml +++ b/res/xml/storage_category_fragment.xml @@ -24,7 +24,7 @@ android:order="4" android:title="@string/storage_free_up_space_title" android:summary="@string/storage_free_up_space_summary" - android:icon="@drawable/ic_files_go_round"/> + settings:controller="com.android.settings.deviceinfo.storage.ManageStoragePreferenceController"/> + settings:controller="com.android.settings.deviceinfo.storage.ManageStoragePreferenceController"/> >, - Preference.OnPreferenceClickListener { + LoaderManager.LoaderCallbacks> { private static final String TAG = "StorageCategoryFrag"; private static final String SELECTED_STORAGE_ENTRY_KEY = "selected_storage_entry_key"; private static final String SUMMARY_PREF_KEY = "storage_summary"; - private static final String FREE_UP_SPACE_PREF_KEY = "free_up_space"; private static final int STORAGE_JOB_ID = 0; private static final int ICON_JOB_ID = 1; private static final int VOLUME_SIZE_JOB_ID = 2; @@ -90,7 +84,6 @@ public class StorageCategoryFragment extends DashboardFragment private List mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private Preference mFreeUpSpacePreference; private boolean mIsLoadedFromCache; private StorageCacheHelper mStorageCacheHelper; @@ -152,8 +145,6 @@ public class StorageCategoryFragment extends DashboardFragment mSelectedStorageEntry = icicle.getParcelable(SELECTED_STORAGE_ENTRY_KEY); } - initializePreference(); - if (mStorageCacheHelper.hasCachedSizeInfo()) { mIsLoadedFromCache = true; if (mSelectedStorageEntry != null) { @@ -164,11 +155,6 @@ public class StorageCategoryFragment extends DashboardFragment } } - private void initializePreference() { - mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); - mFreeUpSpacePreference.setOnPreferenceClickListener(this); - } - @Override public void onAttach(Context context) { // These member variables are initialized befoer super.onAttach for @@ -180,6 +166,10 @@ public class StorageCategoryFragment extends DashboardFragment mStorageCacheHelper = new StorageCacheHelper(getContext(), mUserId); super.onAttach(context); + + ManageStoragePreferenceController manageStoragePreferenceController = + use(ManageStoragePreferenceController.class); + manageStoragePreferenceController.setUserId(mUserId); } @Override @@ -305,22 +295,6 @@ public class StorageCategoryFragment extends DashboardFragment public void onLoaderReset(Loader> loader) { } - @Override - public boolean onPreferenceClick(Preference preference) { - if (preference == mFreeUpSpacePreference) { - final Context context = getContext(); - final MetricsFeatureProvider metricsFeatureProvider = - FeatureFactory.getFactory(context).getMetricsFeatureProvider(); - metricsFeatureProvider.logClickedPreference(preference, getMetricsCategory()); - metricsFeatureProvider.action(context, SettingsEnums.STORAGE_FREE_UP_SPACE_NOW); - final Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivityAsUser(intent, new UserHandle(mUserId)); - return true; - } - return false; - } - @VisibleForTesting public PrivateStorageInfo getPrivateStorageInfo() { return mStorageInfo; diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index cf31724ad69..07ac4e53021 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -20,7 +20,6 @@ import android.app.Activity; import android.app.settings.SettingsEnums; import android.app.usage.StorageStatsManager; import android.content.Context; -import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; @@ -38,13 +37,13 @@ import android.view.View; import androidx.annotation.VisibleForTesting; import androidx.loader.app.LoaderManager; import androidx.loader.content.Loader; -import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.deviceinfo.storage.AutomaticStorageManagementSwitchPreferenceController; import com.android.settings.deviceinfo.storage.DiskInitFragment; +import com.android.settings.deviceinfo.storage.ManageStoragePreferenceController; import com.android.settings.deviceinfo.storage.SecondaryUserController; import com.android.settings.deviceinfo.storage.StorageAsyncLoader; import com.android.settings.deviceinfo.storage.StorageCacheHelper; @@ -55,11 +54,9 @@ import com.android.settings.deviceinfo.storage.StorageUsageProgressBarPreference import com.android.settings.deviceinfo.storage.StorageUtils; 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.settingslib.applications.StorageStatsSource; import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.deviceinfo.PrivateStorageInfo; import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider; import com.android.settingslib.search.SearchIndexable; @@ -85,11 +82,9 @@ import java.util.Optional; @SearchIndexable public class StorageDashboardFragment extends DashboardFragment implements - LoaderManager.LoaderCallbacks>, - Preference.OnPreferenceClickListener { + LoaderManager.LoaderCallbacks> { private static final String TAG = "StorageDashboardFrag"; private static final String SUMMARY_PREF_KEY = "storage_summary"; - private static final String FREE_UP_SPACE_PREF_KEY = "free_up_space"; private static final String SELECTED_STORAGE_ENTRY_KEY = "selected_storage_entry_key"; private static final int STORAGE_JOB_ID = 0; private static final int ICON_JOB_ID = 1; @@ -109,7 +104,6 @@ public class StorageDashboardFragment extends DashboardFragment private List mSecondaryUsers; private boolean mIsWorkProfile; private int mUserId; - private Preference mFreeUpSpacePreference; private boolean mIsLoadedFromCache; private StorageCacheHelper mStorageCacheHelper; @@ -290,7 +284,6 @@ public class StorageDashboardFragment extends DashboardFragment mSelectedStorageEntry = icicle.getParcelable(SELECTED_STORAGE_ENTRY_KEY); } - initializePreference(); initializeOptionsMenu(activity); if (mStorageCacheHelper.hasCachedSizeInfo()) { @@ -304,11 +297,6 @@ public class StorageDashboardFragment extends DashboardFragment } } - private void initializePreference() { - mFreeUpSpacePreference = getPreferenceScreen().findPreference(FREE_UP_SPACE_PREF_KEY); - mFreeUpSpacePreference.setOnPreferenceClickListener(this); - } - @Override public void onAttach(Context context) { // These member variables are initialized befoer super.onAttach for @@ -334,6 +322,10 @@ public class StorageDashboardFragment extends DashboardFragment } }); mStorageUsageProgressBarController = use(StorageUsageProgressBarPreferenceController.class); + + ManageStoragePreferenceController manageStoragePreferenceController = + use(ManageStoragePreferenceController.class); + manageStoragePreferenceController.setUserId(mUserId); } @VisibleForTesting @@ -505,22 +497,6 @@ public class StorageDashboardFragment extends DashboardFragment public void onLoaderReset(Loader> loader) { } - @Override - public boolean onPreferenceClick(Preference preference) { - if (preference == mFreeUpSpacePreference) { - final Context context = getContext(); - final MetricsFeatureProvider metricsFeatureProvider = - FeatureFactory.getFactory(context).getMetricsFeatureProvider(); - metricsFeatureProvider.logClickedPreference(preference, getMetricsCategory()); - metricsFeatureProvider.action(context, SettingsEnums.STORAGE_FREE_UP_SPACE_NOW); - final Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivityAsUser(intent, new UserHandle(mUserId)); - return true; - } - return false; - } - @VisibleForTesting public PrivateStorageInfo getPrivateStorageInfo() { return mStorageInfo; diff --git a/src/com/android/settings/deviceinfo/storage/ManageStoragePreferenceController.java b/src/com/android/settings/deviceinfo/storage/ManageStoragePreferenceController.java new file mode 100644 index 00000000000..1a60cb83265 --- /dev/null +++ b/src/com/android/settings/deviceinfo/storage/ManageStoragePreferenceController.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2022 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. + */ + +package com.android.settings.deviceinfo.storage; + +import android.app.settings.SettingsEnums; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.UserHandle; +import android.os.storage.StorageManager; + +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; + +import com.android.settings.core.BasePreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; + +/** + * Preference controller to control the storage management preference. + */ +public class ManageStoragePreferenceController extends BasePreferenceController { + + private int mUserId; + private Drawable mManageStorageDrawable; + + public ManageStoragePreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + /** + * Set user ID. + */ + public void setUserId(int userId) { + mUserId = userId; + mManageStorageDrawable = StorageUtils.getManageStorageIcon(mContext, userId); + } + + @Override + public int getAvailabilityStatus() { + return mManageStorageDrawable == null ? CONDITIONALLY_UNAVAILABLE : AVAILABLE; + } + + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + + Preference preference = screen.findPreference(getPreferenceKey()); + preference.setIcon(mManageStorageDrawable); + } + + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + final MetricsFeatureProvider metricsFeatureProvider = + FeatureFactory.getFactory(mContext).getMetricsFeatureProvider(); + metricsFeatureProvider.action(mContext, SettingsEnums.STORAGE_FREE_UP_SPACE_NOW); + + final Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivityAsUser(intent, new UserHandle(mUserId)); + return true; + } +} diff --git a/src/com/android/settings/deviceinfo/storage/StorageUtils.java b/src/com/android/settings/deviceinfo/storage/StorageUtils.java index 0820712a234..4b6a2c40fd8 100644 --- a/src/com/android/settings/deviceinfo/storage/StorageUtils.java +++ b/src/com/android/settings/deviceinfo/storage/StorageUtils.java @@ -19,6 +19,9 @@ package com.android.settings.deviceinfo.storage; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; +import android.content.Intent; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; @@ -35,6 +38,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.deviceinfo.PrivateVolumeForget; @@ -231,4 +235,15 @@ public class StorageUtils { bytes, Formatter.FLAG_SHORTER); return context.getString(resId, result.value, result.units); } + + /** Gets icon for Preference of Free up space. */ + public static Drawable getManageStorageIcon(Context context, int userId) { + ResolveInfo resolveInfo = context.getPackageManager().resolveActivityAsUser( + new Intent(StorageManager.ACTION_MANAGE_STORAGE), 0 /* flags */, userId); + if (resolveInfo == null || resolveInfo.activityInfo == null) { + return null; + } + + return Utils.getBadgedIcon(context, resolveInfo.activityInfo.applicationInfo); + } }