Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a61cd9a0 authored by Sarup Dalwani's avatar Sarup Dalwani
Browse files

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
parent f761035d
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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 {
+7 −6
Original line number Diff line number Diff line
@@ -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 {