summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl12
-rw-r--r--core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java6
-rw-r--r--services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java2
-rw-r--r--services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java26
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java29
5 files changed, 42 insertions, 33 deletions
diff --git a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
index 2aa17c4681bd..1af3b0f374f1 100644
--- a/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
+++ b/core/java/android/service/ondeviceintelligence/IOnDeviceSandboxedInferenceService.aidl
@@ -21,6 +21,7 @@ import android.app.ondeviceintelligence.IResponseCallback;
import android.app.ondeviceintelligence.ITokenInfoCallback;
import android.app.ondeviceintelligence.IProcessingSignal;
import android.app.ondeviceintelligence.Feature;
+import android.os.IRemoteCallback;
import android.os.ICancellationSignal;
import android.os.PersistableBundle;
import android.os.Bundle;
@@ -34,18 +35,19 @@ import android.service.ondeviceintelligence.IProcessingUpdateStatusCallback;
* @hide
*/
oneway interface IOnDeviceSandboxedInferenceService {
- void registerRemoteStorageService(in IRemoteStorageService storageService);
+ void registerRemoteStorageService(in IRemoteStorageService storageService,
+ in IRemoteCallback remoteCallback) = 0;
void requestTokenInfo(int callerUid, in Feature feature, in Bundle request,
in AndroidFuture cancellationSignal,
- in ITokenInfoCallback tokenInfoCallback);
+ in ITokenInfoCallback tokenInfoCallback) = 1;
void processRequest(int callerUid, in Feature feature, in Bundle request, in int requestType,
in AndroidFuture cancellationSignal,
in AndroidFuture processingSignal,
- in IResponseCallback callback);
+ in IResponseCallback callback) = 2;
void processRequestStreaming(int callerUid, in Feature feature, in Bundle request, in int requestType,
in AndroidFuture cancellationSignal,
in AndroidFuture processingSignal,
- in IStreamingResponseCallback callback);
+ in IStreamingResponseCallback callback) = 3;
void updateProcessingState(in Bundle processingState,
- in IProcessingUpdateStatusCallback callback);
+ in IProcessingUpdateStatusCallback callback) = 4;
} \ No newline at end of file
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
index d00485cb1ca5..a77e07662d23 100644
--- a/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
+++ b/core/java/android/service/ondeviceintelligence/OnDeviceSandboxedInferenceService.java
@@ -51,6 +51,7 @@ 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.OutcomeReceiver;
import android.os.ParcelFileDescriptor;
@@ -148,9 +149,12 @@ public abstract class OnDeviceSandboxedInferenceService extends Service {
if (SERVICE_INTERFACE.equals(intent.getAction())) {
return new IOnDeviceSandboxedInferenceService.Stub() {
@Override
- public void registerRemoteStorageService(IRemoteStorageService storageService) {
+ public void registerRemoteStorageService(IRemoteStorageService storageService,
+ IRemoteCallback remoteCallback) throws RemoteException {
Objects.requireNonNull(storageService);
mRemoteStorageService = storageService;
+ remoteCallback.sendResult(
+ Bundle.EMPTY); //to notify caller uid to system-server.
}
@Override
diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java
index 81f11b52dcb7..07af8d042420 100644
--- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java
+++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerInternal.java
@@ -17,5 +17,5 @@
package com.android.server.ondeviceintelligence;
public interface OnDeviceIntelligenceManagerInternal {
- String getRemoteServicePackageName();
+ int getInferenceServiceUid();
} \ No newline at end of file
diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
index f540f1db6952..59964e0e6e87 100644
--- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
+++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
@@ -56,6 +56,7 @@ 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;
@@ -143,6 +144,9 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
volatile boolean mIsServiceEnabled;
@GuardedBy("mLock")
+ private int remoteInferenceServiceUid = -1;
+
+ @GuardedBy("mLock")
private String[] mTemporaryServiceNames;
@GuardedBy("mLock")
private String[] mTemporaryBroadcastKeys;
@@ -174,7 +178,7 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
Context.ON_DEVICE_INTELLIGENCE_SERVICE, getOnDeviceIntelligenceManagerService(),
/* allowIsolated = */true);
LocalServices.addService(OnDeviceIntelligenceManagerInternal.class,
- OnDeviceIntelligenceManagerService.this::getRemoteConfiguredPackageName);
+ this::getRemoteInferenceServiceUid);
}
@Override
@@ -603,7 +607,13 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
try {
ensureRemoteIntelligenceServiceInitialized();
service.registerRemoteStorageService(
- getIRemoteStorageService());
+ getIRemoteStorageService(), new IRemoteCallback.Stub() {
+ @Override
+ public void sendResult(Bundle bundle) {
+ final int uid = Binder.getCallingUid();
+ setRemoteInferenceServiceUid(uid);
+ }
+ });
mRemoteOnDeviceIntelligenceService.run(
IOnDeviceIntelligenceService::notifyInferenceServiceConnected);
broadcastExecutor.execute(
@@ -1038,4 +1048,16 @@ public class OnDeviceIntelligenceManagerService extends SystemService {
Settings.Secure.ON_DEVICE_INTELLIGENCE_IDLE_TIMEOUT_MS, TimeUnit.HOURS.toMillis(1),
mContext.getUserId());
}
+
+ private int getRemoteInferenceServiceUid() {
+ synchronized (mLock) {
+ return remoteInferenceServiceUid;
+ }
+ }
+
+ private void setRemoteInferenceServiceUid(int remoteInferenceServiceUid) {
+ synchronized (mLock){
+ this.remoteInferenceServiceUid = remoteInferenceServiceUid;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index e2a6b814cec4..f59ae168bdc3 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -4364,7 +4364,7 @@ public class ComputerEngine implements Computer {
uid = getBaseSdkSandboxUid();
}
final int callingUserId = UserHandle.getUserId(callingUid);
- if (isKnownIsolatedComputeApp(uid, callingUserId)) {
+ if (isKnownIsolatedComputeApp(uid)) {
try {
uid = getIsolatedOwner(uid);
} catch (IllegalStateException e) {
@@ -4407,7 +4407,7 @@ public class ComputerEngine implements Computer {
if (Process.isSdkSandboxUid(uid)) {
uid = getBaseSdkSandboxUid();
}
- if (isKnownIsolatedComputeApp(uid, callingUserId)) {
+ if (isKnownIsolatedComputeApp(uid)) {
try {
uid = getIsolatedOwner(uid);
} catch (IllegalStateException e) {
@@ -5809,7 +5809,7 @@ public class ComputerEngine implements Computer {
}
- private boolean isKnownIsolatedComputeApp(int uid, int callingUserId) {
+ private boolean isKnownIsolatedComputeApp(int uid) {
if (!Process.isIsolatedUid(uid)) {
return false;
}
@@ -5822,27 +5822,8 @@ public class ComputerEngine implements Computer {
}
OnDeviceIntelligenceManagerInternal onDeviceIntelligenceManagerInternal =
mInjector.getLocalService(OnDeviceIntelligenceManagerInternal.class);
- if (onDeviceIntelligenceManagerInternal == null) {
- return false;
- }
-
- String onDeviceIntelligencePackage =
- onDeviceIntelligenceManagerInternal.getRemoteServicePackageName();
- if (onDeviceIntelligencePackage == null) {
- return false;
- }
-
- try {
- if (getIsolatedOwner(uid) == getPackageUid(onDeviceIntelligencePackage, 0,
- callingUserId)) {
- return true;
- }
- } catch (IllegalStateException e) {
- // If the owner uid doesn't exist, just use the current uid
- Slog.wtf(TAG, "Expected isolated uid " + uid + " to have an owner", e);
- }
-
- return false;
+ return onDeviceIntelligenceManagerInternal != null
+ && uid == onDeviceIntelligenceManagerInternal.getInferenceServiceUid();
}
@Nullable