Loading packages/DocumentsUI/AndroidManifest.xml +2 −5 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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> Loading packages/DocumentsUI/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -63,4 +63,6 @@ <string name="more">More</string> <string name="loading">Loading\u2026</string> <string name="share_via">Share via</string> </resources> packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +58 −21 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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); } Loading Loading @@ -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(); } Loading Loading @@ -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( Loading Loading @@ -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]; } } packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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; Loading packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +172 −109 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
packages/DocumentsUI/AndroidManifest.xml +2 −5 Original line number Diff line number Diff line Loading @@ -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" /> Loading @@ -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> Loading
packages/DocumentsUI/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -63,4 +63,6 @@ <string name="more">More</string> <string name="loading">Loading\u2026</string> <string name="share_via">Share via</string> </resources>
packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +58 −21 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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); } Loading Loading @@ -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(); } Loading Loading @@ -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( Loading Loading @@ -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]; } }
packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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; Loading
packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +172 −109 File changed.Preview size limit exceeded, changes collapsed. Show changes