diff options
author | Daniel Martà <mvdan@mvdan.cc> | 2015-07-16 11:29:56 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-10-28 13:30:31 -0700 |
commit | f826b24a8bcac56a578f98af260a71628139ef38 (patch) | |
tree | 6ab845b3612aaffa93fdcefa9bd9f6c93b6f60ae /media | |
parent | e54a9e2debfb73c05dc6189d0334f5bed2cc4f72 (diff) | |
download | frameworks_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.java | 14 |
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 |