Merge "Leave zen when apps set ringer-mode = non-silent (normal/vibrate)." into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b2344c81bc
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ interface IAudioService {
|
||||
|
||||
void setMicrophoneMute(boolean on, String callingPackage);
|
||||
|
||||
void setRingerMode(int ringerMode);
|
||||
void setRingerMode(int ringerMode, boolean checkZen);
|
||||
|
||||
int getRingerMode();
|
||||
|
||||
|
||||
@@ -260,7 +260,7 @@ public class ZenModeHelper {
|
||||
}
|
||||
}
|
||||
if (forcedRingerMode != -1) {
|
||||
mAudioManager.setRingerMode(forcedRingerMode);
|
||||
mAudioManager.setRingerMode(forcedRingerMode, false /*checkZen*/);
|
||||
ZenLog.traceSetRingerMode(forcedRingerMode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user