fix CC for work profiles

Bug: 22257554
Change-Id: I09f62956d01f91d3014d9fa250aaff68ab5e1a9b
This commit is contained in:
Andres Morales
2015-08-04 16:55:00 -07:00
parent 1adca55ffe
commit 7bdffd85eb
4 changed files with 49 additions and 22 deletions

View File

@@ -118,7 +118,10 @@ public final class ChooseLockSettingsHelper {
boolean returnCredentials, boolean external, boolean hasChallenge, boolean returnCredentials, boolean external, boolean hasChallenge,
long challenge) { long challenge) {
boolean launched = false; boolean launched = false;
switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
int effectiveUserId = Utils.getEffectiveUserId(mActivity);
switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(effectiveUserId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
launched = launchConfirmationActivity(request, title, header, description, launched = launchConfirmationActivity(request, title, header, description,
returnCredentials || hasChallenge returnCredentials || hasChallenge

View File

@@ -28,8 +28,8 @@ import com.android.settingslib.animation.DisappearAnimationUtils;
import android.app.Fragment; import android.app.Fragment;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.Context;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer; import android.os.CountDownTimer;
@@ -98,6 +98,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
private AppearAnimationUtils mAppearAnimationUtils; private AppearAnimationUtils mAppearAnimationUtils;
private DisappearAnimationUtils mDisappearAnimationUtils; private DisappearAnimationUtils mDisappearAnimationUtils;
private boolean mBlockImm; private boolean mBlockImm;
private int mEffectiveUserId;
// required constructor for fragments // required constructor for fragments
public ConfirmLockPasswordFragment() { public ConfirmLockPasswordFragment() {
@@ -108,6 +109,8 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity()); mLockPatternUtils = new LockPatternUtils(getActivity());
mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
if (savedInstanceState != null) { if (savedInstanceState != null) {
mNumWrongConfirmAttempts = savedInstanceState.getInt( mNumWrongConfirmAttempts = savedInstanceState.getInt(
KEY_NUM_WRONG_CONFIRM_ATTEMPTS, 0); KEY_NUM_WRONG_CONFIRM_ATTEMPTS, 0);
@@ -118,7 +121,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality( final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality(
UserHandle.myUserId()); mEffectiveUserId);
View view = inflater.inflate(R.layout.confirm_lock_password, null); View view = inflater.inflate(R.layout.confirm_lock_password, null);
mPasswordEntry = (TextView) view.findViewById(R.id.password_entry); mPasswordEntry = (TextView) view.findViewById(R.id.password_entry);
@@ -238,7 +241,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
long deadline = mLockPatternUtils.getLockoutAttemptDeadline(UserHandle.myUserId()); long deadline = mLockPatternUtils.getLockoutAttemptDeadline(mEffectiveUserId);
if (deadline != 0) { if (deadline != 0) {
handleAttemptLockout(deadline); handleAttemptLockout(deadline);
} else { } else {
@@ -314,7 +317,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
return; return;
} }
onPasswordChecked(false, intent, 0); onPasswordChecked(false, intent, 0, mEffectiveUserId);
} }
private boolean isInternalActivity() { private boolean isInternalActivity() {
@@ -324,11 +327,12 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
private void startVerifyPassword(final String pin, final Intent intent) { private void startVerifyPassword(final String pin, final Intent intent) {
long challenge = getActivity().getIntent().getLongExtra( long challenge = getActivity().getIntent().getLongExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
final int localEffectiveUserId = mEffectiveUserId;
mPendingLockCheck = LockPatternChecker.verifyPassword( mPendingLockCheck = LockPatternChecker.verifyPassword(
mLockPatternUtils, mLockPatternUtils,
pin, pin,
challenge, challenge,
UserHandle.myUserId(), localEffectiveUserId,
new LockPatternChecker.OnVerifyCallback() { new LockPatternChecker.OnVerifyCallback() {
@Override @Override
public void onVerified(byte[] token, int timeoutMs) { public void onVerified(byte[] token, int timeoutMs) {
@@ -340,16 +344,17 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
token); token);
} }
onPasswordChecked(matched, intent, timeoutMs); onPasswordChecked(matched, intent, timeoutMs, localEffectiveUserId);
} }
}); });
} }
private void startCheckPassword(final String pin, final Intent intent) { private void startCheckPassword(final String pin, final Intent intent) {
final int localEffectiveUserId = mEffectiveUserId;
mPendingLockCheck = LockPatternChecker.checkPassword( mPendingLockCheck = LockPatternChecker.checkPassword(
mLockPatternUtils, mLockPatternUtils,
pin, pin,
UserHandle.myUserId(), localEffectiveUserId,
new LockPatternChecker.OnCheckCallback() { new LockPatternChecker.OnCheckCallback() {
@Override @Override
public void onChecked(boolean matched, int timeoutMs) { public void onChecked(boolean matched, int timeoutMs) {
@@ -361,7 +366,7 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
intent.putExtra( intent.putExtra(
ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pin); ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pin);
} }
onPasswordChecked(matched, intent, timeoutMs); onPasswordChecked(matched, intent, timeoutMs, localEffectiveUserId);
} }
}); });
} }
@@ -384,14 +389,15 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
} }
} }
private void onPasswordChecked(boolean matched, Intent intent, int timeoutMs) { private void onPasswordChecked(boolean matched, Intent intent, int timeoutMs,
int effectiveUserId) {
mPasswordEntryInputDisabler.setInputEnabled(true); mPasswordEntryInputDisabler.setInputEnabled(true);
if (matched) { if (matched) {
startDisappearAnimation(intent); startDisappearAnimation(intent);
} else { } else {
if (timeoutMs > 0) { if (timeoutMs > 0) {
long deadline = mLockPatternUtils.setLockoutAttemptDeadline( long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
UserHandle.myUserId(), timeoutMs); effectiveUserId, timeoutMs);
handleAttemptLockout(deadline); handleAttemptLockout(deadline);
} else { } else {
showError(getErrorMessage()); showError(getErrorMessage());

View File

@@ -102,6 +102,8 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
private AppearAnimationUtils mAppearAnimationUtils; private AppearAnimationUtils mAppearAnimationUtils;
private DisappearAnimationUtils mDisappearAnimationUtils; private DisappearAnimationUtils mDisappearAnimationUtils;
private int mEffectiveUserId;
// required constructor for fragments // required constructor for fragments
public ConfirmLockPatternFragment() { public ConfirmLockPatternFragment() {
@@ -111,6 +113,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity()); mLockPatternUtils = new LockPatternUtils(getActivity());
mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
} }
@Override @Override
@@ -151,7 +154,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
// on first launch, if no lock pattern is set, then finish with // on first launch, if no lock pattern is set, then finish with
// success (don't want user to get stuck confirming something that // success (don't want user to get stuck confirming something that
// doesn't exist). // doesn't exist).
if (!mLockPatternUtils.isLockPatternEnabled(UserHandle.myUserId())) { if (!mLockPatternUtils.isLockPatternEnabled(mEffectiveUserId)) {
getActivity().setResult(Activity.RESULT_OK); getActivity().setResult(Activity.RESULT_OK);
getActivity().finish(); getActivity().finish();
} }
@@ -203,7 +206,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
super.onResume(); super.onResume();
// if the user is currently locked out, enforce it. // if the user is currently locked out, enforce it.
long deadline = mLockPatternUtils.getLockoutAttemptDeadline(UserHandle.myUserId()); long deadline = mLockPatternUtils.getLockoutAttemptDeadline(mEffectiveUserId);
if (deadline != 0) { if (deadline != 0) {
handleAttemptLockout(deadline); handleAttemptLockout(deadline);
} else if (!mLockPatternView.isEnabled()) { } else if (!mLockPatternView.isEnabled()) {
@@ -385,7 +388,7 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
return; return;
} }
onPatternChecked(pattern, false, intent, 0); onPatternChecked(pattern, false, intent, 0, mEffectiveUserId);
} }
private boolean isInternalActivity() { private boolean isInternalActivity() {
@@ -394,13 +397,14 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
private void startVerifyPattern(final List<LockPatternView.Cell> pattern, private void startVerifyPattern(final List<LockPatternView.Cell> pattern,
final Intent intent) { final Intent intent) {
final int localEffectiveUserId = mEffectiveUserId;
long challenge = getActivity().getIntent().getLongExtra( long challenge = getActivity().getIntent().getLongExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
mPendingLockCheck = LockPatternChecker.verifyPattern( mPendingLockCheck = LockPatternChecker.verifyPattern(
mLockPatternUtils, mLockPatternUtils,
pattern, pattern,
challenge, challenge,
UserHandle.myUserId(), localEffectiveUserId,
new LockPatternChecker.OnVerifyCallback() { new LockPatternChecker.OnVerifyCallback() {
@Override @Override
public void onVerified(byte[] token, int timeoutMs) { public void onVerified(byte[] token, int timeoutMs) {
@@ -412,7 +416,8 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
token); token);
} }
onPatternChecked(pattern, matched, intent, timeoutMs); onPatternChecked(pattern,
matched, intent, timeoutMs, localEffectiveUserId);
} }
}); });
} }
@@ -420,14 +425,15 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
private void startCheckPattern(final List<LockPatternView.Cell> pattern, private void startCheckPattern(final List<LockPatternView.Cell> pattern,
final Intent intent) { final Intent intent) {
if (pattern.size() < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) { if (pattern.size() < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) {
onPatternChecked(pattern, false, intent, 0); onPatternChecked(pattern, false, intent, 0, mEffectiveUserId);
return; return;
} }
final int localEffectiveUserId = mEffectiveUserId;
mPendingLockCheck = LockPatternChecker.checkPattern( mPendingLockCheck = LockPatternChecker.checkPattern(
mLockPatternUtils, mLockPatternUtils,
pattern, pattern,
UserHandle.myUserId(), localEffectiveUserId,
new LockPatternChecker.OnCheckCallback() { new LockPatternChecker.OnCheckCallback() {
@Override @Override
public void onChecked(boolean matched, int timeoutMs) { public void onChecked(boolean matched, int timeoutMs) {
@@ -438,20 +444,21 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD,
LockPatternUtils.patternToString(pattern)); LockPatternUtils.patternToString(pattern));
} }
onPatternChecked(pattern, matched, intent, timeoutMs); onPatternChecked(pattern, matched, intent, timeoutMs,
localEffectiveUserId);
} }
}); });
} }
private void onPatternChecked(List<LockPatternView.Cell> pattern, private void onPatternChecked(List<LockPatternView.Cell> pattern,
boolean matched, Intent intent, int timeoutMs) { boolean matched, Intent intent, int timeoutMs, int effectiveUserId) {
mLockPatternView.setEnabled(true); mLockPatternView.setEnabled(true);
if (matched) { if (matched) {
startDisappearAnimation(intent); startDisappearAnimation(intent);
} else { } else {
if (timeoutMs > 0) { if (timeoutMs > 0) {
long deadline = mLockPatternUtils.setLockoutAttemptDeadline( long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
UserHandle.myUserId(), timeoutMs); effectiveUserId, timeoutMs);
handleAttemptLockout(deadline); handleAttemptLockout(deadline);
} else { } else {
updateStage(Stage.NeedToUnlockWrong); updateStage(Stage.NeedToUnlockWrong);

View File

@@ -1235,4 +1235,15 @@ public final class Utils {
Spannable.SPAN_INCLUSIVE_INCLUSIVE); Spannable.SPAN_INCLUSIVE_INCLUSIVE);
return str; return str;
} }
public static int getEffectiveUserId(Context context) {
UserManager um = UserManager.get(context);
if (um != null) {
return um.getCredentialOwnerProfile(UserHandle.myUserId());
} else {
Log.e(TAG, "Unable to acquire UserManager");
return UserHandle.myUserId();
}
}
} }