summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2014-10-15 12:03:48 -0400
committerJohn Spurlock <jspurlock@google.com>2014-10-15 13:32:31 -0400
commite5b42d97f6fd3eb0220ea84f21e60d530d93fc46 (patch)
treed9bad83e8085723b374b745ed9437bc9023a17e2 /media
parent5873c3e862b83fb0c64b52b86bdd8f26ff8ffb5f (diff)
downloadframeworks_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.java11
-rw-r--r--media/java/android/media/AudioService.java23
-rw-r--r--media/java/android/media/IAudioService.aidl2
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();