From 816cf52abd8f45770f0ac922bbb819184ed4b90f Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Mon, 6 Jul 2009 09:19:10 -0700 Subject: [PATCH] Fix the DEFAULT_SORT_ORDER value for media files. Changing this is OK, because existing app will have the old value compiled in as a literal, and so will continue to (not) work in the same way as before. Add code to media key generator to give a leading ascii \001 the special meaning of "sort first". --- api/4.xml | 4 ++-- api/current.xml | 4 ++-- core/java/android/provider/MediaStore.java | 16 +++++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/api/4.xml b/api/4.xml index b117a8734c982..c8a2e83fd1368 100644 --- a/api/4.xml +++ b/api/4.xml @@ -88821,7 +88821,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""title"" + value=""title_key"" static="true" final="true" deprecated="not deprecated" @@ -88918,7 +88918,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""title"" + value=""title_key"" static="true" final="true" deprecated="not deprecated" diff --git a/api/current.xml b/api/current.xml index bedec9072c724..b1e042bcc3ec1 100644 --- a/api/current.xml +++ b/api/current.xml @@ -104491,7 +104491,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""title"" + value=""title_key"" static="true" final="true" deprecated="not deprecated" @@ -104588,7 +104588,7 @@ type="java.lang.String" transient="false" volatile="false" - value=""title"" + value=""title_key"" static="true" final="true" deprecated="not deprecated" diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index bc7b5be046f17..21e5865fef701 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -722,9 +722,15 @@ public final class MediaStore */ public static String keyFor(String name) { if (name != null) { + boolean sortfirst = false; if (name.equals(android.media.MediaFile.UNKNOWN_STRING)) { return "\001"; } + // Check if the first character is \001. We use this to + // force sorting of certain special files, like the silent ringtone. + if (name.startsWith("\001")) { + sortfirst = true; + } name = name.trim().toLowerCase(); if (name.startsWith("the ")) { name = name.substring(4); @@ -753,7 +759,11 @@ public final class MediaStore b.append('.'); } name = b.toString(); - return DatabaseUtils.getCollationKey(name); + String key = DatabaseUtils.getCollationKey(name); + if (sortfirst) { + key = "\001" + key; + } + return key; } else { return ""; } @@ -800,7 +810,7 @@ public final class MediaStore /** * The default sort order for this table */ - public static final String DEFAULT_SORT_ORDER = TITLE; + public static final String DEFAULT_SORT_ORDER = TITLE_KEY; /** * Activity Action: Start SoundRecorder application. @@ -897,7 +907,7 @@ public final class MediaStore /** * The default sort order for this table */ - public static final String DEFAULT_SORT_ORDER = TITLE; + public static final String DEFAULT_SORT_ORDER = TITLE_KEY; /** * The ID of the audio file