aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-07 00:20:49 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-07 00:20:49 +0000
commitce96420e8931020b9d3427a67936d73101b73016 (patch)
tree953ae0ee56e13a1da4d04710dea76ae2095b7813
parentbe33810679ecaf256a3a7b4bc193a814fb52726f (diff)
parentb32adcf26553d158a3fddfaccb22c3a3de4dcb2c (diff)
downloadOnDevicePersonalization-ce96420e8931020b9d3427a67936d73101b73016.tar.gz
Snap for 11186783 from b32adcf26553d158a3fddfaccb22c3a3de4dcb2c to 24Q1-release
Change-Id: If3985171a4cfd6b49a57691d5cbbe4bb88a3d0d9
-rw-r--r--federatedcompute/src/com/android/federatedcompute/services/http/HttpFederatedProtocol.java2
-rw-r--r--framework/java/com/android/federatedcompute/internal/util/AbstractServiceBinder.java15
-rw-r--r--framework/java/com/android/federatedcompute/internal/util/AndroidServiceBinder.java35
-rw-r--r--src/com/android/ondevicepersonalization/services/Flags.java9
-rw-r--r--src/com/android/ondevicepersonalization/services/PhFlags.java22
-rw-r--r--tests/federatedcomputetests/AndroidManifest.xml2
-rw-r--r--tests/federatedcomputetests/src/com/android/federatedcompute/services/IsolatedServiceBinderTest.java38
-rw-r--r--tests/servicetests/src/com/android/ondevicepersonalization/services/PhFlagsTest.java20
8 files changed, 132 insertions, 11 deletions
diff --git a/federatedcompute/src/com/android/federatedcompute/services/http/HttpFederatedProtocol.java b/federatedcompute/src/com/android/federatedcompute/services/http/HttpFederatedProtocol.java
index 1bae7ebd..00fdf1fb 100644
--- a/federatedcompute/src/com/android/federatedcompute/services/http/HttpFederatedProtocol.java
+++ b/federatedcompute/src/com/android/federatedcompute/services/http/HttpFederatedProtocol.java
@@ -358,7 +358,7 @@ public final class HttpFederatedProtocol {
if (!HTTP_OK_STATUS.contains(httpResponse.getStatusCode())) {
throw new IllegalStateException(stage + " failed: " + httpResponse.getStatusCode());
} else {
- LogUtil.d(TAG, stage + " success.");
+ LogUtil.i(TAG, stage + " success.");
}
}
diff --git a/framework/java/com/android/federatedcompute/internal/util/AbstractServiceBinder.java b/framework/java/com/android/federatedcompute/internal/util/AbstractServiceBinder.java
index 9d01a15e..99084702 100644
--- a/framework/java/com/android/federatedcompute/internal/util/AbstractServiceBinder.java
+++ b/framework/java/com/android/federatedcompute/internal/util/AbstractServiceBinder.java
@@ -70,6 +70,21 @@ public abstract class AbstractServiceBinder<T> {
context, serviceIntentAction, servicePackages, bindFlags, converter);
}
+ /** Get the {@link AbstractServiceBinder} suitable for an isolated service by name. */
+ public static <T2> AbstractServiceBinder<T2> getIsolatedServiceBinderByServiceName(
+ Context context,
+ String serviceName,
+ String servicePackage,
+ String isolatedProcessName,
+ int bindFlags,
+ Function<IBinder, T2> converter) {
+ return new AndroidServiceBinder<>(
+ context, serviceName, servicePackage, isolatedProcessName,
+ /* enableLookupByName= */ true,
+ bindFlags,
+ converter);
+ }
+
/** Get the binder service. */
public abstract T getService(Executor executor);
diff --git a/framework/java/com/android/federatedcompute/internal/util/AndroidServiceBinder.java b/framework/java/com/android/federatedcompute/internal/util/AndroidServiceBinder.java
index 1340de82..5898abe8 100644
--- a/framework/java/com/android/federatedcompute/internal/util/AndroidServiceBinder.java
+++ b/framework/java/com/android/federatedcompute/internal/util/AndroidServiceBinder.java
@@ -44,6 +44,7 @@ class AndroidServiceBinder<T> extends AbstractServiceBinder<T> {
private final Function<IBinder, T> mBinderConverter;
private final Context mContext;
private final boolean mEnableLookupByServiceName;
+ private final String mIsolatedProcessName;
private final int mBindFlags;
// Concurrency mLock.
private final Object mLock = new Object();
@@ -85,6 +86,7 @@ class AndroidServiceBinder<T> extends AbstractServiceBinder<T> {
this.mServicePackages = servicePackages;
this.mEnableLookupByServiceName = false;
this.mBindFlags = bindFlags;
+ this.mIsolatedProcessName = null;
}
AndroidServiceBinder(
@@ -99,6 +101,24 @@ class AndroidServiceBinder<T> extends AbstractServiceBinder<T> {
this.mServicePackages = List.of(servicePackage);
this.mEnableLookupByServiceName = enableLookupByName;
this.mBindFlags = 0;
+ this.mIsolatedProcessName = null;
+ }
+
+ AndroidServiceBinder(
+ @NonNull Context context,
+ @NonNull String serviceIntentActionOrName,
+ @NonNull String servicePackage,
+ @NonNull String isolatedProcessName,
+ boolean enableLookupByName,
+ int bindFlags,
+ @NonNull Function<IBinder, T> converter) {
+ this.mServiceIntentActionOrName = serviceIntentActionOrName;
+ this.mContext = context;
+ this.mBinderConverter = converter;
+ this.mServicePackages = List.of(servicePackage);
+ this.mEnableLookupByServiceName = enableLookupByName;
+ this.mBindFlags = bindFlags;
+ this.mIsolatedProcessName = isolatedProcessName;
}
@Override
@@ -115,12 +135,21 @@ class AndroidServiceBinder<T> extends AbstractServiceBinder<T> {
// This latch will open when the connection is established or any error occurs.
mConnectionCountDownLatch = new CountDownLatch(1);
mServiceConnection = new GenericServiceConnection();
+
boolean result =
- mContext.bindService(
+ (mIsolatedProcessName != null)
+ ?
+ mContext.bindIsolatedService(
bindIntent,
Context.BIND_AUTO_CREATE | mBindFlags,
- executor,
- mServiceConnection);
+ mIsolatedProcessName,
+ executor, mServiceConnection)
+ :
+ mContext.bindService(
+ bindIntent,
+ Context.BIND_AUTO_CREATE | mBindFlags, executor,
+ mServiceConnection);
+
if (!result) {
mServiceConnection = null;
throw new IllegalStateException(
diff --git a/src/com/android/ondevicepersonalization/services/Flags.java b/src/com/android/ondevicepersonalization/services/Flags.java
index 86615ac3..49104270 100644
--- a/src/com/android/ondevicepersonalization/services/Flags.java
+++ b/src/com/android/ondevicepersonalization/services/Flags.java
@@ -55,6 +55,11 @@ public interface Flags {
*/
int ISOLATED_SERVICE_DEADLINE_SECONDS = 30;
+ /**
+ * Default value for the list of trusted partner app names.
+ */
+ String DEFAULT_TRUSTED_PARTNER_APPS_LIST = "";
+
default boolean getGlobalKillSwitch() {
return GLOBAL_KILL_SWITCH;
}
@@ -74,4 +79,8 @@ public interface Flags {
default int getIsolatedServiceDeadlineSeconds() {
return ISOLATED_SERVICE_DEADLINE_SECONDS;
}
+
+ default String getTrustedPartnerAppsList() {
+ return DEFAULT_TRUSTED_PARTNER_APPS_LIST;
+ }
}
diff --git a/src/com/android/ondevicepersonalization/services/PhFlags.java b/src/com/android/ondevicepersonalization/services/PhFlags.java
index b253e044..b144116d 100644
--- a/src/com/android/ondevicepersonalization/services/PhFlags.java
+++ b/src/com/android/ondevicepersonalization/services/PhFlags.java
@@ -40,6 +40,8 @@ public final class PhFlags implements Flags {
static final String KEY_ISOLATED_SERVICE_DEADLINE_SECONDS =
"isolated_service_deadline_seconds";
+ static final String KEY_TRUSTED_PARTNER_APPS_LIST = "trusted_partner_apps_list";
+
// OnDevicePersonalization Namespace String from DeviceConfig class
static final String NAMESPACE_ON_DEVICE_PERSONALIZATION = "on_device_personalization";
private static final PhFlags sSingleton = new PhFlags();
@@ -55,9 +57,9 @@ public final class PhFlags implements Flags {
public boolean getGlobalKillSwitch() {
// The priority of applying the flag values: PH (DeviceConfig), then hard-coded value.
return DeviceConfig.getBoolean(
- /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
- /* name= */ KEY_GLOBAL_KILL_SWITCH,
- /* defaultValue= */ GLOBAL_KILL_SWITCH);
+ /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
+ /* name= */ KEY_GLOBAL_KILL_SWITCH,
+ /* defaultValue= */ GLOBAL_KILL_SWITCH);
}
@Override
@@ -67,9 +69,9 @@ public final class PhFlags implements Flags {
}
// The priority of applying the flag values: PH (DeviceConfig), then user hard-coded value.
return DeviceConfig.getBoolean(
- /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
- /* name= */ KEY_ENABLE_ONDEVICEPERSONALIZATION_APIS,
- /* defaultValue= */ ENABLE_ONDEVICEPERSONALIZATION_APIS);
+ /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
+ /* name= */ KEY_ENABLE_ONDEVICEPERSONALIZATION_APIS,
+ /* defaultValue= */ ENABLE_ONDEVICEPERSONALIZATION_APIS);
}
@Override
@@ -104,4 +106,12 @@ public final class PhFlags implements Flags {
/* name= */ KEY_ISOLATED_SERVICE_DEADLINE_SECONDS,
/* defaultValue= */ ISOLATED_SERVICE_DEADLINE_SECONDS);
}
+
+ @Override
+ public String getTrustedPartnerAppsList() {
+ return DeviceConfig.getString(
+ /* namespace= */ NAMESPACE_ON_DEVICE_PERSONALIZATION,
+ /* name= */ KEY_TRUSTED_PARTNER_APPS_LIST,
+ /* defaultValue */ DEFAULT_TRUSTED_PARTNER_APPS_LIST);
+ }
}
diff --git a/tests/federatedcomputetests/AndroidManifest.xml b/tests/federatedcomputetests/AndroidManifest.xml
index 09591632..ea63f529 100644
--- a/tests/federatedcomputetests/AndroidManifest.xml
+++ b/tests/federatedcomputetests/AndroidManifest.xml
@@ -37,7 +37,7 @@
android:permission="android.permission.BIND_JOB_SERVICE">
</service>
<service android:name="com.android.federatedcompute.services.training.IsolatedTrainingService"
- android:isolatedProcess="true" android:exported="false" >
+ android:isolatedProcess="true" android:allowSharedIsolatedProcess="true" android:exported="false" >
</service>
<service
android:name="com.android.federatedcompute.services.examplestore.SampleExampleStoreService"
diff --git a/tests/federatedcomputetests/src/com/android/federatedcompute/services/IsolatedServiceBinderTest.java b/tests/federatedcomputetests/src/com/android/federatedcompute/services/IsolatedServiceBinderTest.java
index 12896c54..f15cdf2e 100644
--- a/tests/federatedcomputetests/src/com/android/federatedcompute/services/IsolatedServiceBinderTest.java
+++ b/tests/federatedcomputetests/src/com/android/federatedcompute/services/IsolatedServiceBinderTest.java
@@ -45,4 +45,42 @@ public class IsolatedServiceBinderTest {
final IIsolatedTrainingService service = serviceBinder.getService(Runnable::run);
assertNotNull(service);
}
+
+ /**
+ * Test the isolated service binding implementation, specifically, we bind to services through
+ * the bindIsolatedService() API but with the shared isolated process flag omitted.
+ */
+ @Test
+ public void testIsolatedProcessBinding() {
+ AbstractServiceBinder<IIsolatedTrainingService> serviceBinder =
+ AbstractServiceBinder.getIsolatedServiceBinderByServiceName(
+ mContext,
+ ISOLATED_TRAINING_SERVICE_NAME,
+ mContext.getPackageName(),
+ "testSharedIsolatedProcessBinding",
+ 0,
+ IIsolatedTrainingService.Stub::asInterface);
+
+ final IIsolatedTrainingService service = serviceBinder.getService(Runnable::run);
+ assertNotNull(service);
+ }
+
+ /**
+ * Test the isolated service binding implementation, specifically, we bind to services through
+ * the bindIsolatedService() API but with the shared isolated process flag included.
+ */
+ @Test
+ public void testSharedIsolatedProcessBinding() {
+ AbstractServiceBinder<IIsolatedTrainingService> serviceBinder =
+ AbstractServiceBinder.getIsolatedServiceBinderByServiceName(
+ mContext,
+ ISOLATED_TRAINING_SERVICE_NAME,
+ mContext.getPackageName(),
+ "testSharedIsolatedProcessBinding",
+ Context.BIND_SHARED_ISOLATED_PROCESS,
+ IIsolatedTrainingService.Stub::asInterface);
+
+ final IIsolatedTrainingService service = serviceBinder.getService(Runnable::run);
+ assertNotNull(service);
+ }
}
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/PhFlagsTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/PhFlagsTest.java
index 4cada534..30d6a9a2 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/PhFlagsTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/PhFlagsTest.java
@@ -16,6 +16,7 @@
package com.android.ondevicepersonalization.services;
+import static com.android.ondevicepersonalization.services.Flags.DEFAULT_TRUSTED_PARTNER_APPS_LIST;
import static com.android.ondevicepersonalization.services.Flags.ENABLE_ONDEVICEPERSONALIZATION_APIS;
import static com.android.ondevicepersonalization.services.Flags.ENABLE_PERSONALIZATION_STATUS_OVERRIDE;
import static com.android.ondevicepersonalization.services.Flags.GLOBAL_KILL_SWITCH;
@@ -24,6 +25,7 @@ import static com.android.ondevicepersonalization.services.PhFlags.KEY_ENABLE_ON
import static com.android.ondevicepersonalization.services.PhFlags.KEY_ENABLE_PERSONALIZATION_STATUS_OVERRIDE;
import static com.android.ondevicepersonalization.services.PhFlags.KEY_GLOBAL_KILL_SWITCH;
import static com.android.ondevicepersonalization.services.PhFlags.KEY_PERSONALIZATION_STATUS_OVERRIDE_VALUE;
+import static com.android.ondevicepersonalization.services.PhFlags.KEY_TRUSTED_PARTNER_APPS_LIST;
import static com.google.common.truth.Truth.assertThat;
@@ -133,4 +135,22 @@ public class PhFlagsTest {
Flags phFlags = FlagsFactory.getFlags();
assertThat(phFlags.getPersonalizationStatusOverrideValue()).isEqualTo(phOverridingValue);
}
+
+ @Test
+ public void testGetTrustedPartnerAppsList() {
+ assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList())
+ .isEqualTo(DEFAULT_TRUSTED_PARTNER_APPS_LIST);
+
+ final String testTrustedPartnerAppsList =
+ "trusted_test_app_1, trusted_test_app_2, trusted_test_app_3";
+
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_ON_DEVICE_PERSONALIZATION,
+ KEY_TRUSTED_PARTNER_APPS_LIST,
+ testTrustedPartnerAppsList,
+ /* makeDefault */ false);
+
+ assertThat(FlagsFactory.getFlags().getTrustedPartnerAppsList())
+ .isEqualTo(testTrustedPartnerAppsList);
+ }
}