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

Commit 803db164 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android Git Automerger
Browse files

am aeb62686: Merge "Fallback to fallbackring if ringtone can\'t be played."

* commit 'aeb62686':
  Fallback to fallbackring if ringtone can't be played.
parents 8f97174a aeb62686
Loading
Loading
Loading
Loading
+45 −2
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.media;

import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources.NotFoundException;
import android.database.Cursor;
import android.net.Uri;
import android.os.Binder;
@@ -229,12 +231,16 @@ public class Ringtone {
            try {
                mRemotePlayer.play(mRemoteToken, canonicalUri, mStreamType);
            } catch (RemoteException e) {
                if (!playFallbackRingtone()) {
                    Log.w(TAG, "Problem playing ringtone: " + e);
                }
            }
        } else {
            if (!playFallbackRingtone()) {
                Log.w(TAG, "Neither local nor remote playback available");
            }
        }
    }

    /**
     * Stops a playing ringtone.
@@ -280,6 +286,43 @@ public class Ringtone {
        }
    }

    private boolean playFallbackRingtone() {
        if (mAudioManager.getStreamVolume(mStreamType) != 0) {
            int ringtoneType = RingtoneManager.getDefaultType(mUri);
            if (ringtoneType != -1 &&
                    RingtoneManager.getActualDefaultRingtoneUri(mContext, ringtoneType) != null) {
                // Default ringtone, try fallback ringtone.
                try {
                    AssetFileDescriptor afd = mContext.getResources().openRawResourceFd(
                            com.android.internal.R.raw.fallbackring);
                    if (afd != null) {
                        mLocalPlayer = new MediaPlayer();
                        if (afd.getDeclaredLength() < 0) {
                            mLocalPlayer.setDataSource(afd.getFileDescriptor());
                        } else {
                            mLocalPlayer.setDataSource(afd.getFileDescriptor(),
                                    afd.getStartOffset(),
                                    afd.getDeclaredLength());
                        }
                        mLocalPlayer.setAudioStreamType(mStreamType);
                        mLocalPlayer.prepare();
                        mLocalPlayer.start();
                        afd.close();
                        return true;
                    } else {
                        Log.e(TAG, "Could not load fallback ringtone");
                    }
                } catch (IOException ioe) {
                    destroyLocalPlayer();
                    Log.e(TAG, "Failed to open fallback ringtone");
                } catch (NotFoundException nfe) {
                    Log.e(TAG, "Fallback ringtone does not exist");
                }
            }
        }
        return false;
    }

    void setTitle(String title) {
        mTitle = title;
    }