Merge "Audio policy: Fix deprecated shouldVibrate api." into lmp-mr1-dev

This commit is contained in:
John Spurlock
2014-12-17 20:13:00 +00:00
committed by Android (Google) Code Review
3 changed files with 67 additions and 51 deletions

View File

@@ -1841,12 +1841,22 @@ public class AudioService extends IAudioService.Stub {
} }
public void setRingerModeExternal(int ringerMode, String caller) { 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) { public void setRingerModeInternal(int ringerMode, String caller) {
enforceSelfOrSystemUI("setRingerModeInternal"); 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) { 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) { if ((ringerMode == AudioManager.RINGER_MODE_VIBRATE) && !mHasVibrator) {
ringerMode = AudioManager.RINGER_MODE_SILENT; ringerMode = AudioManager.RINGER_MODE_SILENT;
} }
final int ringerModeInternal = getRingerModeInternal(); synchronized (mSettingsLock) {
final int ringerModeExternal = getRingerModeExternal(); final int ringerModeInternal = getRingerModeInternal();
if (external) { final int ringerModeExternal = getRingerModeExternal();
setRingerModeExt(ringerMode); if (external) {
if (mRingerModeDelegate != null) { setRingerModeExt(ringerMode);
ringerMode = mRingerModeDelegate.onSetRingerModeExternal(ringerModeExternal, if (mRingerModeDelegate != null) {
ringerMode, caller, ringerModeInternal); 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);
} }
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);
} }
} }
@@ -1968,10 +1980,10 @@ public class AudioService extends IAudioService.Stub {
switch (getVibrateSetting(vibrateType)) { switch (getVibrateSetting(vibrateType)) {
case AudioManager.VIBRATE_SETTING_ON: case AudioManager.VIBRATE_SETTING_ON:
return getRingerModeInternal() != AudioManager.RINGER_MODE_SILENT; return getRingerModeExternal() != AudioManager.RINGER_MODE_SILENT;
case AudioManager.VIBRATE_SETTING_ONLY_SILENT: case AudioManager.VIBRATE_SETTING_ONLY_SILENT:
return getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE; return getRingerModeExternal() == AudioManager.RINGER_MODE_VIBRATE;
case AudioManager.VIBRATE_SETTING_OFF: case AudioManager.VIBRATE_SETTING_OFF:
// return false, even for incoming calls // return false, even for incoming calls

View File

@@ -927,7 +927,7 @@ public class NotificationManagerService extends SystemService {
Settings.Global.DEVICE_PROVISIONED, 0)) { Settings.Global.DEVICE_PROVISIONED, 0)) {
mDisableNotificationEffects = true; mDisableNotificationEffects = true;
} }
mZenModeHelper.updateZenMode(); mZenModeHelper.readZenModeFromSetting();
mUserProfiles.updateCache(getContext()); mUserProfiles.updateCache(getContext());
listenForCallState(); listenForCallState();

View File

