summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2016-11-07 06:21:43 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-11-07 06:21:48 +0000
commit2cf7c483a8049e2c657d5f4c138132167fa71ae9 (patch)
treee12011f6aa71f749cec81e0d4a857af2796a7926
parent4b5617742903aeec0c924c298bc42fe0ffa9e5bc (diff)
parent35b2ec551f670562a779925fe152307f20ad67cd (diff)
Merge "Not create document under the device."
-rw-r--r--packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java32
-rw-r--r--packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java25
-rw-r--r--packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java4
3 files changed, 58 insertions, 3 deletions
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
index 0508789710b8..3fcc600e67f0 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
@@ -347,6 +347,34 @@ public class MtpDocumentsProvider extends DocumentsProvider {
throw new UnsupportedOperationException(
"Writing operation is not supported by the device.");
}
+
+ final int parentObjectHandle;
+ final int storageId;
+ switch (parentId.mDocumentType) {
+ case MtpDatabaseConstants.DOCUMENT_TYPE_DEVICE:
+ final String[] storageDocumentIds =
+ mDatabase.getStorageDocumentIds(parentId.mDocumentId);
+ if (storageDocumentIds.length == 1) {
+ final String newDocumentId =
+ createDocument(storageDocumentIds[0], mimeType, displayName);
+ notifyChildDocumentsChange(parentDocumentId);
+ return newDocumentId;
+ } else {
+ throw new UnsupportedOperationException(
+ "Cannot create a file under the device.");
+ }
+ case MtpDatabaseConstants.DOCUMENT_TYPE_STORAGE:
+ storageId = parentId.mStorageId;
+ parentObjectHandle = -1;
+ break;
+ case MtpDatabaseConstants.DOCUMENT_TYPE_OBJECT:
+ storageId = parentId.mStorageId;
+ parentObjectHandle = parentId.mObjectHandle;
+ break;
+ default:
+ throw new IllegalArgumentException("Unexpected document type.");
+ }
+
pipe = ParcelFileDescriptor.createReliablePipe();
int objectHandle = -1;
MtpObjectInfo info = null;
@@ -357,8 +385,8 @@ public class MtpDocumentsProvider extends DocumentsProvider {
MtpConstants.FORMAT_ASSOCIATION :
MediaFile.getFormatCode(displayName, mimeType);
info = new MtpObjectInfo.Builder()
- .setStorageId(parentId.mStorageId)
- .setParent(parentId.mObjectHandle)
+ .setStorageId(storageId)
+ .setParent(parentObjectHandle)
.setFormat(formatCode)
.setName(displayName)
.build();
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
index 70f55530b25c..194e8c727c7a 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
@@ -549,7 +549,7 @@ public class MtpDocumentsProviderTest extends AndroidTestCase {
public void testOpenDocument_writing() throws Exception {
setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
setupRoots(0, new MtpRoot[] {
- new MtpRoot(0, 0, "Storage", 0, 0, "")
+ new MtpRoot(0, 100, "Storage", 0, 0, "")
});
final String documentId = mProvider.createDocument("2", "text/plain", "test.txt");
{
@@ -692,6 +692,29 @@ public class MtpDocumentsProviderTest extends AndroidTestCase {
}
}
+ public void testCreateDocument() throws Exception {
+ setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
+ setupRoots(0, new MtpRoot[] {
+ new MtpRoot(0, 100, "Storage A", 100, 100, null)
+ });
+ final String documentId = mProvider.createDocument("1", "text/plain", "note.txt");
+ final Uri deviceUri = DocumentsContract.buildChildDocumentsUri(
+ MtpDocumentsProvider.AUTHORITY, "1");
+ final Uri storageUri = DocumentsContract.buildChildDocumentsUri(
+ MtpDocumentsProvider.AUTHORITY, "2");
+ mResolver.waitForNotification(storageUri, 1);
+ mResolver.waitForNotification(deviceUri, 1);
+ try (final Cursor cursor = mProvider.queryDocument(documentId, null)) {
+ assertTrue(cursor.moveToNext());
+ assertEquals(
+ "note.txt",
+ cursor.getString(cursor.getColumnIndex(Document.COLUMN_DISPLAY_NAME)));
+ assertEquals(
+ "text/plain",
+ cursor.getString(cursor.getColumnIndex(Document.COLUMN_MIME_TYPE)));
+ }
+ }
+
public void testCreateDocument_noWritingSupport() throws Exception {
setupProvider(MtpDatabaseConstants.FLAG_DATABASE_IN_MEMORY);
mMtpManager.addValidDevice(new MtpDeviceRecord(
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
index 30d529a768a2..f20bbeca11dd 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestMtpManager.java
@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import junit.framework.Assert;
public class TestMtpManager extends MtpManager {
public static final int CREATED_DOCUMENT_HANDLE = 1000;
@@ -151,6 +152,9 @@ public class TestMtpManager extends MtpManager {
@Override
int createDocument(int deviceId, MtpObjectInfo objectInfo, ParcelFileDescriptor source)
throws IOException {
+ Assert.assertNotSame(0, objectInfo.getStorageId());
+ Assert.assertNotSame(-1, objectInfo.getStorageId());
+ Assert.assertNotSame(0, objectInfo.getParent());
final String key = pack(deviceId, CREATED_DOCUMENT_HANDLE);
if (mObjectInfos.containsKey(key)) {
throw new IOException();