Filter app list by storage volume

(when coming from storage settings)

Bug: 19989309
Change-Id: I932b67d25b5c9305067969ba13acb1a9f78e6cdb
This commit is contained in:
Jason Monk
2015-04-16 11:45:34 -04:00
parent b8e02b8bd0
commit 02a310d8c9
5 changed files with 77 additions and 6 deletions

View File

@@ -6447,4 +6447,7 @@
<!-- Label of default app for current setting [CHAR LIMIT=40] --> <!-- Label of default app for current setting [CHAR LIMIT=40] -->
<string name="default_app">(Default)</string> <string name="default_app">(Default)</string>
<!-- Title of app storage screen [CHAR LIMIT=30] -->
<string name="apps_storage">Apps storage</string>
</resources> </resources>

View File

@@ -27,6 +27,7 @@ public abstract class InstrumentedFragment extends PreferenceFragment {
public static final int VIEW_CATEGORY_UNDECLARED = 100000; 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_DEFAULT_APPS = VIEW_CATEGORY_UNDECLARED + 1;
public static final int VIEW_CATEGORY_STORAGE_APPS = VIEW_CATEGORY_UNDECLARED + 2;
/** /**
* Declare the view of this category. * Declare the view of this category.

View File

@@ -54,6 +54,7 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
@@ -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 { public static class CompoundFilter implements AppFilter {
private final AppFilter mFirstFilter; private final AppFilter mFirstFilter;
private final AppFilter mSecondFilter; private final AppFilter mSecondFilter;

View File

@@ -50,17 +50,20 @@ import android.widget.ListView;
import android.widget.Spinner; import android.widget.Spinner;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import com.android.settings.AppHeader;
import com.android.settings.HelpUtils; import com.android.settings.HelpUtils;
import com.android.settings.InstrumentedFragment; import com.android.settings.InstrumentedFragment;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings.AllApplicationsActivity; import com.android.settings.Settings.AllApplicationsActivity;
import com.android.settings.Settings.DomainsURLsAppListActivity; import com.android.settings.Settings.DomainsURLsAppListActivity;
import com.android.settings.Settings.NotificationAppListActivity; import com.android.settings.Settings.NotificationAppListActivity;
import com.android.settings.Settings.StorageUseActivity;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.applications.ApplicationsState.AppEntry; import com.android.settings.applications.ApplicationsState.AppEntry;
import com.android.settings.applications.ApplicationsState.AppFilter; import com.android.settings.applications.ApplicationsState.AppFilter;
import com.android.settings.applications.ApplicationsState.CompoundFilter; 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;
import com.android.settings.notification.NotificationBackend.AppRow; import com.android.settings.notification.NotificationBackend.AppRow;
@@ -81,6 +84,12 @@ public class ManageApplications extends InstrumentedFragment
static final String TAG = "ManageApplications"; static final String TAG = "ManageApplications";
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); 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"; private static final String EXTRA_SORT_ORDER = "sortOrder";
// attributes used as keys when passing values to InstalledAppDetails activity // attributes used as keys when passing values to InstalledAppDetails activity
@@ -180,6 +189,7 @@ public class ManageApplications extends InstrumentedFragment
public static final int LIST_TYPE_MAIN = 0; public static final int LIST_TYPE_MAIN = 0;
public static final int LIST_TYPE_NOTIFICATION = 1; public static final int LIST_TYPE_NOTIFICATION = 1;
public static final int LIST_TYPE_DOMAINS_URLS = 2; public static final int LIST_TYPE_DOMAINS_URLS = 2;
public static final int LIST_TYPE_STORAGE = 3;
private View mRootView; private View mRootView;
@@ -188,6 +198,8 @@ public class ManageApplications extends InstrumentedFragment
private FilterSpinnerAdapter mFilterAdapter; private FilterSpinnerAdapter mFilterAdapter;
private NotificationBackend mNotifBackend; private NotificationBackend mNotifBackend;
private ResetAppsHelper mResetAppsHelper; private ResetAppsHelper mResetAppsHelper;
private String mVolumeUuid;
private String mVolumeName;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -196,8 +208,8 @@ public class ManageApplications extends InstrumentedFragment
mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication()); mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication());
Intent intent = getActivity().getIntent(); Intent intent = getActivity().getIntent();
String className = getArguments() != null Bundle args = getArguments();
? getArguments().getString("classname") : null; String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
if (className == null) { if (className == null) {
className = intent.getComponent().getClassName(); className = intent.getComponent().getClassName();
} }
@@ -208,6 +220,16 @@ public class ManageApplications extends InstrumentedFragment
mNotifBackend = new NotificationBackend(); mNotifBackend = new NotificationBackend();
} else if (className.equals(DomainsURLsAppListActivity.class.getName())) { } else if (className.equals(DomainsURLsAppListActivity.class.getName())) {
mListType = LIST_TYPE_DOMAINS_URLS; 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 { } else {
mListType = LIST_TYPE_MAIN; mListType = LIST_TYPE_MAIN;
} }
@@ -278,7 +300,7 @@ public class ManageApplications extends InstrumentedFragment
contentParent.addView(mSpinnerHeader, 0); contentParent.addView(mSpinnerHeader, 0);
mFilterAdapter.enableFilter(getDefaultFilter()); mFilterAdapter.enableFilter(getDefaultFilter());
if (mListType != LIST_TYPE_MAIN) { if (mListType != LIST_TYPE_STORAGE) {
if (UserManager.get(getActivity()).getUserProfiles().size() > 1) { if (UserManager.get(getActivity()).getUserProfiles().size() > 1) {
mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL); mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
mFilterAdapter.enableFilter(FILTER_APPS_WORK); mFilterAdapter.enableFilter(FILTER_APPS_WORK);
@@ -290,6 +312,15 @@ public class ManageApplications extends InstrumentedFragment
mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY); mFilterAdapter.enableFilter(FILTER_APPS_PRIORITY);
mFilterAdapter.enableFilter(FILTER_APPS_SENSITIVE); 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() { private int getDefaultFilter() {
@@ -312,6 +343,8 @@ public class ManageApplications extends InstrumentedFragment
return MetricsLogger.MANAGE_APPLICATIONS_NOTIFICATIONS; return MetricsLogger.MANAGE_APPLICATIONS_NOTIFICATIONS;
case LIST_TYPE_DOMAINS_URLS: case LIST_TYPE_DOMAINS_URLS:
return MetricsLogger.MANAGE_DOMAIN_URLS; return MetricsLogger.MANAGE_DOMAIN_URLS;
case LIST_TYPE_STORAGE:
return InstrumentedFragment.VIEW_CATEGORY_STORAGE_APPS;
default: default:
return MetricsLogger.VIEW_UNKNOWN; return MetricsLogger.VIEW_UNKNOWN;
} }
@@ -634,6 +667,7 @@ public class ManageApplications extends InstrumentedFragment
private int mWhichSize = SIZE_TOTAL; private int mWhichSize = SIZE_TOTAL;
CharSequence mCurFilterPrefix; CharSequence mCurFilterPrefix;
private PackageManager mPm; private PackageManager mPm;
private AppFilter mOverrideFilter;
private Filter mFilter = new Filter() { private Filter mFilter = new Filter() {
@Override @Override
@@ -672,6 +706,11 @@ public class ManageApplications extends InstrumentedFragment
} }
} }
public void setOverrideFilter(AppFilter overrideFilter) {
mOverrideFilter = overrideFilter;
rebuild(true);
}
public void setFilter(int filter) { public void setFilter(int filter) {
mFilterMode = filter; mFilterMode = filter;
rebuild(true); rebuild(true);
@@ -728,6 +767,9 @@ public class ManageApplications extends InstrumentedFragment
mWhichSize = SIZE_INTERNAL; mWhichSize = SIZE_INTERNAL;
} }
filterObj = FILTERS[mFilterMode]; filterObj = FILTERS[mFilterMode];
if (mOverrideFilter != null) {
filterObj = mOverrideFilter;
}
switch (mLastSortMode) { switch (mLastSortMode) {
case R.id.sort_order_size: case R.id.sort_order_size:
switch (mWhichSize) { switch (mWhichSize) {

View File

@@ -55,6 +55,9 @@ import com.android.internal.util.Preconditions;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.SettingsPreferenceFragment; 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.MeasurementDetails;
import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver; import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver;
import com.android.settings.deviceinfo.StorageSettings.MountTask; import com.android.settings.deviceinfo.StorageSettings.MountTask;
@@ -323,9 +326,13 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
Intent intent = null; Intent intent = null;
if (pref == mApps) { if (pref == mApps) {
intent = new Intent(Intent.ACTION_MANAGE_PACKAGE_STORAGE); Bundle args = new Bundle();
intent.setClass(getActivity(), Settings.ManageApplicationsActivity.class); 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) { } else if (pref == mDownloads) {
intent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS).putExtra( intent = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS).putExtra(
DownloadManager.INTENT_EXTRAS_SORT_BY_SIZE, true); DownloadManager.INTENT_EXTRAS_SORT_BY_SIZE, true);