summaryrefslogtreecommitdiff
path: root/packages/NeuralNetworks
diff options
context:
space:
mode:
author sandeepbandaru <sandeepbandaru@google.com> 2024-12-11 17:19:25 +0000
committer Sandeep Bandaru <sandeepbandaru@google.com> 2024-12-12 08:16:03 -0800
commit77adc203ddef604c5ec163a8872714d37efeccb8 (patch)
tree45cffabe08f4282425ec6ca02c26826dfaf9e1fb /packages/NeuralNetworks
parent9f0ff89cc2f442869497d3c305475d5eaf3201be (diff)
Revert module related chanages in platform folder
In order to allow migration to mainline module, certain hidden API calls were replaced to alternate usages in ag/30507833 These changes are not supposed to be used when the build flag is false, this CL reverts all such changes and brings them back to state before the refactor for module migration was done. Flag: build.release_ondevice_intelligence_module Bug: 376427781 Change-Id: If72804788d5a3db9e152be4c0d387efe8b156d8a
Diffstat (limited to 'packages/NeuralNetworks')
-rw-r--r--packages/NeuralNetworks/framework/Android.bp17
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.aidl2
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.java10
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.aidl2
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.java13
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl4
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/InferenceInfo.aidl2
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java93
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/TokenInfo.aidl2
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl4
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl6
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IRemoteStorageService.aidl2
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java282
-rw-r--r--packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java219
-rw-r--r--packages/NeuralNetworks/service/Android.bp13
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/BundleUtil.java24
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/InferenceInfoStore.java5
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java207
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceShellCommand.java8
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceIntelligenceService.java15
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceSandboxedInferenceService.java16
-rw-r--r--packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/callbacks/ListenableDownloadCallback.java4
22 files changed, 313 insertions, 637 deletions
diff --git a/packages/NeuralNetworks/framework/Android.bp b/packages/NeuralNetworks/framework/Android.bp
index 6f45daae0802..af071ba48b1f 100644
--- a/packages/NeuralNetworks/framework/Android.bp
+++ b/packages/NeuralNetworks/framework/Android.bp
@@ -19,10 +19,21 @@ package {
filegroup {
name: "framework-ondeviceintelligence-sources",
srcs: [
- "java/**/*.aidl",
- "java/**/*.java",
+ "module/java/**/*.aidl",
+ "module/java/**/*.java",
+ ],
+ visibility: [
+ "//frameworks/base:__subpackages__",
+ "//packages/modules/NeuralNetworks:__subpackages__",
+ ],
+}
+
+filegroup {
+ name: "framework-ondeviceintelligence-sources-platform",
+ srcs: [
+ "platform/java/**/*.aidl",
+ "platform/java/**/*.java",
],
- path: "java",
visibility: [
"//frameworks/base:__subpackages__",
"//packages/modules/NeuralNetworks:__subpackages__",
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.aidl b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.aidl
index 47cfb4a60dc4..18494d754674 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.aidl
@@ -19,4 +19,4 @@ package android.app.ondeviceintelligence;
/**
* @hide
*/
-@JavaOnlyStableParcelable parcelable Feature;
+parcelable Feature;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.java b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.java
index 88f4de2989e4..bcc56073e51c 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.java
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/Feature.java
@@ -26,8 +26,6 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
-import java.util.Objects;
-
/**
* Represents a typical feature associated with on-device intelligence.
*
@@ -58,8 +56,9 @@ public final class Feature implements Parcelable {
this.mModelName = modelName;
this.mType = type;
this.mVariant = variant;
- this.mFeatureParams = Objects.requireNonNull(featureParams,
- "featureParams should be non-null.");
+ this.mFeatureParams = featureParams;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mFeatureParams);
}
/** Returns the unique and immutable identifier of this feature. */
@@ -168,6 +167,8 @@ public final class Feature implements Parcelable {
this.mType = type;
this.mVariant = variant;
this.mFeatureParams = featureParams;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mFeatureParams);
}
public static final @NonNull Parcelable.Creator<Feature> CREATOR
@@ -199,7 +200,6 @@ public final class Feature implements Parcelable {
/**
* Provides a builder instance to create a feature for given id.
- *
* @param id the unique identifier for the feature.
*/
public Builder(int id) {
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.aidl b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.aidl
index c5b3532796cd..0589bf8bacb9 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.aidl
@@ -19,4 +19,4 @@ package android.app.ondeviceintelligence;
/**
* @hide
*/
-@JavaOnlyStableParcelable parcelable FeatureDetails;
+parcelable FeatureDetails;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.java b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.java
index 063cfb8c321e..0ee0cc34c512 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.java
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/FeatureDetails.java
@@ -30,7 +30,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.text.MessageFormat;
-import java.util.Objects;
/**
* Represents a status of a requested {@link Feature}.
@@ -79,12 +78,18 @@ public final class FeatureDetails implements Parcelable {
@Status int featureStatus,
@NonNull PersistableBundle featureDetailParams) {
this.mFeatureStatus = featureStatus;
- this.mFeatureDetailParams = Objects.requireNonNull(featureDetailParams);
+ com.android.internal.util.AnnotationValidations.validate(
+ Status.class, null, mFeatureStatus);
+ this.mFeatureDetailParams = featureDetailParams;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mFeatureDetailParams);
}
public FeatureDetails(
@Status int featureStatus) {
this.mFeatureStatus = featureStatus;
+ com.android.internal.util.AnnotationValidations.validate(
+ Status.class, null, mFeatureStatus);
this.mFeatureDetailParams = new PersistableBundle();
}
@@ -149,7 +154,11 @@ public final class FeatureDetails implements Parcelable {
PersistableBundle.CREATOR);
this.mFeatureStatus = status;
+ com.android.internal.util.AnnotationValidations.validate(
+ Status.class, null, mFeatureStatus);
this.mFeatureDetailParams = persistableBundle;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mFeatureDetailParams);
}
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
index fac5ec6064f8..1977a3923578 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/IOnDeviceIntelligenceManager.aidl
@@ -16,8 +16,8 @@
package android.app.ondeviceintelligence;
- import com.android.modules.utils.AndroidFuture;
- import android.app.ondeviceintelligence.ICancellationSignal;
+ import com.android.internal.infra.AndroidFuture;
+ import android.os.ICancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.RemoteCallback;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/InferenceInfo.aidl b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/InferenceInfo.aidl
index 6f6325408979..6d70fc4577a2 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/InferenceInfo.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/InferenceInfo.aidl
@@ -19,4 +19,4 @@ package android.app.ondeviceintelligence;
/**
* @hide
*/
-@JavaOnlyStableParcelable parcelable InferenceInfo;
+parcelable InferenceInfo;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
index dc0665a5cea7..78cf1d7a611b 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/OnDeviceIntelligenceManager.java
@@ -29,12 +29,13 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
-import android.app.ondeviceintelligence.utils.BinderUtils;
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;
@@ -42,7 +43,7 @@ import android.os.RemoteException;
import android.system.OsConstants;
import android.util.Log;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -78,39 +79,10 @@ public final class OnDeviceIntelligenceManager {
public static final String AUGMENT_REQUEST_CONTENT_BUNDLE_KEY =
"AugmentRequestContentBundleKey";
- /**
- * Timeout to be used for unbinding to the configured remote {@link
- * android.service.ondeviceintelligence.OnDeviceIntelligenceService} if there are no requests in
- * the queue. A value of -1 represents to never unbind.
- *
- * @hide
- */
- public static final String ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS =
- "on_device_intelligence_unbind_timeout_ms";
-
- /**
- * Timeout that represents maximum idle time before which a callback should be populated.
- *
- * @hide
- */
- public static final String ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS =
- "on_device_intelligence_idle_timeout_ms";
-
- /**
- * Timeout to be used for unbinding to the configured remote {@link
- * android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService} if there are no
- * requests in the queue. A value of -1 represents to never unbind.
- *
- * @hide
- */
- public static final String ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS =
- "on_device_inference_unbind_timeout_ms";
-
private static final String TAG = "OnDeviceIntelligence";
private final Context mContext;
private final IOnDeviceIntelligenceManager mService;
-
/**
* @hide
*/
@@ -132,11 +104,11 @@ public final class OnDeviceIntelligenceManager {
try {
RemoteCallback callback = new RemoteCallback(result -> {
if (result == null) {
- BinderUtils.withCleanCallingIdentity(
+ Binder.withCleanCallingIdentity(
() -> callbackExecutor.execute(() -> versionConsumer.accept(0)));
}
long version = result.getLong(API_VERSION_BUNDLE_KEY);
- BinderUtils.withCleanCallingIdentity(
+ Binder.withCleanCallingIdentity(
() -> callbackExecutor.execute(() -> versionConsumer.accept(version)));
});
mService.getVersion(callback);
@@ -178,14 +150,14 @@ public final class OnDeviceIntelligenceManager {
new IFeatureCallback.Stub() {
@Override
public void onSuccess(Feature result) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureReceiver.onResult(result)));
}
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureReceiver.onError(
new OnDeviceIntelligenceException(
errorCode, errorMessage, errorParams))));
@@ -212,14 +184,14 @@ public final class OnDeviceIntelligenceManager {
new IListFeaturesCallback.Stub() {
@Override
public void onSuccess(List<Feature> result) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureListReceiver.onResult(result)));
}
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureListReceiver.onError(
new OnDeviceIntelligenceException(
errorCode, errorMessage, errorParams))));
@@ -250,14 +222,14 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onSuccess(FeatureDetails result) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureDetailsReceiver.onResult(result)));
}
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> featureDetailsReceiver.onError(
new OnDeviceIntelligenceException(errorCode,
errorMessage, errorParams))));
@@ -295,27 +267,27 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onDownloadStarted(long bytesToDownload) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> callback.onDownloadStarted(bytesToDownload)));
}
@Override
public void onDownloadProgress(long bytesDownloaded) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> callback.onDownloadProgress(bytesDownloaded)));
}
@Override
public void onDownloadFailed(int failureStatus, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> callback.onDownloadFailed(failureStatus, errorMessage,
errorParams)));
}
@Override
public void onDownloadCompleted(PersistableBundle downloadParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> callback.onDownloadCompleted(downloadParams)));
}
};
@@ -352,14 +324,14 @@ public final class OnDeviceIntelligenceManager {
ITokenInfoCallback callback = new ITokenInfoCallback.Stub() {
@Override
public void onSuccess(TokenInfo tokenInfo) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> outcomeReceiver.onResult(tokenInfo)));
}
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> outcomeReceiver.onError(
new OnDeviceIntelligenceException(
errorCode, errorMessage, errorParams))));
@@ -404,7 +376,7 @@ public final class OnDeviceIntelligenceManager {
IResponseCallback callback = new IResponseCallback.Stub() {
@Override
public void onSuccess(@InferenceParams Bundle result) {
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
callbackExecutor.execute(() -> processingCallback.onResult(result));
});
}
@@ -412,7 +384,7 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> processingCallback.onError(
new OnDeviceIntelligenceException(
errorCode, errorMessage, errorParams))));
@@ -421,7 +393,7 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onDataAugmentRequest(@NonNull @InferenceParams Bundle request,
@NonNull RemoteCallback contentCallback) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> processingCallback.onDataAugmentRequest(request, result -> {
Bundle bundle = new Bundle();
bundle.putParcelable(AUGMENT_REQUEST_CONTENT_BUNDLE_KEY, result);
@@ -474,7 +446,7 @@ public final class OnDeviceIntelligenceManager {
IStreamingResponseCallback callback = new IStreamingResponseCallback.Stub() {
@Override
public void onNewContent(@InferenceParams Bundle result) {
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
callbackExecutor.execute(
() -> streamingProcessingCallback.onPartialResult(result));
});
@@ -482,7 +454,7 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onSuccess(@InferenceParams Bundle result) {
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
callbackExecutor.execute(
() -> streamingProcessingCallback.onResult(result));
});
@@ -491,7 +463,7 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onFailure(int errorCode, String errorMessage,
PersistableBundle errorParams) {
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
callbackExecutor.execute(
() -> streamingProcessingCallback.onError(
new OnDeviceIntelligenceException(
@@ -503,7 +475,7 @@ public final class OnDeviceIntelligenceManager {
@Override
public void onDataAugmentRequest(@NonNull @InferenceParams Bundle content,
@NonNull RemoteCallback contentCallback) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> streamingProcessingCallback.onDataAugmentRequest(content,
contentResponse -> {
Bundle bundle = new Bundle();
@@ -641,17 +613,8 @@ public final class OnDeviceIntelligenceManager {
if (error != null || cancellationTransport == null) {
Log.e(TAG, "Unable to receive the remote cancellation signal.", error);
} else {
- ICancellationSignal remoteCancellationSignal =
- ICancellationSignal.Stub.asInterface(cancellationTransport);
- cancellationSignal.setOnCancelListener(
- () -> {
- try {
- remoteCancellationSignal.cancel();
- } catch (RemoteException e) {
- Log.w(TAG, "Unable to propagate cancellation signal.",
- e);
- }
- });
+ cancellationSignal.setRemote(
+ ICancellationSignal.Stub.asInterface(cancellationTransport));
}
}, callbackExecutor);
return cancellationFuture;
@@ -674,4 +637,6 @@ public final class OnDeviceIntelligenceManager {
}, executor);
return processingSignalFuture;
}
-} \ No newline at end of file
+
+
+}
diff --git a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/TokenInfo.aidl b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/TokenInfo.aidl
index 599b337fd20f..2c19c1eb246c 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/TokenInfo.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/app/ondeviceintelligence/TokenInfo.aidl
@@ -19,4 +19,4 @@ package android.app.ondeviceintelligence;
/**
* @hide
*/
-@JavaOnlyStableParcelable parcelable TokenInfo;
+parcelable TokenInfo;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
index cba18c1ef36d..45c43502d6de 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceIntelligenceService.aidl
@@ -18,14 +18,14 @@ package android.service.ondeviceintelligence;
import android.os.PersistableBundle;
import android.os.ParcelFileDescriptor;
-import android.app.ondeviceintelligence.ICancellationSignal;
+import android.os.ICancellationSignal;
import android.os.RemoteCallback;
import android.app.ondeviceintelligence.IDownloadCallback;
import android.app.ondeviceintelligence.Feature;
import android.app.ondeviceintelligence.IFeatureCallback;
import android.app.ondeviceintelligence.IListFeaturesCallback;
import android.app.ondeviceintelligence.IFeatureDetailsCallback;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import android.service.ondeviceintelligence.IRemoteProcessingService;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
index 504fdd9b17f9..1af3b0f374f1 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
@@ -21,11 +21,11 @@ import android.app.ondeviceintelligence.IResponseCallback;
import android.app.ondeviceintelligence.ITokenInfoCallback;
import android.app.ondeviceintelligence.IProcessingSignal;
import android.app.ondeviceintelligence.Feature;
-import android.app.ondeviceintelligence.IRemoteCallback;
-import android.app.ondeviceintelligence.ICancellationSignal;
+import android.os.IRemoteCallback;
+import android.os.ICancellationSignal;
import android.os.PersistableBundle;
import android.os.Bundle;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import android.service.ondeviceintelligence.IRemoteStorageService;
import android.service.ondeviceintelligence.IProcessingUpdateStatusCallback;
diff --git a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IRemoteStorageService.aidl b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IRemoteStorageService.aidl
index 253df890b198..a6f49e17d80e 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IRemoteStorageService.aidl
+++ b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/IRemoteStorageService.aidl
@@ -20,7 +20,7 @@ import android.app.ondeviceintelligence.Feature;
import android.os.ParcelFileDescriptor;
import android.os.RemoteCallback;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
/**
* Interface for a concrete implementation to provide access to storage read access
diff --git a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
index 6907e2bdf2b3..618d2a096916 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
+++ b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java
@@ -18,6 +18,8 @@ package android.service.ondeviceintelligence;
import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE;
+import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+
import android.annotation.CallSuper;
import android.annotation.CallbackExecutor;
import android.annotation.FlaggedApi;
@@ -29,7 +31,6 @@ import android.app.Service;
import android.app.ondeviceintelligence.DownloadCallback;
import android.app.ondeviceintelligence.Feature;
import android.app.ondeviceintelligence.FeatureDetails;
-import android.app.ondeviceintelligence.ICancellationSignal;
import android.app.ondeviceintelligence.IDownloadCallback;
import android.app.ondeviceintelligence.IFeatureCallback;
import android.app.ondeviceintelligence.IFeatureDetailsCallback;
@@ -37,14 +38,14 @@ import android.app.ondeviceintelligence.IListFeaturesCallback;
import android.app.ondeviceintelligence.OnDeviceIntelligenceException;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager;
import android.app.ondeviceintelligence.OnDeviceIntelligenceManager.StateParams;
-import android.app.ondeviceintelligence.utils.BinderUtils;
import android.content.Intent;
+import android.os.Binder;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
import android.os.IBinder;
+import android.os.ICancellationSignal;
import android.os.Looper;
-import android.os.Message;
import android.os.OutcomeReceiver;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
@@ -53,11 +54,10 @@ import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -91,18 +91,6 @@ import java.util.function.LongConsumer;
@SystemApi
@FlaggedApi(FLAG_ENABLE_ON_DEVICE_INTELLIGENCE)
public abstract class OnDeviceIntelligenceService extends Service {
- private static final int MSG_ON_READY = 1;
- private static final int MSG_GET_VERSION = 2;
- private static final int MSG_LIST_FEATURES = 3;
- private static final int MSG_GET_FEATURE = 4;
- private static final int MSG_GET_FEATURE_DETAILS = 5;
- private static final int MSG_DOWNLOAD_FEATURE = 6;
- private static final int MSG_GET_READ_ONLY_FILE_DESCRIPTOR = 7;
- private static final int MSG_GET_READ_ONLY_FEATURE_FILE_DESCRIPTOR_MAP = 8;
- private static final int MSG_REGISTER_REMOTE_SERVICES = 9;
- private static final int MSG_INFERENCE_SERVICE_CONNECTED = 10;
- private static final int MSG_INFERENCE_SERVICE_DISCONNECTED = 11;
-
private static final String TAG = OnDeviceIntelligenceService.class.getSimpleName();
private volatile IRemoteProcessingService mRemoteProcessingService;
@@ -112,71 +100,19 @@ public abstract class OnDeviceIntelligenceService extends Service {
@Override
public void onCreate() {
super.onCreate();
- mHandler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(@NonNull Message msg) {
- switch (msg.what) {
- case MSG_ON_READY:
- OnDeviceIntelligenceService.this.onReady();
- break;
- case MSG_GET_VERSION:
- OnDeviceIntelligenceService.this.onGetVersion(
- (LongConsumer) msg.obj);
- break;
- case MSG_LIST_FEATURES:
- OnDeviceIntelligenceService.this.onListFeatures(
- msg.arg1,
- (OutcomeReceiver<List<Feature>, OnDeviceIntelligenceException>) msg.obj);
- break;
- case MSG_GET_FEATURE:
- GetFeatureParams params = (GetFeatureParams) msg.obj;
- OnDeviceIntelligenceService.this.onGetFeature(
- msg.arg1,
- msg.arg2,
- params.callback);
- break;
- case MSG_GET_FEATURE_DETAILS:
- FeatureDetailsParams detailsParams = (FeatureDetailsParams) msg.obj;
- OnDeviceIntelligenceService.this.onGetFeatureDetails(
- msg.arg1,
- detailsParams.feature,
- detailsParams.callback);
- break;
- case MSG_DOWNLOAD_FEATURE:
- DownloadParams downloadParams = (DownloadParams) msg.obj;
- OnDeviceIntelligenceService.this.onDownloadFeature(
- msg.arg1,
- downloadParams.feature,
- downloadParams.cancellationSignal,
- downloadParams.callback);
- break;
- case MSG_GET_READ_ONLY_FILE_DESCRIPTOR:
- FileDescriptorParams fdParams = (FileDescriptorParams) msg.obj;
- OnDeviceIntelligenceService.this.onGetReadOnlyFileDescriptor(
- fdParams.fileName,
- fdParams.future);
- break;
- case MSG_GET_READ_ONLY_FEATURE_FILE_DESCRIPTOR_MAP:
- FeatureFileDescriptorParams ffdParams =
- (FeatureFileDescriptorParams) msg.obj;
- OnDeviceIntelligenceService.this.onGetReadOnlyFeatureFileDescriptorMap(
- ffdParams.feature,
- ffdParams.consumer);
- break;
- case MSG_REGISTER_REMOTE_SERVICES:
- mRemoteProcessingService = (IRemoteProcessingService) msg.obj;
- break;
- case MSG_INFERENCE_SERVICE_CONNECTED:
- OnDeviceIntelligenceService.this.onInferenceServiceConnected();
- break;
- case MSG_INFERENCE_SERVICE_DISCONNECTED:
- OnDeviceIntelligenceService.this.onInferenceServiceDisconnected();
- break;
- }
- }
- };
+ mHandler = new Handler(Looper.getMainLooper(), null /* callback */, true /* async */);
}
+ /**
+ * The {@link Intent} that must be declared as handled by the service. To be supported, the
+ * service must also require the
+ * {@link android.Manifest.permission#BIND_ON_DEVICE_INTELLIGENCE_SERVICE}
+ * permission so that other applications can not abuse it.
+ */
+ @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+ public static final String SERVICE_INTERFACE =
+ "android.service.ondeviceintelligence.OnDeviceIntelligenceService";
+
/**
* @hide
@@ -189,37 +125,45 @@ public abstract class OnDeviceIntelligenceService extends Service {
/** {@inheritDoc} */
@Override
public void ready() {
- mHandler.sendEmptyMessage(MSG_ON_READY);
+ mHandler.executeOrSendMessage(
+ obtainMessage(OnDeviceIntelligenceService::onReady,
+ OnDeviceIntelligenceService.this));
}
@Override
public void getVersion(RemoteCallback remoteCallback) {
Objects.requireNonNull(remoteCallback);
- Message msg = Message.obtain(mHandler, MSG_GET_VERSION,
- (LongConsumer) (l -> {
- Bundle b = new Bundle();
- b.putLong(OnDeviceIntelligenceManager.API_VERSION_BUNDLE_KEY, l);
- remoteCallback.sendResult(b);
- }));
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onGetVersion,
+ OnDeviceIntelligenceService.this, l -> {
+ Bundle b = new Bundle();
+ b.putLong(
+ OnDeviceIntelligenceManager.API_VERSION_BUNDLE_KEY,
+ l);
+ remoteCallback.sendResult(b);
+ }));
}
@Override
public void listFeatures(int callerUid,
IListFeaturesCallback listFeaturesCallback) {
Objects.requireNonNull(listFeaturesCallback);
- Message msg = Message.obtain(mHandler, MSG_LIST_FEATURES,
- callerUid, 0, wrapListFeaturesCallback(listFeaturesCallback));
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onListFeatures,
+ OnDeviceIntelligenceService.this, callerUid,
+ wrapListFeaturesCallback(listFeaturesCallback)));
}
@Override
public void getFeature(int callerUid, int id, IFeatureCallback featureCallback) {
Objects.requireNonNull(featureCallback);
- Message msg = Message.obtain(mHandler, MSG_GET_FEATURE,
- callerUid, id,
- new GetFeatureParams(wrapFeatureCallback(featureCallback)));
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onGetFeature,
+ OnDeviceIntelligenceService.this, callerUid,
+ id, wrapFeatureCallback(featureCallback)));
}
@@ -228,11 +172,11 @@ public abstract class OnDeviceIntelligenceService extends Service {
IFeatureDetailsCallback featureDetailsCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(featureDetailsCallback);
- Message msg = Message.obtain(mHandler, MSG_GET_FEATURE_DETAILS,
- new FeatureDetailsParams(feature,
- wrapFeatureDetailsCallback(featureDetailsCallback)));
- msg.arg1 = callerUid;
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onGetFeatureDetails,
+ OnDeviceIntelligenceService.this, callerUid,
+ feature, wrapFeatureDetailsCallback(featureDetailsCallback)));
}
@Override
@@ -241,24 +185,18 @@ public abstract class OnDeviceIntelligenceService extends Service {
IDownloadCallback downloadCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(downloadCallback);
-
- CancellationSignal cancellationSignal = new CancellationSignal();
+ ICancellationSignal transport = null;
if (cancellationSignalFuture != null) {
- ICancellationSignal transport = new ICancellationSignal.Stub() {
- @Override
- public void cancel() {
- cancellationSignal.cancel();
- }
- };
+ transport = CancellationSignal.createTransport();
cancellationSignalFuture.complete(transport);
}
-
- Message msg = Message.obtain(mHandler, MSG_DOWNLOAD_FEATURE,
- new DownloadParams(feature,
- cancellationSignalFuture != null ? cancellationSignal : null,
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onDownloadFeature,
+ OnDeviceIntelligenceService.this, callerUid,
+ feature,
+ CancellationSignal.fromTransport(transport),
wrapDownloadCallback(downloadCallback)));
- msg.arg1 = callerUid;
- mHandler.sendMessage(msg);
}
@Override
@@ -266,9 +204,11 @@ public abstract class OnDeviceIntelligenceService extends Service {
AndroidFuture<ParcelFileDescriptor> future) {
Objects.requireNonNull(fileName);
Objects.requireNonNull(future);
- Message msg = Message.obtain(mHandler, MSG_GET_READ_ONLY_FILE_DESCRIPTOR,
- new FileDescriptorParams(fileName, future));
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onGetReadOnlyFileDescriptor,
+ OnDeviceIntelligenceService.this, fileName,
+ future));
}
@Override
@@ -276,15 +216,16 @@ public abstract class OnDeviceIntelligenceService extends Service {
Feature feature, RemoteCallback remoteCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(remoteCallback);
- Message msg = Message.obtain(mHandler,
- MSG_GET_READ_ONLY_FEATURE_FILE_DESCRIPTOR_MAP,
- new FeatureFileDescriptorParams(feature, parcelFileDescriptorMap -> {
- Bundle bundle = new Bundle();
- parcelFileDescriptorMap.forEach(bundle::putParcelable);
- remoteCallback.sendResult(bundle);
- tryClosePfds(parcelFileDescriptorMap.values());
- }));
- mHandler.sendMessage(msg);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onGetReadOnlyFeatureFileDescriptorMap,
+ OnDeviceIntelligenceService.this, feature,
+ parcelFileDescriptorMap -> {
+ Bundle bundle = new Bundle();
+ parcelFileDescriptorMap.forEach(bundle::putParcelable);
+ remoteCallback.sendResult(bundle);
+ tryClosePfds(parcelFileDescriptorMap.values());
+ }));
}
@Override
@@ -295,12 +236,18 @@ public abstract class OnDeviceIntelligenceService extends Service {
@Override
public void notifyInferenceServiceConnected() {
- mHandler.sendEmptyMessage(MSG_INFERENCE_SERVICE_CONNECTED);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onInferenceServiceConnected,
+ OnDeviceIntelligenceService.this));
}
@Override
public void notifyInferenceServiceDisconnected() {
- mHandler.sendEmptyMessage(MSG_INFERENCE_SERVICE_DISCONNECTED);
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceIntelligenceService::onInferenceServiceDisconnected,
+ OnDeviceIntelligenceService.this));
}
};
}
@@ -309,77 +256,10 @@ public abstract class OnDeviceIntelligenceService extends Service {
}
/**
- * The {@link Intent} that must be declared as handled by the service. To be supported, the
- * service must also require the
- * {@link android.Manifest.permission#BIND_ON_DEVICE_INTELLIGENCE_SERVICE}
- * permission so that other applications can not abuse it.
- */
- @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
- public static final String SERVICE_INTERFACE =
- "android.service.ondeviceintelligence.OnDeviceIntelligenceService";
-
- // Parameter holder classes
- private static class GetFeatureParams {
- final OutcomeReceiver<Feature, OnDeviceIntelligenceException> callback;
-
- GetFeatureParams(OutcomeReceiver<Feature, OnDeviceIntelligenceException> callback) {
- this.callback = callback;
- }
- }
-
- private static class FeatureDetailsParams {
- final Feature feature;
- final OutcomeReceiver<FeatureDetails, OnDeviceIntelligenceException> callback;
-
- FeatureDetailsParams(Feature feature,
- OutcomeReceiver<FeatureDetails, OnDeviceIntelligenceException> callback) {
- this.feature = feature;
- this.callback = callback;
- }
- }
-
- private static class DownloadParams {
- final Feature feature;
- final CancellationSignal cancellationSignal;
- final DownloadCallback callback;
-
- DownloadParams(Feature feature, CancellationSignal cancellationSignal,
- DownloadCallback callback) {
- this.feature = feature;
- this.cancellationSignal = cancellationSignal;
- this.callback = callback;
- }
- }
-
- private static class FileDescriptorParams {
- final String fileName;
- final AndroidFuture<ParcelFileDescriptor> future;
-
- FileDescriptorParams(String fileName, AndroidFuture<ParcelFileDescriptor> future) {
- this.fileName = fileName;
- this.future = future;
- }
- }
-
- private static class FeatureFileDescriptorParams {
- final Feature feature;
- final Consumer<Map<String, ParcelFileDescriptor>> consumer;
-
- FeatureFileDescriptorParams(Feature feature,
- Consumer<Map<String, ParcelFileDescriptor>> consumer) {
- this.feature = feature;
- this.consumer = consumer;
- }
- }
-
- /**
* Using this signal to assertively a signal each time service binds successfully, used only in
* tests to get a signal that service instance is ready. This is needed because we cannot rely
* on {@link #onCreate} or {@link #onBind} to be invoke on each binding.
- *
- * @hide
*/
- @SystemApi
public void onReady() {
}
@@ -422,7 +302,7 @@ public abstract class OnDeviceIntelligenceService extends Service {
new IProcessingUpdateStatusCallback.Stub() {
@Override
public void onSuccess(PersistableBundle result) {
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
callbackExecutor.execute(
() -> statusReceiver.onResult(result));
});
@@ -430,7 +310,7 @@ public abstract class OnDeviceIntelligenceService extends Service {
@Override
public void onFailure(int errorCode, String errorMessage) {
- BinderUtils.withCleanCallingIdentity(() -> callbackExecutor.execute(
+ Binder.withCleanCallingIdentity(() -> callbackExecutor.execute(
() -> statusReceiver.onError(
new OnDeviceIntelligenceException(
errorCode, errorMessage))));
@@ -575,7 +455,7 @@ public abstract class OnDeviceIntelligenceService extends Service {
private void onGetReadOnlyFileDescriptor(@NonNull String fileName,
@NonNull AndroidFuture<ParcelFileDescriptor> future) {
Slog.v(TAG, "onGetReadOnlyFileDescriptor " + fileName);
- BinderUtils.withCleanCallingIdentity(() -> {
+ Binder.withCleanCallingIdentity(() -> {
Slog.v(TAG,
"onGetReadOnlyFileDescriptor: " + fileName + " under internal app storage.");
File f = new File(getBaseContext().getFilesDir(), fileName);
@@ -592,11 +472,7 @@ public abstract class OnDeviceIntelligenceService extends Service {
} finally {
future.complete(pfd);
if (pfd != null) {
- try {
- pfd.close();
- } catch (IOException e) {
- Log.w(TAG, "Error closing FD", e);
- }
+ pfd.close();
}
}
});
diff --git a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
index 315dbaf919e5..949fb8ddda9d 100644
--- a/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
+++ b/packages/NeuralNetworks/framework/platform/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
@@ -19,6 +19,8 @@ package android.service.ondeviceintelligence;
import static android.app.ondeviceintelligence.OnDeviceIntelligenceManager.AUGMENT_REQUEST_CONTENT_BUNDLE_KEY;
import static android.app.ondeviceintelligence.flags.Flags.FLAG_ENABLE_ON_DEVICE_INTELLIGENCE;
+import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;
+
import android.annotation.CallSuper;
import android.annotation.CallbackExecutor;
import android.annotation.FlaggedApi;
@@ -29,9 +31,7 @@ import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.app.Service;
import android.app.ondeviceintelligence.Feature;
-import android.app.ondeviceintelligence.ICancellationSignal;
import android.app.ondeviceintelligence.IProcessingSignal;
-import android.app.ondeviceintelligence.IRemoteCallback;
import android.app.ondeviceintelligence.IResponseCallback;
import android.app.ondeviceintelligence.IStreamingResponseCallback;
import android.app.ondeviceintelligence.ITokenInfoCallback;
@@ -48,9 +48,11 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
+import android.os.HandlerExecutor;
import android.os.IBinder;
+import android.os.ICancellationSignal;
+import android.os.IRemoteCallback;
import android.os.Looper;
-import android.os.Message;
import android.os.OutcomeReceiver;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
@@ -59,8 +61,7 @@ import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
-import com.android.modules.utils.AndroidFuture;
-import com.android.modules.utils.HandlerExecutor;
+import com.android.internal.infra.AndroidFuture;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -73,7 +74,7 @@ import java.util.function.Consumer;
/**
* Abstract base class for performing inference in a isolated process. This service exposes its
- * methods via {@link android.app.ondeviceintelligence.OnDeviceIntelligenceManager}.
+ * methods via {@link OnDeviceIntelligenceManager}.
*
* <p> A service that provides methods to perform on-device inference both in streaming and
* non-streaming fashion. Also, provides a way to register a storage service that will be used to
@@ -99,12 +100,6 @@ import java.util.function.Consumer;
public abstract class OnDeviceSandboxedInferenceService extends Service {
private static final String TAG = OnDeviceSandboxedInferenceService.class.getSimpleName();
- private static final int MSG_TOKEN_INFO_REQUEST = 1;
- private static final int MSG_PROCESS_REQUEST_STREAMING = 2;
- private static final int MSG_PROCESS_REQUEST = 3;
- private static final int MSG_UPDATE_PROCESSING_STATE = 4;
-
-
/**
* @hide
*/
@@ -138,12 +133,12 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
* @hide
*/
public static final String MODEL_LOADED_BROADCAST_INTENT =
- "android.service.ondeviceintelligence.MODEL_LOADED";
+ "android.service.ondeviceintelligence.MODEL_LOADED";
/**
* @hide
*/
public static final String MODEL_UNLOADED_BROADCAST_INTENT =
- "android.service.ondeviceintelligence.MODEL_UNLOADED";
+ "android.service.ondeviceintelligence.MODEL_UNLOADED";
/**
* @hide
@@ -157,115 +152,12 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
@Override
public void onCreate() {
super.onCreate();
- mHandler = new Handler(Looper.getMainLooper()) {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_TOKEN_INFO_REQUEST:
- TokenInfoParams params = (TokenInfoParams) msg.obj;
- OnDeviceSandboxedInferenceService.this.onTokenInfoRequest(
- msg.arg1,
- params.feature,
- params.request,
- params.cancellationSignal,
- params.callback);
- break;
- case MSG_PROCESS_REQUEST_STREAMING:
- StreamingRequestParams streamParams = (StreamingRequestParams) msg.obj;
- OnDeviceSandboxedInferenceService.this.onProcessRequestStreaming(
- msg.arg1,
- streamParams.feature,
- streamParams.request,
- msg.arg2,
- streamParams.cancellationSignal,
- streamParams.processingSignal,
- streamParams.callback);
- break;
- case MSG_PROCESS_REQUEST:
- RequestParams requestParams = (RequestParams) msg.obj;
- OnDeviceSandboxedInferenceService.this.onProcessRequest(
- msg.arg1,
- requestParams.feature,
- requestParams.request,
- msg.arg2,
- requestParams.cancellationSignal,
- requestParams.processingSignal,
- requestParams.callback);
- break;
- case MSG_UPDATE_PROCESSING_STATE:
- UpdateStateParams stateParams = (UpdateStateParams) msg.obj;
- OnDeviceSandboxedInferenceService.this.onUpdateProcessingState(
- stateParams.processingState,
- stateParams.callback);
- break;
- }
- }
- };
- }
-
- // Parameter holder classes
- private static class TokenInfoParams {
- final Feature feature;
- final Bundle request;
- final CancellationSignal cancellationSignal;
- final OutcomeReceiver<TokenInfo, OnDeviceIntelligenceException> callback;
-
- TokenInfoParams(Feature feature, Bundle request, CancellationSignal cancellationSignal,
- OutcomeReceiver<TokenInfo, OnDeviceIntelligenceException> callback) {
- this.feature = feature;
- this.request = request;
- this.cancellationSignal = cancellationSignal;
- this.callback = callback;
- }
- }
-
- private static class StreamingRequestParams {
- final Feature feature;
- final Bundle request;
- final CancellationSignal cancellationSignal;
- final ProcessingSignal processingSignal;
- final StreamingProcessingCallback callback;
-
- StreamingRequestParams(Feature feature, Bundle request,
- CancellationSignal cancellationSignal, ProcessingSignal processingSignal,
- StreamingProcessingCallback callback) {
- this.feature = feature;
- this.request = request;
- this.cancellationSignal = cancellationSignal;
- this.processingSignal = processingSignal;
- this.callback = callback;
- }
- }
-
- private static class RequestParams {
- final Feature feature;
- final Bundle request;
- final CancellationSignal cancellationSignal;
- final ProcessingSignal processingSignal;
- final ProcessingCallback callback;
-
- RequestParams(Feature feature, Bundle request,
- CancellationSignal cancellationSignal, ProcessingSignal processingSignal,
- ProcessingCallback callback) {
- this.feature = feature;
- this.request = request;
- this.cancellationSignal = cancellationSignal;
- this.processingSignal = processingSignal;
- this.callback = callback;
- }
- }
-
- private static class UpdateStateParams {
- final Bundle processingState;
- final OutcomeReceiver<PersistableBundle, OnDeviceIntelligenceException> callback;
-
- UpdateStateParams(Bundle processingState,
- OutcomeReceiver<PersistableBundle, OnDeviceIntelligenceException> callback) {
- this.processingState = processingState;
- this.callback = callback;
- }
+ mHandler = new Handler(Looper.getMainLooper(), null /* callback */, true /* async */);
}
+ /**
+ * @hide
+ */
@Nullable
@Override
public final IBinder onBind(@NonNull Intent intent) {
@@ -276,7 +168,8 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
IRemoteCallback remoteCallback) throws RemoteException {
Objects.requireNonNull(storageService);
mRemoteStorageService = storageService;
- remoteCallback.sendResult(Bundle.EMPTY);
+ remoteCallback.sendResult(
+ Bundle.EMPTY); //to notify caller uid to system-server.
}
@Override
@@ -285,42 +178,34 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
ITokenInfoCallback tokenInfoCallback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(tokenInfoCallback);
- CancellationSignal cancellationSignal = new CancellationSignal();
+ ICancellationSignal transport = null;
if (cancellationSignalFuture != null) {
- ICancellationSignal transport = new ICancellationSignal.Stub() {
- @Override
- public void cancel() {
- cancellationSignal.cancel();
- }
- };
+ transport = CancellationSignal.createTransport();
cancellationSignalFuture.complete(transport);
}
- Message msg = Message.obtain(mHandler, MSG_TOKEN_INFO_REQUEST,
- callerUid, 0,
- new TokenInfoParams(feature, request,
- cancellationSignalFuture != null ? cancellationSignal : null,
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceSandboxedInferenceService::onTokenInfoRequest,
+ OnDeviceSandboxedInferenceService.this,
+ callerUid, feature,
+ request,
+ CancellationSignal.fromTransport(transport),
wrapTokenInfoCallback(tokenInfoCallback)));
- mHandler.sendMessage(msg);
}
@Override
- public void processRequestStreaming(int callerUid, Feature feature,
- Bundle request, int requestType,
+ public void processRequestStreaming(int callerUid, Feature feature, Bundle request,
+ int requestType,
AndroidFuture cancellationSignalFuture,
AndroidFuture processingSignalFuture,
IStreamingResponseCallback callback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(callback);
- CancellationSignal cancellationSignal = new CancellationSignal();
+ ICancellationSignal transport = null;
if (cancellationSignalFuture != null) {
- ICancellationSignal transport = new ICancellationSignal.Stub() {
- @Override
- public void cancel() {
- cancellationSignal.cancel();
- }
- };
+ transport = CancellationSignal.createTransport();
cancellationSignalFuture.complete(transport);
}
IProcessingSignal processingSignalTransport = null;
@@ -329,32 +214,30 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
processingSignalFuture.complete(processingSignalTransport);
}
- Message msg = Message.obtain(mHandler, MSG_PROCESS_REQUEST_STREAMING,
- callerUid, requestType,
- new StreamingRequestParams(feature, request,
- cancellationSignalFuture != null ? cancellationSignal : null,
+
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceSandboxedInferenceService::onProcessRequestStreaming,
+ OnDeviceSandboxedInferenceService.this, callerUid,
+ feature,
+ request,
+ requestType,
+ CancellationSignal.fromTransport(transport),
ProcessingSignal.fromTransport(processingSignalTransport),
wrapStreamingResponseCallback(callback)));
- mHandler.sendMessage(msg);
}
@Override
- public void processRequest(int callerUid, Feature feature,
- Bundle request, int requestType,
+ public void processRequest(int callerUid, Feature feature, Bundle request,
+ int requestType,
AndroidFuture cancellationSignalFuture,
AndroidFuture processingSignalFuture,
IResponseCallback callback) {
Objects.requireNonNull(feature);
Objects.requireNonNull(callback);
-
- CancellationSignal cancellationSignal = new CancellationSignal();
+ ICancellationSignal transport = null;
if (cancellationSignalFuture != null) {
- ICancellationSignal transport = new ICancellationSignal.Stub() {
- @Override
- public void cancel() {
- cancellationSignal.cancel();
- }
- };
+ transport = CancellationSignal.createTransport();
cancellationSignalFuture.complete(transport);
}
IProcessingSignal processingSignalTransport = null;
@@ -362,14 +245,14 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
processingSignalTransport = ProcessingSignal.createTransport();
processingSignalFuture.complete(processingSignalTransport);
}
-
- Message msg = Message.obtain(mHandler, MSG_PROCESS_REQUEST,
- callerUid, requestType,
- new RequestParams(feature, request,
- cancellationSignalFuture != null ? cancellationSignal : null,
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceSandboxedInferenceService::onProcessRequest,
+ OnDeviceSandboxedInferenceService.this, callerUid, feature,
+ request, requestType,
+ CancellationSignal.fromTransport(transport),
ProcessingSignal.fromTransport(processingSignalTransport),
wrapResponseCallback(callback)));
- mHandler.sendMessage(msg);
}
@Override
@@ -377,11 +260,11 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
IProcessingUpdateStatusCallback callback) {
Objects.requireNonNull(processingState);
Objects.requireNonNull(callback);
-
- Message msg = Message.obtain(mHandler, MSG_UPDATE_PROCESSING_STATE,
- new UpdateStateParams(processingState,
+ mHandler.executeOrSendMessage(
+ obtainMessage(
+ OnDeviceSandboxedInferenceService::onUpdateProcessingState,
+ OnDeviceSandboxedInferenceService.this, processingState,
wrapOutcomeReceiver(callback)));
- mHandler.sendMessage(msg);
}
};
}
diff --git a/packages/NeuralNetworks/service/Android.bp b/packages/NeuralNetworks/service/Android.bp
index 05c603f5ebce..cfdc1af6857f 100644
--- a/packages/NeuralNetworks/service/Android.bp
+++ b/packages/NeuralNetworks/service/Android.bp
@@ -19,11 +19,20 @@ package {
filegroup {
name: "service-ondeviceintelligence-sources",
srcs: [
- "java/**/*.java",
+ "module/java/**/*.java",
],
- path: "java",
visibility: [
"//frameworks/base:__subpackages__",
"//packages/modules/NeuralNetworks:__subpackages__",
],
}
+
+filegroup {
+ name: "service-ondeviceintelligence-sources-platform",
+ srcs: [
+ "platform/java/**/*.java",
+ ],
+ visibility: [
+ "//frameworks/base:__subpackages__",
+ ],
+}
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/BundleUtil.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/BundleUtil.java
index 2626cc880e09..7dd8f2fdcecb 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/BundleUtil.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/BundleUtil.java
@@ -21,7 +21,6 @@ import static android.system.OsConstants.O_ACCMODE;
import static android.system.OsConstants.O_RDONLY;
import static android.system.OsConstants.PROT_READ;
-import android.annotation.SuppressLint;
import android.app.ondeviceintelligence.IResponseCallback;
import android.app.ondeviceintelligence.IStreamingResponseCallback;
import android.app.ondeviceintelligence.ITokenInfoCallback;
@@ -43,7 +42,7 @@ import android.system.ErrnoException;
import android.system.Os;
import android.util.Log;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeoutException;
@@ -51,8 +50,6 @@ import java.util.concurrent.TimeoutException;
/**
* Util methods for ensuring the Bundle passed in various methods are read-only and restricted to
* some known types.
- *
- * @hide
*/
public class BundleUtil {
private static final String TAG = "BundleUtil";
@@ -79,7 +76,7 @@ public class BundleUtil {
* {@link ClassNotFoundException} exception is swallowed and `null` is returned
* instead. We want to ensure cleanup of null entries in such case.
*/
- bundle.putParcelable(key, null);
+ bundle.putObject(key, null);
continue;
}
if (canMarshall(obj) || obj instanceof CursorWindow) {
@@ -125,7 +122,7 @@ public class BundleUtil {
* {@link ClassNotFoundException} exception is swallowed and `null` is returned
* instead. We want to ensure cleanup of null entries in such case.
*/
- bundle.putParcelable(key, null);
+ bundle.putObject(key, null);
continue;
}
if (canMarshall(obj)) {
@@ -170,7 +167,7 @@ public class BundleUtil {
* {@link ClassNotFoundException} exception is swallowed and `null` is returned
* instead. We want to ensure cleanup of null entries in such case.
*/
- bundle.putParcelable(key, null);
+ bundle.putObject(key, null);
continue;
}
if (canMarshall(obj)) {
@@ -320,16 +317,11 @@ public class BundleUtil {
};
}
- private static boolean canMarshall(Object value) {
- return (value instanceof byte[]) || (value instanceof Integer) || (value instanceof Long) ||
- (value instanceof Double) || (value instanceof String) ||
- (value instanceof int[]) || (value instanceof long[]) ||
- (value instanceof double[]) || (value instanceof String[]) ||
- (value instanceof PersistableBundle) || (value == null) ||
- (value instanceof Boolean) || (value instanceof boolean[]);
+ private static boolean canMarshall(Object obj) {
+ return obj instanceof byte[] || obj instanceof PersistableBundle
+ || PersistableBundle.isValidType(obj);
}
- @SuppressLint("NewApi")
private static void ensureValidBundle(Bundle bundle) {
if (bundle == null) {
throw new IllegalArgumentException("Request passed is expected to be non-null");
@@ -372,7 +364,7 @@ public class BundleUtil {
}
} catch (ErrnoException e) {
throw new BadParcelableException(
- "Invalid File descriptor passed in the Bundle.");
+ "Invalid File descriptor passed in the Bundle.", e);
}
}
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/InferenceInfoStore.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/InferenceInfoStore.java
index e8a1b322f661..bef3f8048da1 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/InferenceInfoStore.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/InferenceInfoStore.java
@@ -28,9 +28,6 @@ import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
-/**
- * @hide
- */
public class InferenceInfoStore {
private static final String TAG = "InferenceInfoStore";
private final TreeSet<InferenceInfo> inferenceInfos;
@@ -101,4 +98,4 @@ public class InferenceInfoStore {
info.startTimeMs).setEndTimeMillis(info.endTimeMs).setSuspendedTimeMillis(
info.suspendedTimeMs).build();
}
-}
+} \ No newline at end of file
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
index a078f7542c11..0a69af67a8bf 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
@@ -16,40 +16,38 @@
package com.android.server.ondeviceintelligence;
-import static android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS;
import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.DEVICE_CONFIG_UPDATE_BUNDLE_KEY;
-import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_LOADED_BROADCAST_INTENT;
import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_LOADED_BUNDLE_KEY;
-import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_UNLOADED_BROADCAST_INTENT;
import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_UNLOADED_BUNDLE_KEY;
+import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_LOADED_BROADCAST_INTENT;
+import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.MODEL_UNLOADED_BROADCAST_INTENT;
import static android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService.REGISTER_MODEL_UPDATE_CALLBACK_BUNDLE_KEY;
import static com.android.server.ondeviceintelligence.BundleUtil.sanitizeInferenceParams;
-import static com.android.server.ondeviceintelligence.BundleUtil.sanitizeStateParams;
import static com.android.server.ondeviceintelligence.BundleUtil.validatePfdReadOnly;
+import static com.android.server.ondeviceintelligence.BundleUtil.sanitizeStateParams;
import static com.android.server.ondeviceintelligence.BundleUtil.wrapWithValidation;
+
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.app.AppGlobals;
import android.app.ondeviceintelligence.DownloadCallback;
import android.app.ondeviceintelligence.Feature;
import android.app.ondeviceintelligence.FeatureDetails;
-import android.app.ondeviceintelligence.ICancellationSignal;
import android.app.ondeviceintelligence.IDownloadCallback;
import android.app.ondeviceintelligence.IFeatureCallback;
import android.app.ondeviceintelligence.IFeatureDetailsCallback;
import android.app.ondeviceintelligence.IListFeaturesCallback;
import android.app.ondeviceintelligence.IOnDeviceIntelligenceManager;
import android.app.ondeviceintelligence.IProcessingSignal;
-import android.app.ondeviceintelligence.IRemoteCallback;
import android.app.ondeviceintelligence.IResponseCallback;
import android.app.ondeviceintelligence.IStreamingResponseCallback;
import android.app.ondeviceintelligence.ITokenInfoCallback;
import android.app.ondeviceintelligence.InferenceInfo;
import android.app.ondeviceintelligence.OnDeviceIntelligenceException;
-import android.app.ondeviceintelligence.utils.BinderUtils;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -60,12 +58,16 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.ICancellationSignal;
+import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.PersistableBundle;
import android.os.RemoteCallback;
import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ShellCallback;
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.provider.Settings;
@@ -80,14 +82,17 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.Slog;
+import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
-import com.android.modules.utils.AndroidFuture;
-import com.android.modules.utils.BackgroundThread;
-import com.android.modules.utils.ServiceConnector;
+import com.android.internal.infra.AndroidFuture;
+import com.android.internal.infra.ServiceConnector;
+import com.android.internal.os.BackgroundThread;
import com.android.server.LocalManagerRegistry;
import com.android.server.SystemService;
+import com.android.server.SystemService.TargetUser;
import com.android.server.ondeviceintelligence.callbacks.ListenableDownloadCallback;
+import java.io.FileDescriptor;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
@@ -232,7 +237,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
remoteCallback.sendResult(null);
return;
}
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.postAsync(
service -> {
AndroidFuture future = new AndroidFuture();
@@ -260,7 +265,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
PersistableBundle.EMPTY);
return;
}
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.postAsync(
service -> {
@@ -298,7 +303,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
PersistableBundle.EMPTY);
return;
}
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.postAsync(
service -> {
@@ -342,7 +347,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
PersistableBundle.EMPTY);
return;
}
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.postAsync(
service -> {
@@ -385,7 +390,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
"OnDeviceIntelligenceManagerService is unavailable",
PersistableBundle.EMPTY);
}
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.postAsync(
service -> {
@@ -425,7 +430,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
"OnDeviceIntelligenceManagerService is unavailable",
PersistableBundle.EMPTY);
}
- ensureRemoteInferenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteInferenceServiceInitialized();
int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.postAsync(
service -> {
@@ -469,7 +474,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
"OnDeviceIntelligenceManagerService is unavailable",
PersistableBundle.EMPTY);
}
- ensureRemoteInferenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteInferenceServiceInitialized();
int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.postAsync(
service -> {
@@ -515,7 +520,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
"OnDeviceIntelligenceManagerService is unavailable",
PersistableBundle.EMPTY);
}
- ensureRemoteInferenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteInferenceServiceInitialized();
int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.postAsync(
service -> {
@@ -540,31 +545,20 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
}
@Override
- public int handleShellCommand(@NonNull ParcelFileDescriptor in,
- @NonNull ParcelFileDescriptor out, @NonNull ParcelFileDescriptor err,
- @NonNull String[] args) {
- return new com.android.server.ondeviceintelligence.OnDeviceIntelligenceShellCommand(
- OnDeviceIntelligenceManagerService.this).exec(
- this,
- in.getFileDescriptor(),
- out.getFileDescriptor(),
- err.getFileDescriptor(),
- args);
+ public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err,
+ String[] args, ShellCallback callback, ResultReceiver resultReceiver) {
+ new OnDeviceIntelligenceShellCommand(OnDeviceIntelligenceManagerService.this).exec(
+ this, in, out, err, args, callback, resultReceiver);
}
};
}
- private boolean ensureRemoteIntelligenceServiceInitialized(boolean throwIfServiceInvalid) {
+ private void ensureRemoteIntelligenceServiceInitialized() {
synchronized (mLock) {
if (mRemoteOnDeviceIntelligenceService == null) {
String serviceName = getServiceNames()[0];
- if (!BinderUtils.withCleanCallingIdentity(
- () -> validateServiceElevated(serviceName, false,
- throwIfServiceInvalid))) {
- return false;
- }
- mRemoteOnDeviceIntelligenceService = new RemoteOnDeviceIntelligenceService(
- mContext,
+ Binder.withCleanCallingIdentity(() -> validateServiceElevated(serviceName, false));
+ mRemoteOnDeviceIntelligenceService = new RemoteOnDeviceIntelligenceService(mContext,
ComponentName.unflattenFromString(serviceName),
UserHandle.SYSTEM.getIdentifier());
mRemoteOnDeviceIntelligenceService.setServiceLifecycleCallbacks(
@@ -583,7 +577,6 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
});
}
}
- return true;
}
@NonNull
@@ -597,21 +590,13 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
AndroidFuture<Void> result = null;
try {
sanitizeStateParams(processingState);
- if (ensureRemoteInferenceServiceInitialized(/* throwServiceIfInvalid */
- false)) {
- result = mRemoteInferenceService.post(
- service -> service.updateProcessingState(
- processingState, callback));
- result.whenCompleteAsync(
- (c, e) -> BundleUtil.tryCloseResource(processingState),
- resourceClosingExecutor);
- } else {
- callback.onFailure(
- OnDeviceIntelligenceException.PROCESSING_ERROR_SERVICE_UNAVAILABLE,
- "Remote service cannot be initialized.");
- }
- } catch (RemoteException e) {
- Slog.w("Failed to invoke updateProcessingState", e);
+ ensureRemoteInferenceServiceInitialized();
+ result = mRemoteInferenceService.post(
+ service -> service.updateProcessingState(
+ processingState, callback));
+ result.whenCompleteAsync(
+ (c, e) -> BundleUtil.tryCloseResource(processingState),
+ resourceClosingExecutor);
} finally {
if (result == null) {
resourceClosingExecutor.execute(
@@ -623,14 +608,11 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
};
}
- private boolean ensureRemoteInferenceServiceInitialized(boolean throwIfServiceInvalid) {
+ private void ensureRemoteInferenceServiceInitialized() {
synchronized (mLock) {
if (mRemoteInferenceService == null) {
String serviceName = getServiceNames()[1];
- if (!BinderUtils.withCleanCallingIdentity(
- () -> validateServiceElevated(serviceName, true, throwIfServiceInvalid))) {
- return false;
- }
+ Binder.withCleanCallingIdentity(() -> validateServiceElevated(serviceName, true));
mRemoteInferenceService = new RemoteOnDeviceSandboxedInferenceService(mContext,
ComponentName.unflattenFromString(serviceName),
UserHandle.SYSTEM.getIdentifier());
@@ -640,11 +622,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void onConnected(
@NonNull IOnDeviceSandboxedInferenceService service) {
try {
- if (!ensureRemoteIntelligenceServiceInitialized(
- /* throwServiceIfInvalid */
- false)) {
- return;
- }
+ ensureRemoteIntelligenceServiceInitialized();
service.registerRemoteStorageService(
getIRemoteStorageService(), new IRemoteCallback.Stub() {
@Override
@@ -667,29 +645,20 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
@Override
public void onDisconnected(
@NonNull IOnDeviceSandboxedInferenceService service) {
- if (!ensureRemoteIntelligenceServiceInitialized(
- /* throwServiceIfInvalid */
- false)) {
- return;
- }
+ ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
IOnDeviceIntelligenceService::notifyInferenceServiceDisconnected);
}
@Override
public void onBinderDied() {
- if (!ensureRemoteIntelligenceServiceInitialized(
- /* throwServiceIfInvalid */
- false)) {
- return;
- }
+ ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
IOnDeviceIntelligenceService::notifyInferenceServiceDisconnected);
}
});
}
}
- return true;
}
private void registerModelLoadingBroadcasts(IOnDeviceSandboxedInferenceService service) {
@@ -760,8 +729,9 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
if (mTemporaryConfigNamespace != null) {
return mTemporaryConfigNamespace;
}
+
return mContext.getResources().getString(
- android.R.string.config_defaultOnDeviceIntelligenceDeviceConfigNamespace);
+ R.string.config_defaultOnDeviceIntelligenceDeviceConfigNamespace);
}
}
@@ -775,11 +745,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
}
Bundle bundle = new Bundle();
bundle.putParcelable(DEVICE_CONFIG_UPDATE_BUNDLE_KEY, persistableBundle);
- if (!ensureRemoteIntelligenceServiceInitialized(
- /* throwServiceIfInvalid */
- false)) {
- return;
- }
+ ensureRemoteInferenceServiceInitialized();
mRemoteInferenceService.run(service -> service.updateProcessingState(bundle,
new IProcessingUpdateStatusCallback.Stub() {
@Override
@@ -802,13 +768,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void getReadOnlyFileDescriptor(
String filePath,
AndroidFuture<ParcelFileDescriptor> future) {
- if (!ensureRemoteIntelligenceServiceInitialized(
- /* throwServiceIfInvalid */
- false)) {
- future.completeExceptionally(new OnDeviceIntelligenceException(
- OnDeviceIntelligenceException.PROCESSING_ERROR_NOT_AVAILABLE));
- return;
- }
+ ensureRemoteIntelligenceServiceInitialized();
AndroidFuture<ParcelFileDescriptor> pfdFuture = new AndroidFuture<>();
mRemoteOnDeviceIntelligenceService.run(
service -> service.getReadOnlyFileDescriptor(
@@ -831,7 +791,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
public void getReadOnlyFeatureFileDescriptorMap(
Feature feature,
RemoteCallback remoteCallback) {
- ensureRemoteIntelligenceServiceInitialized(/* throwServiceIfInvalid */ true);
+ ensureRemoteIntelligenceServiceInitialized();
mRemoteOnDeviceIntelligenceService.run(
service -> service.getReadOnlyFeatureFileDescriptorMap(
feature,
@@ -855,48 +815,40 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
};
}
- private boolean validateServiceElevated(String serviceName, boolean checkIsolated,
- boolean throwIfServiceInvalid) {
+ private void validateServiceElevated(String serviceName, boolean checkIsolated) {
try {
if (TextUtils.isEmpty(serviceName)) {
- if (throwIfServiceInvalid) {
- throw new IllegalStateException(
- "Remote service is not configured to complete the request");
- }
- return false;
+ throw new IllegalStateException(
+ "Remote service is not configured to complete the request");
}
ComponentName serviceComponent = ComponentName.unflattenFromString(
serviceName);
- ServiceInfo serviceInfo = mContext.getPackageManager().getServiceInfo(
+ ServiceInfo serviceInfo = AppGlobals.getPackageManager().getServiceInfo(
serviceComponent,
PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
- if (!checkIsolated) {
- checkServiceRequiresPermission(serviceInfo,
- Manifest.permission.BIND_ON_DEVICE_INTELLIGENCE_SERVICE);
- return true;
- }
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
+ UserHandle.SYSTEM.getIdentifier());
+ 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");
- }
- } catch (PackageManager.NameNotFoundException e) {
- if (throwIfServiceInvalid) {
+ 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.");
}
- return false;
- } catch (SecurityException e) {
- if (throwIfServiceInvalid) {
- throw e;
- }
- return false;
+ } catch (RemoteException e) {
+ throw new IllegalStateException("Could not fetch service info for remote services", e);
}
- return true;
}
private static void checkServiceRequiresPermission(ServiceInfo serviceInfo,
@@ -904,8 +856,8 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
final String permission = serviceInfo.permission;
if (!requiredPermission.equals(permission)) {
throw new SecurityException(String.format(
- "%s requires %s permission. Found %s permission",
- serviceInfo,
+ "Service %s requires %s permission. Found %s permission",
+ serviceInfo.getComponentName(),
requiredPermission,
serviceInfo.permission));
}
@@ -944,9 +896,9 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
}
}
return new String[]{mContext.getResources().getString(
- android.R.string.config_defaultOnDeviceIntelligenceService),
+ R.string.config_defaultOnDeviceIntelligenceService),
mContext.getResources().getString(
- android.R.string.config_defaultOnDeviceSandboxedInferenceService)};
+ R.string.config_defaultOnDeviceSandboxedInferenceService)};
}
protected String[] getBroadcastKeys() throws Resources.NotFoundException {
@@ -957,7 +909,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
}
}
- return new String[]{MODEL_LOADED_BROADCAST_INTENT, MODEL_UNLOADED_BROADCAST_INTENT};
+ return new String[]{ MODEL_LOADED_BROADCAST_INTENT, MODEL_UNLOADED_BROADCAST_INTENT };
}
@RequiresPermission(Manifest.permission.USE_ON_DEVICE_INTELLIGENCE)
@@ -1102,7 +1054,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
private synchronized Handler getTemporaryHandler() {
if (mTemporaryHandler == null) {
- mTemporaryHandler = new Handler(Looper.getMainLooper()) {
+ mTemporaryHandler = new Handler(Looper.getMainLooper(), null, true) {
@Override
public void handleMessage(Message msg) {
synchronized (mLock) {
@@ -1124,13 +1076,10 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
return mTemporaryHandler;
}
- // Using #getLong here as the timeout settings are only applicable to the services running in
- // SYSTEM user only.
- @SuppressWarnings("NonUserGetterCalled")
private long getIdleTimeoutMs() {
- return Settings.Secure.getLong(mContext.getContentResolver(),
- ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS,
- TimeUnit.HOURS.toMillis(1));
+ return Settings.Secure.getLongForUser(mContext.getContentResolver(),
+ Settings.Secure.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS, TimeUnit.HOURS.toMillis(1),
+ mContext.getUserId());
}
private int getRemoteInferenceServiceUid() {
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceShellCommand.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceShellCommand.java
index c641de8b47b1..d2c84fa1b18a 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceShellCommand.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceShellCommand.java
@@ -18,16 +18,12 @@ package com.android.server.ondeviceintelligence;
import android.annotation.NonNull;
import android.os.Binder;
-
-import com.android.modules.utils.BasicShellCommandHandler;
+import android.os.ShellCommand;
import java.io.PrintWriter;
import java.util.Objects;
-/**
- * @hide
- */
-final class OnDeviceIntelligenceShellCommand extends BasicShellCommandHandler {
+final class OnDeviceIntelligenceShellCommand extends ShellCommand {
private static final String TAG = OnDeviceIntelligenceShellCommand.class.getSimpleName();
@NonNull
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceIntelligenceService.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceIntelligenceService.java
index 0c43a309c456..ac9747aa83b3 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceIntelligenceService.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceIntelligenceService.java
@@ -16,7 +16,6 @@
package com.android.server.ondeviceintelligence;
-import static android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS;
import static android.content.Context.BIND_FOREGROUND_SERVICE;
import static android.content.Context.BIND_INCLUDE_CAPABILITIES;
@@ -27,15 +26,13 @@ import android.provider.Settings;
import android.service.ondeviceintelligence.IOnDeviceIntelligenceService;
import android.service.ondeviceintelligence.OnDeviceIntelligenceService;
-import com.android.modules.utils.ServiceConnector;
+import com.android.internal.infra.ServiceConnector;
import java.util.concurrent.TimeUnit;
/**
* Manages the connection to the remote on-device intelligence service. Also, handles unbinding
* logic set by the service implementation via a Secure Settings flag.
- *
- * @hide
*/
public class RemoteOnDeviceIntelligenceService extends
ServiceConnector.Impl<IOnDeviceIntelligenceService> {
@@ -59,13 +56,11 @@ public class RemoteOnDeviceIntelligenceService extends
return LONG_TIMEOUT;
}
- // Using #getLong here as the timeout settings are only applicable to the services running in
- // SYSTEM user only.
@Override
- @SuppressWarnings("NonUserGetterCalled")
protected long getAutoDisconnectTimeoutMs() {
- return Settings.Secure.getLong(mContext.getContentResolver(),
- ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS,
- TimeUnit.SECONDS.toMillis(30));
+ return Settings.Secure.getLongForUser(mContext.getContentResolver(),
+ Settings.Secure.ON_DEVICE_INTELLIGENCE_UNBIND_TIMEOUT_MS,
+ TimeUnit.SECONDS.toMillis(30),
+ mContext.getUserId());
}
}
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceSandboxedInferenceService.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceSandboxedInferenceService.java
index 8c5d5a7ba736..18b13838ea7c 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceSandboxedInferenceService.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/RemoteOnDeviceSandboxedInferenceService.java
@@ -16,7 +16,6 @@
package com.android.server.ondeviceintelligence;
-import static android.app.ondeviceintelligence.OnDeviceIntelligenceManager.ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS;
import static android.content.Context.BIND_FOREGROUND_SERVICE;
import static android.content.Context.BIND_INCLUDE_CAPABILITIES;
@@ -27,7 +26,7 @@ import android.provider.Settings;
import android.service.ondeviceintelligence.IOnDeviceSandboxedInferenceService;
import android.service.ondeviceintelligence.OnDeviceSandboxedInferenceService;
-import com.android.modules.utils.ServiceConnector;
+import com.android.internal.infra.ServiceConnector;
import java.util.concurrent.TimeUnit;
@@ -36,8 +35,6 @@ import java.util.concurrent.TimeUnit;
* Manages the connection to the remote on-device sand boxed inference service. Also, handles
* unbinding
* logic set by the service implementation via a SecureSettings flag.
- *
- * @hide
*/
public class RemoteOnDeviceSandboxedInferenceService extends
ServiceConnector.Impl<IOnDeviceSandboxedInferenceService> {
@@ -68,13 +65,12 @@ public class RemoteOnDeviceSandboxedInferenceService extends
return LONG_TIMEOUT;
}
- // Using #getLong here as the timeout settings are only applicable to the services running in
- // SYSTEM user only.
+
@Override
- @SuppressWarnings("NonUserGetterCalled")
protected long getAutoDisconnectTimeoutMs() {
- return Settings.Secure.getLong(mContext.getContentResolver(),
- ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS,
- TimeUnit.SECONDS.toMillis(30));
+ return Settings.Secure.getLongForUser(mContext.getContentResolver(),
+ Settings.Secure.ON_DEVICE_INFERENCE_UNBIND_TIMEOUT_MS,
+ TimeUnit.SECONDS.toMillis(30),
+ mContext.getUserId());
}
}
diff --git a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/callbacks/ListenableDownloadCallback.java b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/callbacks/ListenableDownloadCallback.java
index 249bcd37db5d..32f0698a8f9c 100644
--- a/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/callbacks/ListenableDownloadCallback.java
+++ b/packages/NeuralNetworks/service/platform/java/com/android/server/ondeviceintelligence/callbacks/ListenableDownloadCallback.java
@@ -21,7 +21,7 @@ import android.os.Handler;
import android.os.PersistableBundle;
import android.os.RemoteException;
-import com.android.modules.utils.AndroidFuture;
+import com.android.internal.infra.AndroidFuture;
import java.util.concurrent.TimeoutException;
@@ -32,8 +32,6 @@ import java.util.concurrent.TimeoutException;
* some cases. Instead, in such cases we rely on the remote service sending progress updates and if
* there are *no* progress callbacks in the duration of {@link #idleTimeoutMs}, we can assume the
* download will not complete and enabling faster cleanup.
- *
- * @hide
*/
public class ListenableDownloadCallback extends IDownloadCallback.Stub implements Runnable {
private final IDownloadCallback callback;