fix CC for work profiles

Bug: 22257554
Change-Id: I09f62956d01f91d3014d9fa250aaff68ab5e1a9b
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index c07186f..327e622 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -118,7 +118,10 @@
             boolean returnCredentials, boolean external, boolean hasChallenge,
             long challenge) {
         boolean launched = false;
-        switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
+
+        int effectiveUserId = Utils.getEffectiveUserId(mActivity);
+
+        switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(effectiveUserId)) {
             case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
                 launched = launchConfirmationActivity(request, title, header, description,
                         returnCredentials || hasChallenge
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index 5a8a47e..1c42045 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -28,8 +28,8 @@
 
 import android.app.Fragment;
 import android.app.admin.DevicePolicyManager;
-import android.content.Context;
 import android.content.Intent;
+import android.content.Context;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.CountDownTimer;
@@ -98,6 +98,7 @@
         private AppearAnimationUtils mAppearAnimationUtils;
         private DisappearAnimationUtils mDisappearAnimationUtils;
         private boolean mBlockImm;
+        private int mEffectiveUserId;
 
         // required constructor for fragments
         public ConfirmLockPasswordFragment() {
@@ -108,6 +109,8 @@
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             mLockPatternUtils = new LockPatternUtils(getActivity());
+            mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
+
             if (savedInstanceState != null) {
                 mNumWrongConfirmAttempts = savedInstanceState.getInt(
                         KEY_NUM_WRONG_CONFIRM_ATTEMPTS, 0);
@@ -118,7 +121,7 @@
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
             final int storedQuality = mLockPatternUtils.getKeyguardStoredPasswordQuality(
-                    UserHandle.myUserId());
+                    mEffectiveUserId);
             View view = inflater.inflate(R.layout.confirm_lock_password, null);
 
             mPasswordEntry = (TextView) view.findViewById(R.id.password_entry);
@@ -238,7 +241,7 @@
         @Override
         public void onResume() {
             super.onResume();
-            long deadline = mLockPatternUtils.getLockoutAttemptDeadline(UserHandle.myUserId());
+            long deadline = mLockPatternUtils.getLockoutAttemptDeadline(mEffectiveUserId);
             if (deadline != 0) {
                 handleAttemptLockout(deadline);
             } else {
@@ -314,7 +317,7 @@
                 return;
             }
 
-            onPasswordChecked(false, intent, 0);
+            onPasswordChecked(false, intent, 0, mEffectiveUserId);
         }
 
         private boolean isInternalActivity() {
@@ -324,11 +327,12 @@
         private void startVerifyPassword(final String pin, final Intent intent) {
             long challenge = getActivity().getIntent().getLongExtra(
                     ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
+            final int localEffectiveUserId = mEffectiveUserId;
             mPendingLockCheck = LockPatternChecker.verifyPassword(
                     mLockPatternUtils,
                     pin,
                     challenge,
-                    UserHandle.myUserId(),
+                    localEffectiveUserId,
                     new LockPatternChecker.OnVerifyCallback() {
                         @Override
                         public void onVerified(byte[] token, int timeoutMs) {
@@ -340,16 +344,17 @@
                                         ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
                                         token);
                             }
-                            onPasswordChecked(matched, intent, timeoutMs);
+                            onPasswordChecked(matched, intent, timeoutMs, localEffectiveUserId);
                         }
                     });
         }
 
         private void startCheckPassword(final String pin, final Intent intent) {
+            final int localEffectiveUserId = mEffectiveUserId;
             mPendingLockCheck = LockPatternChecker.checkPassword(
                     mLockPatternUtils,
                     pin,
-                    UserHandle.myUserId(),
+                    localEffectiveUserId,
                     new LockPatternChecker.OnCheckCallback() {
                         @Override
                         public void onChecked(boolean matched, int timeoutMs) {
@@ -361,7 +366,7 @@
                                 intent.putExtra(
                                         ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pin);
                             }
-                            onPasswordChecked(matched, intent, timeoutMs);
+                            onPasswordChecked(matched, intent, timeoutMs, localEffectiveUserId);
                         }
                     });
         }
@@ -384,14 +389,15 @@
             }
         }
 
