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

Commit 83ae4822 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Pipe through featureId from caller to noteOps in RecognitionService

Test: Built
Change-Id: Iab40419af886cccc1565f62bad29086b12ec1945
parent 98a24bf9
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -39,8 +39,11 @@ oneway interface IRecognitionService {
     *        this intent can contain extra parameters to manipulate the behavior of the recognition
     *        client. For more information see {@link RecognizerIntent}.
     * @param listener to receive callbacks, note that this must be non-null
     * @param packageName the package name calling this API
     * @param featureId The feature in the package
     */
    void startListening(in Intent recognizerIntent, in IRecognitionListener listener);
    void startListening(in Intent recognizerIntent, in IRecognitionListener listener,
            String packageName, String featureId);

    /**
     * Stops listening for speech. Speech captured so far will be recognized as
@@ -48,13 +51,17 @@ oneway interface IRecognitionService {
     * is called during the speech capturing.
     *
     * @param listener to receive callbacks, note that this must be non-null
     * @param packageName the package name calling this API
     * @param featureId The feature in the package
     */
    void stopListening(in IRecognitionListener listener);
    void stopListening(in IRecognitionListener listener, String packageName, String featureId);

    /**
     * Cancels the speech recognition.
     *
     * @param listener to receive callbacks, note that this must be non-null
     * @param packageName the package name calling this API
     * @param featureId The feature in the package
     */
    void cancel(in IRecognitionListener listener);
    void cancel(in IRecognitionListener listener, String packageName, String featureId);
}
+29 −9
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.speech;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.Service;
@@ -29,6 +31,8 @@ import android.os.Message;
import android.os.RemoteException;
import android.util.Log;

import com.android.internal.util.Preconditions;

import java.lang.ref.WeakReference;

/**
@@ -171,13 +175,17 @@ public abstract class RecognitionService extends Service {
     * 
     * @param listener to send the error message to in case of error
     * @param forDataDelivery If the permission check is for delivering the sensitive data.
     * @param packageName the package name of the caller
     * @param featureId The feature in the package
     * @return {@code true} if the caller has enough permissions, {@code false} otherwise
     */
    private boolean checkPermissions(IRecognitionListener listener, boolean forDataDelivery) {
    private boolean checkPermissions(IRecognitionListener listener, boolean forDataDelivery,
            @NonNull String packageName, @Nullable String featureId) {
        if (DBG) Log.d(TAG, "checkPermissions");
        if (forDataDelivery) {
            if (PermissionChecker.checkCallingOrSelfPermissionForDataDelivery(this,
                    android.Manifest.permission.RECORD_AUDIO, null /*message*/)
            if (PermissionChecker.checkCallingPermissionForDataDelivery(this,
                    android.Manifest.permission.RECORD_AUDIO, packageName, featureId,
                    null /*message*/)
                             == PermissionChecker.PERMISSION_GRANTED) {
                return true;
            }
@@ -349,10 +357,14 @@ public abstract class RecognitionService extends Service {
        }

        @Override
        public void startListening(Intent recognizerIntent, IRecognitionListener listener) {
        public void startListening(Intent recognizerIntent, IRecognitionListener listener,
                String packageName, String featureId) {
            Preconditions.checkNotNull(packageName);

            if (DBG) Log.d(TAG, "startListening called by:" + listener.asBinder());
            final RecognitionService service = mServiceRef.get();
            if (service != null && service.checkPermissions(listener, true /*forDataDelivery*/)) {
            if (service != null && service.checkPermissions(listener, true /*forDataDelivery*/,
                    packageName, featureId)) {
                service.mHandler.sendMessage(Message.obtain(service.mHandler,
                        MSG_START_LISTENING, service.new StartListeningArgs(
                                recognizerIntent, listener, Binder.getCallingUid())));
@@ -360,20 +372,28 @@ public abstract class RecognitionService extends Service {
        }

        @Override
        public void stopListening(IRecognitionListener listener) {
        public void stopListening(IRecognitionListener listener, String packageName,
                String featureId) {
            Preconditions.checkNotNull(packageName);

            if (DBG) Log.d(TAG, "stopListening called by:" + listener.asBinder());
            final RecognitionService service = mServiceRef.get();
            if (service != null && service.checkPermissions(listener, false /*forDataDelivery*/)) {
            if (service != null && service.checkPermissions(listener, false /*forDataDelivery*/,
                    packageName, featureId)) {
                service.mHandler.sendMessage(Message.obtain(service.mHandler,
                        MSG_STOP_LISTENING, listener));
            }
        }

        @Override
        public void cancel(IRecognitionListener listener) {
        public void cancel(IRecognitionListener listener, String packageName,
                String featureId) {
            Preconditions.checkNotNull(packageName);

            if (DBG) Log.d(TAG, "cancel called by:" + listener.asBinder());
            final RecognitionService service = mServiceRef.get();
            if (service != null && service.checkPermissions(listener, false /*forDataDelivery*/)) {
            if (service != null && service.checkPermissions(listener, false /*forDataDelivery*/,
                    packageName, featureId)) {
                service.mHandler.sendMessage(Message.obtain(service.mHandler,
                        MSG_CANCEL, listener));
            }
+6 −4
Original line number Diff line number Diff line
@@ -341,7 +341,8 @@ public class SpeechRecognizer {
            return;
        }
        try {
            mService.startListening(recognizerIntent, mListener);
            mService.startListening(recognizerIntent, mListener, mContext.getOpPackageName(),
                    mContext.getFeatureId());
            if (DBG) Log.d(TAG, "service start listening command succeded");
        } catch (final RemoteException e) {
            Log.e(TAG, "startListening() failed", e);
@@ -355,7 +356,8 @@ public class SpeechRecognizer {
            return;
        }
        try {
            mService.stopListening(mListener);
            mService.stopListening(mListener, mContext.getOpPackageName(),
                    mContext.getFeatureId());
            if (DBG) Log.d(TAG, "service stop listening command succeded");
        } catch (final RemoteException e) {
            Log.e(TAG, "stopListening() failed", e);
@@ -369,7 +371,7 @@ public class SpeechRecognizer {
            return;
        }
        try {
            mService.cancel(mListener);
            mService.cancel(mListener, mContext.getOpPackageName(), mContext.getFeatureId());
            if (DBG) Log.d(TAG, "service cancel command succeded");
        } catch (final RemoteException e) {
            Log.e(TAG, "cancel() failed", e);
@@ -398,7 +400,7 @@ public class SpeechRecognizer {
    public void destroy() {
        if (mService != null) {
            try {
                mService.cancel(mListener);
                mService.cancel(mListener, mContext.getOpPackageName(), mContext.getFeatureId());
            } catch (final RemoteException e) {
                // Not important
            }