Fix 2662816: Move UI update from async callback to ui thread. DO NOT MERGE

This fixes a bug where the view hierarchy in AccountUnlockScreen was being
modified by the async callback thread from AccountManager.

DO NOT MERGE because path has changed.

Change-Id: I32a7b5df8ade3dca376a342b4e5aee53d0c204f2
diff --git a/phone/com/android/internal/policy/impl/AccountUnlockScreen.java b/phone/com/android/internal/policy/impl/AccountUnlockScreen.java
index cb88916..840c5e1 100644
--- a/phone/com/android/internal/policy/impl/AccountUnlockScreen.java
+++ b/phone/com/android/internal/policy/impl/AccountUnlockScreen.java
@@ -174,28 +174,33 @@
         }
     }
 
-    private void onCheckPasswordResult(boolean success) {
-        if (success) {
-            // clear out forgotten password
-            mLockPatternUtils.setPermanentlyLocked(false);
-            mLockPatternUtils.setLockPatternEnabled(false);
-            mLockPatternUtils.saveLockPattern(null);
+    private void postOnCheckPasswordResult(final boolean success) {
+        // ensure this runs on UI thread
+        mLogin.post(new Runnable() {
+            public void run() {
+                if (success) {
+                    // clear out forgotten password
+                    mLockPatternUtils.setPermanentlyLocked(false);
+                    mLockPatternUtils.setLockPatternEnabled(false);
+                    mLockPatternUtils.saveLockPattern(null);
 
-            // launch the 'choose lock pattern' activity so
-            // the user can pick a new one if they want to
-            Intent intent = new Intent();
-            intent.setClassName(LOCK_PATTERN_PACKAGE, LOCK_PATTERN_CLASS);
-            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            mContext.startActivity(intent);
-            mCallback.reportSuccessfulUnlockAttempt();
+                    // launch the 'choose lock pattern' activity so
+                    // the user can pick a new one if they want to
+                    Intent intent = new Intent();
+                    intent.setClassName(LOCK_PATTERN_PACKAGE, LOCK_PATTERN_CLASS);
+                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                    mContext.startActivity(intent);
+                    mCallback.reportSuccessfulUnlockAttempt();
 
-            // close the keyguard
-            mCallback.keyguardDone(true);
-        } else {
-            mInstructions.setText(R.string.lockscreen_glogin_invalid_input);
-            mPassword.setText("");
-            mCallback.reportFailedUnlockAttempt();
-        }
+                    // close the keyguard
+                    mCallback.keyguardDone(true);
+                } else {
+                    mInstructions.setText(R.string.lockscreen_glogin_invalid_input);
+                    mPassword.setText("");
+                    mCallback.reportFailedUnlockAttempt();
+                }
+            }
+        });
     }
 
     @Override
@@ -270,7 +275,7 @@
         final String password = mPassword.getText().toString();
         Account account = findIntendedAccount(login);
         if (account == null) {
-            onCheckPasswordResult(false);
+            postOnCheckPasswordResult(false);
             return;
         }
         getProgressDialog().show();
@@ -283,18 +288,13 @@
                     mCallback.pokeWakelock(AWAKE_POKE_MILLIS);
                     final Bundle result = future.getResult();
                     final boolean verified = result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT);
-                    // ensure on UI thread
-                    mLogin.post(new Runnable() {
-                        public void run() {
-                            onCheckPasswordResult(verified);
-                        }
-                    });
+                    postOnCheckPasswordResult(verified);
                 } catch (OperationCanceledException e) {
-                    onCheckPasswordResult(false);
+                    postOnCheckPasswordResult(false);
                 } catch (IOException e) {
-                    onCheckPasswordResult(false);
+                    postOnCheckPasswordResult(false);
                 } catch (AuthenticatorException e) {
-                    onCheckPasswordResult(false);
+                    postOnCheckPasswordResult(false);
                 } finally {
                     mLogin.post(new Runnable() {
                         public void run() {