From a61cd9a09960da337523065b6617f3f38af558f9 Mon Sep 17 00:00:00 2001 From: Sarup Dalwani Date: Tue, 17 Jan 2023 07:11:02 +0000 Subject: [PATCH] Using AppCloning building blocks flag instead of specific intent redirection flag. Bug: 236221777 Test: Manually tested following cases Turn the flag on: adb shell device_config put app_cloning enable_app_cloning_building_blocks true Turn the flag off: adb shell device_config put app_cloning enable_app_cloning_building_blocks false Change-Id: I94864871660fb67f70c8188f4cb1adcf3789a0fa --- .../server/pm/CrossProfileIntentResolverEngine.java | 10 +++++++++- .../com/android/server/pm/NoFilteringResolver.java | 13 +++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java b/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java index e149b04a3e4b9..b5c04171e3127 100644 --- a/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java +++ b/services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java @@ -37,6 +37,7 @@ import android.util.Pair; import android.util.Slog; import android.util.SparseArray; +import com.android.internal.config.appcloning.AppCloningDeviceConfigHelper; import com.android.server.LocalServices; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; @@ -61,6 +62,8 @@ public class CrossProfileIntentResolverEngine { private final Context mContext; private final UserManagerInternal mUserManagerInternal; + private AppCloningDeviceConfigHelper mAppCloningDeviceConfigHelper; + public CrossProfileIntentResolverEngine(UserManagerService userManager, DomainVerificationManagerInternal domainVerificationManager, DefaultAppProvider defaultAppProvider, Context context) { @@ -250,7 +253,12 @@ public class CrossProfileIntentResolverEngine { * We would return NoFilteringResolver only if it is allowed(feature flag is set). */ if (shouldUseNoFilteringResolver(sourceUserId, targetUserId)) { - if (NoFilteringResolver.isIntentRedirectionAllowed(mContext, resolveForStart, flags)) { + if (mAppCloningDeviceConfigHelper == null) { + //lazy initialization of helper till required, to improve performance. + mAppCloningDeviceConfigHelper = AppCloningDeviceConfigHelper.getInstance(mContext); + } + if (NoFilteringResolver.isIntentRedirectionAllowed(mContext, + mAppCloningDeviceConfigHelper, resolveForStart, flags)) { return new NoFilteringResolver(computer.getComponentResolver(), mUserManager); } else { diff --git a/services/core/java/com/android/server/pm/NoFilteringResolver.java b/services/core/java/com/android/server/pm/NoFilteringResolver.java index 999706a431144..392389009398a 100644 --- a/services/core/java/com/android/server/pm/NoFilteringResolver.java +++ b/services/core/java/com/android/server/pm/NoFilteringResolver.java @@ -22,8 +22,8 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Binder; -import android.provider.DeviceConfig; +import com.android.internal.config.appcloning.AppCloningDeviceConfigHelper; import com.android.server.pm.pkg.PackageStateInternal; import com.android.server.pm.resolution.ComponentResolverApi; import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; @@ -49,18 +49,19 @@ public class NoFilteringResolver extends CrossProfileResolver { "allow_intent_redirection_for_clone_profile"; /** - * Returns true if intent redirection for clone profile feature flag is set - * and if its query, then check if calling user have necessary permission + * Returns true if intent redirection for clone profile feature flag + * (enable_app_cloning_building_blocks) is set and if its query, + * then check if calling user have necessary permission * (android.permission.QUERY_CLONED_APPS) as well as required flag * (PackageManager.MATCH_CLONE_PROFILE) bit set. * @return true if resolver would be used for cross profile resolution. */ public static boolean isIntentRedirectionAllowed(Context context, - boolean resolveForStart, long flags) { + AppCloningDeviceConfigHelper appCloningDeviceConfigHelper, boolean resolveForStart, + long flags) { final long token = Binder.clearCallingIdentity(); try { - return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_APP_CLONING, - FLAG_ALLOW_INTENT_REDIRECTION_FOR_CLONE_PROFILE, false /* defaultValue */) + return appCloningDeviceConfigHelper.getEnableAppCloningBuildingBlocks() && (resolveForStart || (((flags & PackageManager.MATCH_CLONE_PROFILE) != 0) && hasPermission(context, Manifest.permission.QUERY_CLONED_APPS))); } finally {