diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index 2641ad2665e..65e6c2768e6 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -486,6 +486,7 @@ public class ChooseLockGeneric extends SettingsActivity { if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { mChooseLockSettingsHelper.utils().clearLock(mUserId); mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); + mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, false); removeAllFingerprintTemplatesAndFinish(); getActivity().setResult(Activity.RESULT_OK); } else { diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java index eacf1ab0ebd..6739475c75a 100644 --- a/src/com/android/settings/ChooseLockPassword.java +++ b/src/com/android/settings/ChooseLockPassword.java @@ -670,12 +670,11 @@ public class ChooseLockPassword extends SettingsActivity { private String mChosenPassword; private String mCurrentPassword; private int mRequestedQuality; - private int mUserId; public void start(LockPatternUtils utils, boolean required, boolean hasChallenge, long challenge, String chosenPassword, String currentPassword, int requestedQuality, int userId) { - prepare(utils, required, hasChallenge, challenge); + prepare(utils, required, hasChallenge, challenge, userId); mChosenPassword = chosenPassword; mCurrentPassword = currentPassword; diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java index e20db932889..93ffa95e4b2 100644 --- a/src/com/android/settings/ChooseLockPattern.java +++ b/src/com/android/settings/ChooseLockPattern.java @@ -671,12 +671,11 @@ public class ChooseLockPattern extends SettingsActivity { private List mChosenPattern; private String mCurrentPattern; private boolean mLockVirgin; - private int mUserId; public void start(LockPatternUtils utils, boolean credentialRequired, boolean hasChallenge, long challenge, List chosenPattern, String currentPattern, int userId) { - prepare(utils, credentialRequired, hasChallenge, challenge); + prepare(utils, credentialRequired, hasChallenge, challenge, userId); mCurrentPattern = currentPattern; mChosenPattern = chosenPattern; diff --git a/src/com/android/settings/SaveChosenLockWorkerBase.java b/src/com/android/settings/SaveChosenLockWorkerBase.java index a40871a21c0..4d8964a5e54 100644 --- a/src/com/android/settings/SaveChosenLockWorkerBase.java +++ b/src/com/android/settings/SaveChosenLockWorkerBase.java @@ -20,7 +20,6 @@ import android.app.Fragment; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; -import android.os.UserHandle; import com.android.internal.widget.LockPatternUtils; @@ -38,6 +37,7 @@ abstract class SaveChosenLockWorkerBase extends Fragment { protected boolean mHasChallenge; protected long mChallenge; protected boolean mWasSecureBefore; + protected int mUserId; @Override public void onCreate(Bundle savedInstanceState) { @@ -57,12 +57,15 @@ abstract class SaveChosenLockWorkerBase extends Fragment { } protected void prepare(LockPatternUtils utils, boolean credentialRequired, - boolean hasChallenge, long challenge) { + boolean hasChallenge, long challenge, int userId) { mUtils = utils; + mUserId = userId; mHasChallenge = hasChallenge; mChallenge = challenge; - mWasSecureBefore = mUtils.isSecure(UserHandle.myUserId()); + // This will be a no-op for non managed profiles. + mUtils.setSeparateProfileChallengeEnabled(mUserId, true); + mWasSecureBefore = mUtils.isSecure(mUserId); mUtils.setCredentialRequiredToDecrypt(credentialRequired); diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 9ffa1f20092..12216247d96 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -223,7 +223,7 @@ public class SecuritySettings extends SettingsPreferenceFragment mProfileChallengeUserId = profile.id; } } - if (LockPatternUtils.isSeparateWorkChallengeEnabled()) { + if (mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId)) { addPreferencesFromResource(R.xml.security_settings_profile); } } @@ -776,11 +776,21 @@ public class SecuritySettings extends SettingsPreferenceFragment result.add(sir); final UserManager um = UserManager.get(context); - boolean hasChildProfile = um.getProfiles(UserHandle.myUserId()).size() > 1; - if (hasChildProfile && LockPatternUtils.isSeparateWorkChallengeEnabled()) { - sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.security_settings_profile; - result.add(sir); + List profiles = um.getProfiles(UserHandle.myUserId()); + int numProfiles = profiles.size(); + if (numProfiles > 1) { + int profileUserId = -1; + for (int i = 0; i < numProfiles; ++i) { + UserInfo profile = profiles.get(i); + if (profile.id != UserHandle.myUserId()) { + profileUserId = profile.id; + } + } + if (lockPatternUtils.isSeparateProfileChallengeAllowed(profileUserId)) { + sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.security_settings_profile; + result.add(sir); + } } if (um.isAdminUser()) {