diff options
Diffstat (limited to 'packages/DocumentsUI')
4 files changed, 22 insertions, 0 deletions
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index bd17401..842d9fc 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -37,6 +37,12 @@ abstract class BaseActivity extends Activity { public static String ACTION_OPEN_COPY_DESTINATION_STRING = "com.android.documentsui.OPEN_COPY_DESTINATION"; + /** + * Extra boolean flag for ACTION_OPEN_COPY_DESTINATION_STRING, which + * specifies if the destination directory needs to create new directory or not. + */ + public static String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY"; + public abstract State getDisplayState(); public abstract RootInfo getCurrentRoot(); public abstract void onStateChanged(); @@ -77,6 +83,7 @@ abstract class BaseActivity extends Activity { public boolean showAdvanced = false; public boolean stackTouched = false; public boolean restored = false; + public boolean directoryCopy = false; /** Current user navigation stack; empty implies recents. */ public DocumentStack stack = new DocumentStack(); diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java index 61fcad2..909e2e5 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java @@ -687,6 +687,14 @@ public class DirectoryFragment extends Fragment { Uri.EMPTY, getActivity(), DocumentsActivity.class); + boolean directoryCopy = false; + for (DocumentInfo info : docs) { + if (Document.MIME_TYPE_DIR.equals(info.mimeType)) { + directoryCopy = true; + break; + } + } + intent.putExtra(BaseActivity.EXTRA_DIRECTORY_COPY, directoryCopy); startActivityForResult(intent, REQUEST_COPY_DESTINATION); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index b6e0711..71ed17e 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -265,6 +265,10 @@ public class DocumentsActivity extends BaseActivity { } else { mState.showSize = LocalPreferences.getDisplayFileSize(this); } + if (mState.action == ACTION_OPEN_COPY_DESTINATION) { + mState.directoryCopy = intent.getBooleanExtra( + BaseActivity.EXTRA_DIRECTORY_COPY, false); + } } private class RestoreRootTask extends AsyncTask<Void, Void, RootInfo> { diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java index d2267b1..27e8f20 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java @@ -367,6 +367,9 @@ public class RootsCache { if (!state.showAdvanced && advanced) continue; // Exclude non-local devices when local only if (state.localOnly && !localOnly) continue; + // Exclude downloads roots that don't support directory creation + // TODO: Add flag to check the root supports directory creation or not. + if (state.directoryCopy && root.isDownloads()) continue; // Only show empty roots when creating if ((state.action != State.ACTION_CREATE || state.action != State.ACTION_OPEN_TREE || |