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

Commit 0f408af0 authored by Takamasa Kuramitsu's avatar Takamasa Kuramitsu Committed by Steve McKay
Browse files

Fix crash when showing inspect menu of invalid provider

Files app crashes when opening the inspect menu of invalid document
provider. This CL disables the inspect menu when the DocumentInfo of
current directory is null.

Bug: 79128117
Test: Added new coverage.
Test: Run instrumentation tests from com.android.documentsui.tests
Change-Id: I4de296fb976b7e54bbd3bce98d14192ca5c25e1a
parent aad84744
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -268,8 +268,11 @@ public final class MenuManager extends com.android.documentsui.MenuManager {

    @Override
    protected void updateInspect(MenuItem inspect) {
        inspect.setVisible(mFeatures.isInspectorEnabled());
        inspect.setEnabled(mFeatures.isInspectorEnabled() && !mState.stack.isRecents());
        boolean visible = mFeatures.isInspectorEnabled();
        inspect.setVisible(visible);
        // use a null check w/ peek instead of isEmpty since
        // DocumentStack accepts null values (not sure why).
        inspect.setEnabled(visible && mState.stack.peek() != null);
    }

    @Override
+26 −4
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ public final class MenuManagerTest {

        testRootInfo = new RootInfo();
        testDocInfo = new DocumentInfo();
        state.stack.push(testDocInfo);
    }

    private Uri getUriFromModelId(String id) {
@@ -360,7 +361,7 @@ public final class MenuManagerTest {
    }

    @Test
    public void testActionMenu_InspectorEnabledForSingleSelection() {
    public void testActionMenu_Inspector_EnabledForSingleSelection() {
        features.inspector = true;
        selectionDetails.size = 1;
        mgr.updateActionMenu(testMenu, selectionDetails);
@@ -370,7 +371,7 @@ public final class MenuManagerTest {
    }

    @Test
    public void testActionMenu_InspectorDisabledForMultiSelection() {
    public void testActionMenu_Inspector_DisabledForMultiSelection() {
        features.inspector = true;
        selectionDetails.size = 2;
        mgr.updateActionMenu(testMenu, selectionDetails);
@@ -417,7 +418,7 @@ public final class MenuManagerTest {
    }

    @Test
    public void testOptionMenu_InspectorAvailable() {
    public void testOptionMenu_Inspector_VisibleAndEnabled() {
        features.inspector = true;
        mgr.updateOptionMenu(testMenu);
        optionInspector.assertVisible();
@@ -425,7 +426,7 @@ public final class MenuManagerTest {
    }

    @Test
    public void testOptionMenu_InspectorDisabledInRecentsFolder() {
    public void testOptionMenu_Inspector_DisabledInRecentsFolder() {
        features.inspector = true;

        // synthesize a fake recents root. Not setting an authority or id == recents.
@@ -437,6 +438,27 @@ public final class MenuManagerTest {
        optionInspector.assertDisabled();
    }

    @Test
    public void testOptionMenu_Inspector_DisabledForEmptyStack() {
        features.inspector = true;
        state.stack.reset();  // unset cwd
        mgr.updateOptionMenu(testMenu);

        optionInspector.assertVisible();
        optionInspector.assertDisabled();
    }

    @Test
    public void testOptionMenu_Inspector_DisabledForNullDirectory() {
        features.inspector = true;
        state.stack.reset();
        state.stack.push(null);
        mgr.updateOptionMenu(testMenu);

        optionInspector.assertVisible();
        optionInspector.assertDisabled();
    }

    @Test
    public void testInflateContextMenu_Files() {
        TestMenuInflater inflater = new TestMenuInflater();