Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f5f3f0f authored by Faye Yan's avatar Faye Yan Committed by Android (Google) Code Review
Browse files

Merge "Ambient Activation p2.1" into main

parents 7748d9bf ab56696c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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()
+3 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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 =
+16 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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();

@@ -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
     */
@@ -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);
+4 −4
Original line number Diff line number Diff line
@@ -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);