OSDN Git Service

Add getCallingUid() to RecognitionService.Callback.
authorCedric Ho <cedricho@google.com>
Wed, 27 May 2015 16:51:19 +0000 (09:51 -0700)
committerCedric Ho <cedricho@google.com>
Wed, 27 May 2015 16:51:19 +0000 (09:51 -0700)
Change-Id: I596471625eee24ec93d08650c33461d35ad0aa07

api/current.txt
api/system-current.txt
core/java/android/speech/RecognitionService.java

index 41acac5..e799685 100644 (file)
@@ -29028,6 +29028,7 @@ package android.speech {
     method public void bufferReceived(byte[]) throws android.os.RemoteException;
     method public void endOfSpeech() throws android.os.RemoteException;
     method public void error(int) throws android.os.RemoteException;
+    method public int getCallingUid();
     method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
     method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
     method public void results(android.os.Bundle) throws android.os.RemoteException;
index 0f6bd2a..bf22e9c 100644 (file)
@@ -31154,6 +31154,7 @@ package android.speech {
     method public void bufferReceived(byte[]) throws android.os.RemoteException;
     method public void endOfSpeech() throws android.os.RemoteException;
     method public void error(int) throws android.os.RemoteException;
+    method public int getCallingUid();
     method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
     method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
     method public void results(android.os.Bundle) throws android.os.RemoteException;
index dcdbba7..3e74d22 100644 (file)
@@ -21,6 +21,7 @@ import android.annotation.SdkConstant.SdkConstantType;
 import android.app.Service;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -78,7 +79,7 @@ public abstract class RecognitionService extends Service {
             switch (msg.what) {
                 case MSG_START_LISTENING:
                     StartListeningArgs args = (StartListeningArgs) msg.obj;
-                    dispatchStartListening(args.mIntent, args.mListener);
+                    dispatchStartListening(args.mIntent, args.mListener, args.mCallingUid);
                     break;
                 case MSG_STOP_LISTENING:
                     dispatchStopListening((IRecognitionListener) msg.obj);
@@ -93,7 +94,8 @@ public abstract class RecognitionService extends Service {
         }
     };
 
-    private void dispatchStartListening(Intent intent, final IRecognitionListener listener) {
+    private void dispatchStartListening(Intent intent, final IRecognitionListener listener,
+            int callingUid) {
         if (mCurrentCallback == null) {
             if (DBG) Log.d(TAG, "created new mCurrentCallback, listener = " + listener.asBinder());
             try {
@@ -107,7 +109,7 @@ public abstract class RecognitionService extends Service {
                 Log.e(TAG, "dead listener on startListening");
                 return;
             }
-            mCurrentCallback = new Callback(listener);
+            mCurrentCallback = new Callback(listener, callingUid);
             RecognitionService.this.onStartListening(intent, mCurrentCallback);
         } else {
             try {
@@ -155,10 +157,12 @@ public abstract class RecognitionService extends Service {
         public final Intent mIntent;
 
         public final IRecognitionListener mListener;
+        public final int mCallingUid;
 
-        public StartListeningArgs(Intent intent, IRecognitionListener listener) {
+        public StartListeningArgs(Intent intent, IRecognitionListener listener, int callingUid) {
             this.mIntent = intent;
             this.mListener = listener;
+            this.mCallingUid = callingUid;
         }
     }
 
@@ -227,9 +231,11 @@ public abstract class RecognitionService extends Service {
      */
     public class Callback {
         private final IRecognitionListener mListener;
+        private final int mCallingUid;
 
-        private Callback(IRecognitionListener listener) {
+        private Callback(IRecognitionListener listener, int callingUid) {
             mListener = listener;
+            mCallingUid = callingUid;
         }
 
         /**
@@ -314,6 +320,14 @@ public abstract class RecognitionService extends Service {
         public void rmsChanged(float rmsdB) throws RemoteException {
             mListener.onRmsChanged(rmsdB);
         }
+
+        /**
+         * Return the Linux uid assigned to the process that sent you the current transaction that
+         * is being processed. This is obtained from {@link Binder#getCallingUid()}.
+         */
+        public int getCallingUid() {
+            return mCallingUid;
+        }
     }
 
     /** Binder of the recognition service */
@@ -331,7 +345,7 @@ public abstract class RecognitionService extends Service {
             if (service != null && service.checkPermissions(listener)) {
                 service.mHandler.sendMessage(Message.obtain(service.mHandler,
                         MSG_START_LISTENING, service.new StartListeningArgs(
-                                recognizerIntent, listener)));
+                                recognizerIntent, listener, Binder.getCallingUid())));
             }
         }