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();
         /*