Merge "Filter app list by storage volume"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7c75120..dbd842d0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -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>
diff --git a/src/com/android/settings/InstrumentedFragment.java b/src/com/android/settings/InstrumentedFragment.java
index ff6f219..883c67c 100644
--- a/src/com/android/settings/InstrumentedFragment.java
+++ b/src/com/android/settings/InstrumentedFragment.java
@@ -27,6 +27,7 @@
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.
diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java
index ddfc207..c5124c6 100644
--- a/src/com/android/settings/applications/ApplicationsState.java
+++ b/src/com/android/settings/applications/ApplicationsState.java
@@ -54,6 +54,7 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
+import java.util.Objects;
import java.util.regex.Pattern;
/**
@@ -335,6 +336,23 @@
}
};
+ 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;
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 362903e..b675ba4 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -50,17 +50,20 @@
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;
@@ -81,6 +84,12 @@
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
@@ -180,6 +189,7 @@
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;
@@ -188,6 +198,8 @@
private FilterSpinnerAdapter mFilterAdapter;
private NotificationBackend mNotifBackend;
private ResetAppsHelper mResetAppsHelper;
+ private String mVolumeUuid;
+ private String mVolumeName;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -196,8 +208,8 @@
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();
}
@@ -208,6 +220,16 @@
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;
}
@@ -278,7 +300,7 @@
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);
@@ -290,6 +312,15 @@
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() {
@@ -312,6 +343,8 @@
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;
}
@@ -634,6 +667,7 @@
private int mWhichSize = SIZE_TOTAL;
CharSequence mCurFilterPrefix;
private PackageManager mPm;
+ private AppFilter mOverrideFilter;
private Filter mFilter = new Filter() {
@Override
@@ -672,6 +706,11 @@
}
}
+ public void setOverrideFilter(AppFilter overrideFilter) {
+ mOverrideFilter = overrideFilter;
+ rebuild(true);
+ }
+
public void setFilter(int filter) {
mFilterMode = filter;
rebuild(true);
@@ -728,6 +767,9 @@
mWhichSize = SIZE_INTERNAL;
}
filterObj = FILTERS[mFilterMode];
+ if (mOverrideFilter != null) {
+ filterObj = mOverrideFilter;
+ }
switch (mLastSortMode) {
case R.id.sort_order_size:
switch (mWhichSize) {
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index dec259b..a280b2d 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -55,6 +55,9 @@
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;
@@ -323,9 +326,13 @@
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);