diff options
author | Sander Alewijnse <salewijnse@google.com> | 2014-06-25 15:24:03 +0100 |
---|---|---|
committer | Sander Alewijnse <salewijnse@google.com> | 2014-06-30 10:22:00 +0100 |
commit | 326bcfdd72218a2d3b35d8e1ca80b8e36263402e (patch) | |
tree | 9c16ddaafc9e9f69520e1067c912027de2e1814f /src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java | |
parent | 56f7157c220d657d48406caf8e0d61904dfd7789 (diff) | |
download | android_packages_apps_ManagedProvisioning-326bcfdd72218a2d3b35d8e1ca80b8e36263402e.tar.gz android_packages_apps_ManagedProvisioning-326bcfdd72218a2d3b35d8e1ca80b8e36263402e.tar.bz2 android_packages_apps_ManagedProvisioning-326bcfdd72218a2d3b35d8e1ca80b8e36263402e.zip |
Enable Device Owner provisioning without providing wifi credentials.
A wifi picker is shown when wifi is needed instead of an error.
Furthermore small cleanups in activity.
Change-Id: Id0ff511b9913cba146b626c97764a042fc8d3a01
Diffstat (limited to 'src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java')
-rw-r--r-- | src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java | 78 |
1 files changed, 55 insertions, 23 deletions
diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java index ff3087a5..55ee3d9c 100644 --- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java +++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningActivity.java @@ -47,10 +47,13 @@ import android.os.Bundle; import android.provider.Settings.Global; import android.provider.Settings.Secure; import android.support.v4.content.LocalBroadcastManager; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; +import com.android.managedprovisioning.task.AddWifiNetworkTask; + import java.util.Locale; /** @@ -79,12 +82,13 @@ import java.util.Locale; */ public class DeviceOwnerProvisioningActivity extends Activity { private static final int ENCRYPT_DEVICE_REQUEST_CODE = 1; + private static final int WIFI_REQUEST_CODE = 2; private BroadcastReceiver mServiceMessageReceiver; private TextView mProgressTextView; private Dialog mDialog; // The cancel or error dialog that is currently shown. private boolean mDone; // Indicates whether the service has sent ACTION_PROVISIONING_SUCCESS. - private String mDeviceAdminPackageName; + private ProvisioningParams mParams; @Override public void onCreate(Bundle savedInstanceState) { @@ -122,26 +126,36 @@ public class DeviceOwnerProvisioningActivity extends Activity { // Parse the incoming intent. MessageParser parser = new MessageParser(); - ProvisioningParams params; try { - params = parser.parseIntent(getIntent()); + mParams = parser.parseIntent(getIntent()); } catch (MessageParser.ParseException e) { ProvisionLogger.loge("Could not read data from intent", e); error(e.getErrorMessageId(), false /* no factory reset */); return; } - mDeviceAdminPackageName = params.mDeviceAdminPackageName; // Ask to encrypt the device before proceeding if (!EncryptDeviceActivity.isDeviceEncrypted()) { - requestEncryption(params); + requestEncryption(); finish(); return; + // System will reboot. Bootreminder will restart this activity. + } + + // Have the user pick a wifi network if necessary. + if (!AddWifiNetworkTask.isConnectedToWifi(this) && TextUtils.isEmpty(mParams.mWifiSsid) && + !TextUtils.isEmpty(mParams.mDeviceAdminPackageDownloadLocation)) { + requestWifiPick(); + return; + // Wait for onActivityResult. } - // Start service. + startDeviceOwnerProvisioningService(); + } + + private void startDeviceOwnerProvisioningService() { Intent intent = new Intent(this, DeviceOwnerProvisioningService.class); - intent.putExtra(DeviceOwnerProvisioningService.EXTRA_PROVISIONING_PARAMS, params); + intent.putExtra(DeviceOwnerProvisioningService.EXTRA_PROVISIONING_PARAMS, mParams); intent.putExtras(getIntent()); startService(intent); } @@ -193,14 +207,14 @@ public class DeviceOwnerProvisioningActivity extends Activity { Secure.putInt(getContentResolver(), Secure.USER_SETUP_COMPLETE, 1); Intent completeIntent = new Intent(ACTION_PROFILE_PROVISIONING_COMPLETE); - completeIntent.setPackage(mDeviceAdminPackageName); + completeIntent.setPackage(mParams.mDeviceAdminPackageName); completeIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES | Intent.FLAG_RECEIVER_FOREGROUND); sendBroadcast(completeIntent); finish(); } - private void requestEncryption(ProvisioningParams params) { + private void requestEncryption() { Intent encryptIntent = new Intent(DeviceOwnerProvisioningActivity.this, EncryptDeviceActivity.class); @@ -208,29 +222,33 @@ public class DeviceOwnerProvisioningActivity extends Activity { resumeExtras.putString(EncryptDeviceActivity.EXTRA_RESUME_TARGET, EncryptDeviceActivity.TARGET_DEVICE_OWNER); - resumeExtras.putString(EXTRA_PROVISIONING_TIME_ZONE, params.mTimeZone); - resumeExtras.putLong(EXTRA_PROVISIONING_LOCAL_TIME, params.mLocalTime); - resumeExtras.putString(EXTRA_PROVISIONING_LOCALE, params.getLocaleAsString()); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_SSID, params.mWifiSsid); - resumeExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, params.mWifiHidden); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, params.mWifiSecurityType); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, params.mWifiPassword); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, params.mWifiProxyHost); - resumeExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, params.mWifiProxyPort); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, params.mWifiProxyBypassHosts); - resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, params.mWifiPacUrl); + resumeExtras.putString(EXTRA_PROVISIONING_TIME_ZONE, mParams.mTimeZone); + resumeExtras.putLong(EXTRA_PROVISIONING_LOCAL_TIME, mParams.mLocalTime); + resumeExtras.putString(EXTRA_PROVISIONING_LOCALE, mParams.getLocaleAsString()); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_SSID, mParams.mWifiSsid); + resumeExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, mParams.mWifiHidden); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, mParams.mWifiSecurityType); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, mParams.mWifiPassword); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, mParams.mWifiProxyHost); + resumeExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, mParams.mWifiProxyPort); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, mParams.mWifiProxyBypassHosts); + resumeExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, mParams.mWifiPacUrl); resumeExtras.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, - params.mDeviceAdminPackageName); + mParams.mDeviceAdminPackageName); resumeExtras.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, - params.mDeviceAdminPackageDownloadLocation); + mParams.mDeviceAdminPackageDownloadLocation); resumeExtras.putString(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, - params.getDeviceAdminPackageChecksumAsString()); + mParams.getDeviceAdminPackageChecksumAsString()); encryptIntent.putExtra(EncryptDeviceActivity.EXTRA_RESUME, resumeExtras); startActivityForResult(encryptIntent, ENCRYPT_DEVICE_REQUEST_CODE); } + private void requestWifiPick() { + startActivityForResult(AddWifiNetworkTask.getWifiPickIntent(), WIFI_REQUEST_CODE); + } + @Override public void onBackPressed() { showCancelResetDialog(); @@ -285,6 +303,20 @@ public class DeviceOwnerProvisioningActivity extends Activity { ProvisionLogger.loge("User canceled device encryption."); finish(); } + } else if (requestCode == WIFI_REQUEST_CODE) { + if (resultCode == RESULT_CANCELED) { + ProvisionLogger.loge("User canceled wifi picking."); + stopService(new Intent(DeviceOwnerProvisioningActivity.this, + DeviceOwnerProvisioningService.class)); + finish(); + } else if (resultCode == RESULT_OK) { + ProvisionLogger.logd("Wifi request result is OK"); + if (AddWifiNetworkTask.isConnectedToWifi(this)) { + startDeviceOwnerProvisioningService(); + } else { + requestWifiPick(); + } + } } } |