-        private void onPasswordChecked(boolean matched, Intent intent, int timeoutMs) {
+        private void onPasswordChecked(boolean matched, Intent intent, int timeoutMs,
+                int effectiveUserId) {
             mPasswordEntryInputDisabler.setInputEnabled(true);
             if (matched) {
                 startDisappearAnimation(intent);
             } else {
                 if (timeoutMs > 0) {
                     long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
-                            UserHandle.myUserId(), timeoutMs);
+                            effectiveUserId, timeoutMs);
                     handleAttemptLockout(deadline);
                 } else {
                     showError(getErrorMessage());
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index 4f8d726..62a8ecd 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -102,6 +102,8 @@
         private AppearAnimationUtils mAppearAnimationUtils;
         private DisappearAnimationUtils mDisappearAnimationUtils;
 
+        private int mEffectiveUserId;
+
         // required constructor for fragments
         public ConfirmLockPatternFragment() {
 
@@ -111,6 +113,7 @@
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             mLockPatternUtils = new LockPatternUtils(getActivity());
+            mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
         }
 
         @Override
@@ -151,7 +154,7 @@
                 // on first launch, if no lock pattern is set, then finish with
                 // success (don't want user to get stuck confirming something that
                 // doesn't exist).
-                if (!mLockPatternUtils.isLockPatternEnabled(UserHandle.myUserId())) {
+                if (!mLockPatternUtils.isLockPatternEnabled(mEffectiveUserId)) {
                     getActivity().setResult(Activity.RESULT_OK);
                     getActivity().finish();
                 }
@@ -203,7 +206,7 @@
             super.onResume();
 
             // if the user is currently locked out, enforce it.
-            long deadline = mLockPatternUtils.getLockoutAttemptDeadline(UserHandle.myUserId());
+            long deadline = mLockPatternUtils.getLockoutAttemptDeadline(mEffectiveUserId);
             if (deadline != 0) {
                 handleAttemptLockout(deadline);
             } else if (!mLockPatternView.isEnabled()) {
@@ -385,7 +388,7 @@
                     return;
                 }
 
-                onPatternChecked(pattern, false, intent, 0);
+                onPatternChecked(pattern, false, intent, 0, mEffectiveUserId);
             }
 
             private boolean isInternalActivity() {
@@ -394,13 +397,14 @@
 
             private void startVerifyPattern(final List<LockPatternView.Cell> pattern,
                     final Intent intent) {
+                final int localEffectiveUserId = mEffectiveUserId;
                 long challenge = getActivity().getIntent().getLongExtra(
                         ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
                 mPendingLockCheck = LockPatternChecker.verifyPattern(
                         mLockPatternUtils,
                         pattern,
                         challenge,
-                        UserHandle.myUserId(),
+                        localEffectiveUserId,
                         new LockPatternChecker.OnVerifyCallback() {
                             @Override
                             public void onVerified(byte[] token, int timeoutMs) {
@@ -412,7 +416,8 @@
                                             ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
                                             token);
                                 }
-                                onPatternChecked(pattern, matched, intent, timeoutMs);
+                                onPatternChecked(pattern,
+                                        matched, intent, timeoutMs, localEffectiveUserId);
                             }
                         });
             }
@@ -420,14 +425,15 @@
             private void startCheckPattern(final List<LockPatternView.Cell> pattern,
                     final Intent intent) {
                 if (pattern.size() < LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) {
-                    onPatternChecked(pattern, false, intent, 0);
+                    onPatternChecked(pattern, false, intent, 0, mEffectiveUserId);
                     return;
                 }
 
+                final int localEffectiveUserId = mEffectiveUserId;
                 mPendingLockCheck = LockPatternChecker.checkPattern(
                         mLockPatternUtils,
                         pattern,
-                        UserHandle.myUserId(),
+                        localEffectiveUserId,
                         new LockPatternChecker.OnCheckCallback() {
                             @Override
                             public void onChecked(boolean matched, int timeoutMs) {
@@ -438,20 +444,21 @@
                                     intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD,
                                                     LockPatternUtils.patternToString(pattern));
                                 }
-                                onPatternChecked(pattern, matched, intent, timeoutMs);
+                                onPatternChecked(pattern, matched, intent, timeoutMs,
+                                        localEffectiveUserId);
                             }
                         });
             }
 
             private void onPatternChecked(List<LockPatternView.Cell> pattern,
-                    boolean matched, Intent intent, int timeoutMs) {
+                    boolean matched, Intent intent, int timeoutMs, int effectiveUserId) {
                 mLockPatternView.setEnabled(true);
                 if (matched) {
                     startDisappearAnimation(intent);
                 } else {
                     if (timeoutMs > 0) {
                         long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
-                                UserHandle.myUserId(), timeoutMs);
+                                effectiveUserId, timeoutMs);
                         handleAttemptLockout(deadline);
                     } else {
                         updateStage(Stage.NeedToUnlockWrong);
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index a18d860..d25d8c3 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1235,4 +1235,15 @@
                 Spannable.SPAN_INCLUSIVE_INCLUSIVE);
         return str;
     }
-}
\ No newline at end of file
+
+    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();
+        }
+    }
+}
+