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

Commit bf0b4055 authored by Ahaan Ugale's avatar Ahaan Ugale
Browse files

Hotword: Treat preflight soft denial as granted.

In preflight we should accept soft denials as they can become grants at
the time of delivery.
Realigns permissions code in VoiceInteraction with that in SoundTrigger,
which was fixed in I4fc3b3e8defed59a900fd156273e9e695a322b0c.

Fix: 194137739
Test: manual - no errors for starting recognition when mic access is
 blocked. data delivery is still blocked
Test: atest HotwordDetectionServiceBasicTest
Change-Id: I49d504a30b4d04f157990580838757a3f17861cc
parent 9eee7d3f
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import android.media.permission.Identity;
import android.media.permission.PermissionUtil;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.text.TextUtils;
import android.util.Slog;

@@ -117,8 +116,8 @@ final class SoundTriggerSessionPermissionsDecorator implements

    /**
     * Throws a {@link SecurityException} if originator permanently doesn't have the given
     * permission, or a {@link ServiceSpecificException} with a {@link
     * #TEMPORARY_PERMISSION_DENIED} if caller originator doesn't have the given permission.
     * permission.
     * Soft (temporary) denials are considered OK for preflight purposes.
     *
     * @param context    A {@link Context}, used for permission checks.
     * @param identity   The identity to check.
@@ -130,15 +129,12 @@ final class SoundTriggerSessionPermissionsDecorator implements
                permission);
        switch (status) {
            case PermissionChecker.PERMISSION_GRANTED:
            case PermissionChecker.PERMISSION_SOFT_DENIED:
                return;
            case PermissionChecker.PERMISSION_HARD_DENIED:
                throw new SecurityException(
                        TextUtils.formatSimple("Failed to obtain permission %s for identity %s",
                                permission, toString(identity)));
            case PermissionChecker.PERMISSION_SOFT_DENIED:
                throw new ServiceSpecificException(TEMPORARY_PERMISSION_DENIED,
                        TextUtils.formatSimple("Failed to obtain permission %s for identity %s",
                                permission, toString(identity)));
            default:
                throw new RuntimeException("Unexpected permission check result.");
        }