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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user