Throw IOException when missing default ringtone.

This is caught by Ringtone, and we then fall back to built-in
ringtone, which matches the expected CTS behavior.

Bug: 18610451
Change-Id: I234d17f7cf623b9b0af434e5d367aed28f203b14
This commit is contained in:
Jeff Sharkey
2014-12-09 15:27:19 -08:00
parent 10bef1d2f4
commit 87d76f6a3e
2 changed files with 11 additions and 6 deletions

View File

@@ -61,6 +61,7 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -979,6 +980,9 @@ public class MediaPlayer implements SubtitleController.Listener
// Redirect ringtones to go directly to underlying provider
uri = RingtoneManager.getActualDefaultRingtoneUri(context,
RingtoneManager.getDefaultType(uri));
if (uri == null) {
throw new FileNotFoundException("Failed to resolve default ringtone");
}
}
AssetFileDescriptor fd = null;

View File

@@ -51,6 +51,12 @@ public class Ringtone {
private final Context mContext;
private final AudioManager mAudioManager;
/**
* Flag indicating if we're allowed to fall back to remote playback using
* {@link #mRemotePlayer}. Typically this is false when we're the remote
* player and there is nobody else to delegate to.
*/
private final boolean mAllowRemote;
private final IRingtonePlayer mRemotePlayer;
private final Binder mRemoteToken;
@@ -211,12 +217,7 @@ public class Ringtone {
mLocalPlayer.setAudioAttributes(mAudioAttributes);
mLocalPlayer.prepare();
} catch (SecurityException e) {
destroyLocalPlayer();
if (!mAllowRemote) {
Log.w(TAG, "Remote playback not allowed: " + e);
}
} catch (IOException e) {
} catch (SecurityException | IOException e) {
destroyLocalPlayer();
if (!mAllowRemote) {
Log.w(TAG, "Remote playback not allowed: " + e);