Loading core/java/android/app/AppOpsManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -2809,7 +2809,8 @@ public class AppOpsManager { "RECORD_AUDIO_SANDBOXED").setDefaultMode(AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_TRIGGER_AUDIO, OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO, "RECEIVE_SANDBOX_TRIGGER_AUDIO").build(), "RECEIVE_SANDBOX_TRIGGER_AUDIO") .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO, OPSTR_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO, "RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO").build() Loading services/core/java/com/android/server/appop/DiscreteRegistry.java +3 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import static android.app.AppOpsManager.OP_NONE; import static android.app.AppOpsManager.OP_PHONE_CALL_CAMERA; import static android.app.AppOpsManager.OP_PHONE_CALL_MICROPHONE; import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.flagsToString; import static android.app.AppOpsManager.getUidStateName; Loading Loading @@ -134,7 +135,8 @@ final class DiscreteRegistry { private static final String PROPERTY_DISCRETE_OPS_LIST = "discrete_history_ops_cslist"; private static final String DEFAULT_DISCRETE_OPS = OP_FINE_LOCATION + "," + OP_COARSE_LOCATION + "," + OP_CAMERA + "," + OP_RECORD_AUDIO + "," + OP_PHONE_CALL_MICROPHONE + "," + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO + "," + OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; private static final long DEFAULT_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(7).toMillis(); private static final long MAXIMUM_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(30).toMillis(); private static final long DEFAULT_DISCRETE_HISTORY_QUANTIZATION = Loading services/core/java/com/android/server/policy/AppOpsPolicy.java +16 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.server.policy; import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; Loading Loading @@ -72,6 +75,9 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat private static final boolean SYSPROP_HOTWORD_DETECTION_SERVICE_REQUIRED = SystemProperties.getBoolean("ro.hotword.detection_service_required", false); //TODO(b/289087412): import this from the flag value in set up in device config. private static final boolean IS_VOICE_ACTIVATION_OP_ENABLED = false; @NonNull private final Object mLock = new Object(); Loading Loading @@ -202,6 +208,16 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } } /** * @return the op that should be noted for the voice activations of the app by detected hotword. */ public static int getVoiceActivationOp() { if (IS_VOICE_ACTIVATION_OP_ENABLED) { return OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; } return OP_RECORD_AUDIO_HOTWORD; } /** * @hide */ Loading Loading @@ -321,7 +337,6 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } } private int resolveDatasourceOp(int code, int uid, @NonNull String packageName, @Nullable String attributionTag) { code = resolveRecordAudioOp(code, uid); Loading services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java +4 −4 Original line number Diff line number Diff line Loading @@ -753,11 +753,11 @@ abstract class DetectorSession { "Failed to obtain permission RECORD_AUDIO for identity " + mVoiceInteractorIdentity); } int hotwordOp = AppOpsManager.strOpToOp( AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD); mAppOpsManager.noteOpNoThrow(hotwordOp, mAppOpsManager.noteOpNoThrow( AppOpsPolicy.getVoiceActivationOp(), mVoiceInteractorIdentity.uid, mVoiceInteractorIdentity.packageName, mVoiceInteractorIdentity.attributionTag, HOTWORD_DETECTION_OP_MESSAGE); mVoiceInteractorIdentity.attributionTag, HOTWORD_DETECTION_OP_MESSAGE); } else { enforcePermissionForDataDelivery(mContext, mVoiceInteractorIdentity, RECORD_AUDIO, HOTWORD_DETECTION_OP_MESSAGE); Loading Loading
core/java/android/app/AppOpsManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -2809,7 +2809,8 @@ public class AppOpsManager { "RECORD_AUDIO_SANDBOXED").setDefaultMode(AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_TRIGGER_AUDIO, OPSTR_RECEIVE_SANDBOX_TRIGGER_AUDIO, "RECEIVE_SANDBOX_TRIGGER_AUDIO").build(), "RECEIVE_SANDBOX_TRIGGER_AUDIO") .setDefaultMode(AppOpsManager.MODE_ALLOWED).build(), new AppOpInfo.Builder(OP_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO, OPSTR_RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO, "RECEIVE_SANDBOX_NEGATIVE_DATA_AUDIO").build() Loading
services/core/java/com/android/server/appop/DiscreteRegistry.java +3 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import static android.app.AppOpsManager.OP_NONE; import static android.app.AppOpsManager.OP_PHONE_CALL_CAMERA; import static android.app.AppOpsManager.OP_PHONE_CALL_MICROPHONE; import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.app.AppOpsManager.flagsToString; import static android.app.AppOpsManager.getUidStateName; Loading Loading @@ -134,7 +135,8 @@ final class DiscreteRegistry { private static final String PROPERTY_DISCRETE_OPS_LIST = "discrete_history_ops_cslist"; private static final String DEFAULT_DISCRETE_OPS = OP_FINE_LOCATION + "," + OP_COARSE_LOCATION + "," + OP_CAMERA + "," + OP_RECORD_AUDIO + "," + OP_PHONE_CALL_MICROPHONE + "," + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO; + OP_PHONE_CALL_CAMERA + "," + OP_RECEIVE_AMBIENT_TRIGGER_AUDIO + "," + OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; private static final long DEFAULT_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(7).toMillis(); private static final long MAXIMUM_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(30).toMillis(); private static final long DEFAULT_DISCRETE_HISTORY_QUANTIZATION = Loading
services/core/java/com/android/server/policy/AppOpsPolicy.java +16 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.server.policy; import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; import static android.app.AppOpsManager.OP_RECORD_AUDIO_HOTWORD; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; Loading Loading @@ -72,6 +75,9 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat private static final boolean SYSPROP_HOTWORD_DETECTION_SERVICE_REQUIRED = SystemProperties.getBoolean("ro.hotword.detection_service_required", false); //TODO(b/289087412): import this from the flag value in set up in device config. private static final boolean IS_VOICE_ACTIVATION_OP_ENABLED = false; @NonNull private final Object mLock = new Object(); Loading Loading @@ -202,6 +208,16 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } } /** * @return the op that should be noted for the voice activations of the app by detected hotword. */ public static int getVoiceActivationOp() { if (IS_VOICE_ACTIVATION_OP_ENABLED) { return OP_RECEIVE_SANDBOX_TRIGGER_AUDIO; } return OP_RECORD_AUDIO_HOTWORD; } /** * @hide */ Loading Loading @@ -321,7 +337,6 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat } } private int resolveDatasourceOp(int code, int uid, @NonNull String packageName, @Nullable String attributionTag) { code = resolveRecordAudioOp(code, uid); Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/DetectorSession.java +4 −4 Original line number Diff line number Diff line Loading @@ -753,11 +753,11 @@ abstract class DetectorSession { "Failed to obtain permission RECORD_AUDIO for identity " + mVoiceInteractorIdentity); } int hotwordOp = AppOpsManager.strOpToOp( AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD); mAppOpsManager.noteOpNoThrow(hotwordOp, mAppOpsManager.noteOpNoThrow( AppOpsPolicy.getVoiceActivationOp(), mVoiceInteractorIdentity.uid, mVoiceInteractorIdentity.packageName, mVoiceInteractorIdentity.attributionTag, HOTWORD_DETECTION_OP_MESSAGE); mVoiceInteractorIdentity.attributionTag, HOTWORD_DETECTION_OP_MESSAGE); } else { enforcePermissionForDataDelivery(mContext, mVoiceInteractorIdentity, RECORD_AUDIO, HOTWORD_DETECTION_OP_MESSAGE); Loading