diff options
| author | 2020-04-20 21:40:50 +0800 | |
|---|---|---|
| committer | 2020-04-22 11:34:42 +0800 | |
| commit | 82062b99eb0ee390e9c1ef16f573515d06c40356 (patch) | |
| tree | 71a1a74fa5176316ff8070285494d20220d55655 | |
| parent | 19ded228a3d84e07be054484ddfb0c94a6b9ebe4 (diff) | |
MTP: Fix MTP SD card issue
Modify MTP access path for SD card in accordance with Storage Permission change
Bug: 150188237
Test: atest MtpTests
Test: Manual test: MTP file browsing / copy on SD card
Change-Id: I7da699ca04844514827af18b0318c66d2a3fbc6e
| -rwxr-xr-x | media/java/android/mtp/MtpDatabase.java | 3 | ||||
| -rw-r--r-- | media/java/android/mtp/MtpStorage.java | 2 | ||||
| -rw-r--r-- | media/tests/MtpTests/src/android/mtp/MtpDatabaseTest.java | 32 |
3 files changed, 35 insertions, 2 deletions
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java index a01f0c6bfa38..aba74e518a22 100755 --- a/media/java/android/mtp/MtpDatabase.java +++ b/media/java/android/mtp/MtpDatabase.java @@ -454,7 +454,8 @@ public class MtpDatabase implements AutoCloseable { } @VisibleForNative - private int getNumObjects(int storageID, int format, int parent) { + @VisibleForTesting + public int getNumObjects(int storageID, int format, int parent) { List<MtpStorageManager.MtpObject> objs = mManager.getObjects(parent, format, storageID); if (objs == null) { diff --git a/media/java/android/mtp/MtpStorage.java b/media/java/android/mtp/MtpStorage.java index ba752633718c..88c32a3ea72b 100644 --- a/media/java/android/mtp/MtpStorage.java +++ b/media/java/android/mtp/MtpStorage.java @@ -36,7 +36,7 @@ public class MtpStorage { public MtpStorage(StorageVolume volume, int storageId) { mStorageId = storageId; - mPath = volume.getInternalPath(); + mPath = volume.getPath(); mDescription = volume.getDescription(null); mRemovable = volume.isRemovable(); mMaxFileSize = volume.getMaxFileSize(); diff --git a/media/tests/MtpTests/src/android/mtp/MtpDatabaseTest.java b/media/tests/MtpTests/src/android/mtp/MtpDatabaseTest.java index e0cd1917cff6..e2e8ff4946e0 100644 --- a/media/tests/MtpTests/src/android/mtp/MtpDatabaseTest.java +++ b/media/tests/MtpTests/src/android/mtp/MtpDatabaseTest.java @@ -22,6 +22,7 @@ import android.graphics.BitmapFactory; import android.os.Build; import android.os.FileUtils; import android.os.UserHandle; +import android.os.storage.StorageManager; import android.os.storage.StorageVolume; import android.util.Log; @@ -33,6 +34,7 @@ import com.android.internal.util.Preconditions; import org.junit.After; import org.junit.Assert; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -58,7 +60,9 @@ public class MtpDatabaseTest { private static final String TEST_DIRNAME = "/TestIs"; private static final int MAIN_STORAGE_ID = 0x10001; + private static final int SCND_STORAGE_ID = 0x20001; private static final String MAIN_STORAGE_ID_STR = Integer.toHexString(MAIN_STORAGE_ID); + private static final String SCND_STORAGE_ID_STR = Integer.toHexString(SCND_STORAGE_ID); private static final File mMainStorageDir = new File(MAIN_STORAGE_DIR); @@ -281,4 +285,32 @@ public class MtpDatabaseTest { testThumbnail(handlePngBad, pngFileBad, false); } + + @Test + @SmallTest + public void testMtpDatabaseExtStorage() throws IOException { + int numObj; + StorageVolume[] mVolumes; + + logMethodName(); + + mVolumes = StorageManager.getVolumeList(UserHandle.myUserId(), 0); + // Currently it may need manual setup for 2nd storage on virtual device testing. + // Thus only run test when 2nd storage exists. + Assume.assumeTrue( + "Skip when 2nd storage not available, volume numbers = " + mVolumes.length, + mVolumes.length >= 2); + + for (int ii = 0; ii < mVolumes.length; ii++) { + StorageVolume volume = mVolumes[ii]; + // Skip Actual Main storage (Internal Storage), + // since we use manipulated path as testing Main storage + if (ii > 0) + mMtpDatabase.addStorage(volume); + } + + numObj = mMtpDatabase.getNumObjects(SCND_STORAGE_ID, 0, 0xFFFFFFFF); + Assert.assertTrue( + "Fail to get objects in 2nd storage, object numbers = " + numObj, numObj >= 0); + } } |