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

Commit 710248d5 authored by Steve McKay's avatar Steve McKay
Browse files

Additional tidy up after Features.

1) Correctly hook Archive Creation up to features.
2) Remove archive creation as a preference.
3) Replace a few remaining direct references to R.bool.feature_...
4) Normalize test method naming in files.MenuManagerTest.

Bug: 35936932
Test: Build and run tests, test app manually.
Change-Id: I46db960fa17c438bb02fb3767b97dac3459c7cec
parent 7025de73
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -440,6 +440,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
        return mSelectionMgr.getSelection(new Selection());
    }

    @Override
    public ActionHandler reset(DirectoryReloadLock reloadLock) {
        mDirectoryReloadLock = reloadLock;
        mActivity.getLoaderManager().destroyLoader(LOADER_ID);
@@ -477,6 +478,7 @@ public abstract class AbstractActionHandler<T extends Activity & CommonAddons>
                                + DocumentInfo.debugString(mState.stack.peek()));

                return new DirectoryLoader(
                        mInjector.features,
                        context,
                        mState.stack.getRoot(),
                        mState.stack.peek(),
+8 −3
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.util.Log;
import com.android.documentsui.archives.ArchivesProvider;
import com.android.documentsui.base.DebugFlags;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Features;
import com.android.documentsui.base.FilteringCursorWrapper;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.roots.RootCursorWrapper;
@@ -61,7 +62,10 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
    private CancellationSignal mSignal;
    private DirectoryResult mResult;

    private Features mFeatures;

    public DirectoryLoader(
            Features freatures,
            Context context,
            RootInfo root,
            DocumentInfo doc,
@@ -71,6 +75,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
            boolean inSearchMode) {

        super(context, ProviderExecutor.forAuthority(root.authority));
        mFeatures = freatures;
        mRoot = root;
        mUri = uri;
        mModel = model;
@@ -104,7 +109,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
            result.client = client;

            Resources resources = getContext().getResources();
            if (resources.getBoolean(R.bool.feature_content_paging)) {
            if (mFeatures.isContentPagingEnabled()) {
                Bundle queryArgs = new Bundle();
                mModel.addQuerySortArgs(queryArgs);

@@ -126,14 +131,14 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

            cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1);

            if (mSearchMode && !resources.getBoolean(R.bool.feature_folders_in_search_results)) {
            if (mSearchMode && !mFeatures.isFoldersInSearchResultsEnabled()) {
                // There is no findDocumentPath API. Enable filtering on folders in search mode.
                cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES);
            }

            // TODO: When API tweaks have landed, use ContentResolver.EXTRA_HONORED_ARGS
            // instead of checking directly for ContentResolver.QUERY_ARG_SORT_COLUMNS (won't work)
            if (resources.getBoolean(R.bool.feature_content_paging)
            if (mFeatures.isContentPagingEnabled()
                        && cursor.getExtras().containsKey(ContentResolver.QUERY_ARG_SORT_COLUMNS)) {
                if (VERBOSE) Log.d(TAG, "Skipping sort of pre-sorted cursor. Booya!");
            } else {
+2 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
                getColor(R.color.accent_dark));

        mInjector.menuManager = new MenuManager(
                mInjector.prefs,
                mInjector.features,
                mSearchManager,
                mState,
                new DirectoryDetails(this) {
@@ -286,6 +286,7 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
     * @deprecated use {@link ActionHandler#onDocumentPicked(DocumentInfo)}
     * @param doc
     */
    @Deprecated
    @Override
    public void onDocumentPicked(DocumentInfo doc) {
        mInjector.actions.onDocumentPicked(doc);
+6 −6
Original line number Diff line number Diff line
@@ -27,25 +27,25 @@ import android.view.View;

import com.android.documentsui.R;
import com.android.documentsui.base.DocumentInfo;
import com.android.documentsui.base.Features;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.Shared;
import com.android.documentsui.base.State;
import com.android.documentsui.prefs.ScopedPreferences;
import com.android.documentsui.queries.SearchViewManager;

import java.util.List;
import java.util.function.IntFunction;

public final class MenuManager extends com.android.documentsui.MenuManager {
    private final ScopedPreferences mPreferences;

    private final Features mFeatures;

    public MenuManager(
            ScopedPreferences preferences,
            Features features,
            SearchViewManager searchManager,
            State displayState,
            DirectoryDetails dirDetails) {
        super(searchManager, displayState, dirDetails);
        mPreferences = preferences;
        mFeatures = features;
    }

    @Override
@@ -185,7 +185,7 @@ public final class MenuManager extends com.android.documentsui.MenuManager {
    @Override
    protected void updateCompress(MenuItem compress, SelectionDetails selectionDetails) {
        final boolean readOnly = !mDirDetails.canCreateDoc();
        compress.setVisible(mPreferences.getEnableArchiveCreation());
        compress.setVisible(mFeatures.isArchiveCreationEnabled());
        compress.setEnabled(!readOnly && !selectionDetails.containsPartialFiles() &&
                !selectionDetails.canExtract());
    }
+2 −22
Original line number Diff line number Diff line
@@ -17,12 +17,9 @@ package com.android.documentsui.prefs;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.text.TextUtils;

import com.android.documentsui.R;

/**
 * Provides an interface (and runtime implementation) for preferences that are
 * scoped (presumably to an activity). This eliminates the need to pass
@@ -37,29 +34,23 @@ public interface ScopedPreferences {
    boolean getShowDeviceRoot();
    void setShowDeviceRoot(boolean display);

    boolean getEnableArchiveCreation();
    void setEnableArchiveCreation(boolean enabled);

    /**
     * @param scope An arbitrary string representitive of the scope
     *        for prefs that are set using this object.
     */
    public static ScopedPreferences create(Context context, String scope) {
        return new RuntimeScopedPreferences(context.getResources(),
        return new RuntimeScopedPreferences(
                PreferenceManager.getDefaultSharedPreferences(context), scope);
    }

    static final class RuntimeScopedPreferences implements ScopedPreferences {

        private Resources mResources;
        private SharedPreferences mSharedPrefs;
        private String mScope;

        private RuntimeScopedPreferences(Resources resources, SharedPreferences sharedPrefs,
                String scope)  {
        private RuntimeScopedPreferences(SharedPreferences sharedPrefs, String scope)  {
            assert(!TextUtils.isEmpty(scope));

            mResources = resources;
            mSharedPrefs = sharedPrefs;
            mScope = scope;
        }
@@ -73,17 +64,6 @@ public interface ScopedPreferences {
        public void setShowDeviceRoot(boolean display) {
            mSharedPrefs.edit().putBoolean(INCLUDE_DEVICE_ROOT, display).apply();
        }

        @Override
        public boolean getEnableArchiveCreation() {
            final boolean defaultValue = mResources.getBoolean(R.bool.feature_archive_creation);
            return mSharedPrefs.getBoolean(ENABLE_ARCHIVE_CREATION + mScope, defaultValue);
        }

        @Override
        public void setEnableArchiveCreation(boolean enabled) {
            mSharedPrefs.edit().putBoolean(ENABLE_ARCHIVE_CREATION + mScope, enabled).apply();
        }
    }

    static boolean shouldBackup(String s) {
Loading