@@ -221,21 +221,26 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
} }
public void setZenMode(int zenMode, String reason) { public void setZenMode(int zenMode, String reason) {
ZenLog.traceSetZenMode(zenMode, reason); setZenMode(zenMode, reason, true);
Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, zenMode);
} }
public void updateZenMode() { private void setZenMode(int zenMode, String reason, boolean setRingerMode) {
final int oldMode = mZenMode; ZenLog.traceSetZenMode(zenMode, reason);
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 readZenModeFromSetting() {
final int newMode = Global.getInt(mContext.getContentResolver(), final int newMode = Global.getInt(mContext.getContentResolver(),
Global.ZEN_MODE, Global.ZEN_MODE_OFF); Global.ZEN_MODE, Global.ZEN_MODE_OFF);
if (oldMode != newMode) { setZenMode(newMode, "setting");
ZenLog.traceUpdateZenMode(oldMode, newMode);
}
mZenMode = newMode;
applyRestrictions();
onZenUpdated(oldMode, newMode);
dispatchOnZenModeChanged();
} }
private void applyRestrictions() { private void applyRestrictions() {
@@ -297,18 +302,16 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
dispatchOnConfigChanged(); dispatchOnConfigChanged();
final String val = Integer.toString(mConfig.hashCode()); final String val = Integer.toString(mConfig.hashCode());
Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val); Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
updateZenMode(); applyRestrictions();
return true; return true;
} }
private void onZenUpdated(int oldZen, int newZen) { private void applyZenToRingerMode() {
if (mAudioManager == null) return; if (mAudioManager == null) return;
if (oldZen == newZen) return;
// force the ringer mode into compliance // force the ringer mode into compliance
final int ringerModeInternal = mAudioManager.getRingerModeInternal(); final int ringerModeInternal = mAudioManager.getRingerModeInternal();
int newRingerModeInternal = ringerModeInternal; int newRingerModeInternal = ringerModeInternal;
switch (newZen) { switch (mZenMode) {
case Global.ZEN_MODE_NO_INTERRUPTIONS: case Global.ZEN_MODE_NO_INTERRUPTIONS:
if (ringerModeInternal != AudioManager.RINGER_MODE_SILENT) { if (ringerModeInternal != AudioManager.RINGER_MODE_SILENT) {
mPreviousRingerMode = ringerModeInternal; mPreviousRingerMode = ringerModeInternal;
@@ -337,7 +340,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
int ringerModeExternalOut = ringerModeNew; int ringerModeExternalOut = ringerModeNew;
int newZen = -1; int newZen = -1;
switch(ringerModeNew) { switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT: case AudioManager.RINGER_MODE_SILENT:
if (isChange) { if (isChange) {
if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) { if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) {
@@ -356,7 +359,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
break; break;
} }
if (newZen != -1) { if (newZen != -1) {
mHandler.postSetZenMode(newZen, "ringerModeInternal"); setZenMode(newZen, "ringerModeInternal", false /*setRingerMode*/);
} }
if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) { if (isChange || newZen != -1 || ringerModeExternal != ringerModeExternalOut) {
@@ -374,7 +377,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
final boolean isVibrate = ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE; final boolean isVibrate = ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE;
int newZen = -1; int newZen = -1;
switch(ringerModeNew) { switch (ringerModeNew) {
case AudioManager.RINGER_MODE_SILENT: case AudioManager.RINGER_MODE_SILENT:
if (isChange) { if (isChange) {
if (mZenMode == Global.ZEN_MODE_OFF) { if (mZenMode == Global.ZEN_MODE_OFF) {
@@ -394,7 +397,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
break; break;
} }
if (newZen != -1) { if (newZen != -1) {
mHandler.postSetZenMode(newZen, "ringerModeExternal"); setZenMode(newZen, "ringerModeExternal", false /*setRingerMode*/);
} }
ZenLog.traceSetRingerModeExternal(ringerModeOld, ringerModeNew, caller, ringerModeInternal, ZenLog.traceSetRingerModeExternal(ringerModeOld, ringerModeNew, caller, ringerModeInternal,
@@ -516,27 +519,28 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate {
public void update(Uri uri) { public void update(Uri uri) {
if (ZEN_MODE.equals(uri)) { if (ZEN_MODE.equals(uri)) {
updateZenMode(); readZenModeFromSetting();
} }
} }
} }
private class H extends Handler { private class H extends Handler {
private static final int MSG_SET_ZEN = 1; private static final int MSG_DISPATCH = 1;
private H(Looper looper) { private H(Looper looper) {
super(looper); super(looper);
} }
private void postSetZenMode(int zen, String reason) { private void postDispatchOnZenModeChanged() {
obtainMessage(MSG_SET_ZEN, zen, 0, reason).sendToTarget(); removeMessages(MSG_DISPATCH);
sendEmptyMessage(MSG_DISPATCH);
} }
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
switch(msg.what) { switch (msg.what) {
case MSG_SET_ZEN: case MSG_DISPATCH:
setZenMode(msg.arg1, (String) msg.obj); dispatchOnZenModeChanged();
break; break;
} }
} }