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

Commit 87746643 authored by Kholoud Mohamed's avatar Kholoud Mohamed Committed by Android (Google) Code Review
Browse files

Merge changes Id3c16654,I57d8730e into udc-dev

* changes:
  Simplify coexistence gating logic
  Migrate setApplicationHidden to the policy engine
parents bb007550 2a05ec50
Loading
Loading
Loading
Loading
+45 −76
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static android.app.admin.PolicyUpdateResult.RESULT_FAILURE_HARDWARE_LIMIT
import static android.app.admin.PolicyUpdateResult.RESULT_POLICY_CLEARED;
import static android.app.admin.PolicyUpdateResult.RESULT_POLICY_SET;
import static android.content.pm.UserProperties.INHERIT_DEVICE_POLICY_FROM_PARENT;
import static android.provider.DeviceConfig.NAMESPACE_DEVICE_POLICY_MANAGER;

import android.Manifest;
import android.annotation.NonNull;
@@ -47,7 +46,6 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.DeviceConfig;
import android.telephony.TelephonyManager;
import android.util.AtomicFile;
import android.util.Log;
@@ -86,9 +84,6 @@ final class DevicePolicyEngine {
            DevicePolicyIdentifiers.getIdentifierForUserRestriction(
                    UserManager.DISALLOW_CELLULAR_2G);

    private static final String ENABLE_COEXISTENCE_FLAG = "enable_coexistence";
    private static final boolean DEFAULT_ENABLE_COEXISTENCE_FLAG = true;

    private final Context mContext;
    private final UserManager mUserManager;

@@ -771,7 +766,9 @@ final class DevicePolicyEngine {
        Intent intent = new Intent(PolicyUpdateReceiver.ACTION_DEVICE_POLICY_SET_RESULT);
        intent.setPackage(admin.getPackageName());

        List<ResolveInfo> receivers = mContext.getPackageManager().queryBroadcastReceiversAsUser(
        Binder.withCleanCallingIdentity(() -> {
            List<ResolveInfo> receivers =
                    mContext.getPackageManager().queryBroadcastReceiversAsUser(
                            intent,
                            PackageManager.ResolveInfoFlags.of(PackageManager.GET_RECEIVERS),
                            admin.getUserId());
@@ -793,6 +790,7 @@ final class DevicePolicyEngine {
            intent.putExtras(extras);

            maybeSendIntentToAdminReceivers(intent, UserHandle.of(admin.getUserId()), receivers);
        });
    }

    // TODO(b/261430877): Finalise the decision on which admins to send the updates to.
@@ -821,7 +819,9 @@ final class DevicePolicyEngine {
        Intent intent = new Intent(PolicyUpdateReceiver.ACTION_DEVICE_POLICY_CHANGED);
        intent.setPackage(admin.getPackageName());

        List<ResolveInfo> receivers = mContext.getPackageManager().queryBroadcastReceiversAsUser(
        Binder.withCleanCallingIdentity(() -> {
            List<ResolveInfo> receivers =
                    mContext.getPackageManager().queryBroadcastReceiversAsUser(
                            intent,
                            PackageManager.ResolveInfoFlags.of(PackageManager.GET_RECEIVERS),
                            admin.getUserId());
@@ -842,6 +842,7 @@ final class DevicePolicyEngine {

            maybeSendIntentToAdminReceivers(
                    intent, UserHandle.of(admin.getUserId()), receivers);
        });
    }

    private void maybeSendIntentToAdminReceivers(
@@ -1146,38 +1147,6 @@ final class DevicePolicyEngine {
        return mEnforcingAdmins.size() > 0;
    }

    /**
     * Returns {@code true} if the coexistence flag is enabled or:
     * <ul>
     * <li>If the provided package is an admin with existing policies
     * <li>A new admin and no other admin have policies set
     * <li>More than one admin have policies set
     */
    boolean canAdminAddPolicies(String packageName, int userId) {
        if (isCoexistenceFlagEnabled()) {
            return true;
        }

        if (mEnforcingAdmins.contains(userId)
                && mEnforcingAdmins.get(userId).stream().anyMatch(admin ->
                admin.getPackageName().equals(packageName))) {
            return true;
        }

        int numOfEnforcingAdmins = 0;
        for (int i = 0; i < mEnforcingAdmins.size(); i++) {
            numOfEnforcingAdmins += mEnforcingAdmins.get(i).size();
        }
        return numOfEnforcingAdmins == 0 || numOfEnforcingAdmins > 1;
    }

    private boolean isCoexistenceFlagEnabled() {
        return DeviceConfig.getBoolean(
                NAMESPACE_DEVICE_POLICY_MANAGER,
                ENABLE_COEXISTENCE_FLAG,
                DEFAULT_ENABLE_COEXISTENCE_FLAG);
    }

    private <V> boolean checkFor2gFailure(@NonNull PolicyDefinition<V> policyDefinition,
            @NonNull EnforcingAdmin enforcingAdmin) {
        if (!policyDefinition.getPolicyKey().getIdentifier().equals(