RESTRICT AUTOMERGE Disable the Trusted Hotword requirement

The requirement to use a sandboxed HotwordDetectionService to avoid
incurring the mic indicator will be added back in a future release.
With this change, SoundTrigger events and hotword-source audio do not
incur the mic indicator for any process.

This change adds back the permissions logic from
I3275647d0f9a6e3ce8b97a556f56723b49170c8e, adjusted to account for the
changes from I6d63c99e2d31e3f668070ac82afed71ff6672c9e (permissions now
checked in LegacyPermissionManagerService and a new op is used).

We preserve the behavior of showing the indicator when the detected
event is delivered from the Trusted Hotword process (no false-positives
here, so we can accurately show it).

Fix: 234026976
Test: manual - dsp and non-dsp; true and false positives; mute mic
 sensor - events aren't delivered and no dialog is shown, hotword still
 works after unmuting; mute mic and restart, unmute after starting reco;
 Trusted and non-Trusted hotwording
Test: atest CameraMicIndicatorsPermissionTest
Test: atest HotwordDetectionServiceBasicTest
Test: atest android.cts.statsdatom.appops.AppOpsTests#testAppOps
Change-Id: I68f2f37b5ce835e7fd8649b382eaee9fc299ec79
Merged-In: I68f2f37b5ce835e7fd8649b382eaee9fc299ec79
(cherry picked from commit 3f961f24f4)
This commit is contained in:
Ahaan Ugale
2021-08-17 20:40:36 -07:00
parent bd26701a6b
commit c5e8f7f59d
3 changed files with 10 additions and 12 deletions

View File

@@ -413,8 +413,8 @@ public class LegacyPermissionManagerService extends ILegacyPermissionManager.Stu
return result;
}
mContext.getSystemService(AppOpsManager.class).noteOpNoThrow(
AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO, uid, packageName,
attributionTag, reason);
AppOpsManager.OP_RECORD_AUDIO_HOTWORD, uid, packageName, attributionTag,
reason);
return result;
}
}

View File

@@ -202,9 +202,8 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat
}
private static boolean isHotwordDetectionServiceRequired(PackageManager pm) {
// The HotwordDetectionService APIs aren't ready yet for Auto or TV.
return !(pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
|| pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK));
// Usage of the HotwordDetectionService won't be enforced until a later release.
return false;
}
@Override

View File

@@ -46,11 +46,9 @@ import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPH
import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED;
import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART;
import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECT_UNEXPECTED_CALLBACK;
import static com.android.server.voiceinteraction.SoundTriggerSessionPermissionsDecorator.enforcePermissionForPreflight;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.ContentCaptureOptions;
import android.content.Context;
@@ -1162,11 +1160,12 @@ final class HotwordDetectionConnection {
// TODO: Share this code with SoundTriggerMiddlewarePermission.
private void enforcePermissionsForDataDelivery() {
Binder.withCleanCallingIdentity(() -> {
enforcePermissionForPreflight(mContext, mVoiceInteractorIdentity, RECORD_AUDIO);
int hotwordOp = AppOpsManager.strOpToOp(AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD);
mContext.getSystemService(AppOpsManager.class).noteOpNoThrow(hotwordOp,
mVoiceInteractorIdentity.uid, mVoiceInteractorIdentity.packageName,
mVoiceInteractorIdentity.attributionTag, OP_MESSAGE);
// Hack to make sure we show the mic privacy-indicator since the Trusted Hotword
// requirement isn't being enforced for now. Normally, we would note the HOTWORD op here
// instead.
enforcePermissionForDataDelivery(mContext, mVoiceInteractorIdentity,
RECORD_AUDIO, OP_MESSAGE);
enforcePermissionForDataDelivery(mContext, mVoiceInteractorIdentity,
CAPTURE_AUDIO_HOTWORD, OP_MESSAGE);
});