diff options
author | 2023-02-07 08:00:28 +0000 | |
---|---|---|
committer | 2023-02-07 08:00:28 +0000 | |
commit | bf588abaa915d5f2c79b86774f90cbafb54251bb (patch) | |
tree | 1331617561db70d1f721ea43ec622f0bbc6cb20b | |
parent | 03e132f6348281ddedac359c863a47d8fd9459a5 (diff) | |
parent | a61cd9a09960da337523065b6617f3f38af558f9 (diff) |
Merge "Using AppCloning building blocks flag instead of specific intent redirection flag."
-rw-r--r-- | services/core/java/com/android/server/pm/CrossProfileIntentResolverEngine.java | 10 | ||||
-rw-r--r-- | services/core/java/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 e149b04a3e4b..b5c04171e312 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 999706a43114..392389009398 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 { |