Merge "Leave zen when apps set ringer-mode = non-silent (normal/vibrate)." into lmp-dev

This commit is contained in:
John Spurlock
2014-10-15 21:04:32 +00:00
committed by Android (Google) Code Review
4 changed files with 32 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -76,7 +76,7 @@ interface IAudioService {
void setMicrophoneMute(boolean on, String callingPackage);
void setRingerMode(int ringerMode);
void setRingerMode(int ringerMode, boolean checkZen);
int getRingerMode();

View File

@@ -260,7 +260,7 @@ public class ZenModeHelper {
}
}
if (forcedRingerMode != -1) {
mAudioManager.setRingerMode(forcedRingerMode);
mAudioManager.setRingerMode(forcedRingerMode, false /*checkZen*/);
ZenLog.traceSetRingerMode(forcedRingerMode);
}
}