Loading core/java/android/service/voice/AlwaysOnHotwordDetector.java +3 −0 Original line number Diff line number Diff line Loading @@ -783,6 +783,9 @@ public class AlwaysOnHotwordDetector extends AbstractHotwordDetector { * This may happen if another detector has been instantiated or the * {@link VoiceInteractionService} hosting this detector has been shut down. */ // TODO: Remove this RequiresPermission since it isn't actually enforced. Also fix the javadoc // about permissions enforcement (when it throws vs when it just returns false) for other // methods in this class. @RequiresPermission(allOf = {RECORD_AUDIO, CAPTURE_AUDIO_HOTWORD}) @Override public boolean stopRecognition() { Loading core/java/android/service/voice/SoftwareHotwordDetector.java +3 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,9 @@ class SoftwareHotwordDetector extends AbstractHotwordDetector { try { mManagerService.startListeningFromMic( mAudioFormat, new BinderCallback(mHandler, mCallback)); } catch (SecurityException e) { Slog.e(TAG, "startRecognition failed: " + e); return false; } catch (RemoteException e) { e.rethrowFromSystemServer(); } Loading services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator.java +20 −9 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ final class SoundTriggerSessionPermissionsDecorator implements @Override public SoundTrigger.ModuleProperties getDspModuleProperties() throws RemoteException { // No permission needed. // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.getDspModuleProperties(); } Loading @@ -71,7 +71,9 @@ final class SoundTriggerSessionPermissionsDecorator implements if (DEBUG) { Slog.d(TAG, "startRecognition"); } enforcePermissions(); if (!isHoldingPermissions()) { return SoundTrigger.STATUS_PERMISSION_DENIED; } return mDelegate.startRecognition(i, s, iHotwordRecognitionStatusCallback, recognitionConfig, b); } Loading @@ -80,25 +82,28 @@ final class SoundTriggerSessionPermissionsDecorator implements public int stopRecognition(int i, IHotwordRecognitionStatusCallback iHotwordRecognitionStatusCallback) throws RemoteException { enforcePermissions(); // Stopping a model does not require special permissions. Having a handle to the session is // sufficient. return mDelegate.stopRecognition(i, iHotwordRecognitionStatusCallback); } @Override public int setParameter(int i, int i1, int i2) throws RemoteException { enforcePermissions(); if (!isHoldingPermissions()) { return SoundTrigger.STATUS_PERMISSION_DENIED; } return mDelegate.setParameter(i, i1, i2); } @Override public int getParameter(int i, int i1) throws RemoteException { enforcePermissions(); // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.getParameter(i, i1); } @Override public SoundTrigger.ModelParamRange queryParameter(int i, int i1) throws RemoteException { enforcePermissions(); // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.queryParameter(i, i1); } Loading @@ -109,9 +114,15 @@ final class SoundTriggerSessionPermissionsDecorator implements } // TODO: Share this code with SoundTriggerMiddlewarePermission. private void enforcePermissions() { private boolean isHoldingPermissions() { try { enforcePermissionForPreflight(mContext, mOriginatorIdentity, RECORD_AUDIO); enforcePermissionForPreflight(mContext, mOriginatorIdentity, CAPTURE_AUDIO_HOTWORD); return true; } catch (SecurityException e) { Slog.e(TAG, e.toString()); return false; } } /** Loading Loading
core/java/android/service/voice/AlwaysOnHotwordDetector.java +3 −0 Original line number Diff line number Diff line Loading @@ -783,6 +783,9 @@ public class AlwaysOnHotwordDetector extends AbstractHotwordDetector { * This may happen if another detector has been instantiated or the * {@link VoiceInteractionService} hosting this detector has been shut down. */ // TODO: Remove this RequiresPermission since it isn't actually enforced. Also fix the javadoc // about permissions enforcement (when it throws vs when it just returns false) for other // methods in this class. @RequiresPermission(allOf = {RECORD_AUDIO, CAPTURE_AUDIO_HOTWORD}) @Override public boolean stopRecognition() { Loading
core/java/android/service/voice/SoftwareHotwordDetector.java +3 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,9 @@ class SoftwareHotwordDetector extends AbstractHotwordDetector { try { mManagerService.startListeningFromMic( mAudioFormat, new BinderCallback(mHandler, mCallback)); } catch (SecurityException e) { Slog.e(TAG, "startRecognition failed: " + e); return false; } catch (RemoteException e) { e.rethrowFromSystemServer(); } Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator.java +20 −9 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ final class SoundTriggerSessionPermissionsDecorator implements @Override public SoundTrigger.ModuleProperties getDspModuleProperties() throws RemoteException { // No permission needed. // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.getDspModuleProperties(); } Loading @@ -71,7 +71,9 @@ final class SoundTriggerSessionPermissionsDecorator implements if (DEBUG) { Slog.d(TAG, "startRecognition"); } enforcePermissions(); if (!isHoldingPermissions()) { return SoundTrigger.STATUS_PERMISSION_DENIED; } return mDelegate.startRecognition(i, s, iHotwordRecognitionStatusCallback, recognitionConfig, b); } Loading @@ -80,25 +82,28 @@ final class SoundTriggerSessionPermissionsDecorator implements public int stopRecognition(int i, IHotwordRecognitionStatusCallback iHotwordRecognitionStatusCallback) throws RemoteException { enforcePermissions(); // Stopping a model does not require special permissions. Having a handle to the session is // sufficient. return mDelegate.stopRecognition(i, iHotwordRecognitionStatusCallback); } @Override public int setParameter(int i, int i1, int i2) throws RemoteException { enforcePermissions(); if (!isHoldingPermissions()) { return SoundTrigger.STATUS_PERMISSION_DENIED; } return mDelegate.setParameter(i, i1, i2); } @Override public int getParameter(int i, int i1) throws RemoteException { enforcePermissions(); // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.getParameter(i, i1); } @Override public SoundTrigger.ModelParamRange queryParameter(int i, int i1) throws RemoteException { enforcePermissions(); // No permission needed here (the app must have the Assistant Role to retrieve the session). return mDelegate.queryParameter(i, i1); } Loading @@ -109,9 +114,15 @@ final class SoundTriggerSessionPermissionsDecorator implements } // TODO: Share this code with SoundTriggerMiddlewarePermission. private void enforcePermissions() { private boolean isHoldingPermissions() { try { enforcePermissionForPreflight(mContext, mOriginatorIdentity, RECORD_AUDIO); enforcePermissionForPreflight(mContext, mOriginatorIdentity, CAPTURE_AUDIO_HOTWORD); return true; } catch (SecurityException e) { Slog.e(TAG, e.toString()); return false; } } /** Loading