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

Commit 78ade2b9 authored by Garfield Tan's avatar Garfield Tan
Browse files

Consolidate the initializaion of acceptMimes.

Not restrict mime type in FilesActivity.

Credits to Sony folks who reported the original issue.

Test: Manual and auto tests.
Bug: 35415722
Change-Id: Ib506cde439e0e90bee7ac427f8cc9db263f73e61
parent 925d206e
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -106,7 +106,6 @@ public abstract class BaseActivity
        mTag = tag;
    }

    protected abstract void onTaskFinished(Uri... uris);
    protected abstract void refreshDirectory(int anim);
    /** Allows sub-classes to include information in a newly created State instance. */
    protected abstract void includeState(State initialState);
@@ -251,7 +250,6 @@ public abstract class BaseActivity

        state.sortModel = SortModel.createModel();
        state.localOnly = intent.getBooleanExtra(Intent.EXTRA_LOCAL_ONLY, false);
        state.initAcceptMimes(intent);
        state.excludedAuthorities = getExcludedAuthorities();

        includeState(state);
+2 −8
Original line number Diff line number Diff line
@@ -109,17 +109,11 @@ public class State implements android.os.Parcelable {
    /** Name of the package that started DocsUI */
    public List<String> excludedAuthorities = new ArrayList<>();

    public void initAcceptMimes(Intent intent) {
    public void initAcceptMimes(Intent intent, String defaultAcceptMimeType) {
        if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) {
            acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES);
        } else {
            String glob = intent.getType();
            if (glob == null || DocumentsContract.Root.MIME_TYPE_ITEM.equals(glob)) {
                // this means we do not care for the mime type
                acceptMimes = new String[]{"*/*"};
            } else {
                acceptMimes = new String[]{glob};
            }
            acceptMimes = new String[] { defaultAcceptMimeType };
        }
    }

+4 −24
Original line number Diff line number Diff line
@@ -170,6 +170,10 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
    public void includeState(State state) {
        final Intent intent = getIntent();

        // This is a remnant of old logic where we used to initialize accept MIME types in
        // BaseActivity. RootsAccess still rely on this being correctly initialized so we still have
        // to initialize it in FilesActivity.
        state.initAcceptMimes(intent, "*/*");
        state.action = State.ACTION_BROWSE;
        state.allowMultiple = true;

@@ -333,30 +337,6 @@ public class FilesActivity extends BaseActivity implements ActionHandler.Addons
        }
    }

    @Override
    public void onTaskFinished(Uri... uris) {
        if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));

        final Intent intent = new Intent();
        if (uris.length == 1) {
            intent.setData(uris[0]);
        } else if (uris.length > 1) {
            final ClipData clipData = new ClipData(
                    null, mState.acceptMimes, new ClipData.Item(uris[0]));
            for (int i = 1; i < uris.length; i++) {
                clipData.addItem(new ClipData.Item(uris[i]));
            }
            intent.setClipData(clipData);
        }

        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);

        setResult(Activity.RESULT_OK, intent);
        finish();
    }

    @Override
    public Injector<ActionHandler<FilesActivity>> getInjector() {
        return mInjector;
+5 −2
Original line number Diff line number Diff line
@@ -156,6 +156,10 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
    @Override
    protected void includeState(State state) {
        final Intent intent = getIntent();

        String defaultMimeType = (intent.getType() == null) ? "*/*" : intent.getType();
        state.initAcceptMimes(intent, defaultMimeType);

        final String action = intent.getAction();
        if (Intent.ACTION_OPEN_DOCUMENT.equals(action)) {
            state.action = ACTION_OPEN;
@@ -381,8 +385,7 @@ public class PickActivity extends BaseActivity implements ActionHandler.Addons {
                getContentResolver(), Shared.getCallingPackageName(this), mState.stack);
    }

    @Override
    protected void onTaskFinished(Uri... uris) {
    private void onTaskFinished(Uri... uris) {
        if (DEBUG) Log.d(TAG, "onFinished() " + Arrays.toString(uris));

        final Intent intent = new Intent();
+2 −11
Original line number Diff line number Diff line
@@ -42,27 +42,18 @@ public class StateTest {
        mState = new State();
    }

    @Test
    public void testAcceptAllMimeTypesByDefault() {
        mState.initAcceptMimes(mIntent);

        assertArrayEquals(new String[] { "*/*" }, mState.acceptMimes);
    }

    @Test
    public void testAcceptGivenMimeTypesInExtra() {
        mIntent.putExtra(Intent.EXTRA_MIME_TYPES, MIME_TYPES);

        mState.initAcceptMimes(mIntent);
        mState.initAcceptMimes(mIntent, "*/*");

        assertArrayEquals(MIME_TYPES, mState.acceptMimes);
    }

    @Test
    public void testAcceptIntentTypeWithoutExtra() {
        mIntent.setType(MIME_TYPES[0]);

        mState.initAcceptMimes(mIntent);
        mState.initAcceptMimes(mIntent, MIME_TYPES[0]);

        assertArrayEquals(new String[] { MIME_TYPES[0] }, mState.acceptMimes);
    }