summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/Camera.java43
1 files changed, 29 insertions, 14 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 1b80d3d5ee57..9154ce0b1455 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -1660,23 +1660,29 @@ public class Camera {
* @see ShutterCallback
*/
public final boolean enableShutterSound(boolean enabled) {
- if (!enabled) {
- IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
- IAudioService audioService = IAudioService.Stub.asInterface(b);
- try {
- if (audioService.isCameraSoundForced()) return false;
- } catch (RemoteException e) {
- Log.e(TAG, "Audio service is unavailable for queries");
+ boolean canDisableShutterSound = true;
+ IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
+ IAudioService audioService = IAudioService.Stub.asInterface(b);
+ try {
+ if (audioService.isCameraSoundForced()) {
+ canDisableShutterSound = false;
}
+ } catch (RemoteException e) {
+ Log.e(TAG, "Audio service is unavailable for queries");
+ }
+ if (!enabled && !canDisableShutterSound) {
+ return false;
}
synchronized (mShutterSoundLock) {
- if (enabled && mHasAppOpsPlayAudio) {
- Log.i(TAG, "Shutter sound is not allowed by AppOpsManager");
- return false;
- }
+ mShutterSoundEnabledFromApp = enabled;
+ // Return the result of _enableShutterSound(enabled) in all cases.
+ // If the shutter sound can be disabled, disable it when the device is in DnD mode.
boolean ret = _enableShutterSound(enabled);
- if (ret) {
- mShutterSoundEnabledFromApp = enabled;
+ if (enabled && !mHasAppOpsPlayAudio) {
+ Log.i(TAG, "Shutter sound is not allowed by AppOpsManager");
+ if (canDisableShutterSound) {
+ _enableShutterSound(false);
+ }
}
return ret;
}
@@ -1739,9 +1745,18 @@ public class Camera {
}
if (oldHasAppOpsPlayAudio != mHasAppOpsPlayAudio) {
if (!mHasAppOpsPlayAudio) {
+ IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
+ IAudioService audioService = IAudioService.Stub.asInterface(b);
+ try {
+ if (audioService.isCameraSoundForced()) {
+ return;
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Audio service is unavailable for queries");
+ }
_enableShutterSound(false);
} else {
- _enableShutterSound(mShutterSoundEnabledFromApp);
+ enableShutterSound(mShutterSoundEnabledFromApp);
}
}
}