diff options
author | Craig Mautner <cmautner@google.com> | 2012-09-19 13:18:29 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2012-09-19 13:18:29 -0700 |
commit | f1b674197577e815040cd75ef86d611965d603ad (patch) | |
tree | 4a960bb3452b2dd4fb192c774cc4866f8d194993 /core/java/com/android/internal/widget/LockPatternUtils.java | |
parent | 5d1a870a25f7495755432a42cf8c81818dc369fa (diff) | |
download | frameworks_base-f1b674197577e815040cd75ef86d611965d603ad.zip frameworks_base-f1b674197577e815040cd75ef86d611965d603ad.tar.gz frameworks_base-f1b674197577e815040cd75ef86d611965d603ad.tar.bz2 |
Fix deadlock in LockPatternUtils by using local id.
Activity manager now updates window manager's current user id
directly and immediately rather than waiting for a broadcast
update. Window manager passes this through policy to the
KeyguardViewMediator and into LockPatternUtils. LockPatternUtils
no longer goes to Activity to get the current user id if it finds
that its local id is non-default.
Fixes bug 7193726.
Change-Id: Id5613e7a9fe9e5b49e83c26b74504f587c3998c2
Diffstat (limited to 'core/java/com/android/internal/widget/LockPatternUtils.java')
-rw-r--r-- | core/java/com/android/internal/widget/LockPatternUtils.java | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index 3207435..a839e73 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -22,14 +22,11 @@ import com.google.android.collect.Lists; import android.app.ActivityManagerNative; import android.app.admin.DevicePolicyManager; -import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.os.Binder; -import android.os.FileObserver; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; @@ -45,16 +42,10 @@ import android.util.Log; import android.view.View; import android.widget.Button; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.RandomAccessFile; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.util.Arrays; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; /** * Utilities for the lock pattern and its settings. @@ -134,7 +125,7 @@ public class LockPatternUtils { private final ContentResolver mContentResolver; private DevicePolicyManager mDevicePolicyManager; private ILockSettings mLockSettingsService; - private int mCurrentUserId = 0; + private int mCurrentUserId = UserHandle.USER_NULL; public DevicePolicyManager getDevicePolicyManager() { if (mDevicePolicyManager == null) { @@ -233,10 +224,14 @@ public class LockPatternUtils { public int getCurrentUser() { if (Process.myUid() == Process.SYSTEM_UID) { + if (mCurrentUserId != UserHandle.USER_NULL) { + // Someone is regularly updating using setCurrentUser() use that value. + return mCurrentUserId; + } try { return ActivityManagerNative.getDefault().getCurrentUser().id; } catch (RemoteException re) { - return mCurrentUserId; + return UserHandle.USER_OWNER; } } else { throw new SecurityException("Only the system process can get the current user"); |