Merge "Check for droppability when dropping onto Roots." into arc-apps
diff --git a/src/com/android/documentsui/files/ActionHandler.java b/src/com/android/documentsui/files/ActionHandler.java
index 3a61a26..921a3ed 100644
--- a/src/com/android/documentsui/files/ActionHandler.java
+++ b/src/com/android/documentsui/files/ActionHandler.java
@@ -17,6 +17,7 @@
package com.android.documentsui.files;
import static com.android.documentsui.base.Shared.DEBUG;
+import static com.android.documentsui.base.Shared.ENABLE_OMC_API_FEATURES;
import android.app.Activity;
import android.content.ActivityNotFoundException;
@@ -424,7 +425,8 @@
private boolean launchToRoot(Intent intent) {
String action = intent.getAction();
- if (Intent.ACTION_VIEW.equals(action) || DocumentsContract.ACTION_BROWSE.equals(action)) {
+ if (Intent.ACTION_VIEW.equals(action)
+ || (!ENABLE_OMC_API_FEATURES && "android.provider.action.BROWSE".equals(action))) {
Uri uri = intent.getData();
if (DocumentsContract.isRootUri(mActivity, uri)) {
if (DEBUG) Log.d(TAG, "Launching with root URI.");
diff --git a/src/com/android/documentsui/services/Job.java b/src/com/android/documentsui/services/Job.java
index 61f1c38..a72b528 100644
--- a/src/com/android/documentsui/services/Job.java
+++ b/src/com/android/documentsui/services/Job.java
@@ -181,21 +181,25 @@
return Uri.parse(String.format("data,%s-%s", tag, id));
}
- ContentProviderClient getClient(DocumentInfo doc) throws RemoteException {
- ContentProviderClient client = mClients.get(doc.authority);
+ ContentProviderClient getClient(Uri uri) throws RemoteException {
+ ContentProviderClient client = mClients.get(uri.getAuthority());
if (client == null) {
// Acquire content providers.
client = acquireUnstableProviderOrThrow(
getContentResolver(),
- doc.authority);
+ uri.getAuthority());
- mClients.put(doc.authority, client);
+ mClients.put(uri.getAuthority(), client);
}
assert(client != null);
return client;
}
+ ContentProviderClient getClient(DocumentInfo doc) throws RemoteException {
+ return getClient(doc.derivedUri);
+ }
+
final void cleanup() {
for (ContentProviderClient client : mClients.values()) {
ContentProviderClient.releaseQuietly(client);
diff --git a/src/com/android/documentsui/services/ResolvedResourcesJob.java b/src/com/android/documentsui/services/ResolvedResourcesJob.java
index b4934b0..b67316b 100644
--- a/src/com/android/documentsui/services/ResolvedResourcesJob.java
+++ b/src/com/android/documentsui/services/ResolvedResourcesJob.java
@@ -44,7 +44,7 @@
private static final String TAG = "ResolvedResourcesJob";
final List<DocumentInfo> mResolvedDocs;
- final List<DocumentInfo> mAcquiredArchivedDocs = new ArrayList<>();
+ final List<Uri> mAcquiredArchivedUris = new ArrayList<>();
ResolvedResourcesJob(Context service, Listener listener, String id, @OpType int opType,
DocumentStack destination, UrisSupplier srcs) {
@@ -61,6 +61,25 @@
return false;
}
+ // Acquire all source archived documents, so they are not gone while copying from.
+ try {
+ Iterable<Uri> uris = mResourceUris.getUris(appContext);
+ for (Uri uri : uris) {
+ try {
+ if (ArchivesProvider.AUTHORITY.equals(uri.getAuthority())) {
+ ArchivesProvider.acquireArchive(getClient(uri), uri);
+ mAcquiredArchivedUris.add(uri);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to acquire an archive.");
+ return false;
+ }
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to read list of target resource Uris. Cannot continue.", e);
+ return false;
+ }
+
int docsResolved = buildDocumentList();
if (!isCanceled() && docsResolved < mResourceUris.getItemCount()) {
if (docsResolved == 0) {
@@ -71,29 +90,15 @@
}
}
- // Acquire all source archived documents, so they are not gone while copying from.
- try {
- for (DocumentInfo doc : mResolvedDocs) {
- if (doc.isInArchive()) {
- final ContentProviderClient client = getClient(doc);
- ArchivesProvider.acquireArchive(client, doc.derivedUri);
- mAcquiredArchivedDocs.add(doc);
- }
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to acquire an archive.");
- return false;
- }
-
return true;
}
@Override
void finish() {
// Release all archived documents.
- for (DocumentInfo doc : mAcquiredArchivedDocs) {
+ for (Uri uri : mAcquiredArchivedUris) {
try {
- ArchivesProvider.releaseArchive(getClient(doc), doc.derivedUri);
+ ArchivesProvider.releaseArchive(getClient(uri), uri);
} catch (RemoteException e) {
Log.e(TAG, "Failed to release an archived document.");
}
diff --git a/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java b/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
index 4bbb896..db9e868 100644
--- a/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
+++ b/tests/unit/com/android/documentsui/archives/ArchivesProviderTest.java
@@ -48,7 +48,8 @@
@MediumTest
public class ArchivesProviderTest extends AndroidTestCase {
private static final Uri ARCHIVE_URI = Uri.parse("content://i/love/strawberries");
- private static final String NOTIFICATION_URI = "content://notification-uri";
+ private static final String NOTIFICATION_URI =
+ "content://com.android.documentsui.archives/notification-uri";
private ExecutorService mExecutor = null;
private Archive mArchive = null;
private TestUtils mTestUtils = null;
@@ -115,7 +116,7 @@
});
}
- latch.await(3, TimeUnit.SECONDS);
+ latch.await(30, TimeUnit.SECONDS);
{
final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
assertNotNull("Cursor must not be null. File not found?", cursor);
@@ -167,7 +168,7 @@
});
}
- latch.await(3, TimeUnit.SECONDS);
+ latch.await(30, TimeUnit.SECONDS);
{
final Cursor cursor = resolver.query(childrenUri, null, null, null, null, null);
assertNotNull("Cursor must not be null. File not found?", cursor);
diff --git a/tests/unit/com/android/documentsui/archives/ReadableArchiveTest.java b/tests/unit/com/android/documentsui/archives/ReadableArchiveTest.java
index 9f12186..3bb6395 100644
--- a/tests/unit/com/android/documentsui/archives/ReadableArchiveTest.java
+++ b/tests/unit/com/android/documentsui/archives/ReadableArchiveTest.java
@@ -40,7 +40,8 @@
@MediumTest
public class ReadableArchiveTest extends AndroidTestCase {
private static final Uri ARCHIVE_URI = Uri.parse("content://i/love/strawberries");
- private static final String NOTIFICATION_URI = "content://notification-uri";
+ private static final String NOTIFICATION_URI =
+ "content://com.android.documentsui.archives/notification-uri";
private ExecutorService mExecutor = null;
private Archive mArchive = null;
private TestUtils mTestUtils = null;
diff --git a/tests/unit/com/android/documentsui/archives/WriteableArchiveTest.java b/tests/unit/com/android/documentsui/archives/WriteableArchiveTest.java
index 28f5e3c..93383c0 100644
--- a/tests/unit/com/android/documentsui/archives/WriteableArchiveTest.java
+++ b/tests/unit/com/android/documentsui/archives/WriteableArchiveTest.java
@@ -43,7 +43,8 @@
@MediumTest
public class WriteableArchiveTest extends AndroidTestCase {
private static final Uri ARCHIVE_URI = Uri.parse("content://i/love/strawberries");
- private static final String NOTIFICATION_URI = "content://notification-uri";
+ private static final String NOTIFICATION_URI =
+ "content://com.android.documentsui.archives/notification-uri";
private ExecutorService mExecutor = null;
private Archive mArchive = null;
private TestUtils mTestUtils = null;