diff options
| author | 2011-07-19 17:27:24 -0700 | |
|---|---|---|
| committer | 2011-07-19 17:27:24 -0700 | |
| commit | c3d84701e04a2ad15f16c7fe1ad181b97f410814 (patch) | |
| tree | e65195d2208373f209ae33ba1d1fcbbbab699c1b | |
| parent | 67048842752cbc89564190f6111517d427b9cc6d (diff) | |
| parent | 72668b2c040b581b298b069f3b5af5ed7f212d89 (diff) | |
Merge "Fix issue 4499450: Unknown Ringer Mode"
| -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 253010c6d7f8..7258e115a7a7 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 0876bbfe373a..2e9b64c9637e 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); |