summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Spurlock <jspurlock@google.com> 2014-12-17 20:13:00 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2014-12-17 20:13:02 +0000
commite7f301a05344376f9065ef09e3b3ef360469bcb3 (patch)
treea2c1cee2a8e23b9a4ce07219e34fa9c3d3155a27
parentc6de288eabfcb6b3623fb6a6c3dba1071d7e0c78 (diff)
parent57627794b682235afd60adfb235fee46d32f54e2 (diff)
Merge "Audio policy: Fix deprecated shouldVibrate api." into lmp-mr1-dev
-rw-r--r--media/java/android/media/AudioService.java58
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java2
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java56
3 files changed, 66 insertions, 50 deletions
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index f0150d46c4d3..8a543cec5300 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1841,12 +1841,22 @@ public class AudioService extends IAudioService.Stub {
}
public void setRingerModeExternal(int ringerMode, String caller) {
- setRingerMode(ringerMode, caller, true /*external*/);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ setRingerMode(ringerMode, caller, true /*external*/);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
public void setRingerModeInternal(int ringerMode, String caller) {
enforceSelfOrSystemUI("setRingerModeInternal");
- setRingerMode(ringerMode, caller, false /*external*/);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ setRingerMode(ringerMode, caller, false /*external*/);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
private void setRingerMode(int ringerMode, String caller, boolean external) {
@@ -1860,26 +1870,28 @@ public class AudioService extends IAudioService.Stub {
if ((ringerMode == AudioManager.RINGER_MODE_VIBRATE) && !mHasVibrator) {
ringerMode = AudioManager.RINGER_MODE_SILENT;
}
- final int ringerModeInternal = getRingerModeInternal();
- final int ringerModeExternal = getRingerModeExternal();
- if (external) {
- setRingerModeExt(ringerMode);
- if (mRingerModeDelegate != null) {
- ringerMode = mRingerModeDelegate.onSetRingerModeExternal(ringerModeExternal,
- ringerMode, caller, ringerModeInternal);
- }
- if (ringerMode != ringerModeInternal) {
- setRingerModeInt(ringerMode, true /*persist*/);
- }
- } else /*internal*/ {
- if (ringerMode != ringerModeInternal) {
- setRingerModeInt(ringerMode, true /*persist*/);
- }
- if (mRingerModeDelegate != null) {
- ringerMode = mRingerModeDelegate.onSetRingerModeInternal(ringerModeInternal,
- ringerMode, caller, ringerModeExternal);
+ synchronized (mSettingsLock) {
+ final int ringerModeInternal = getRingerModeInternal();
+ final int ringerModeExternal = getRingerModeExternal();
+ if (external) {
+ setRingerModeExt(ringerMode);
+ if (mRingerModeDelegate != null) {
+ ringerMode = mRingerModeDelegate.onSetRingerModeExternal(ringerModeExternal,
+ ringerMode, caller, ringerModeInternal);
+ }
+ if (ringerMode != ringerModeInternal) {
+ setRingerModeInt(ringerMode, true /*persist*/);
+ }
+ } else /*internal*/ {
+ if (ringerMode != ringerModeInternal) {
+ setRingerModeInt(ringerMode, true /*persist*/);
+ }
+ if (mRingerModeDelegate != null) {
+ ringerMode = mRingerModeDelegate.onSetRingerModeInternal(ringerModeInternal,
+ ringerMode, caller, ringerModeExternal);
+ }
+ setRingerModeExt(ringerMode);
}
- setRingerModeExt(ringerMode);
}
}
@@ -1968,10 +1980,10 @@ public class AudioService extends IAudioService.Stub {
switch (getVibrateSetting(vibrateType)) {
case AudioManager.VIBRATE_SETTING_ON:
- return getRingerModeInternal() != AudioManager.RINGER_MODE_SILENT;
+ return getRingerModeExternal() != AudioManager.RINGER_MODE_SILENT;
case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
- return getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE;
+ return getRingerModeExternal() == AudioManager.RINGER_MODE_VIBRATE;
case AudioManager.VIBRATE_SETTING_OFF:
// return false, even for incoming calls
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 650f0e27dc11..825627f6a793 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -927,7 +927,7 @@ public class NotificationManagerService extends SystemService {
Settings.Global.DEVICE_PROVISIONED, 0)) {
mDisableNotificationEffects = true;
}
- mZenModeHelper.updateZenMode();
+ mZenModeHelper.readZenModeFromSetting();
mUserProfiles.updateCache(getContext());
listenForCallState();
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 0f9a59b0c668..841fc21f5ad0 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -221,21 +221,26 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
}
public void setZenMode(int zenMode, String reason) {
+ setZenMode(zenMode, reason, true);
+ }
+
+ private void setZenMode(int zenMode, String reason, boolean setRingerMode) {
ZenLog.traceSetZenMode(zenMode, reason);
- Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, zenMode);
+ if (mZenMode == zenMode) return;
+ ZenLog.traceUpdateZenMode(mZenMode, zenMode);
+ mZenMode = zenMode;
+ Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, mZenMode);
+ if (setRingerMode) {
+ applyZenToRingerMode();
+ }
+ applyRestrictions();
+ mHandler.postDispatchOnZenModeChanged();
}
- public void updateZenMode() {
- final int oldMode = mZenMode;
+ public void readZenModeFromSetting() {
final int newMode = Global.getInt(mContext.getContentResolver(),
Global.ZEN_MODE, Global.ZEN_MODE_OFF);
- if (oldMode != newMode) {
- ZenLog.traceUpdateZenMode(oldMode, newMode);
- }
- mZenMode = newMode;
- applyRestrictions();
- onZenUpdated(oldMode, newMode);
- dispatchOnZenModeChanged();
+ setZenMode(newMode, "setting");
}
private void applyRestrictions() {
@@ -297,18 +302,16 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
dispatchOnConfigChanged();
final String val = Integer.toString(mConfig.hashCode());
Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
- updateZenMode();
+ applyRestrictions();
return true;
}
- private void onZenUpdated(int oldZen, int newZen) {
+ private void applyZenToRingerMode() {
if (mAudioManager == null) return;
- if (oldZen == newZen) return;
-
// force the ringer mode into compliance
final int ringerModeInternal = mAudioManager.getRingerModeInternal();
int newRingerModeInternal = ringerModeInternal;
- switch (newZen) {
+ switch (mZenMode) {
case Global.ZEN_MODE_NO_INTERRUPTIONS:
if (ringerModeInternal != AudioManager.RINGER_MODE_SILENT) {
mPreviousRingerMode = ringerModeInternal;
@@ -337,7 +340,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
int ringerModeExternalOut = ringerModeNew;
int newZen = -1;
- switch(ringerModeNew) {
+ switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT:
if (isChange) {
if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) {
@@ -356,7 +359,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
break;
}
if (newZen != -1) {
- mHandler.postSetZenMode(newZen, "ringerModeInternal");
+ setZenMode(newZen, "ringerModeInternal", false /*setRingerMode*/);
}
if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) {
@@ -374,7 +377,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
final boolean isVibrate = ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE;
int newZen = -1;
- switch(ringerModeNew) {
+ switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT:
if (isChange) {
if (mZenMode == Global.ZEN_MODE_OFF) {
@@ -394,7 +397,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
break;
}
if (newZen != -1) {
- mHandler.postSetZenMode(newZen, "ringerModeExternal");
+ setZenMode(newZen, "ringerModeExternal", false /*setRingerMode*/);
}
ZenLog.traceSetRingerModeExternal(ringerModeOld, ringerModeNew, caller, ringerModeInternal,
@@ -516,27 +519,28 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
public void update(Uri uri) {
if (ZEN_MODE.equals(uri)) {
- updateZenMode();
+ readZenModeFromSetting();
}
}
}
private class H extends Handler {
- private static final int MSG_SET_ZEN = 1;
+ private static final int MSG_DISPATCH = 1;
private H(Looper looper) {
super(looper);
}
- private void postSetZenMode(int zen, String reason) {
- obtainMessage(MSG_SET_ZEN, zen, 0, reason).sendToTarget();
+ private void postDispatchOnZenModeChanged() {
+ removeMessages(MSG_DISPATCH);
+ sendEmptyMessage(MSG_DISPATCH);
}
@Override
public void handleMessage(Message msg) {
- switch(msg.what) {
- case MSG_SET_ZEN:
- setZenMode(msg.arg1, (String) msg.obj);
+ switch (msg.what) {
+ case MSG_DISPATCH:
+ dispatchOnZenModeChanged();
break;
}
}