Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16bf99da authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Filter app list by storage volume"

parents 7ba56cfd 02a310d8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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.
+18 −0
Original line number Diff line number Diff line
@@ -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;

/**
@@ -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;
+45 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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
@@ -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;

@@ -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) {
@@ -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();
        }
@@ -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;
        }
@@ -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);
@@ -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() {
@@ -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;
        }
@@ -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
@@ -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);
@@ -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) {
+10 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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);