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

Commit 1e088e19 authored by Kelvin Kwan's avatar Kelvin Kwan
Browse files

Continue showing a tabbed view when filters are selected

If filters are selected and the user does not explicitly perform a
text search, we will keep the "search" in the current profile only
by ignoring the other user's roots.

Bug: 149773664
Test: atest DocumentsUIGoogleTests
Test: manual
Change-Id: I5b56309fd98cd1b3d3372f2f85d1837f5aa2080a
parent 34810bc0
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -869,7 +869,8 @@ public abstract class AbstractActionHandler<T extends FragmentActivity & CommonA
                            mState,
                            mState,
                            mExecutors,
                            mExecutors,
                            mInjector.fileTypeLookup,
                            mInjector.fileTypeLookup,
                            mSearchMgr.buildQueryArgs());
                            mSearchMgr.buildQueryArgs(),
                            mState.stack.getRoot().userId);
                } else {
                } else {
                    if (DEBUG) {
                    if (DEBUG) {
                        Log.d(TAG, "Creating new loader recents.");
                        Log.d(TAG, "Creating new loader recents.");
+2 −2
Original line number Original line Diff line number Diff line
@@ -781,8 +781,8 @@ public abstract class BaseActivity
    }
    }


    @Override
    @Override
    public boolean isSearching() {
    public boolean isTextSearching() {
        return mSearchManager.isSearching();
        return mSearchManager.isTextSearching();
    }
    }


    @Override
    @Override
+8 −1
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import android.os.CancellationSignal;
import android.os.FileUtils;
import android.os.FileUtils;
import android.os.OperationCanceledException;
import android.os.OperationCanceledException;
import android.os.RemoteException;
import android.os.RemoteException;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
import android.provider.DocumentsContract.Document;
import android.util.Log;
import android.util.Log;


@@ -128,7 +129,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
            final List<UserId> userIds = new ArrayList<>();
            final List<UserId> userIds = new ArrayList<>();
            if (mSearchMode) {
            if (mSearchMode) {
                queryArgs.putAll(mQueryArgs);
                queryArgs.putAll(mQueryArgs);
                if (mState.supportsCrossProfile() && mRoot.supportsCrossProfile()) {
                if (shouldSearchAcrossProfile()) {
                    for (UserId userId : DocumentsApplication.getUserIdManager(
                    for (UserId userId : DocumentsApplication.getUserIdManager(
                            getContext()).getUserIds()) {
                            getContext()).getUserIds()) {
                        if (mState.canInteractWith(userId)) {
                        if (mState.canInteractWith(userId)) {
@@ -208,6 +209,12 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {
        return result;
        return result;
    }
    }


    private boolean shouldSearchAcrossProfile() {
        return mState.supportsCrossProfile()
                && mRoot.supportsCrossProfile()
                && mQueryArgs.containsKey(DocumentsContract.QUERY_ARG_DISPLAY_NAME);
    }

    @Nullable
    @Nullable
    private Cursor queryOnUsers(List<UserId> userIds, String authority, Bundle queryArgs)
    private Cursor queryOnUsers(List<UserId> userIds, String authority, Bundle queryArgs)
            throws RemoteException {
            throws RemoteException {
+12 −1
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.annotation.NonNull;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.Lookup;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.RootInfo;
import com.android.documentsui.base.State;
import com.android.documentsui.base.State;
import com.android.documentsui.base.UserId;
import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.roots.RootCursorWrapper;
import com.android.documentsui.roots.RootCursorWrapper;


@@ -40,6 +41,7 @@ import java.util.concurrent.Executor;
 */
 */
public class GlobalSearchLoader extends MultiRootDocumentsLoader {
public class GlobalSearchLoader extends MultiRootDocumentsLoader {
    private final Bundle mQueryArgs;
    private final Bundle mQueryArgs;
    private final UserId mUserId;


    /*
    /*
     * Create the loader to query multiple roots support
     * Create the loader to query multiple roots support
@@ -57,9 +59,10 @@ public class GlobalSearchLoader extends MultiRootDocumentsLoader {
     */
     */
    GlobalSearchLoader(Context context, ProvidersAccess providers, State state,
    GlobalSearchLoader(Context context, ProvidersAccess providers, State state,
            Lookup<String, Executor> executors, Lookup<String, String> fileTypeMap,
            Lookup<String, Executor> executors, Lookup<String, String> fileTypeMap,
            @NonNull Bundle queryArgs) {
            @NonNull Bundle queryArgs, UserId userId) {
        super(context, providers, state, executors, fileTypeMap);
        super(context, providers, state, executors, fileTypeMap);
        mQueryArgs = queryArgs;
        mQueryArgs = queryArgs;
        mUserId = userId;
    }
    }


    @Override
    @Override
@@ -69,6 +72,14 @@ public class GlobalSearchLoader extends MultiRootDocumentsLoader {
            return true;
            return true;
        }
        }


        if (mState.supportsCrossProfile() && root.supportsCrossProfile()
                && !mQueryArgs.containsKey(DocumentsContract.QUERY_ARG_DISPLAY_NAME)
                && !mUserId.equals(root.userId)) {
            // Ignore cross-profile roots if it is not a text search. For example, the user may
            // just filter documents by mime type.
            return true;
        }

        // To prevent duplicate files on search result, ignore storage root because its almost
        // To prevent duplicate files on search result, ignore storage root because its almost
        // files include in media root.
        // files include in media root.
        return root.isStorage();
        return root.isStorage();
+1 −1
Original line number Original line Diff line number Diff line
@@ -234,6 +234,6 @@ public class NavigationViewManager {
        @Deprecated  // Use CommonAddones#refreshCurrentRootAndDirectory
        @Deprecated  // Use CommonAddones#refreshCurrentRootAndDirectory
        void refreshCurrentRootAndDirectory(int animation);
        void refreshCurrentRootAndDirectory(int animation);
        boolean isSearchExpanded();
        boolean isSearchExpanded();
        boolean isSearching();
        boolean isTextSearching();
    }
    }
}
}
Loading