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

Commit 71dac092 authored by Tony Huang's avatar Tony Huang
Browse files

Fix crash when mouse double click folder

Entering folder will cause fragment removed and its lib will
send ACTION_CANCEL by TOOL_TYPE_UNKNOWN so cause precondition
checking failed.
By RecyclerView owner suggestion, we should return false while
active folder case because this will throw item to selection when
it is true. Return false can avoid it put into selection.

Fix: 135037319
Test: atest DocumentsUIGoogleTests
Test: manual
Change-Id: I287581fc9fdbdb3d1aa80a63f40ddfd215b1e602
parent 28d5f8ee
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.DragEvent;

import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
import androidx.recyclerview.selection.MutableSelection;
@@ -75,8 +76,6 @@ import com.android.documentsui.services.FileOperationService;
import com.android.documentsui.services.FileOperations;
import com.android.documentsui.ui.DialogController;

import androidx.annotation.VisibleForTesting;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
@@ -215,7 +214,7 @@ public class ActionHandler<T extends FragmentActivity & Addons> extends Abstract
        if (mConfig.isDocumentEnabled(doc.mimeType, doc.flags, mState)) {
            onDocumentPicked(doc, type, fallback);
            mSelectionMgr.clearSelection();
            return true;
            return !doc.isContainer();
        }
        return false;
    }
+2 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.provider.DocumentsContract;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.selection.ItemDetailsLookup.ItemDetails;
@@ -60,7 +61,6 @@ import com.android.documentsui.picker.ActionHandler.Addons;
import com.android.documentsui.queries.SearchViewManager;
import com.android.documentsui.roots.ProvidersAccess;
import com.android.documentsui.services.FileOperationService;
import androidx.annotation.VisibleForTesting;

import java.util.Arrays;
import java.util.concurrent.Executor;
@@ -319,7 +319,7 @@ class ActionHandler<T extends FragmentActivity & Addons> extends AbstractActionH
        if (mConfig.isDocumentEnabled(doc.mimeType, doc.flags, mState)) {
            mActivity.onDocumentPicked(doc);
            mSelectionMgr.clearSelection();
            return true;
            return !doc.isDirectory();
        }
        return false;
    }
+6 −4
Original line number Diff line number Diff line
@@ -360,18 +360,20 @@ public class ActionHandlerTest {
        mActivity.currentRoot = TestProvidersAccess.HOME;
        mEnv.docs.nextDocument = TestEnv.FILE_ARCHIVE;

        mHandler.openDocument(TestEnv.FILE_ARCHIVE, ActionHandler.VIEW_TYPE_PREVIEW,
                ActionHandler.VIEW_TYPE_REGULAR);
        final boolean result = mHandler.openDocument(TestEnv.FILE_ARCHIVE,
                ActionHandler.VIEW_TYPE_PREVIEW, ActionHandler.VIEW_TYPE_REGULAR);
        assertEquals(TestEnv.FILE_ARCHIVE, mEnv.state.stack.peek());
        assertEquals(false, result);
    }

    @Test
    public void testDocumentPicked_OpensDirectories() throws Exception {
        mActivity.currentRoot = TestProvidersAccess.HOME;

        mHandler.openDocument(TestEnv.FOLDER_1, ActionHandler.VIEW_TYPE_PREVIEW,
                ActionHandler.VIEW_TYPE_REGULAR);
        final boolean result = mHandler.openDocument(TestEnv.FOLDER_1,
                ActionHandler.VIEW_TYPE_PREVIEW, ActionHandler.VIEW_TYPE_REGULAR);
        assertEquals(TestEnv.FOLDER_1, mEnv.state.stack.peek());
        assertEquals(false, result);
    }

    @Test