Support Windows style file path for a playlist
Unlike LegacyMediaScanner, Windows style file path in a playlist file is
not supported now. '\' of the path is replaced with '/' before querying
to db to support Windows style file path.
Test: atest ModernMediaScannerTest
Bug: 149272534
Change-Id: I279aaa765946872ccadce8e4177f7c762ce71999
diff --git a/src/com/android/providers/media/scan/PlaylistResolver.java b/src/com/android/providers/media/scan/PlaylistResolver.java
index 83488e1..e9b6168 100644
--- a/src/com/android/providers/media/scan/PlaylistResolver.java
+++ b/src/com/android/providers/media/scan/PlaylistResolver.java
@@ -179,6 +179,7 @@
@NonNull ContentResolver resolver, @NonNull Uri uri, int itemIndex, File itemFile)
throws IOException {
final Uri audioUri = MediaStore.Audio.Media.getContentUri(MediaStore.getVolumeName(uri));
+ itemFile = new File(itemFile.getAbsolutePath().replace('\\', '/'));
try (Cursor cursor = resolver.query(audioUri,
new String[] { MediaColumns._ID }, MediaColumns.DATA + "=?",
new String[] { itemFile.getCanonicalPath() }, null)) {
diff --git a/tests/res/raw/test_m3u.m3u b/tests/res/raw/test_m3u.m3u
index 0ba6e4c..be9142a 100644
--- a/tests/res/raw/test_m3u.m3u
+++ b/tests/res/raw/test_m3u.m3u
@@ -8,3 +8,9 @@
#EXTINF:321,Example Artist - Example title
003.mp3
+
+#Example to test windows style file path
+..\Music\004.mp3
+
+#Example to test case-sensitive
+../music/005.mp3
diff --git a/tests/res/raw/test_pls.pls b/tests/res/raw/test_pls.pls
index 8ce5eea..3f0c01b 100644
--- a/tests/res/raw/test_pls.pls
+++ b/tests/res/raw/test_pls.pls
@@ -10,5 +10,11 @@
Title2=Just some local audio that is 2mins long
Length2=120
-NumberOfEntries=3
+File4=..\Music\004.mp3
+Title4=Window style file path
+
+File5=../music/005.mp3
+Title5=case insensitive
+
+NumberOfEntries=5
Version=2
diff --git a/tests/res/raw/test_wpl.wpl b/tests/res/raw/test_wpl.wpl
index 8f821ad..016ef6d 100644
--- a/tests/res/raw/test_wpl.wpl
+++ b/tests/res/raw/test_wpl.wpl
@@ -4,7 +4,7 @@
<meta name="Generator" content="Microsoft Windows Media Player -- 11.0.5721.5145"/>
<meta name="AverageRating" content="33"/>
<meta name="TotalDuration" content="1102"/>
- <meta name="ItemCount" content="3"/>
+ <meta name="ItemCount" content="5"/>
<author/>
<title>Bach Organ Works</title>
</head>
@@ -13,6 +13,8 @@
<media src="001.mp3"/>
<media src="../Music/002.mp3"/>
<media src="003.mp3" tid="{35B39D45-94D8-40E1-8FC2-9F6714191E47}"/>
+ <media src="..\Music\004.mp3"/>
+ <media src="../music/005.mp3"/>
</seq>
</body>
</smil>
diff --git a/tests/src/com/android/providers/media/scan/ModernMediaScannerTest.java b/tests/src/com/android/providers/media/scan/ModernMediaScannerTest.java
index 781f22a..fbefb44 100644
--- a/tests/src/com/android/providers/media/scan/ModernMediaScannerTest.java
+++ b/tests/src/com/android/providers/media/scan/ModernMediaScannerTest.java
@@ -249,6 +249,8 @@
stage(R.raw.test_audio, new File(music, "001.mp3"));
stage(R.raw.test_audio, new File(music, "002.mp3"));
stage(R.raw.test_audio, new File(music, "003.mp3"));
+ stage(R.raw.test_audio, new File(music, "004.mp3"));
+ stage(R.raw.test_audio, new File(music, "005.mp3"));
stage(res, new File(music, name));
mModern.scanDirectory(mDir, REASON_UNKNOWN);
@@ -268,13 +270,17 @@
try (Cursor cursor = mIsolatedResolver.query(membersUri, new String[] {
MediaColumns.DISPLAY_NAME
}, null, null, MediaStore.Audio.Playlists.Members.PLAY_ORDER + " ASC")) {
- assertEquals(3, cursor.getCount());
+ assertEquals(5, cursor.getCount());
cursor.moveToNext();
assertEquals("001.mp3", cursor.getString(0));
cursor.moveToNext();
assertEquals("002.mp3", cursor.getString(0));
cursor.moveToNext();
assertEquals("003.mp3", cursor.getString(0));
+ cursor.moveToNext();
+ assertEquals("004.mp3", cursor.getString(0));
+ cursor.moveToNext();
+ assertEquals("005.mp3", cursor.getString(0));
}
// Delete one of the media files and rescan
@@ -285,7 +291,7 @@
try (Cursor cursor = mIsolatedResolver.query(membersUri, new String[] {
MediaColumns.DISPLAY_NAME
}, null, null, MediaStore.Audio.Playlists.Members.PLAY_ORDER + " ASC")) {
- assertEquals(2, cursor.getCount());
+ assertEquals(4, cursor.getCount());
cursor.moveToNext();
assertEquals("001.mp3", cursor.getString(0));
cursor.moveToNext();