summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClark Scheff <clark@cyngn.com>2014-11-12 12:36:00 -0800
committerMatt Garnes <matt@cyngn.com>2014-11-12 12:36:00 -0800
commitf78dc7da91530ca54386a8730655c0ef02802c52 (patch)
tree003a2a3692d25ea3d07260b9520909a2d2cd4183
parent0a17d0168720f00fd19e5ab267b4a26b37260bf8 (diff)
downloadandroid_packages_apps_DeskClock-f78dc7da91530ca54386a8730655c0ef02802c52.tar.gz
android_packages_apps_DeskClock-f78dc7da91530ca54386a8730655c0ef02802c52.tar.bz2
android_packages_apps_DeskClock-f78dc7da91530ca54386a8730655c0ef02802c52.zip
Alarms: Fallback to defualt when uri is invalid
This fixes an issue where the media is no longer in the media store but since the URI uses the "content" scheme it is deemed a valid URI even though the media is no longer available. We check if the content is actually available and if not we will fallback to the default ringtone. Change-Id: I7b77265dfbf410681a245b3b020d838f3d1c7eba
-rwxr-xr-xsrc/com/android/deskclock/AlarmClockFragment.java48
-rwxr-xr-xsrc/com/android/deskclock/Utils.java33
-rwxr-xr-xsrc/com/android/deskclock/alarms/AlarmKlaxon.java12
3 files changed, 54 insertions, 39 deletions
diff --git a/src/com/android/deskclock/AlarmClockFragment.java b/src/com/android/deskclock/AlarmClockFragment.java
index eb88ce072..f73792d19 100755
--- a/src/com/android/deskclock/AlarmClockFragment.java
+++ b/src/com/android/deskclock/AlarmClockFragment.java
@@ -995,6 +995,11 @@ public class AlarmClockFragment extends DeskClockFragment implements
// The view was converted but somehow lost its tag.
setNewHolder(view);
}
+ if (!Utils.isRingToneUriValid(mContext, alarm.alert)) {
+ alarm.alert = RingtoneManager.getActualDefaultRingtoneUri(context,
+ RingtoneManager.TYPE_ALARM);
+ asyncUpdateAlarm(alarm, false);
+ }
final ItemHolder itemHolder = (ItemHolder) tag;
itemHolder.alarm = alarm;
@@ -1272,7 +1277,7 @@ public class AlarmClockFragment extends DeskClockFragment implements
if (Alarm.NO_RINGTONE_URI.equals(alarm.alert)) {
ringtone = mContext.getResources().getString(R.string.silent_alarm_summary);
} else {
- ringtitle = getRingToneTitle(alarm.alert);
+ ringtitle = getRingToneTitle(alarm);
if (ringtitle != null) {
ringtone = ringtitle;
} else {
@@ -1377,17 +1382,18 @@ public class AlarmClockFragment extends DeskClockFragment implements
/**
* Does a read-through cache for ringtone titles.
*
- * @param uri The uri of the ringtone.
+ * @param Alarm The alarm to get the ringtone title from.
* @return The ringtone title. {@literal null} if no matching ringtone found.
*/
- private String getRingToneTitle(Uri uri) {
+ private String getRingToneTitle(Alarm alarm) {
+ Uri uri = alarm.alert;
// Try the cache first
String title = mRingtoneTitleCache.getString(uri.toString());
if (title == null) {
if (uri.equals(AlarmMediaPlayer.RANDOM_URI)) {
title = mContext.getResources().getString(R.string.alarm_type_random);
} else {
- if (isRingToneUriValid(uri)) {
+ if (Utils.isRingToneUriValid(mContext, uri)) {
if (uri.getAuthority().equals(DOC_AUTHORITY)
|| uri.getAuthority().equals(DOC_DOWNLOAD)) {
title = getDisplayNameFromDatabase(mContext,uri);
@@ -1406,40 +1412,6 @@ public class AlarmClockFragment extends DeskClockFragment implements
return title;
}
- private boolean isRingToneUriValid(Uri uri) {
- if (uri.getScheme().contentEquals("file")) {
- File f = new File(uri.getPath());
- if (f.exists()) {
- return true;
- }
- } else if (uri.getScheme().contentEquals("content")) {
- Cursor cursor = null;
- try {
- cursor = mContext.getContentResolver().query(uri,
- new String[] {
- MediaStore.Audio.Media.TITLE,
- MediaStore.Audio.Media.DISPLAY_NAME
- }, null, null, null);
- if (cursor != null && cursor.getCount() > 0) {
- if (uri.getAuthority().equals(DOC_AUTHORITY)) {
- cursor.moveToFirst();
- mDisplayName = cursor.getString(1);
- }
- return true;
- }
- } catch (Exception e) {
- LogUtils.e("Get ringtone uri Exception: e.toString=" + e.toString());
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- return true;
- }
-
- return false;
- }
-
private String getDisplayNameFromDatabase(Context context,Uri uri) {
String selection = null;
String[] selectionArgs = null;
diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java
index 02d92852e..41157f073 100755
--- a/src/com/android/deskclock/Utils.java
+++ b/src/com/android/deskclock/Utils.java
@@ -27,6 +27,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
+import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
@@ -37,6 +38,8 @@ import android.os.Build;
import android.os.Handler;
import android.os.SystemClock;
import android.preference.PreferenceManager;
+import android.provider.MediaStore;
+import android.provider.Settings;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
@@ -53,12 +56,14 @@ import android.view.animation.DecelerateInterpolator;
import android.widget.TextClock;
import android.widget.TextView;
+import com.android.deskclock.provider.Alarm;
import com.android.deskclock.stopwatch.Stopwatches;
import com.android.deskclock.timer.Timers;
import com.android.deskclock.worldclock.CityObj;
import com.android.deskclock.worldclock.db.DbCities;
import com.android.deskclock.worldclock.db.DbCity;
+import java.io.File;
import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -662,4 +667,32 @@ public class Utils {
}
return sShortWeekdays;
}
+
+ public static boolean isRingToneUriValid(Context context, Uri uri) {
+ if (uri.equals(AlarmMediaPlayer.RANDOM_URI) || uri.equals(Alarm.NO_RINGTONE_URI)) {
+ return true;
+ } else if (uri.getScheme().contentEquals("file")) {
+ File f = new File(uri.getPath());
+ if (f.exists()) {
+ return true;
+ }
+ } else if (uri.getScheme().contentEquals("content")) {
+ Cursor cursor = null;
+ try {
+ cursor = context.getContentResolver().query(uri,
+ new String[] {MediaStore.Audio.Media.TITLE}, null, null, null);
+ if (cursor != null && cursor.getCount() > 0) {
+ return true;
+ }
+ } catch (Exception e) {
+ LogUtils.e("Get ringtone uri Exception: e.toString=" + e.toString());
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ return false;
+ }
}
diff --git a/src/com/android/deskclock/alarms/AlarmKlaxon.java b/src/com/android/deskclock/alarms/AlarmKlaxon.java
index eace0bac7..ac61816c3 100755
--- a/src/com/android/deskclock/alarms/AlarmKlaxon.java
+++ b/src/com/android/deskclock/alarms/AlarmKlaxon.java
@@ -34,6 +34,7 @@ import android.os.Vibrator;
import com.android.deskclock.LogUtils;
import com.android.deskclock.AlarmMediaPlayer;
import com.android.deskclock.R;
+import com.android.deskclock.Utils;
import com.android.deskclock.provider.AlarmInstance;
import java.io.IOException;
@@ -121,8 +122,17 @@ public class AlarmKlaxon {
// Fall back on the default alarm if the database does not have an
// alarm stored.
if (alarmNoise == null) {
- alarmNoise = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
+ // Try to get the actual default first, this will be the one set by the user
+ alarmNoise = RingtoneManager.getActualDefaultRingtoneUri(context,
+ RingtoneManager.TYPE_ALARM);
+ // if the actual default is null, fallback to the system default.
+ if (alarmNoise == null) {
+ alarmNoise = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
+ }
LogUtils.v("Using default alarm: " + alarmNoise.toString());
+ } else if (!Utils.isRingToneUriValid(context, alarmNoise)) {
+ alarmNoise = RingtoneManager.getActualDefaultRingtoneUri(context,
+ RingtoneManager.TYPE_ALARM);
}
final Context appContext = context.getApplicationContext();