summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorSander Alewijnse <salewijnse@google.com>2014-09-08 12:21:26 +0100
committerSander Alewijnse <salewijnse@google.com>2014-09-10 13:30:35 +0100
commit8f9bd13b0d15d6fb1b6f27d28c94d37f8252a8cd (patch)
tree3b5ce663029332cddf204e6688f4d20081e04e8f /src/com/android
parent247e85f517cf85c69c0aa4abe1b9ce026c19c1ec (diff)
downloadandroid_packages_apps_ManagedProvisioning-8f9bd13b0d15d6fb1b6f27d28c94d37f8252a8cd.tar.gz
android_packages_apps_ManagedProvisioning-8f9bd13b0d15d6fb1b6f27d28c94d37f8252a8cd.tar.bz2
android_packages_apps_ManagedProvisioning-8f9bd13b0d15d6fb1b6f27d28c94d37f8252a8cd.zip
Add interstitial in device owner setup flow.
Only for non Nfc flow. Furthermore, provide means to avoid device encryption by adding check for system properties flag, which is already done that way in BYOD case. Bug:17383943 Change-Id: If8c9dceb77527ad0937c013841e7784a4d39a464
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java66
-rw-r--r--src/com/android/managedprovisioning/ManagedProvisioningActivity.java2
-rw-r--r--src/com/android/managedprovisioning/MessageParser.java25
-rw-r--r--src/com/android/managedprovisioning/ProvisioningParams.java6
4 files changed, 82 insertions, 17 deletions
diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java
index cdde522f..ecd144f6 100644
--- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java
+++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java
@@ -29,6 +29,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.UserHandle;
+import android.os.SystemProperties;
import android.provider.Settings.Global;
import android.provider.Settings.Secure;
import android.support.v4.content.LocalBroadcastManager;
@@ -66,6 +67,8 @@ import java.util.Locale;
* </p>
*/
public class DeviceOwnerProvisioningActivity extends Activity {
+ private static final String KEY_USER_CONSENTED = "user_consented";
+
private static final int ENCRYPT_DEVICE_REQUEST_CODE = 1;
private static final int WIFI_REQUEST_CODE = 2;
@@ -74,14 +77,22 @@ public class DeviceOwnerProvisioningActivity extends Activity {
private Dialog mDialog; // The cancel or error dialog that is currently shown.
private boolean mDone; // Indicates whether the service has sent ACTION_PROVISIONING_SUCCESS.
+ // Run when wifi picker activity reports success.
private Runnable mOnWifiConnectedRunnable;
private Intent mProvisioningCompleteIntent;
+ // Indicates whether user consented by clicking on positive button of interstitial.
+ private boolean mUserConsented = false;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (savedInstanceState != null) {
+ mUserConsented = savedInstanceState.getBoolean(KEY_USER_CONSENTED, false);
+ }
+
ProvisionLogger.logd("Device owner provisioning activity ONCREATE");
// Check whether we can provision.
@@ -118,6 +129,11 @@ public class DeviceOwnerProvisioningActivity extends Activity {
MessageParser parser = new MessageParser();
try {
params = parser.parseIntent(getIntent());
+ mOnWifiConnectedRunnable = new Runnable() {
+ public void run() {
+ showInterstitialAndProvision(params);
+ }
+ };
} catch (MessageParser.ParseException e) {
ProvisionLogger.loge("Could not read data from intent", e);
error(e.getErrorMessageId(), false /* no factory reset */);
@@ -125,7 +141,8 @@ public class DeviceOwnerProvisioningActivity extends Activity {
}
// Ask to encrypt the device before proceeding
- if (!EncryptDeviceActivity.isDeviceEncrypted()) {
+ if (!(EncryptDeviceActivity.isDeviceEncrypted()
+ || SystemProperties.getBoolean("persist.sys.no_req_encrypt", false))) {
requestEncryption(parser, params);
finish();
return;
@@ -135,19 +152,45 @@ public class DeviceOwnerProvisioningActivity extends Activity {
// Have the user pick a wifi network if necessary.
if (!AddWifiNetworkTask.isConnectedToWifi(this) && TextUtils.isEmpty(params.mWifiSsid) &&
!TextUtils.isEmpty(params.mDeviceAdminPackageDownloadLocation)) {
-
- mOnWifiConnectedRunnable = new Runnable() {
- public void run() {
- startDeviceOwnerProvisioningService(params);
- }
- };
-
requestWifiPick();
return;
// Wait for onActivityResult.
}
- startDeviceOwnerProvisioningService(params);
+ showInterstitialAndProvision(params);
+ }
+
+ private void showInterstitialAndProvision(final ProvisioningParams params) {
+ if (mUserConsented || params.mStartedByNfc) {
+ startDeviceOwnerProvisioningService(params);
+ } else {
+ String message = getString(R.string.admin_has_ability_to_monitor_device) + "\n\n"
+ + getString(R.string.contact_your_admin_for_more_info);
+
+ // Notify the user that the admin will have full control over the device,
+ // then start provisioning.
+ new AlertDialog.Builder(DeviceOwnerProvisioningActivity.this)
+ .setCancelable(false)
+ .setMessage(message)
+ .setPositiveButton(R.string.ok_setup,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mUserConsented = true;
+ dialog.cancel();
+ startDeviceOwnerProvisioningService(params);
+ }
+ })
+ .setNegativeButton(R.string.cancel_setup,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+ finish();
+ }
+ })
+ .show();
+ }
}
private void startDeviceOwnerProvisioningService(ProvisioningParams params) {
@@ -351,6 +394,11 @@ public class DeviceOwnerProvisioningActivity extends Activity {
}
@Override
+ protected void onSaveInstanceState(Bundle outState) {
+ outState.putBoolean(KEY_USER_CONSENTED, mUserConsented);
+ }
+
+ @Override
public void onDestroy() {
ProvisionLogger.logd("Device owner provisioning activity ONDESTROY");
if (mServiceMessageReceiver != null) {
diff --git a/src/com/android/managedprovisioning/ManagedProvisioningActivity.java b/src/com/android/managedprovisioning/ManagedProvisioningActivity.java
index 3dcd804d..cde14648 100644
--- a/src/com/android/managedprovisioning/ManagedProvisioningActivity.java
+++ b/src/com/android/managedprovisioning/ManagedProvisioningActivity.java
@@ -316,7 +316,7 @@ public class ManagedProvisioningActivity extends Activity {
if (EncryptDeviceActivity.isDeviceEncrypted()
|| SystemProperties.getBoolean("persist.sys.no_req_encrypt", false)) {
- String message = getString(R.string.admin_has_ability_to_monitor) + "\n\n"
+ String message = getString(R.string.admin_has_ability_to_monitor_profile) + "\n\n"
+ getString(R.string.contact_your_admin_for_more_info);
// Notify the user once more that the admin will have full control over the profile,
diff --git a/src/com/android/managedprovisioning/MessageParser.java b/src/com/android/managedprovisioning/MessageParser.java
index 0540cfc1..dcca4459 100644
--- a/src/com/android/managedprovisioning/MessageParser.java
+++ b/src/com/android/managedprovisioning/MessageParser.java
@@ -54,8 +54,9 @@ import java.util.Locale;
import java.util.Properties;
/**
- * This class can initialize a ProvisioningParams object from an intent.
- * There are two kinds of intents that can be parsed.
+ * This class can initialize a {@link ProvisioningParams} object from an intent.
+ * A {@link ProvisioningParams} object stores various parameters for the device owner provisioning.
+ * There are two kinds of intents that can be parsed it into {@link ProvisioningParams}:
*
* <p>
* Intent was received via Nfc.
@@ -86,10 +87,14 @@ import java.util.Properties;
* and reboot.
*
* <p>
- * Furthermore this class can construct the bundle of extras for the second kind of intent, and it
- * keeps track of the types of the extras in the DEVICE_OWNER_x_EXTRAS, with x the appropriate type.
+ * Furthermore this class can construct the bundle of extras for the second kind of intent given a
+ * {@link ProvisioningParams}, and it keeps track of the types of the extras in the
+ * DEVICE_OWNER_x_EXTRAS, with x the appropriate type.
*/
public class MessageParser {
+ private static final String EXTRA_PROVISIONING_STARTED_BY_NFC =
+ "com.android.managedprovisioning.extra.started_by_nfc";
+
protected static final String[] DEVICE_OWNER_STRING_EXTRAS = {
EXTRA_PROVISIONING_TIME_ZONE,
EXTRA_PROVISIONING_LOCALE,
@@ -114,7 +119,8 @@ public class MessageParser {
};
protected static final String[] DEVICE_OWNER_BOOLEAN_EXTRAS = {
- EXTRA_PROVISIONING_WIFI_HIDDEN
+ EXTRA_PROVISIONING_WIFI_HIDDEN,
+ EXTRA_PROVISIONING_STARTED_BY_NFC
};
protected static final String[] DEVICE_OWNER_PERSISTABLE_BUNDLE_EXTRAS = {
@@ -144,6 +150,7 @@ public class MessageParser {
bundle.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, params.mWifiProxyPort);
bundle.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, params.mWifiHidden);
+ bundle.putBoolean(EXTRA_PROVISIONING_STARTED_BY_NFC, params.mStartedByNfc);
bundle.putParcelable(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, params.mAdminExtrasBundle);
}
@@ -170,7 +177,10 @@ public class MessageParser {
String mimeType = new String(firstRecord.getType(), UTF_8);
if (MIME_TYPE_PROVISIONING_NFC.equals(mimeType)) {
- return parseProperties(new String(firstRecord.getPayload(), UTF_8));
+ ProvisioningParams params = parseProperties(new String(firstRecord.getPayload()
+ , UTF_8));
+ params.mStartedByNfc = true;
+ return params;
}
}
throw new ParseException(
@@ -271,6 +281,9 @@ public class MessageParser {
params.mWifiHidden = intent.getBooleanExtra(EXTRA_PROVISIONING_WIFI_HIDDEN,
ProvisioningParams.DEFAULT_WIFI_HIDDEN);
+ params.mStartedByNfc = intent.getBooleanExtra(EXTRA_PROVISIONING_STARTED_BY_NFC,
+ false);
+
try {
params.mAdminExtrasBundle = (PersistableBundle) intent.getParcelableExtra(
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE);
diff --git a/src/com/android/managedprovisioning/ProvisioningParams.java b/src/com/android/managedprovisioning/ProvisioningParams.java
index f9da5ec0..927ac124 100644
--- a/src/com/android/managedprovisioning/ProvisioningParams.java
+++ b/src/com/android/managedprovisioning/ProvisioningParams.java
@@ -52,6 +52,8 @@ public class ProvisioningParams implements Parcelable {
public PersistableBundle mAdminExtrasBundle;
+ public boolean mStartedByNfc; // True iff provisioning flow was started by Nfc bump.
+
public String getLocaleAsString() {
if (mLocale != null) {
return mLocale.getLanguage() + "_" + mLocale.getCountry();
@@ -88,6 +90,7 @@ public class ProvisioningParams implements Parcelable {
out.writeInt(mDeviceAdminPackageChecksum.length);
out.writeByteArray(mDeviceAdminPackageChecksum);
out.writeParcelable(mAdminExtrasBundle, 0 /* default */);
+ out.writeInt(mStartedByNfc ? 1 : 0);
}
public static final Parcelable.Creator<ProvisioningParams> CREATOR
@@ -99,7 +102,7 @@ public class ProvisioningParams implements Parcelable {
params.mLocalTime = in.readLong();
params.mLocale = (Locale) in.readSerializable();
params.mWifiSsid = in.readString();
- params.mWifiHidden = in.readInt()==1;
+ params.mWifiHidden = in.readInt() == 1;
params.mWifiSecurityType = in.readString();
params.mWifiPassword = in.readString();
params.mWifiProxyHost = in.readString();
@@ -112,6 +115,7 @@ public class ProvisioningParams implements Parcelable {
params.mDeviceAdminPackageChecksum = new byte[checksumLength];
in.readByteArray(params.mDeviceAdminPackageChecksum);
params.mAdminExtrasBundle = in.readParcelable(null /* use default classloader */);
+ params.mStartedByNfc = in.readInt() == 1;
return params;
}