summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl13
-rw-r--r--core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java111
-rw-r--r--core/java/android/app/ondeviceintelligence/ProcessingSignal.java10
-rw-r--r--core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl4
-rw-r--r--core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl10
-rw-r--r--core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java10
-rw-r--r--core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java51
-rw-r--r--services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java105
8 files changed, 185 insertions, 129 deletions
diff --git a/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl b/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
index 0dbe18156904..8bf288abb0f9 100644
--- a/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
+++ b/core/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
@@ -53,19 +53,22 @@
void getFeatureDetails(in Feature feature, in IFeatureDetailsCallback featureDetailsCallback) = 4;
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)")
- void requestFeatureDownload(in Feature feature, in ICancellationSignal signal, in IDownloadCallback callback) = 5;
+ void requestFeatureDownload(in Feature feature, in AndroidFuture cancellationSignalFuture, in IDownloadCallback callback) = 5;
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)")
- void requestTokenInfo(in Feature feature, in Bundle requestBundle, in ICancellationSignal signal,
+ void requestTokenInfo(in Feature feature, in Bundle requestBundle, in AndroidFuture cancellationSignalFuture,
in ITokenInfoCallback tokenInfocallback) = 6;
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)")
- void processRequest(in Feature feature, in Bundle requestBundle, int requestType, in ICancellationSignal cancellationSignal,
- in IProcessingSignal signal, in IResponseCallback responseCallback) = 7;
+ void processRequest(in Feature feature, in Bundle requestBundle, int requestType,
+ in AndroidFuture cancellationSignalFuture,
+ in AndroidFuture processingSignalFuture,
+ in IResponseCallback responseCallback) = 7;
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)")
void processRequestStreaming(in Feature feature,
- in Bundle requestBundle, int requestType, in ICancellationSignal cancellationSignal, in IProcessingSignal signal,
+ in Bundle requestBundle, int requestType, in AndroidFuture cancellationSignalFuture,
+ in AndroidFuture processingSignalFuture,
in IStreamingResponseCallback streamingCallback) = 8;
String getRemoteServicePackageName() = 9;
diff --git a/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java b/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
index a465e3cbb6ec..bc50d2e492ae 100644
--- a/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
+++ b/core/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
@@ -26,22 +26,23 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.content.ComponentName;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Binder;
import android.os.Bundle;
import android.os.CancellationSignal;
+import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.OutcomeReceiver;
import android.os.PersistableBundle;
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.system.OsConstants;
+import android.util.Log;
import androidx.annotation.IntDef;
-import com.android.internal.R;
+import com.android.internal.infra.AndroidFuture;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -76,6 +77,8 @@ public final class OnDeviceIntelligenceManager {
*/
public static final String AUGMENT_REQUEST_CONTENT_BUNDLE_KEY =
"AugmentRequestContentBundleKey";
+
+ private static final String TAG = "OnDeviceIntelligence";
private final Context mContext;
private final IOnDeviceIntelligenceManager mService;
@@ -121,9 +124,9 @@ public final class OnDeviceIntelligenceManager {
@RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)
public String getRemoteServicePackageName() {
String result;
- try{
- result = mService.getRemoteServicePackageName();
- } catch (RemoteException e){
+ try {
+ result = mService.getRemoteServicePackageName();
+ } catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return result;
@@ -288,18 +291,15 @@ public final class OnDeviceIntelligenceManager {
}
};
- ICancellationSignal transport = null;
- if (cancellationSignal != null) {
- transport = CancellationSignal.createTransport();
- cancellationSignal.setRemote(transport);
- }
-
- mService.requestFeatureDownload(feature, transport, downloadCallback);
+ mService.requestFeatureDownload(feature,
+ configureRemoteCancellationFuture(cancellationSignal, callbackExecutor),
+ downloadCallback);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
+
/**
* The methods computes the token related information for a given request payload using the
* provided {@link Feature}.
@@ -337,13 +337,9 @@ public final class OnDeviceIntelligenceManager {
}
};
- ICancellationSignal transport = null;
- if (cancellationSignal != null) {
- transport = CancellationSignal.createTransport();
- cancellationSignal.setRemote(transport);
- }
-
- mService.requestTokenInfo(feature, request, transport, callback);
+ mService.requestTokenInfo(feature, request,
+ configureRemoteCancellationFuture(cancellationSignal, callbackExecutor),
+ callback);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -407,19 +403,9 @@ public final class OnDeviceIntelligenceManager {
};
- IProcessingSignal transport = null;
- if (processingSignal != null) {
- transport = ProcessingSignal.createTransport();
- processingSignal.setRemote(transport);
- }
-
- ICancellationSignal cancellationTransport = null;
- if (cancellationSignal != null) {
- cancellationTransport = CancellationSignal.createTransport();
- cancellationSignal.setRemote(cancellationTransport);
- }
-
- mService.processRequest(feature, request, requestType, cancellationTransport, transport,
+ mService.processRequest(feature, request, requestType,
+ configureRemoteCancellationFuture(cancellationSignal, callbackExecutor),
+ configureRemoteProcessingSignalFuture(processingSignal, callbackExecutor),
callback);
} catch (RemoteException e) {
@@ -449,7 +435,8 @@ public final class OnDeviceIntelligenceManager {
* @param callbackExecutor executor to run the callback on.
*/
@RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)
- public void processRequestStreaming(@NonNull Feature feature, @NonNull @InferenceParams Bundle request,
+ public void processRequestStreaming(@NonNull Feature feature,
+ @NonNull @InferenceParams Bundle request,
@RequestType int requestType,
@Nullable CancellationSignal cancellationSignal,
@Nullable ProcessingSignal processingSignal,
@@ -500,20 +487,11 @@ public final class OnDeviceIntelligenceManager {
}
};
- IProcessingSignal transport = null;
- if (processingSignal != null) {
- transport = ProcessingSignal.createTransport();
- processingSignal.setRemote(transport);
- }
-
- ICancellationSignal cancellationTransport = null;
- if (cancellationSignal != null) {
- cancellationTransport = CancellationSignal.createTransport();
- cancellationSignal.setRemote(cancellationTransport);
- }
-
mService.processRequestStreaming(
- feature, request, requestType, cancellationTransport, transport, callback);
+ feature, request, requestType,
+ configureRemoteCancellationFuture(cancellationSignal, callbackExecutor),
+ configureRemoteProcessingSignalFuture(processingSignal, callbackExecutor),
+ callback);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -574,4 +552,45 @@ public final class OnDeviceIntelligenceManager {
@Target({ElementType.PARAMETER, ElementType.FIELD})
public @interface InferenceParams {
}
+
+
+ @Nullable
+ private static AndroidFuture<IBinder> configureRemoteCancellationFuture(
+ @Nullable CancellationSignal cancellationSignal,
+ @NonNull Executor callbackExecutor) {
+ if (cancellationSignal == null) {
+ return null;
+ }
+ AndroidFuture<IBinder> cancellationFuture = new AndroidFuture<>();
+ cancellationFuture.whenCompleteAsync(
+ (cancellationTransport, error) -> {
+ if (error != null || cancellationTransport == null) {
+ Log.e(TAG, "Unable to receive the remote cancellation signal.", error);
+ } else {
+ cancellationSignal.setRemote(
+ ICancellationSignal.Stub.asInterface(cancellationTransport));
+ }
+ }, callbackExecutor);
+ return cancellationFuture;
+ }
+
+ @Nullable
+ private static AndroidFuture<IBinder> configureRemoteProcessingSignalFuture(
+ ProcessingSignal processingSignal, Executor executor) {
+ if (processingSignal == null) {
+ return null;
+ }
+ AndroidFuture<IBinder> processingSignalFuture = new AndroidFuture<>();
+ processingSignalFuture.whenCompleteAsync(
+ (transport, error) -> {
+ if (error != null || transport == null) {
+ Log.e(TAG, "Unable to receive the remote processing signal.", error);
+ } else {
+ processingSignal.setRemote(IProcessingSignal.Stub.asInterface(transport));
+ }
+ }, executor);
+ return processingSignalFuture;
+ }
+
+
}
diff --git a/core/java/android/app/ondeviceintelligence/ProcessingSignal.java b/core/java/android/app/ondeviceintelligence/ProcessingSignal.java
index c275cc786007..733f4fad96f4 100644
--- a/core/java/android/app/ondeviceintelligence/ProcessingSignal.java
+++ b/core/java/android/app/ondeviceintelligence/ProcessingSignal.java
@@ -123,10 +123,10 @@ public final class ProcessingSignal {
* Sets the processing signal callback to be called when signals are received.
*
* This method is intended to be used by the recipient of a processing signal
- * such as the remote implementation for {@link OnDeviceIntelligenceManager} to handle
- * cancellation requests while performing a long-running operation. This method is not
- * intended
- * to be used by applications themselves.
+ * such as the remote implementation in
+ * {@link android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService} to handle
+ * processing signals while performing a long-running operation. This method is not
+ * intended to be used by the caller themselves.
*
* If {@link ProcessingSignal#sendSignal} has already been called, then the provided callback
* is invoked immediately and all previously queued actions are passed to remote signal.
@@ -200,7 +200,7 @@ public final class ProcessingSignal {
}
/**
- * Given a locally created transport, returns its associated cancellation signal.
+ * Given a locally created transport, returns its associated processing signal.
*
* @param transport The locally created transport, or null if none.
* @return The associated processing signal, or null if none.
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
index 6dbff7185f6f..908ab5f69775 100644
--- a/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
+++ b/core/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
@@ -41,7 +41,9 @@ oneway interface IOnDeviceIntelligenceService {
void getFeatureDetails(int callerUid, in Feature feature, in IFeatureDetailsCallback featureDetailsCallback);
void getReadOnlyFileDescriptor(in String fileName, in AndroidFuture<ParcelFileDescriptor> future);
void getReadOnlyFeatureFileDescriptorMap(in Feature feature, in RemoteCallback remoteCallback);
- void requestFeatureDownload(int callerUid, in Feature feature, in ICancellationSignal cancellationSignal, in IDownloadCallback downloadCallback);
+ void requestFeatureDownload(int callerUid, in Feature feature,
+ in AndroidFuture<ICancellationSignal> cancellationSignal,
+ in IDownloadCallback downloadCallback);
void registerRemoteServices(in IRemoteProcessingService remoteProcessingService);
void notifyInferenceServiceConnected();
void notifyInferenceServiceDisconnected();
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
index 799c7545968e..4213a0996e4c 100644
--- a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
+++ b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
@@ -24,6 +24,7 @@ import android.app.ondeviceintelligence.Feature;
import android.os.ICancellationSignal;
import android.os.PersistableBundle;
import android.os.Bundle;
+import com.android.internal.infra.AndroidFuture;
import android.service.ondeviceintelligence.IRemoteStorageService;
import android.service.ondeviceintelligence.IProcessingUpdateStatusCallback;
@@ -34,13 +35,16 @@ import android.service.ondeviceintelligence.IProcessingUpdateStatusCallback;
*/
oneway interface IOnDeviceSandboxedInferenceService {
void registerRemoteStorageService(in IRemoteStorageService storageService);
- void requestTokenInfo(int callerUid, in Feature feature, in Bundle request, in ICancellationSignal cancellationSignal,
+ void requestTokenInfo(int callerUid, in Feature feature, in Bundle request,
+ in AndroidFuture<ICancellationSignal> cancellationSignal,
in ITokenInfoCallback tokenInfoCallback);
void processRequest(int callerUid, in Feature feature, in Bundle request, in int requestType,
- in ICancellationSignal cancellationSignal, in IProcessingSignal processingSignal,
+ in AndroidFuture<ICancellationSignal> cancellationSignal,
+ in AndroidFuture<IProcessingSignal> processingSignal,
in IResponseCallback callback);
void processRequestStreaming(int callerUid, in Feature feature, in Bundle request, in int requestType,
- in ICancellationSignal cancellationSignal, in IProcessingSignal processingSignal,
+ in AndroidFuture<ICancellationSignal> cancellationSignal,
+ in AndroidFuture<IProcessingSignal> processingSignal,
in IStreamingResponseCallback callback);
void updateProcessingState(in Bundle processingState,
in IProcessingUpdateStatusCallback callback);
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
index 93213182d284..86320b801f6c 100644
--- a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
+++ b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
@@ -148,14 +148,18 @@ public abstract class OnDeviceIntelligenceService extends Service {
@Override
public void requestFeatureDownload(int callerUid, Feature feature,
- ICancellationSignal cancellationSignal,
+ AndroidFuture cancellationSignalFuture,
IDownloadCallback downloadCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(downloadCallback);
-
+ ICancellationSignal transport = null;
+ if (cancellationSignalFuture != null) {
+ transport = CancellationSignal.createTransport();
+ cancellationSignalFuture.complete(transport);
+ }
OnDeviceIntelligenceService.this.onDownloadFeature(callerUid,
feature,
- CancellationSignal.fromTransport(cancellationSignal),
+ CancellationSignal.fromTransport(transport),
wrapDownloadCallback(downloadCallback));
}
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
index fc7a4c83f82c..96c45eef3731 100644
--- a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
+++ b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
@@ -122,46 +122,72 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
@Override
public void requestTokenInfo(int callerUid, Feature feature, Bundle request,
- ICancellationSignal cancellationSignal,
+ AndroidFuture cancellationSignalFuture,
ITokenInfoCallback tokenInfoCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(tokenInfoCallback);
+ ICancellationSignal transport = null;
+ if (cancellationSignalFuture != null) {
+ transport = CancellationSignal.createTransport();
+ cancellationSignalFuture.complete(transport);
+ }
OnDeviceSandboxedInferenceService.this.onTokenInfoRequest(callerUid,
feature,
request,
- CancellationSignal.fromTransport(cancellationSignal),
+ CancellationSignal.fromTransport(transport),
wrapTokenInfoCallback(tokenInfoCallback));
}
@Override
public void processRequestStreaming(int callerUid, Feature feature, Bundle request,
- int requestType, ICancellationSignal cancellationSignal,
- IProcessingSignal processingSignal,
+ int requestType,
+ AndroidFuture cancellationSignalFuture,
+ AndroidFuture processingSignalFuture,
IStreamingResponseCallback callback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(callback);
+ ICancellationSignal transport = null;
+ if (cancellationSignalFuture != null) {
+ transport = CancellationSignal.createTransport();
+ cancellationSignalFuture.complete(transport);
+ }
+ IProcessingSignal processingSignalTransport = null;
+ if (processingSignalFuture != null) {
+ processingSignalTransport = ProcessingSignal.createTransport();
+ processingSignalFuture.complete(processingSignalTransport);
+ }
OnDeviceSandboxedInferenceService.this.onProcessRequestStreaming(callerUid,
feature,
request,
requestType,
- CancellationSignal.fromTransport(cancellationSignal),
- ProcessingSignal.fromTransport(processingSignal),
+ CancellationSignal.fromTransport(transport),
+ ProcessingSignal.fromTransport(processingSignalTransport),
wrapStreamingResponseCallback(callback));
}
@Override
public void processRequest(int callerUid, Feature feature, Bundle request,
- int requestType, ICancellationSignal cancellationSignal,
- IProcessingSignal processingSignal,
+ int requestType,
+ AndroidFuture cancellationSignalFuture,
+ AndroidFuture processingSignalFuture,
IResponseCallback callback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(callback);
-
+ ICancellationSignal transport = null;
+ if (cancellationSignalFuture != null) {
+ transport = CancellationSignal.createTransport();
+ cancellationSignalFuture.complete(transport);
+ }
+ IProcessingSignal processingSignalTransport = null;
+ if (processingSignalFuture != null) {
+ processingSignalTransport = ProcessingSignal.createTransport();
+ processingSignalFuture.complete(processingSignalTransport);
+ }
OnDeviceSandboxedInferenceService.this.onProcessRequest(callerUid, feature,
request, requestType,
- CancellationSignal.fromTransport(cancellationSignal),
- ProcessingSignal.fromTransport(processingSignal),
+ CancellationSignal.fromTransport(transport),
+ ProcessingSignal.fromTransport(processingSignalTransport),
wrapResponseCallback(callback));
}
@@ -206,7 +232,8 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
* Invoked when caller provides a request for a particular feature to be processed in a
* streaming manner. The expectation from the implementation is that when processing the
* request,
- * it periodically populates the {@link StreamingProcessingCallback#onPartialResult} to continuously
+ * it periodically populates the {@link StreamingProcessingCallback#onPartialResult} to
+ * continuously
* provide partial Bundle results for the caller to utilize. Optionally the implementation can
* provide the complete response in the {@link StreamingProcessingCallback#onResult} upon
* processing completion.
diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
index 37023e14eb41..953300ac43a6 100644
--- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
+++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
@@ -163,7 +163,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
}
@Override
- public void getVersion(RemoteCallback remoteCallback) throws RemoteException {
+ public void getVersion(RemoteCallback remoteCallback) {
Slog.i(TAG, "OnDeviceIntelligenceManagerInternal getVersion");
Objects.requireNonNull(remoteCallback);
mContext.enforceCallingOrSelfPermission(
@@ -244,7 +244,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
@Override
public void requestFeatureDownload(Feature feature,
- ICancellationSignal cancellationSignal,
+ AndroidFuture cancellationSignalFuture,
IDownloadCallback downloadCallback) throws RemoteException {
Slog.i(TAG, "OnDeviceIntelligenceManagerInternal requestFeatureDownload");
Objects.requireNonNull(feature);
@@ -261,16 +261,17 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
service -> service.requestFeatureDownload(Binder.getCallingUid(), feature,
- cancellationSignal,
+ cancellationSignalFuture,
downloadCallback));
}
@Override
public void requestTokenInfo(Feature feature,
- Bundle request, ICancellationSignal cancellationSignal,
+ Bundle request,
+ AndroidFuture cancellationSignalFuture,
ITokenInfoCallback tokenInfoCallback) throws RemoteException {
- Slog.i(TAG, "OnDeviceIntelligenceManagerInternal prepareFeatureProcessing");
+ Slog.i(TAG, "OnDeviceIntelligenceManagerInternal requestTokenInfo");
Objects.requireNonNull(feature);
Objects.requireNonNull(request);
Objects.requireNonNull(tokenInfoCallback);
@@ -285,10 +286,11 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
PersistableBundle.EMPTY);
}
ensureRemoteInferenceServiceInitialized();
+
mRemoteInferenceService.run(
service -> service.requestTokenInfo(Binder.getCallingUid(), feature,
request,
- cancellationSignal,
+ cancellationSignalFuture,
tokenInfoCallback));
}
@@ -296,8 +298,8 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void processRequest(Feature feature,
Bundle request,
int requestType,
- ICancellationSignal cancellationSignal,
- IProcessingSignal processingSignal,
+ AndroidFuture cancellationSignalFuture,
+ AndroidFuture processingSignalFuture,
IResponseCallback responseCallback)
throws RemoteException {
Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequest");
@@ -316,7 +318,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
mRemoteInferenceService.run(
service -> service.processRequest(Binder.getCallingUid(), feature, request,
requestType,
- cancellationSignal, processingSignal,
+ cancellationSignalFuture, processingSignalFuture,
responseCallback));
}
@@ -324,8 +326,8 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void processRequestStreaming(Feature feature,
Bundle request,
int requestType,
- ICancellationSignal cancellationSignal,
- IProcessingSignal processingSignal,
+ AndroidFuture cancellationSignalFuture,
+ AndroidFuture processingSignalFuture,
IStreamingResponseCallback streamingCallback) throws RemoteException {
Slog.i(TAG, "OnDeviceIntelligenceManagerInternal processRequestStreaming");
Objects.requireNonNull(feature);
@@ -343,7 +345,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
mRemoteInferenceService.run(
service -> service.processRequestStreaming(Binder.getCallingUid(), feature,
request, requestType,
- cancellationSignal, processingSignal,
+ cancellationSignalFuture, processingSignalFuture,
streamingCallback));
}
@@ -356,7 +358,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
};
}
- private void ensureRemoteIntelligenceServiceInitialized() throws RemoteException {
+ private void ensureRemoteIntelligenceServiceInitialized() {
synchronized (mLock) {
if (mRemoteOnDeviceIntelligenceService == null) {
String serviceName = getServiceNames()[0];
@@ -388,25 +390,15 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void updateProcessingState(
Bundle processingState,
IProcessingUpdateStatusCallback callback) {
- try {
- ensureRemoteInferenceServiceInitialized();
- mRemoteInferenceService.run(
- service -> service.updateProcessingState(
- processingState, callback));
- } catch (RemoteException unused) {
- try {
- callback.onFailure(
- OnDeviceIntelligenceException.PROCESSING_UPDATE_STATUS_CONNECTION_FAILED,
- "Received failure invoking the remote processing service.");
- } catch (RemoteException ex) {
- Slog.w(TAG, "Failed to send failure status.", ex);
- }
- }
+ ensureRemoteInferenceServiceInitialized();
+ mRemoteInferenceService.run(
+ service -> service.updateProcessingState(
+ processingState, callback));
}
};
}
- private void ensureRemoteInferenceServiceInitialized() throws RemoteException {
+ private void ensureRemoteInferenceServiceInitialized() {
synchronized (mLock) {
if (mRemoteInferenceService == null) {
String serviceName = getServiceNames()[1];
@@ -457,34 +449,38 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
};
}
- private static void validateServiceElevated(String serviceName, boolean checkIsolated)
- throws RemoteException {
- if (TextUtils.isEmpty(serviceName)) {
- throw new IllegalArgumentException("Received null/empty service name : " + serviceName);
- }
- ComponentName serviceComponent = ComponentName.unflattenFromString(
- serviceName);
- ServiceInfo serviceInfo = AppGlobals.getPackageManager().getServiceInfo(
- serviceComponent,
- PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, 0);
- if (serviceInfo != null) {
- if (!checkIsolated) {
- checkServiceRequiresPermission(serviceInfo,
- Manifest.permission.BIND_ON_DEVICE_INTELLIGENCE_SERVICE);
- return;
+ private void validateServiceElevated(String serviceName, boolean checkIsolated) {
+ try {
+ if (TextUtils.isEmpty(serviceName)) {
+ throw new IllegalStateException(
+ "Remote service is not configured to complete the request");
}
+ ComponentName serviceComponent = ComponentName.unflattenFromString(
+ serviceName);
+ ServiceInfo serviceInfo = AppGlobals.getPackageManager().getServiceInfo(
+ serviceComponent,
+ PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, 0);
+ if (serviceInfo != null) {
+ if (!checkIsolated) {
+ checkServiceRequiresPermission(serviceInfo,
+ Manifest.permission.BIND_ON_DEVICE_INTELLIGENCE_SERVICE);
+ return;
+ }
- checkServiceRequiresPermission(serviceInfo,
- Manifest.permission.BIND_ON_DEVICE_SANDBOXED_INFERENCE_SERVICE);
- if (!isIsolatedService(serviceInfo)) {
- throw new SecurityException(
- "Call required an isolated service, but the configured service: "
- + serviceName + ", is not isolated");
+ checkServiceRequiresPermission(serviceInfo,
+ Manifest.permission.BIND_ON_DEVICE_SANDBOXED_INFERENCE_SERVICE);
+ if (!isIsolatedService(serviceInfo)) {
+ throw new SecurityException(
+ "Call required an isolated service, but the configured service: "
+ + serviceName + ", is not isolated");
+ }
+ } else {
+ throw new IllegalStateException(
+ "Remote service is not configured to complete the request.");
}
- } else {
- throw new RuntimeException(
- "Could not find service info for serviceName: " + serviceName);
+ } catch (RemoteException e) {
+ throw new IllegalStateException("Could not fetch service info for remote services", e);
}
}
@@ -542,7 +538,8 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
Manifest.permission.USE_ON_DEVICE_INTELLIGENCE, TAG);
synchronized (mLock) {
mTemporaryServiceNames = componentNames;
-
+ mRemoteOnDeviceIntelligenceService = null;
+ mRemoteInferenceService = null;
if (mTemporaryHandler == null) {
mTemporaryHandler = new Handler(Looper.getMainLooper(), null, true) {
@Override