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

Commit c22acf6f authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Instance state, fix sharing, Durable objects." into klp-dev

parents db06adec b5133111
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -11,10 +11,7 @@
        <!-- TODO: allow rotation when state saving is in better shape -->
        <activity
            android:name=".DocumentsActivity"
            android:finishOnCloseSystemDialogs="true"
            android:excludeFromRecents="true"
            android:theme="@android:style/Theme.Holo.Light"
            android:screenOrientation="nosensor">
            android:theme="@android:style/Theme.Holo.Light">
            <intent-filter android:priority="100">
                <action android:name="android.intent.action.OPEN_DOCUMENT" />
                <category android:name="android.intent.category.DEFAULT" />
@@ -37,7 +34,7 @@
            <intent-filter>
                <action android:name="android.provider.action.MANAGE_DOCUMENTS" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="vnd.android.doc/dir" />
                <data android:mimeType="vnd.android.document/directory" />
            </intent-filter>
        </activity>

+2 −0
Original line number Diff line number Diff line
@@ -63,4 +63,6 @@
    <string name="more">More</string>
    <string name="loading">Loading\u2026</string>

    <string name="share_via">Share via</string>

</resources>
+58 −21
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@
package com.android.documentsui;

import static com.android.documentsui.DocumentsActivity.TAG;
import static com.android.documentsui.DocumentsActivity.DisplayState.ACTION_MANAGE;
import static com.android.documentsui.DocumentsActivity.DisplayState.MODE_GRID;
import static com.android.documentsui.DocumentsActivity.DisplayState.MODE_LIST;
import static com.android.documentsui.DocumentsActivity.State.ACTION_MANAGE;
import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
import static com.android.documentsui.model.DocumentInfo.getCursorInt;
import static com.android.documentsui.model.DocumentInfo.getCursorLong;
import static com.android.documentsui.model.DocumentInfo.getCursorString;
@@ -62,7 +62,7 @@ import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.documentsui.DocumentsActivity.DisplayState;
import com.android.documentsui.DocumentsActivity.State;
import com.android.documentsui.model.DocumentInfo;
import com.android.internal.util.Predicate;
import com.google.android.collect.Lists;
@@ -168,7 +168,7 @@ public class DirectoryFragment extends Fragment {
        mCallbacks = new LoaderCallbacks<DirectoryResult>() {
            @Override
            public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) {
                final DisplayState state = getDisplayState(DirectoryFragment.this);
                final State state = getDisplayState(DirectoryFragment.this);

                Uri contentsUri;
                if (mType == TYPE_NORMAL) {
@@ -196,7 +196,7 @@ public class DirectoryFragment extends Fragment {
    }

    public void updateDisplayState() {
        final DisplayState state = getDisplayState(this);
        final State state = getDisplayState(this);

        if (mLastSortOrder != state.sortOrder) {
            getLoaderManager().restartLoader(mLoaderId, null, mCallbacks);
@@ -263,7 +263,7 @@ public class DirectoryFragment extends Fragment {

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            final DisplayState state = getDisplayState(DirectoryFragment.this);
            final State state = getDisplayState(DirectoryFragment.this);

            final MenuItem open = menu.findItem(R.id.menu_open);
            final MenuItem share = menu.findItem(R.id.menu_share);
@@ -294,14 +294,17 @@ public class DirectoryFragment extends Fragment {
            final int id = item.getItemId();
            if (id == R.id.menu_open) {
                DocumentsActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
                mode.finish();
                return true;

            } else if (id == R.id.menu_share) {
                onShareDocuments(docs);
                mode.finish();
                return true;

            } else if (id == R.id.menu_delete) {
                onDeleteDocuments(docs);
                mode.finish();
                return true;

            } else {
@@ -332,26 +335,36 @@ public class DirectoryFragment extends Fragment {
    };

    private void onShareDocuments(List<DocumentInfo> docs) {
        Intent intent;
        if (docs.size() == 1) {
            final DocumentInfo doc = docs.get(0);

            intent = new Intent(Intent.ACTION_SEND);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setType(doc.mimeType);
            intent.putExtra(Intent.EXTRA_STREAM, doc.uri);

        } else if (docs.size() > 1) {
            intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addCategory(Intent.CATEGORY_DEFAULT);

            final ArrayList<String> mimeTypes = Lists.newArrayList();
            final ArrayList<Uri> uris = Lists.newArrayList();
            for (DocumentInfo doc : docs) {
                mimeTypes.add(doc.mimeType);
                uris.add(doc.uri);
            }

        final Intent intent;
        if (uris.size() > 1) {
            intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            // TODO: find common mimetype
            intent.setType("*/*");
            intent.setType(findCommonMimeType(mimeTypes));
            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

        } else {
            intent = new Intent(Intent.ACTION_SEND);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setData(uris.get(0));
            return;
        }

        intent = Intent.createChooser(intent, getActivity().getText(R.string.share_via));
        startActivity(intent);
    }

@@ -383,7 +396,7 @@ public class DirectoryFragment extends Fragment {
        }
    }

    private static DisplayState getDisplayState(Fragment fragment) {
    private static State getDisplayState(Fragment fragment) {
        return ((DocumentsActivity) fragment.getActivity()).getDisplayState();
    }

@@ -411,7 +424,7 @@ public class DirectoryFragment extends Fragment {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final Context context = parent.getContext();
            final DisplayState state = getDisplayState(DirectoryFragment.this);
            final State state = getDisplayState(DirectoryFragment.this);

            final RootsCache roots = DocumentsApplication.getRootsCache(context);
            final ThumbnailCache thumbs = DocumentsApplication.getThumbnailsCache(
@@ -586,4 +599,28 @@ public class DirectoryFragment extends Fragment {

        return DateUtils.formatDateTime(context, when, flags);
    }

    private String findCommonMimeType(List<String> mimeTypes) {
        String[] commonType = mimeTypes.get(0).split("/");
        if (commonType.length != 2) {
            return "*/*";
        }

        for (int i = 1; i < mimeTypes.size(); i++) {
            String[] type = mimeTypes.get(i).split("/");
            if (type.length != 2) continue;

            if (!commonType[1].equals(type[1])) {
                commonType[1] = "*";
            }

            if (!commonType[0].equals(type[0])) {
                commonType[0] = "*";
                commonType[1] = "*";
                break;
            }
        }

        return commonType[0] + "/" + commonType[1];
    }
}
+7 −5
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.documentsui;

import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_DISPLAY_NAME;
import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_LAST_MODIFIED;
import static com.android.documentsui.DocumentsActivity.State.SORT_ORDER_SIZE;

import android.content.AsyncTaskLoader;
import android.content.ContentProviderClient;
import android.content.Context;
@@ -25,8 +29,6 @@ import android.os.CancellationSignal;
import android.os.OperationCanceledException;
import android.provider.DocumentsContract.Document;

import com.android.documentsui.DocumentsActivity.DisplayState;

import libcore.io.IoUtils;

class DirectoryResult implements AutoCloseable {
@@ -149,11 +151,11 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> {

    private String getQuerySortOrder() {
        switch (mSortOrder) {
            case DisplayState.SORT_ORDER_DISPLAY_NAME:
            case SORT_ORDER_DISPLAY_NAME:
                return Document.COLUMN_DISPLAY_NAME + " ASC";
            case DisplayState.SORT_ORDER_LAST_MODIFIED:
            case SORT_ORDER_LAST_MODIFIED:
                return Document.COLUMN_LAST_MODIFIED + " DESC";
            case DisplayState.SORT_ORDER_SIZE:
            case SORT_ORDER_SIZE:
                return Document.COLUMN_SIZE + " DESC";
            default:
                return null;
+172 −109

File changed.

Preview size limit exceeded, changes collapsed.

Loading