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
This commit is contained in:
Sarup Dalwani
2023-01-17 07:11:02 +00:00
parent f761035d74
commit a61cd9a099
2 changed files with 16 additions and 7 deletions

View File

@@ -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 {

View File

@@ -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 {