Add method to create DevContext in a background thread

Also refactor MeasurementServiceImpl to create DevContext in the
background thread.

Bug: 288958188

Test: atest

Change-Id: I03bf626c42358aa0147d714063b6916df00a0e02
diff --git a/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java b/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
index cbb40e3..7e812dc 100644
--- a/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
+++ b/adservices/service-core/java/com/android/adservices/service/devapi/DevContextFilter.java
@@ -76,26 +76,38 @@
      *     transaction.
      */
     public DevContext createDevContext() throws IllegalStateException {
-        int callingAppUid = SdkRuntimeUtil.getCallingAppUid(Binder.getCallingUidOrThrow());
-        return createDevContext(callingAppUid);
+        return createDevContextFromCallingUid(Binder.getCallingUidOrThrow());
+    }
+
+    /**
+     * Creates a {@link DevContext} for a given Binder calling UID.
+     *
+     * @param callingUid The Binder calling UID.
+     * @return A dev context specifying if the developer options are enabled for this API call or a
+     *     context with developer options disabled if there is any error retrieving info for the
+     *     calling application.
+     */
+    public DevContext createDevContextFromCallingUid(int callingUid) {
+        return createDevContext(SdkRuntimeUtil.getCallingAppUid(callingUid));
     }
 
     /**
      * Creates a {@link DevContext} for a given app UID.
      *
-     * @param callingUid The UID of the caller APP.
+     * @param callingAppUid The UID of the caller APP.
      * @return A dev context specifying if the developer options are enabled for this API call or a
      *     context with developer options disabled if there is any error retrieving info for the
      *     calling application.
      */
     @VisibleForTesting
-    public DevContext createDevContext(int callingUid) {
+    public DevContext createDevContext(int callingAppUid) {
         if (!isDeveloperMode()) {
             return DevContext.createForDevOptionsDisabled();
         }
 
         try {
-            String callingAppPackage = mAppPackageNameRetriever.getAppPackageNameForUid(callingUid);
+            String callingAppPackage =
+                    mAppPackageNameRetriever.getAppPackageNameForUid(callingAppUid);
             LogUtil.v("Creating Dev Context for calling app with package " + callingAppPackage);
             if (!isDebuggable(callingAppPackage)) {
                 LogUtil.v("Non debuggable, ignoring");
@@ -110,7 +122,7 @@
             LogUtil.w(
                     "Unable to retrieve the package name for UID %d. Creating a DevContext with "
                             + "developer options disabled.",
-                    callingUid);
+                    callingAppUid);
             return DevContext.createForDevOptionsDisabled();
         }
     }
diff --git a/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java b/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
index 953a3d6..5f27e35 100644
--- a/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
+++ b/adservices/service-core/java/com/android/adservices/service/measurement/MeasurementServiceImpl.java
@@ -59,7 +59,6 @@
 import com.android.adservices.service.common.PermissionHelper;
 import com.android.adservices.service.common.Throttler;
 import com.android.adservices.service.consent.ConsentManager;
-import com.android.adservices.service.devapi.DevContext;
 import com.android.adservices.service.devapi.DevContextFilter;
 import com.android.adservices.service.measurement.access.AppPackageAccessResolver;
 import com.android.adservices.service.measurement.access.DevContextAccessResolver;
@@ -170,9 +169,6 @@
         final int callerUid = Binder.getCallingUidOrThrow();
         final boolean attributionPermission =
                 PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
-        // DevContext creation checks that the thread is the Binder thread so we must create it
-        // outside of the background execution.
-        DevContext devContext = mDevContextFilter.createDevContext();
         sBackgroundExecutor.execute(
                 () -> {
                     performRegistration(
@@ -192,7 +188,10 @@
                                             request.getAppPackageName()),
                                     new UserConsentAccessResolver(mConsentManager),
                                     new PermissionAccessResolver(attributionPermission),
-                                    new DevContextAccessResolver(devContext, request)),
+                                    new DevContextAccessResolver(
+                                            mDevContextFilter.createDevContextFromCallingUid(
+                                                    callerUid),
+                                            request)),
                             callback,
                             apiNameId,
                             request.getAppPackageName(),
@@ -229,9 +228,6 @@
         final int callerUid = Binder.getCallingUidOrThrow();
         final boolean attributionPermission =
                 PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
-        // DevContext creation checks that the thread is the Binder thread so we must create it
-        // outside of the background execution.
-        DevContext devContext = mDevContextFilter.createDevContext();
         sBackgroundExecutor.execute(
                 () -> {
                     final Supplier<Boolean> enforceForeground =
@@ -257,7 +253,8 @@
                                             mFlags.getWebContextClientAppAllowList(),
                                             request.getAppPackageName()),
                                     new DevContextAccessResolver(
-                                            devContext,
+                                            mDevContextFilter.createDevContextFromCallingUid(
+                                                    callerUid),
                                             request.getSourceRegistrationRequest())),
                             callback,
                             apiNameId,
@@ -295,9 +292,6 @@
         final int callerUid = Binder.getCallingUidOrThrow();
         final boolean attributionPermission =
                 PermissionHelper.hasAttributionPermission(mContext, request.getAppPackageName());
-        // DevContext creation checks that the thread is the Binder thread so we must create it
-        // outside of the background execution.
-        DevContext devContext = mDevContextFilter.createDevContext();
         sBackgroundExecutor.execute(
                 () -> {
                     final Supplier<Boolean> enforceForeground =
@@ -320,7 +314,8 @@
                                     new UserConsentAccessResolver(mConsentManager),
                                     new PermissionAccessResolver(attributionPermission),
                                     new DevContextAccessResolver(
-                                            devContext,
+                                            mDevContextFilter.createDevContextFromCallingUid(
+                                                    callerUid),
                                             request.getTriggerRegistrationRequest())),
                             callback,
                             apiNameId,
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
index 2ac5a11..7a30c49 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/measurement/MeasurementServiceImplTest.java
@@ -1395,7 +1395,7 @@
 
     private void updateDevContextDenied(boolean denied) {
         if (denied) {
-            when(mDevContextFilter.createDevContext())
+            when(mDevContextFilter.createDevContextFromCallingUid(anyInt()))
                     .thenReturn(DevContext.createForDevOptionsDisabled());
         }
     }