diff --git a/media/java/android/media/PlayerBase.java b/media/java/android/media/PlayerBase.java index 0f7dc9a819c7f..b262d97cfb8e1 100644 --- a/media/java/android/media/PlayerBase.java +++ b/media/java/android/media/PlayerBase.java @@ -181,10 +181,15 @@ public abstract class PlayerBase { * @return */ boolean isRestricted_sync() { + // check app ops + if (mHasAppOpsPlayAudio) { + return false; + } + // check bypass flag if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0) { return false; } - return !mHasAppOpsPlayAudio; + return true; } // Abstract methods a subclass needs to implement diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java index 5ede1d5f7c914..9fafda48d6521 100644 --- a/media/java/android/media/SoundPool.java +++ b/media/java/android/media/SoundPool.java @@ -505,27 +505,31 @@ public class SoundPool { } private boolean isRestricted() { - IAudioService service = getService(); - boolean cameraSoundForced = false; - - try { - cameraSoundForced = service.isCameraSoundForced(); - } catch (RemoteException e) { - Log.e(TAG, "Cannot access AudioService in isRestricted()"); - } - - if (cameraSoundForced && - ((mAttributes.getAllFlags() & AudioAttributes.FLAG_AUDIBILITY_ENFORCED) != 0) -// FIXME: should also check usage when set properly by camera app -// && (mAttributes.getUsage() == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) - ) { + // check app ops + if (mHasAppOpsPlayAudio) { return false; } - + // check bypass flag if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY) != 0) { return false; } - return !mHasAppOpsPlayAudio; + // check force audibility flag and camera restriction + if ((mAttributes.getAllFlags() & AudioAttributes.FLAG_AUDIBILITY_ENFORCED) != 0) { +// FIXME: should also check usage when set properly by camera app +// && (mAttributes.getUsage() == AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + boolean cameraSoundForced = false; + try { + cameraSoundForced = getService().isCameraSoundForced(); + } catch (RemoteException e) { + Log.e(TAG, "Cannot access AudioService in isRestricted()"); + } catch (NullPointerException e) { + Log.e(TAG, "Null AudioService in isRestricted()"); + } + if (cameraSoundForced) { + return false; + } + } + return true; } private void updateAppOpsPlayAudio() {