summaryrefslogtreecommitdiffstats
path: root/core/java/com/android/internal/widget/LockPatternUtils.java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2012-09-19 13:18:29 -0700
committerCraig Mautner <cmautner@google.com>2012-09-19 13:18:29 -0700
commitf1b674197577e815040cd75ef86d611965d603ad (patch)
tree4a960bb3452b2dd4fb192c774cc4866f8d194993 /core/java/com/android/internal/widget/LockPatternUtils.java
parent5d1a870a25f7495755432a42cf8c81818dc369fa (diff)
downloadframeworks_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.java17
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");