diff options
author | 2021-03-16 04:07:45 +0000 | |
---|---|---|
committer | 2021-03-16 04:07:45 +0000 | |
commit | c7a5fdd81c2d6da97bd98b46be7451f5f062f2a5 (patch) | |
tree | 1fa7f0889990297f67edd006ffc13a6fe8da2b9a | |
parent | ac40826ea923d2b7612a7506bb98b252dc770971 (diff) | |
parent | 1af26bd238845211dc6a13002c4ce39d0e19fced (diff) |
Merge "Mute microphone when the mic privacy toggle is enabled" into sc-dev
-rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 68f10a5106ef..1950710a36e0 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -61,6 +61,8 @@ import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; import android.content.res.Configuration; import android.database.ContentObserver; +import android.hardware.SensorPrivacyManager; +import android.hardware.SensorPrivacyManagerInternal; import android.hardware.hdmi.HdmiAudioSystemClient; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiPlaybackClient; @@ -520,6 +522,7 @@ public class AudioService extends IAudioService.Stub /** Interface for UserManagerService. */ private final UserManagerInternal mUserManagerInternal; private final ActivityManagerInternal mActivityManagerInternal; + private final SensorPrivacyManagerInternal mSensorPrivacyManagerInternal; private final UserRestrictionsListener mUserRestrictionsListener = new AudioServiceUserRestrictionsListener(); @@ -720,9 +723,12 @@ public class AudioService extends IAudioService.Stub private String mEnabledSurroundFormats; private boolean mSurroundModeChanged; + private boolean mSupportsMicPrivacyToggle; + private boolean mMicMuteFromSwitch; private boolean mMicMuteFromApi; private boolean mMicMuteFromRestrictions; + private boolean mMicMuteFromPrivacyToggle; // caches the value returned by AudioSystem.isMicrophoneMuted() private boolean mMicMuteFromSystemCached; @@ -822,6 +828,8 @@ public class AudioService extends IAudioService.Stub mUserManagerInternal = LocalServices.getService(UserManagerInternal.class); mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); + mSensorPrivacyManagerInternal = + LocalServices.getService(SensorPrivacyManagerInternal.class); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mAudioEventWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "handleAudioEvent"); @@ -831,6 +839,9 @@ public class AudioService extends IAudioService.Stub mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); mHasVibrator = mVibrator == null ? false : mVibrator.hasVibrator(); + mSupportsMicPrivacyToggle = mContext.getPackageManager() + .hasSystemFeature(PackageManager.FEATURE_MICROPHONE_TOGGLE); + // Initialize volume // Priority 1 - Android Property // Priority 2 - Audio Policy Service @@ -1106,6 +1117,16 @@ public class AudioService extends IAudioService.Stub } } + if (mSupportsMicPrivacyToggle) { + mSensorPrivacyManagerInternal.addSensorPrivacyListenerForAllUsers( + SensorPrivacyManager.Sensors.MICROPHONE, (userId, enabled) -> { + if (userId == getCurrentUserId()) { + mMicMuteFromPrivacyToggle = enabled; + setMicrophoneMuteNoCallerCheck(getCurrentUserId()); + } + }); + } + mNm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); sendMsg(mAudioHandler, @@ -3840,11 +3861,12 @@ public class AudioService extends IAudioService.Stub * @return true if microphone is reported as muted by primary HAL */ public boolean isMicrophoneMuted() { - return mMicMuteFromSystemCached; + return mMicMuteFromSystemCached && !mMicMuteFromPrivacyToggle; } private boolean isMicrophoneSupposedToBeMuted() { - return mMicMuteFromSwitch || mMicMuteFromRestrictions || mMicMuteFromApi; + return mMicMuteFromSwitch || mMicMuteFromRestrictions || mMicMuteFromApi + || mMicMuteFromPrivacyToggle; } private void setMicrophoneMuteNoCallerCheck(int userId) { @@ -7474,6 +7496,13 @@ public class AudioService extends IAudioService.Stub // the current audio focus owner is no longer valid mMediaFocusControl.discardAudioFocusOwner(); + if (mSupportsMicPrivacyToggle) { + mMicMuteFromPrivacyToggle = mSensorPrivacyManagerInternal + .isSensorPrivacyEnabled(getCurrentUserId(), + SensorPrivacyManager.Sensors.MICROPHONE); + setMicrophoneMuteNoCallerCheck(getCurrentUserId()); + } + // load volume settings for new user readAudioSettings(true /*userSwitch*/); // preserve STREAM_MUSIC volume from one user to the next. |