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

* commit 'aeb6268645d571dfc9f2d387a7ad2471039ddb54':
  Fallback to fallbackring if ringtone can't be played.
This commit is contained in:
Marco Nelissen
2012-11-16 13:03:33 -08:00
committed by Android Git Automerger

View File

@@ -18,6 +18,8 @@ package android.media;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources.NotFoundException;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Binder; import android.os.Binder;
@@ -229,12 +231,16 @@ public class Ringtone {
try { try {
mRemotePlayer.play(mRemoteToken, canonicalUri, mStreamType); mRemotePlayer.play(mRemoteToken, canonicalUri, mStreamType);
} catch (RemoteException e) { } catch (RemoteException e) {
if (!playFallbackRingtone()) {
Log.w(TAG, "Problem playing ringtone: " + e); Log.w(TAG, "Problem playing ringtone: " + e);
} }
}
} else { } else {
if (!playFallbackRingtone()) {
Log.w(TAG, "Neither local nor remote playback available"); Log.w(TAG, "Neither local nor remote playback available");
} }
} }
}
/** /**
* Stops a playing ringtone. * 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) { void setTitle(String title) {
mTitle = title; mTitle = title;
} }