diff options
Diffstat (limited to 'media/java/android')
-rw-r--r-- | media/java/android/media/AudioManager.java | 21 | ||||
-rw-r--r-- | media/java/android/media/AudioService.java | 6 |
2 files changed, 27 insertions, 0 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 253010c..7258e11 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -297,6 +297,9 @@ public class AudioManager { */ public static final int RINGER_MODE_NORMAL = 2; + // maximum valid ringer mode value. Values must start from 0 and be contiguous. + private static final int RINGER_MODE_MAX = RINGER_MODE_NORMAL; + /** * Vibrate type that corresponds to the ringer. * @@ -540,6 +543,21 @@ public class AudioManager { } /** + * Checks valid ringer mode values. + * + * @return true if the ringer mode indicated is valid, false otherwise. + * + * @see #setRingerMode(int) + * @hide + */ + public static boolean isValidRingerMode(int ringerMode) { + if (ringerMode < 0 || ringerMode > RINGER_MODE_MAX) { + return false; + } + return true; + } + + /** * Returns the maximum volume index for a particular stream. * * @param streamType The stream type whose maximum volume index is returned. @@ -601,6 +619,9 @@ public class AudioManager { * @see #getRingerMode() */ public void setRingerMode(int ringerMode) { + if (!isValidRingerMode(ringerMode)) { + return; + } IAudioService service = getService(); try { service.setRingerMode(ringerMode); diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index cdeb563..682560a 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -424,6 +424,12 @@ public class AudioService extends IAudioService.Stub { final ContentResolver cr = mContentResolver; mRingerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL); + // sanity check in case the settings are restored from a device with incompatible + // ringer modes + if (!AudioManager.isValidRingerMode(mRingerMode)) { + mRingerMode = AudioManager.RINGER_MODE_NORMAL; + System.putInt(cr, System.MODE_RINGER, mRingerMode); + } mVibrateSetting = System.getInt(cr, System.VIBRATE_ON, 0); |