diff options
author | Sander Alewijnse <salewijnse@google.com> | 2014-04-25 14:56:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-04-25 14:56:24 +0000 |
commit | af55438d5910b4bb0d6f2795c4a6549d1ea73bf0 (patch) | |
tree | de619a754dce1e4f03cfd1ac3dfb5965f9243959 /src/com | |
parent | 522adeb7bb9c95f7b10aa42e7a16da3f026cffc4 (diff) | |
parent | 885c349f7658aee02af77da42400d360e93bb310 (diff) | |
download | android_packages_apps_ManagedProvisioning-af55438d5910b4bb0d6f2795c4a6549d1ea73bf0.tar.gz android_packages_apps_ManagedProvisioning-af55438d5910b4bb0d6f2795c4a6549d1ea73bf0.tar.bz2 android_packages_apps_ManagedProvisioning-af55438d5910b4bb0d6f2795c4a6549d1ea73bf0.zip |
Merge "Check validity of the ProvisioningParams and rename some fields."
Diffstat (limited to 'src/com')
3 files changed, 106 insertions, 66 deletions
diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java index 13502890..5f280794 100644 --- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java +++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java @@ -92,9 +92,9 @@ public class DeviceOwnerProvisioningActivity extends Activity { Intent bumpData = getIntent(); try { params = parser.parseNfcIntent(bumpData); - } catch (NfcMessageParser.NfcParseException e) { + } catch (NfcMessageParser.ParseException e) { ProvisionLogger.loge("Could not read Nfc data from intent", e); - error(R.string.device_owner_error_nfc_parse_fail); + error(e.getErrorMessageId()); return; } @@ -121,9 +121,9 @@ public class DeviceOwnerProvisioningActivity extends Activity { final DownloadPackageTask downloadPackageTask = new DownloadPackageTask(this, params.mDownloadLocation, params.mHash); final InstallPackageTask installPackageTask = new InstallPackageTask(this, - params.mMdmPackageName, params.mMdmAdminReceiver); + params.mDeviceAdminPackageName, params.mAdminReceiver); final SetDevicePolicyTask setDevicePolicyTask = new SetDevicePolicyTask(this, - params.mMdmPackageName, params.mMdmAdminReceiver, params.mOwner); + params.mDeviceAdminPackageName, params.mAdminReceiver, params.mOwner); // Set callbacks. addWifiNetworkTask.setCallback(new AddWifiNetworkTask.Callback() { @@ -254,6 +254,8 @@ public class DeviceOwnerProvisioningActivity extends Activity { } try { ProvisionLogger.logd("Setting locale to " + locale); + // If locale is different from current locale this results in a configuration change, + // which will trigger the restarting of the activity. LocalePicker.updateLocale(locale); } catch (Exception e) { ProvisionLogger.loge("Failed to set the system locale."); diff --git a/src/com/android/managedprovisioning/NfcMessageParser.java b/src/com/android/managedprovisioning/NfcMessageParser.java index 9138e043..3af188fc 100644 --- a/src/com/android/managedprovisioning/NfcMessageParser.java +++ b/src/com/android/managedprovisioning/NfcMessageParser.java @@ -48,50 +48,47 @@ public class NfcMessageParser { private static final String NFC_MIME_TYPE = "application/com.android.managedprovisioning"; // Keys for the properties in the packet. - private static final String TIMEOUT_KEY = "timeout"; // int + // They correspond to fields of ProvisioningParams (see {@link ProvisioningParams}). private static final String TIME_ZONE_KEY = "timeZone"; - private static final String LOCAL_TIME_KEY = "localTime"; // long + private static final String LOCAL_TIME_KEY = "localTime"; private static final String LOCALE_KEY = "locale"; - private static final String OWNER_KEY = "owner"; private static final String WIFI_SSID_KEY = "wifiSsid"; - private static final String WIFI_HIDDEN_KEY = "wifiHidden"; // boolean + private static final String WIFI_HIDDEN_KEY = "wifiHidden"; private static final String WIFI_SECURITY_TYPE_KEY = "wifiSecurityType"; private static final String WIFI_PASSWORD_KEY = "wifiPassword"; private static final String WIFI_PROXY_HOST_KEY = "wifiProxyHost"; private static final String WIFI_PROXY_PORT_KEY = "wifiProxyPort"; // int private static final String WIFI_PROXY_BYPASS_KEY = "wifiProxyBypassHosts"; - private static final String MDM_PACKAGE_KEY = "mdmPackageName"; - private static final String MDM_ADMIN_RECEIVER_KEY = "mdmAdminReceiver"; - private static final String MDM_DOWNLOAD_URL_KEY = "mdmDownloadUrl"; - private static final String MDM_PACKAGE_HASH_KEY = "mdmPackageHash"; + private static final String DEVICE_ADMIN_PACKAGE_KEY = "deviceAdminPackage"; + private static final String ADMIN_RECEIVER_KEY = "adminReceiver"; + private static final String OWNER_KEY = "owner"; + private static final String DOWNLOAD_LOCATION_KEY = "downloadLocation"; + private static final String HASH_KEY = "hash"; // Ids of properties. - private static final int TIMEOUT_ID = 0; - private static final int TIME_ZONE_ID = 1; - private static final int LOCAL_TIME_ID = 2; - private static final int LOCALE_ID = 3; - private static final int OWNER_ID = 4; - private static final int WIFI_SSID_ID = 5; - private static final int WIFI_HIDDEN_ID = 6; - private static final int WIFI_SECURITY_TYPE_ID = 7; - private static final int WIFI_PASSWORD_ID = 8; - private static final int WIFI_PROXY_HOST_ID = 9; - private static final int WIFI_PROXY_PORT_ID = 10; - private static final int WIFI_PROXY_BYPASS_ID = 11; - private static final int MDM_PACKAGE_ID = 12; - private static final int MDM_ADMIN_RECEIVER_ID = 13; - private static final int MDM_DOWNLOAD_URL_ID = 14; - private static final int MDM_PACKAGE_HASH_ID = 15; + private static final int TIME_ZONE_ID = 0; + private static final int LOCAL_TIME_ID = 1; + private static final int LOCALE_ID = 2; + private static final int WIFI_SSID_ID = 3; + private static final int WIFI_HIDDEN_ID = 4; + private static final int WIFI_SECURITY_TYPE_ID = 5; + private static final int WIFI_PASSWORD_ID = 6; + private static final int WIFI_PROXY_HOST_ID = 7; + private static final int WIFI_PROXY_PORT_ID = 8; + private static final int WIFI_PROXY_BYPASS_ID = 9; + private static final int DEVICE_ADMIN_PACKAGE_ID = 10; + private static final int ADMIN_RECEIVER_ID = 11; + private static final int OWNER_ID = 12; + private static final int DOWNLOAD_LOCATION_ID = 13; + private static final int HASH_ID = 14; + // Map from keys to ids. private static final HashMap<String, Integer> mKeyToId = new HashMap<String, Integer>(); static { - mKeyToId.put(TIMEOUT_KEY, TIMEOUT_ID); mKeyToId.put(TIME_ZONE_KEY, TIME_ZONE_ID); mKeyToId.put(LOCAL_TIME_KEY, LOCAL_TIME_ID); - mKeyToId.put(LOCAL_TIME_KEY, LOCAL_TIME_ID); mKeyToId.put(LOCALE_KEY, LOCALE_ID); - mKeyToId.put(OWNER_KEY, OWNER_ID); mKeyToId.put(WIFI_SSID_KEY, WIFI_SSID_ID); mKeyToId.put(WIFI_HIDDEN_KEY, WIFI_HIDDEN_ID); mKeyToId.put(WIFI_SECURITY_TYPE_KEY, WIFI_SECURITY_TYPE_ID); @@ -99,13 +96,15 @@ public class NfcMessageParser { mKeyToId.put(WIFI_PROXY_HOST_KEY, WIFI_PROXY_HOST_ID); mKeyToId.put(WIFI_PROXY_PORT_KEY, WIFI_PROXY_PORT_ID); mKeyToId.put(WIFI_PROXY_BYPASS_KEY, WIFI_PROXY_BYPASS_ID); - mKeyToId.put(MDM_PACKAGE_KEY, MDM_PACKAGE_ID); - mKeyToId.put(MDM_ADMIN_RECEIVER_KEY, MDM_ADMIN_RECEIVER_ID); - mKeyToId.put(MDM_DOWNLOAD_URL_KEY, MDM_DOWNLOAD_URL_ID); - mKeyToId.put(MDM_PACKAGE_HASH_KEY, MDM_PACKAGE_HASH_ID); + mKeyToId.put(DEVICE_ADMIN_PACKAGE_KEY, DEVICE_ADMIN_PACKAGE_ID); + mKeyToId.put(ADMIN_RECEIVER_KEY, ADMIN_RECEIVER_ID); + mKeyToId.put(OWNER_KEY, OWNER_ID); + mKeyToId.put(DOWNLOAD_LOCATION_KEY, DOWNLOAD_LOCATION_ID); + mKeyToId.put(HASH_KEY, HASH_ID); } - public ProvisioningParams parseNfcIntent(Intent nfcIntent) throws NfcParseException { + public ProvisioningParams parseNfcIntent(Intent nfcIntent) + throws ParseException { ProvisionLogger.logi("Processing NFC Payload."); if (nfcIntent.hasExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)) { @@ -124,13 +123,15 @@ public class NfcMessageParser { } } } else { - throw new NfcParseException( - "Intent does not contain EXTRA_NDEF_MESSAGES."); + throw new ParseException( + "Intent does not contain EXTRA_NDEF_MESSAGES.", + R.string.device_owner_error_nfc_parse_fail); } return null; } - private ProvisioningParams parseNfcProperties(String data) throws NfcParseException { + private ProvisioningParams parseNfcProperties(String data) + throws ParseException { ProvisionLogger.logd("Processing NFC Properties."); ProvisioningParams params = new ProvisioningParams(); try { @@ -142,11 +143,15 @@ public class NfcMessageParser { String propName = (String) propertyNames.nextElement(); putPropertyByString(propName, props.getProperty(propName), params); } + + checkValidityOfProvisioningParams(params); return params; } catch (IOException e) { - throw new NfcParseException("Couldn't load payload", e); + throw new ParseException("Couldn't load payload", + R.string.device_owner_error_nfc_parse_fail, e); } catch (NumberFormatException e) { - throw new NfcParseException("Incorrect numberformat in Nfc message.", e); + throw new ParseException("Incorrect numberformat in Nfc message.", + R.string.device_owner_error_nfc_parse_fail, e); } } @@ -167,9 +172,6 @@ public class NfcMessageParser { return; } switch(id) { - case TIMEOUT_ID: - params.mTimeout = Integer.parseInt(value); - break; case TIME_ZONE_ID: params.mTimeZone = value; break; @@ -183,9 +185,6 @@ public class NfcMessageParser { throw new NumberFormatException("The locale code is not 5 characters long."); } break; - case OWNER_ID: - params.mOwner = value; - break; case WIFI_SSID_ID: params.mWifiSsid = value; break; @@ -207,16 +206,19 @@ public class NfcMessageParser { case WIFI_PROXY_BYPASS_ID: params.mWifiProxyBypassHosts = value; break; - case MDM_PACKAGE_ID: - params.mMdmPackageName = value; + case DEVICE_ADMIN_PACKAGE_ID: + params.mDeviceAdminPackageName = value; break; - case MDM_ADMIN_RECEIVER_ID: - params.mMdmAdminReceiver = value; + case ADMIN_RECEIVER_ID: + params.mAdminReceiver = value; break; - case MDM_DOWNLOAD_URL_ID: + case OWNER_ID: + params.mOwner = value; + break; + case DOWNLOAD_LOCATION_ID: params.mDownloadLocation = value; break; - case MDM_PACKAGE_HASH_ID: + case HASH_ID: params.mHash = new BigInteger(value,16).toByteArray(); break; default: @@ -228,17 +230,54 @@ public class NfcMessageParser { } /** + * Check whether necessary fields are set. + */ + private void checkValidityOfProvisioningParams(ProvisioningParams params) + throws ParseException { + if (params.mDeviceAdminPackageName == null) { + throw new ParseException("Must provide the name of the device admin package.", + R.string.device_owner_error_no_package_name); + } + if (params.mAdminReceiver == null) { + throw new ParseException("Must provide the full class name of the admin receiver " + + "that is inside the device owner package.", + R.string.device_owner_error_no_admin_receiver); + } + if (params.mDownloadLocation != null) { + if (params.mHash == null) { + throw new ParseException("Hash of installer file is required for downloading " + + "device admin file, but not provided.", + R.string.device_owner_error_no_hash); + } + if (params.mWifiSsid == null) { + throw new ParseException("Wifi ssid is required for downloading device admin " + + "file, but not provided.", + R.string.device_owner_error_no_wifi_ssid); + } + } + } + + /** * Exception thrown when the ProvisioningParams initialization failed completely. * * Note: We're using a custom exception to avoid catching subsequent exceptions that might be * significant. */ - public static class NfcParseException extends Exception { - public NfcParseException(String message) { - super(message); - } - public NfcParseException(String message, Throwable t) { - super(message, t); - } + public static class ParseException extends Exception { + private int mErrorMessageId; + + public ParseException(String message, int errorMessageId) { + super(message); + mErrorMessageId = errorMessageId; + } + + public ParseException(String message, int errorMessageId, Throwable t) { + super(message, t); + mErrorMessageId = errorMessageId; + } + + public int getErrorMessageId() { + return mErrorMessageId; + } } }
\ No newline at end of file diff --git a/src/com/android/managedprovisioning/ProvisioningParams.java b/src/com/android/managedprovisioning/ProvisioningParams.java index d7c4540b..afd93ec3 100644 --- a/src/com/android/managedprovisioning/ProvisioningParams.java +++ b/src/com/android/managedprovisioning/ProvisioningParams.java @@ -22,11 +22,9 @@ import java.util.Locale; * Provisioning Parameters for DeviceOwner Provisioning */ public class ProvisioningParams { - public static Integer mTimeout; public static String mTimeZone; public static Long mLocalTime; public static Locale mLocale; - public static String mOwner; public static String mWifiSsid; public static boolean mWifiHidden = false; @@ -36,9 +34,10 @@ public class ProvisioningParams { public static int mWifiProxyPort = 0; public static String mWifiProxyBypassHosts; - public static String mMdmPackageName; - public static String mMdmAdminReceiver; + public static String mDeviceAdminPackageName; // Package name of the device admin package. + public static String mAdminReceiver; // Full class name of the admin receiver inside package. + public static String mOwner; // Human readable name of the institution that owns this device. - public static String mDownloadLocation; - public static byte[] mHash; + public static String mDownloadLocation; // Url where the device admin .apk is downloaded from. + public static byte[] mHash; // Hash of the .apk file (see {@link DownloadPackageTask). } |