From 88d2f781f0597129f5003d3768023c19cf6a3676 Mon Sep 17 00:00:00 2001 From: Daichi Hirono Date: Tue, 27 Oct 2015 16:41:06 +0900 Subject: [PATCH] Remove fullpath from MtpDatabase. If the remote MTP device is backed by typical file system, the file name is unique among files in a directory. However, MTP protocol itself does not guarantee the uniqueness of name so we cannot use fullpath as ID. Instead of fullpath, we use artifical ID generated by MtpDatabase itself. So we don't need to store fullpath in the database. BUG=25162822 Change-Id: I06598ce631a3221ed72e11734dbdaefef4c6349c --- .../src/com/android/mtp/MtpDatabase.java | 16 +++----- .../src/com/android/mtp/MtpDatabaseTest.java | 40 +++++++++---------- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java index 11e937b444767..ba4f48d3aa918 100644 --- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java +++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java @@ -30,10 +30,9 @@ class MtpDatabase { private static final String TABLE_MTP_DOCUMENTS = "MtpDocuments"; - static final String COLUMN_DEVICE_ID = "deviceId"; - static final String COLUMN_STORAGE_ID = "storageId"; - static final String COLUMN_OBJECT_HANDLE = "objectHandle"; - static final String COLUMN_FULL_PATH = "fullPath"; + static final String COLUMN_DEVICE_ID = "device_id"; + static final String COLUMN_STORAGE_ID = "storage_id"; + static final String COLUMN_OBJECT_HANDLE = "object_handle"; private static class OpenHelper extends SQLiteOpenHelper { private static final String CREATE_TABLE_QUERY = @@ -43,7 +42,6 @@ class MtpDatabase { COLUMN_DEVICE_ID + " INTEGER NOT NULL," + COLUMN_STORAGE_ID + " INTEGER NOT NULL," + COLUMN_OBJECT_HANDLE + " INTEGER," + - COLUMN_FULL_PATH + " TEXT NOT NULL," + DocumentsContract.Document.COLUMN_MIME_TYPE + " TEXT," + DocumentsContract.Document.COLUMN_DISPLAY_NAME + " TEXT NOT NULL," + DocumentsContract.Document.COLUMN_SUMMARY + " TEXT," + @@ -93,8 +91,6 @@ class MtpDatabase { values.put(COLUMN_DEVICE_ID, root.mDeviceId); values.put(COLUMN_STORAGE_ID, root.mStorageId); values.putNull(COLUMN_OBJECT_HANDLE); - values.put( - COLUMN_FULL_PATH, "/" + root.mDeviceId + "/" + escape(root.mDescription)); values.put(Document.COLUMN_MIME_TYPE, DocumentsContract.Document.MIME_TYPE_DIR); values.put(Document.COLUMN_DISPLAY_NAME, root.mDescription); values.putNull(Document.COLUMN_SUMMARY); @@ -113,7 +109,7 @@ class MtpDatabase { } @VisibleForTesting - void putDocument(int deviceId, String parentFullPath, MtpObjectInfo info) throws Exception { + void putDocument(int deviceId, MtpObjectInfo info) throws Exception { database.beginTransaction(); try { final String mimeType = CursorHelper.formatTypeToMimeType(info.getFormat()); @@ -134,9 +130,7 @@ class MtpDatabase { values.put(COLUMN_DEVICE_ID, deviceId); values.put(COLUMN_STORAGE_ID, info.getStorageId()); values.put(COLUMN_OBJECT_HANDLE, info.getObjectHandle()); - values.put(COLUMN_FULL_PATH, parentFullPath + "/" + escape(info.getName())); - values.put( - Document.COLUMN_MIME_TYPE, CursorHelper.formatTypeToMimeType(info.getFormat())); + values.put(Document.COLUMN_MIME_TYPE, mimeType); values.put(Document.COLUMN_DISPLAY_NAME, info.getName()); values.putNull(Document.COLUMN_SUMMARY); values.put( diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java index 7ce325423978d..bb6aeaf050c20 100644 --- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java +++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java @@ -1,6 +1,5 @@ package com.android.mtp; - import android.database.Cursor; import android.mtp.MtpConstants; import android.mtp.MtpObjectInfo; @@ -15,7 +14,6 @@ public class MtpDatabaseTest extends AndroidTestCase { MtpDatabase.COLUMN_DEVICE_ID, MtpDatabase.COLUMN_STORAGE_ID, MtpDatabase.COLUMN_OBJECT_HANDLE, - MtpDatabase.COLUMN_FULL_PATH, DocumentsContract.Document.COLUMN_MIME_TYPE, DocumentsContract.Document.COLUMN_DISPLAY_NAME, DocumentsContract.Document.COLUMN_SUMMARY, @@ -70,22 +68,23 @@ public class MtpDatabaseTest extends AndroidTestCase { assertEquals("deviceId", 0, cursor.getInt(1)); assertEquals("storageId", 1, cursor.getInt(2)); assertTrue("objectHandle", cursor.isNull(3)); - assertEquals("fullPath", "/0/Storage", cursor.getString(4)); - assertEquals("mimeType", DocumentsContract.Document.MIME_TYPE_DIR, cursor.getString(5)); - assertEquals("displayName", "Storage", cursor.getString(6)); - assertTrue("summary", cursor.isNull(7)); - assertTrue("lastModified", cursor.isNull(8)); - assertTrue("icon", cursor.isNull(9)); - assertEquals("flag", 0, cursor.getInt(10)); - assertEquals("size", 1000, cursor.getInt(11)); + assertEquals("mimeType", DocumentsContract.Document.MIME_TYPE_DIR, cursor.getString(4)); + assertEquals("displayName", "Storage", cursor.getString(5)); + assertTrue("summary", cursor.isNull(6)); + assertTrue("lastModified", cursor.isNull(7)); + assertTrue("icon", cursor.isNull(8)); + assertEquals("flag", 0, cursor.getInt(9)); + assertEquals("size", 1000, cursor.getInt(10)); cursor.moveToNext(); assertEquals("documentId", 2, cursor.getInt(0)); - assertEquals("fullPath", "/0/Storage", cursor.getString(4)); + assertEquals("displayName", "Storage", cursor.getString(5)); cursor.moveToNext(); assertEquals("documentId", 3, cursor.getInt(0)); - assertEquals("fullPath", "/0/%2F%40%23%25%26%3C%3EStorage", cursor.getString(4)); + assertEquals("displayName", "/@#%&<>Storage", cursor.getString(5)); + + cursor.close(); } public void testPutDocument() throws Exception { @@ -96,7 +95,7 @@ public class MtpDatabaseTest extends AndroidTestCase { builder.setStorageId(5); builder.setFormat(MtpConstants.FORMAT_TEXT); builder.setCompressedSize(1000); - database.putDocument(0, "/0/Storage", builder.build()); + database.putDocument(0, builder.build()); final Cursor cursor = database.queryChildDocuments(COLUMN_NAMES); assertEquals(1, cursor.getCount()); @@ -105,17 +104,16 @@ public class MtpDatabaseTest extends AndroidTestCase { assertEquals("deviceId", 0, cursor.getInt(1)); assertEquals("storageId", 5, cursor.getInt(2)); assertEquals("objectHandle", 100, cursor.getInt(3)); - assertEquals("fullPath", "/0/Storage/test.txt", cursor.getString(4)); - assertEquals("mimeType", "text/plain", cursor.getString(5)); - assertEquals("displayName", "test.txt", cursor.getString(6)); - assertTrue("summary", cursor.isNull(7)); - assertTrue("lastModified", cursor.isNull(8)); - assertTrue("icon", cursor.isNull(9)); + assertEquals("mimeType", "text/plain", cursor.getString(4)); + assertEquals("displayName", "test.txt", cursor.getString(5)); + assertTrue("summary", cursor.isNull(6)); + assertTrue("lastModified", cursor.isNull(7)); + assertTrue("icon", cursor.isNull(8)); assertEquals( "flag", DocumentsContract.Document.FLAG_SUPPORTS_DELETE | DocumentsContract.Document.FLAG_SUPPORTS_WRITE, - cursor.getInt(10)); - assertEquals("size", 1000, cursor.getInt(11)); + cursor.getInt(9)); + assertEquals("size", 1000, cursor.getInt(10)); } }