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();