diff options
| author | John Spurlock <jspurlock@google.com> | 2014-10-15 12:03:48 -0400 |
|---|---|---|
| committer | John Spurlock <jspurlock@google.com> | 2014-10-15 13:32:31 -0400 |
| commit | e5b42d97f6fd3eb0220ea84f21e60d530d93fc46 (patch) | |
| tree | d9bad83e8085723b374b745ed9437bc9023a17e2 /media | |
| parent | 5873c3e862b83fb0c64b52b86bdd8f26ff8ffb5f (diff) | |
| download | frameworks_base-e5b42d97f6fd3eb0220ea84f21e60d530d93fc46.zip frameworks_base-e5b42d97f6fd3eb0220ea84f21e60d530d93fc46.tar.gz frameworks_base-e5b42d97f6fd3eb0220ea84f21e60d530d93fc46.tar.bz2 | |
Leave zen when apps set ringer-mode = non-silent (normal/vibrate).
Apps can end up in priority mode by setting ringer-mode = silent.
Now they can leave priority mode by setting ringer-mode = non-silent.
(normal or vibrate)
Bug: 17884168
Change-Id: I54c853885f4ae9ee618041dd7ac6ab0663fc7b37
Diffstat (limited to 'media')
| -rw-r--r-- | media/java/android/media/AudioManager.java | 11 | ||||
| -rw-r--r-- | media/java/android/media/AudioService.java | 23 | ||||
| -rw-r--r-- | media/java/android/media/IAudioService.aidl | 2 |
3 files changed, 31 insertions, 5 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 559c247..69c1142 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -982,12 +982,21 @@ public class AudioManager { * @see #isVolumeFixed() */ public void setRingerMode(int ringerMode) { + setRingerMode(ringerMode, true /*checkZen*/); + } + + /** + * @see #setRingerMode(int) + * @param checkZen Update zen mode if necessary to compensate. + * @hide + */ + public void setRingerMode(int ringerMode, boolean checkZen) { if (!isValidRingerMode(ringerMode)) { return; } IAudioService service = getService(); try { - service.setRingerMode(ringerMode); + service.setRingerMode(ringerMode, checkZen); } catch (RemoteException e) { Log.e(TAG, "Dead object in setRingerMode", e); } diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 5aee2e8..b0bf4a1 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -66,6 +66,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.os.Vibrator; import android.provider.Settings; +import android.provider.Settings.Global; import android.provider.Settings.System; import android.telecom.TelecomManager; import android.text.TextUtils; @@ -1175,7 +1176,7 @@ public class AudioService extends IAudioService.Stub { } else { newRingerMode = AudioManager.RINGER_MODE_NORMAL; } - setRingerMode(newRingerMode); + setRingerMode(newRingerMode, false /*checkZen*/); } } @@ -1738,7 +1739,7 @@ public class AudioService extends IAudioService.Stub { } /** @see AudioManager#setRingerMode(int) */ - public void setRingerMode(int ringerMode) { + public void setRingerMode(int ringerMode, boolean checkZen) { if (mUseFixedVolume || isPlatformTelevision()) { return; } @@ -1746,6 +1747,9 @@ public class AudioService extends IAudioService.Stub { if ((ringerMode == AudioManager.RINGER_MODE_VIBRATE) && !mHasVibrator) { ringerMode = AudioManager.RINGER_MODE_SILENT; } + if (checkZen) { + checkZen(ringerMode); + } if (ringerMode != getRingerMode()) { setRingerModeInt(ringerMode, true); // Send sticky broadcast @@ -1753,6 +1757,19 @@ public class AudioService extends IAudioService.Stub { } } + private void checkZen(int ringerMode) { + // leave zen when callers set ringer-mode = normal or vibrate + final int zen = Global.getInt(mContentResolver, Global.ZEN_MODE, Global.ZEN_MODE_OFF); + if (ringerMode != AudioManager.RINGER_MODE_SILENT && zen != Global.ZEN_MODE_OFF) { + final long ident = Binder.clearCallingIdentity(); + try { + Global.putInt(mContentResolver, Global.ZEN_MODE, Global.ZEN_MODE_OFF); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + } + private void setRingerModeInt(int ringerMode, boolean persist) { synchronized(mSettingsLock) { mRingerMode = ringerMode; @@ -2993,7 +3010,7 @@ public class AudioService extends IAudioService.Stub { break; } - setRingerMode(ringerMode); + setRingerMode(ringerMode, false /*checkZen*/); mPrevVolDirection = direction; diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 1c41432..39b074e 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -76,7 +76,7 @@ interface IAudioService { void setMicrophoneMute(boolean on, String callingPackage); - void setRingerMode(int ringerMode); + void setRingerMode(int ringerMode, boolean checkZen); int getRingerMode(); |
