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

Commit 3278aeff authored by Antoan Angelov's avatar Antoan Angelov Committed by Automerger Merge Worker
Browse files

Merge "Also parse integer, long and boolean extras for NFC" into tm-dev am:...

Merge "Also parse integer, long and boolean extras for NFC" into tm-dev am: 79e7d4b5 am: 01411697

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18281174



Change-Id: I2e14f3dbf889dd5abb6c4ed76c116407ba9bce00
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 42e3b634 01411697
Loading
Loading
Loading
Loading
+86 −3
Original line number Diff line number Diff line
@@ -18,10 +18,26 @@ package android.app.admin;

import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ALLOW_OFFLINE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_KEEP_SCREEN_ON;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCAL_TIME;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_EXTRAS_BUNDLE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SUPPORTED_MODES;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TRIGGER;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_USE_MOBILE_DATA;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_HIDDEN;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_PORT;
import static android.app.admin.DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC;
import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_NFC;
import static android.nfc.NfcAdapter.EXTRA_NDEF_MESSAGES;
@@ -44,6 +60,8 @@ import android.util.Log;
import java.io.IOException;
import java.io.StringReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

@@ -52,6 +70,8 @@ import java.util.Set;
 */
final class ProvisioningIntentHelper {

    private static final Map<String, Class> EXTRAS_TO_CLASS_MAP = createExtrasToClassMap();

    private static final String TAG = "ProvisioningIntentHelper";

    /**
@@ -124,12 +144,11 @@ final class ProvisioningIntentHelper {

    private static void addPropertyToBundle(
            String propertyName, Properties properties, Bundle bundle) {
        if(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME.equals(propertyName)) {
        if (EXTRAS_TO_CLASS_MAP.get(propertyName) == ComponentName.class) {
            ComponentName componentName = ComponentName.unflattenFromString(
                    properties.getProperty(propertyName));
            bundle.putParcelable(propertyName, componentName);
        } else if (EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE.equals(propertyName)
                || EXTRA_PROVISIONING_ROLE_HOLDER_EXTRAS_BUNDLE.equals(propertyName)) {
        } else if (EXTRAS_TO_CLASS_MAP.get(propertyName) == PersistableBundle.class) {
            try {
                bundle.putParcelable(propertyName,
                        deserializeExtrasBundle(properties, propertyName));
@@ -137,6 +156,13 @@ final class ProvisioningIntentHelper {
                Log.e(TAG,
                        "Failed to parse " + propertyName + ".", e);
            }
        } else if (EXTRAS_TO_CLASS_MAP.get(propertyName) == Boolean.class) {
            bundle.putBoolean(propertyName,
                    Boolean.parseBoolean(properties.getProperty(propertyName)));
        } else if (EXTRAS_TO_CLASS_MAP.get(propertyName) == Long.class) {
            bundle.putLong(propertyName, Long.parseLong(properties.getProperty(propertyName)));
        } else if (EXTRAS_TO_CLASS_MAP.get(propertyName) == Integer.class) {
            bundle.putInt(propertyName, Integer.parseInt(properties.getProperty(propertyName)));
        }
        else {
            bundle.putString(propertyName, properties.getProperty(propertyName));
@@ -213,4 +239,61 @@ final class ProvisioningIntentHelper {
        Log.i(TAG, "No compatible records found on nfcIntent");
        return null;
    }

    private static Map<String, Class> createExtrasToClassMap() {
        Map<String, Class> map = new HashMap<>();
        for (String extra : getBooleanExtras()) {
            map.put(extra, Boolean.class);
        }
        for (String extra : getLongExtras()) {
            map.put(extra, Long.class);
        }
        for (String extra : getIntExtras()) {
            map.put(extra, Integer.class);
        }
        for (String extra : getComponentNameExtras()) {
            map.put(extra, ComponentName.class);
        }
        for (String extra : getPersistableBundleExtras()) {
            map.put(extra, PersistableBundle.class);
        }
        return map;
    }

    private static Set<String> getPersistableBundleExtras() {
        return Set.of(
                EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE,
                EXTRA_PROVISIONING_ROLE_HOLDER_EXTRAS_BUNDLE);
    }

    private static Set<String> getComponentNameExtras() {
        return Set.of(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME);
    }

    private static Set<String> getIntExtras() {
        return Set.of(
                EXTRA_PROVISIONING_WIFI_PROXY_PORT,
                EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE,
                EXTRA_PROVISIONING_SUPPORTED_MODES);
    }

    private static Set<String> getLongExtras() {
        return Set.of(EXTRA_PROVISIONING_LOCAL_TIME);
    }

    private static Set<String> getBooleanExtras() {
        return Set.of(
                EXTRA_PROVISIONING_ALLOW_OFFLINE,
                EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
                EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION,
                EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
                EXTRA_PROVISIONING_WIFI_HIDDEN,
                EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT,
                EXTRA_PROVISIONING_SKIP_ENCRYPTION,
                EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS,
                EXTRA_PROVISIONING_USE_MOBILE_DATA,
                EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER,
                EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE,
                EXTRA_PROVISIONING_KEEP_SCREEN_ON);
    }
}