Loading res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -6462,4 +6462,7 @@ <!-- Label of default app for current setting [CHAR LIMIT=40] --> <string name="default_app">(Default)</string> <!-- Title of app storage screen [CHAR LIMIT=30] --> <string name="apps_storage">Apps storage</string> </resources> src/com/android/settings/InstrumentedFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public abstract class InstrumentedFragment extends PreferenceFragment { public static final int VIEW_CATEGORY_UNDECLARED = 100000; public static final int VIEW_CATEGORY_DEFAULT_APPS = VIEW_CATEGORY_UNDECLARED + 1; public static final int VIEW_CATEGORY_STORAGE_APPS = VIEW_CATEGORY_UNDECLARED + 2; /** * Declare the view of this category. Loading src/com/android/settings/applications/ApplicationsState.java +18 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; /** Loading Loading @@ -335,6 +336,23 @@ public class ApplicationsState { } }; public static class VolumeFilter implements AppFilter { private final String mVolumeUuid; public VolumeFilter(String volumeUuid) { mVolumeUuid = volumeUuid; } @Override public void init() { } @Override public boolean filterApp(AppEntry info) { return Objects.equals(info.info.volumeUuid, mVolumeUuid); } } public static class CompoundFilter implements AppFilter { private final AppFilter mFirstFilter; private final AppFilter mSecondFilter; Loading src/com/android/settings/applications/ManageApplications.java +45 −3 Original line number Diff line number Diff line Loading @@ -50,17 +50,20 @@ import android.widget.ListView; import android.widget.Spinner; import com.android.internal.logging.MetricsLogger; import com.android.settings.AppHeader; import com.android.settings.HelpUtils; import com.android.settings.InstrumentedFragment; import com.android.settings.R; import com.android.settings.Settings.AllApplicationsActivity; import com.android.settings.Settings.DomainsURLsAppListActivity; import com.android.settings.Settings.NotificationAppListActivity; import com.android.settings.Settings.StorageUseActivity; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.ApplicationsState.AppEntry; import com.android.settings.applications.ApplicationsState.AppFilter; import com.android.settings.applications.ApplicationsState.CompoundFilter; import com.android.settings.applications.ApplicationsState.VolumeFilter; import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend.AppRow; Loading @@ -81,6 +84,12 @@ public class ManageApplications extends InstrumentedFragment static final String TAG = "ManageApplications"; static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); // Intent extras. public static final String EXTRA_CLASSNAME = "classname"; // Used for storage only. public static final String EXTRA_VOLUME_UUID = "volumeUuid"; public static final String EXTRA_VOLUME_NAME = "volumeName"; private static final String EXTRA_SORT_ORDER = "sortOrder"; // attributes used as keys when passing values to InstalledAppDetails activity Loading Loading @@ -180,6 +189,7 @@ public class ManageApplications extends InstrumentedFragment public static final int LIST_TYPE_MAIN = 0; public static final int LIST_TYPE_NOTIFICATION = 1; public static final int LIST_TYPE_DOMAINS_URLS = 2; public static final int LIST_TYPE_STORAGE = 3; private View mRootView; Loading @@ -188,6 +198,8 @@ public class ManageApplications extends InstrumentedFragment private FilterSpinnerAdapter mFilterAdapter; private NotificationBackend mNotifBackend; private ResetAppsHelper mResetAppsHelper; private String mVolumeUuid; private String mVolumeName; @Override public void onCreate(Bundle savedInstanceState) { Loading @@ -196,8 +208,8 @@ public class ManageApplications extends InstrumentedFragment mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication()); Intent intent = getActivity().getIntent(); String className = getArguments() != null ? getArguments().getString("classname") : null; Bundle args = getArguments(); String className = args != null ? args.getString(EXTRA_CLASSNAME) : null; if (className == null) { className = intent.getComponent().getClassName(); } Loading @@ -208,6 +220,16 @@ public class ManageApplications extends InstrumentedFragment mNotifBackend = new NotificationBackend(); } else if (className.equals(DomainsURLsAppListActivity.class.getName())) { mListType = LIST_TYPE_DOMAINS_URLS; } else if (className.equals(StorageUseActivity.class.getName())) { if (args != null && args.containsKey(EXTRA_VOLUME_UUID)) { mVolumeUuid = args.getString(EXTRA_VOLUME_UUID); mVolumeName = args.getString(EXTRA_VOLUME_NAME); mListType = LIST_TYPE_STORAGE; } else { // No volume selected, display a normal list, sorted by size. mListType = LIST_TYPE_MAIN; mSortOrder = R.id.sort_order_size; } } else { mListType = LIST_TYPE_MAIN; } Loading Loading @@ -278,7 +300,7 @@ public class ManageApplications extends InstrumentedFragment contentParent.addView(mSpinnerHeader, 0); mFilterAdapter.enableFilter(getDefaultFilter()); if (mListType != LIST_TYPE_MAIN) { if (mListType != LIST_TYPE_STORAGE) { if (UserManager.get(getActivity()).getUserProfiles().size() > 1) { mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL); mFilterAdapter.enableFilter(FILTER_APPS_WORK); Loading @@ -290,6 +312,15 @@ public class ManageApplications extends InstrumentedFragment mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY); mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE); } mApplications.setOverrideFilter(new VolumeFilter(mVolumeUuid)); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (mListType == LIST_TYPE_STORAGE) { AppHeader.createAppHeader(getActivity(), null, mVolumeName, null); } } private int getDefaultFilter() { Loading @@ -312,6 +343,8 @@ public class ManageApplications extends InstrumentedFragment return MetricsLogger.MANAGE_APPLICATIONS_NOTIFICATIONS; case LIST_TYPE_DOMAINS_URLS: return MetricsLogger.MANAGE_DOMAIN_URLS; case LIST_TYPE_STORAGE: return InstrumentedFragment.VIEW_CATEGORY_STORAGE_APPS; default: return MetricsLogger.VIEW_UNKNOWN; } Loading Loading @@ -634,6 +667,7 @@ public class ManageApplications extends InstrumentedFragment private int mWhichSize = SIZE_TOTAL; CharSequence mCurFilterPrefix; private PackageManager mPm; private AppFilter mOverrideFilter; private Filter mFilter = new Filter() { @Override Loading Loading @@ -672,6 +706,11 @@ public class ManageApplications extends InstrumentedFragment } } public void setOverrideFilter(AppFilter overrideFilter) { mOverrideFilter = overrideFilter; rebuild(true); } public void setFilter(int filter) { mFilterMode = filter; rebuild(true); Loading Loading @@ -728,6 +767,9 @@ public class ManageApplications extends InstrumentedFragment mWhichSize = SIZE_INTERNAL; } filterObj = FILTERS[mFilterMode]; if (mOverrideFilter != null) { filterObj = mOverrideFilter; } switch (mLastSortMode) { case R.id.sort_order_size: switch (mWhichSize) { Loading src/com/android/settings/deviceinfo/PrivateVolumeSettings.java +10 −3 Original line number Diff line number Diff line Loading @@ -55,6 +55,9 @@ import com.android.internal.util.Preconditions; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.Settings.StorageUseActivity; import com.android.settings.applications.ManageApplications; import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails; import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver; import com.android.settings.deviceinfo.StorageSettings.MountTask; Loading Loading @@ -323,9 +326,13 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { Intent intent = null; if (pref == mApps) { intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE); intent.setClass(getActivity(), Settings.ManageApplicationsActivity.class); Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, StorageUseActivity.class.getName()); args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid()); args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription()); intent = Utils.onBuildStartFragmentIntent(getActivity(), ManageApplications.class.getName(), args, null, R.string.apps_storage, null, false); } else if (pref == mDownloads) { intent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS).putExtra( DownloadManager.INTENT_EXTRAS_SORT_BY_SIZE, true); Loading Loading
res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -6462,4 +6462,7 @@ <!-- Label of default app for current setting [CHAR LIMIT=40] --> <string name="default_app">(Default)</string> <!-- Title of app storage screen [CHAR LIMIT=30] --> <string name="apps_storage">Apps storage</string> </resources>
src/com/android/settings/InstrumentedFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public abstract class InstrumentedFragment extends PreferenceFragment { public static final int VIEW_CATEGORY_UNDECLARED = 100000; public static final int VIEW_CATEGORY_DEFAULT_APPS = VIEW_CATEGORY_UNDECLARED + 1; public static final int VIEW_CATEGORY_STORAGE_APPS = VIEW_CATEGORY_UNDECLARED + 2; /** * Declare the view of this category. Loading
src/com/android/settings/applications/ApplicationsState.java +18 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; /** Loading Loading @@ -335,6 +336,23 @@ public class ApplicationsState { } }; public static class VolumeFilter implements AppFilter { private final String mVolumeUuid; public VolumeFilter(String volumeUuid) { mVolumeUuid = volumeUuid; } @Override public void init() { } @Override public boolean filterApp(AppEntry info) { return Objects.equals(info.info.volumeUuid, mVolumeUuid); } } public static class CompoundFilter implements AppFilter { private final AppFilter mFirstFilter; private final AppFilter mSecondFilter; Loading
src/com/android/settings/applications/ManageApplications.java +45 −3 Original line number Diff line number Diff line Loading @@ -50,17 +50,20 @@ import android.widget.ListView; import android.widget.Spinner; import com.android.internal.logging.MetricsLogger; import com.android.settings.AppHeader; import com.android.settings.HelpUtils; import com.android.settings.InstrumentedFragment; import com.android.settings.R; import com.android.settings.Settings.AllApplicationsActivity; import com.android.settings.Settings.DomainsURLsAppListActivity; import com.android.settings.Settings.NotificationAppListActivity; import com.android.settings.Settings.StorageUseActivity; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.ApplicationsState.AppEntry; import com.android.settings.applications.ApplicationsState.AppFilter; import com.android.settings.applications.ApplicationsState.CompoundFilter; import com.android.settings.applications.ApplicationsState.VolumeFilter; import com.android.settings.notification.NotificationBackend; import com.android.settings.notification.NotificationBackend.AppRow; Loading @@ -81,6 +84,12 @@ public class ManageApplications extends InstrumentedFragment static final String TAG = "ManageApplications"; static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); // Intent extras. public static final String EXTRA_CLASSNAME = "classname"; // Used for storage only. public static final String EXTRA_VOLUME_UUID = "volumeUuid"; public static final String EXTRA_VOLUME_NAME = "volumeName"; private static final String EXTRA_SORT_ORDER = "sortOrder"; // attributes used as keys when passing values to InstalledAppDetails activity Loading Loading @@ -180,6 +189,7 @@ public class ManageApplications extends InstrumentedFragment public static final int LIST_TYPE_MAIN = 0; public static final int LIST_TYPE_NOTIFICATION = 1; public static final int LIST_TYPE_DOMAINS_URLS = 2; public static final int LIST_TYPE_STORAGE = 3; private View mRootView; Loading @@ -188,6 +198,8 @@ public class ManageApplications extends InstrumentedFragment private FilterSpinnerAdapter mFilterAdapter; private NotificationBackend mNotifBackend; private ResetAppsHelper mResetAppsHelper; private String mVolumeUuid; private String mVolumeName; @Override public void onCreate(Bundle savedInstanceState) { Loading @@ -196,8 +208,8 @@ public class ManageApplications extends InstrumentedFragment mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication()); Intent intent = getActivity().getIntent(); String className = getArguments() != null ? getArguments().getString("classname") : null; Bundle args = getArguments(); String className = args != null ? args.getString(EXTRA_CLASSNAME) : null; if (className == null) { className = intent.getComponent().getClassName(); } Loading @@ -208,6 +220,16 @@ public class ManageApplications extends InstrumentedFragment mNotifBackend = new NotificationBackend(); } else if (className.equals(DomainsURLsAppListActivity.class.getName())) { mListType = LIST_TYPE_DOMAINS_URLS; } else if (className.equals(StorageUseActivity.class.getName())) { if (args != null && args.containsKey(EXTRA_VOLUME_UUID)) { mVolumeUuid = args.getString(EXTRA_VOLUME_UUID); mVolumeName = args.getString(EXTRA_VOLUME_NAME); mListType = LIST_TYPE_STORAGE; } else { // No volume selected, display a normal list, sorted by size. mListType = LIST_TYPE_MAIN; mSortOrder = R.id.sort_order_size; } } else { mListType = LIST_TYPE_MAIN; } Loading Loading @@ -278,7 +300,7 @@ public class ManageApplications extends InstrumentedFragment contentParent.addView(mSpinnerHeader, 0); mFilterAdapter.enableFilter(getDefaultFilter()); if (mListType != LIST_TYPE_MAIN) { if (mListType != LIST_TYPE_STORAGE) { if (UserManager.get(getActivity()).getUserProfiles().size() > 1) { mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL); mFilterAdapter.enableFilter(FILTER_APPS_WORK); Loading @@ -290,6 +312,15 @@ public class ManageApplications extends InstrumentedFragment mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY); mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE); } mApplications.setOverrideFilter(new VolumeFilter(mVolumeUuid)); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (mListType == LIST_TYPE_STORAGE) { AppHeader.createAppHeader(getActivity(), null, mVolumeName, null); } } private int getDefaultFilter() { Loading @@ -312,6 +343,8 @@ public class ManageApplications extends InstrumentedFragment return MetricsLogger.MANAGE_APPLICATIONS_NOTIFICATIONS; case LIST_TYPE_DOMAINS_URLS: return MetricsLogger.MANAGE_DOMAIN_URLS; case LIST_TYPE_STORAGE: return InstrumentedFragment.VIEW_CATEGORY_STORAGE_APPS; default: return MetricsLogger.VIEW_UNKNOWN; } Loading Loading @@ -634,6 +667,7 @@ public class ManageApplications extends InstrumentedFragment private int mWhichSize = SIZE_TOTAL; CharSequence mCurFilterPrefix; private PackageManager mPm; private AppFilter mOverrideFilter; private Filter mFilter = new Filter() { @Override Loading Loading @@ -672,6 +706,11 @@ public class ManageApplications extends InstrumentedFragment } } public void setOverrideFilter(AppFilter overrideFilter) { mOverrideFilter = overrideFilter; rebuild(true); } public void setFilter(int filter) { mFilterMode = filter; rebuild(true); Loading Loading @@ -728,6 +767,9 @@ public class ManageApplications extends InstrumentedFragment mWhichSize = SIZE_INTERNAL; } filterObj = FILTERS[mFilterMode]; if (mOverrideFilter != null) { filterObj = mOverrideFilter; } switch (mLastSortMode) { case R.id.sort_order_size: switch (mWhichSize) { Loading
src/com/android/settings/deviceinfo/PrivateVolumeSettings.java +10 −3 Original line number Diff line number Diff line Loading @@ -55,6 +55,9 @@ import com.android.internal.util.Preconditions; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.Settings.StorageUseActivity; import com.android.settings.applications.ManageApplications; import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails; import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver; import com.android.settings.deviceinfo.StorageSettings.MountTask; Loading Loading @@ -323,9 +326,13 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { Intent intent = null; if (pref == mApps) { intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE); intent.setClass(getActivity(), Settings.ManageApplicationsActivity.class); Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, StorageUseActivity.class.getName()); args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid()); args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription()); intent = Utils.onBuildStartFragmentIntent(getActivity(), ManageApplications.class.getName(), args, null, R.string.apps_storage, null, false); } else if (pref == mDownloads) { intent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS).putExtra( DownloadManager.INTENT_EXTRAS_SORT_BY_SIZE, true); Loading