Merge "Ask the user to unlock the work profile before adding a work account." into nyc-dev
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 21d26eb..d3bf747 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -88,8 +88,8 @@
* @return true if one exists and we launched an activity to confirm it
* @see Activity#onActivityResult(int, int, android.content.Intent)
*/
- boolean launchConfirmationActivity(int request, CharSequence title, boolean returnCredentials,
- int userId) {
+ public boolean launchConfirmationActivity(int request, CharSequence title,
+ boolean returnCredentials, int userId) {
return launchConfirmationActivity(request, title, null, null,
returnCredentials, false, false, 0, Utils.enforceSameOwner(mActivity, userId));
}
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java
index 3f691e3..1cec53b 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -32,6 +32,7 @@
import android.util.Log;
import android.widget.Toast;
+import com.android.settings.ChooseLockSettingsHelper;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settingslib.RestrictedLockUtils;
@@ -83,6 +84,7 @@
private static final int CHOOSE_ACCOUNT_REQUEST = 1;
private static final int ADD_ACCOUNT_REQUEST = 2;
+ private static final int UNLOCK_WORK_PROFILE_REQUEST = 3;
private PendingIntent mPendingIntent;
@@ -154,24 +156,27 @@
finish();
return;
}
- final String[] authorities =
- getIntent().getStringArrayExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY);
- final String[] accountTypes =
- getIntent().getStringArrayExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY);
- final Intent intent = new Intent(this, ChooseAccountActivity.class);
- if (authorities != null) {
- intent.putExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY, authorities);
+
+ // If the profile is locked, we must ask the user to unlock it first.
+ ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
+ if (!helper.launchConfirmationActivity(UNLOCK_WORK_PROFILE_REQUEST,
+ getString(R.string.unlock_set_unlock_launch_picker_title),
+ false,
+ mUserHandle.getIdentifier())) {
+ requestChooseAccount();
}
- if (accountTypes != null) {
- intent.putExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY, accountTypes);
- }
- intent.putExtra(EXTRA_USER, mUserHandle);
- startActivityForResult(intent, CHOOSE_ACCOUNT_REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
+ case UNLOCK_WORK_PROFILE_REQUEST:
+ if (resultCode == Activity.RESULT_OK) {
+ requestChooseAccount();
+ } else {
+ finish();
+ }
+ break;
case CHOOSE_ACCOUNT_REQUEST:
if (resultCode == RESULT_CANCELED) {
if (data != null) {
@@ -202,6 +207,22 @@
if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "saved");
}
+ private void requestChooseAccount() {
+ final String[] authorities =
+ getIntent().getStringArrayExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY);
+ final String[] accountTypes =
+ getIntent().getStringArrayExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY);
+ final Intent intent = new Intent(this, ChooseAccountActivity.class);
+ if (authorities != null) {
+ intent.putExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY, authorities);
+ }
+ if (accountTypes != null) {
+ intent.putExtra(AccountPreferenceBase.ACCOUNT_TYPES_FILTER_KEY, accountTypes);
+ }
+ intent.putExtra(EXTRA_USER, mUserHandle);
+ startActivityForResult(intent, CHOOSE_ACCOUNT_REQUEST);
+ }
+
private void addAccount(String accountType) {
Bundle addAccountOptions = new Bundle();
/*