summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorDaniel Martí <mvdan@mvdan.cc>2015-07-16 11:29:56 -0700
committerSteve Kondik <steve@cyngn.com>2015-10-28 13:30:31 -0700
commitf826b24a8bcac56a578f98af260a71628139ef38 (patch)
tree6ab845b3612aaffa93fdcefa9bd9f6c93b6f60ae /media
parente54a9e2debfb73c05dc6189d0334f5bed2cc4f72 (diff)
downloadframeworks_base-f826b24a8bcac56a578f98af260a71628139ef38.zip
frameworks_base-f826b24a8bcac56a578f98af260a71628139ef38.tar.gz
frameworks_base-f826b24a8bcac56a578f98af260a71628139ef38.tar.bz2
Add basic support for VorbisComment DATE tags
Since Android doesn't support DATE tag itself, just use it to extract the year from the ISO date (if the YEAR tag isn't present) and fill media database with it. Require: http://review.cyanogenmod.org/#/c/104193/ Change-Id: I30f86bb05cc8ab158ca538f899a124a4bf8eb9f0
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/MediaScanner.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 159f457..ff46398 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -61,6 +61,8 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Internal service helper that no-one should use directly.
@@ -351,6 +353,11 @@ public class MediaScanner
private final BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
+ // For basic VorbisComment DATE tag support. It can take two forms, YYYY
+ // or YYYY-MM. This pattern is used to extract the year for compatibility
+ // with the ID3 YEAR tag.
+ private static final Pattern DATE_YEAR_DETECT_PATTERN = Pattern.compile("^(\\d{4})(-\\d{2})?$");
+
private static class FileEntry {
long mRowId;
String mPath;
@@ -615,6 +622,13 @@ public class MediaScanner
mGenre = getGenreName(value);
} else if (name.equalsIgnoreCase("year") || name.startsWith("year;")) {
mYear = parseSubstring(value, 0, 0);
+ } else if (mYear == 0 && name.equalsIgnoreCase("date") || name.startsWith("date;")) {
+ // Since Android doesn't support DATE tag itself, just use it to extract
+ // the year, if the YEAR tag isn't present.
+ Matcher m = DATE_YEAR_DETECT_PATTERN.matcher(value);
+ if (m.find()) {
+ mYear = parseSubstring(m.group(1), 0, 0);
+ }
} else if (name.equalsIgnoreCase("tracknumber") || name.startsWith("tracknumber;")) {
// track number might be of the form "2/12"
// we just read the number before the slash