Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbb9333b authored by Justin Klaassen's avatar Justin Klaassen
Browse files

Fallback to internal alarm ringtone if necessary

Bug: 25177293

If the default system alarm ringtone is invalid or malformed then
RingtoneManager will return a null Ringtone. In which case we now
fallback to playing our own internal alarm ringtone.

Change-Id: I1beeec0fc8998ad684e67062ffc0fd0d03f66f68
parent e100e102
Loading
Loading
Loading
Loading

res/raw/in_call_alarm.ogg

deleted100644 → 0
−20.7 KiB

File deleted.

+13 −11
Original line number Diff line number Diff line
@@ -168,7 +168,7 @@ public final class AsyncRingtonePlayer {
     */
    private static Uri getInCallRingtoneUri(Context context) {
        final String packageName = context.getPackageName();
        return Uri.parse("android.resource://" + packageName + "/" + R.raw.in_call_alarm);
        return Uri.parse("android.resource://" + packageName + "/" + R.raw.alarm_expire);
    }

    /**
@@ -176,7 +176,7 @@ public final class AsyncRingtonePlayer {
     */
    private static Uri getFallbackRingtoneUri(Context context) {
        final String packageName = context.getPackageName();
        return Uri.parse("android.resource://" + packageName + "/" + R.raw.fallbackring);
        return Uri.parse("android.resource://" + packageName + "/" + R.raw.alarm_expire);
    }

    /**
@@ -184,7 +184,8 @@ public final class AsyncRingtonePlayer {
     */
    private void checkAsyncRingtonePlayerThread() {
        if (Looper.myLooper() != mHandler.getLooper()) {
            LogUtils.e(TAG, "Must be on the AsyncRingtonePlayer thread!", new IllegalStateException());
            LogUtils.e(TAG, "Must be on the AsyncRingtonePlayer thread!",
                    new IllegalStateException());
        }
    }

@@ -491,6 +492,12 @@ public final class AsyncRingtonePlayer {
            // attempt to fetch the specified ringtone
            mRingtone = RingtoneManager.getRingtone(context, ringtoneUri);

            if (mRingtone == null) {
                // fall back to the default ringtone
                final Uri defaultUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
                mRingtone = RingtoneManager.getRingtone(context, defaultUri);
            }

            // Attempt to enable looping the ringtone.
            try {
                mSetLoopingMethod.invoke(mRingtone, true);
@@ -502,16 +509,11 @@ public final class AsyncRingtonePlayer {
                mRingtone = null;
            }

            if (mRingtone == null) {
                // fall back to the default ringtone
                final Uri defaultUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
                mRingtone = RingtoneManager.getRingtone(context, defaultUri);
            }

            // if we don't have a ringtone at this point there isn't much recourse
            if (mRingtone == null) {
                LogUtils.i(TAG, "Unable to locate alarm ringtone.");
                return false;
                LogUtils.i(TAG, "Unable to locate alarm ringtone, using internal fallback " +
                        "ringtone.");
                mRingtone = RingtoneManager.getRingtone(context, getFallbackRingtoneUri(context));
            }

            if (Utils.isLOrLater()) {