diff options
| author | 2016-07-12 15:31:55 -0700 | |
|---|---|---|
| committer | 2016-07-12 15:32:04 -0700 | |
| commit | 7a3bf7c46e54cf226f86e3eeedb100a159f08d00 (patch) | |
| tree | 1f37ab12340495be546bc30ff8a12e7f016030d0 | |
| parent | a8b4e7320a2b6f6f6e234b5b195441e0fb5e3a47 (diff) | |
Allow LockPatternUtils usage on non-looper threads
Fixes an issue where LPU could no longer
be used on a non-looper thread even though
the looper is only used for a certain callback.
Now only using that callback mechanism is fatal
on a non-looper thread.
Change-Id: I2d766bd6c913e345ed6a3500b486263c8bc12b07
Fixes: 30076804
| -rw-r--r-- | core/java/com/android/internal/widget/LockPatternUtils.java | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java index eff116b7570c..0059d4df79f7 100644 --- a/core/java/com/android/internal/widget/LockPatternUtils.java +++ b/core/java/com/android/internal/widget/LockPatternUtils.java @@ -149,7 +149,7 @@ public class LockPatternUtils { private DevicePolicyManager mDevicePolicyManager; private ILockSettings mLockSettingsService; private UserManager mUserManager; - private final Handler mHandler = new Handler(); + private final Handler mHandler; /** * Use {@link TrustManager#isTrustUsuallyManaged(int)}. @@ -231,6 +231,9 @@ public class LockPatternUtils { public LockPatternUtils(Context context) { mContext = context; mContentResolver = context.getContentResolver(); + + Looper looper = Looper.myLooper(); + mHandler = looper != null ? new Handler(looper) : null; } private ILockSettings getLockSettings() { @@ -1506,6 +1509,10 @@ public class LockPatternUtils { if (callback == null) { return null; } else { + if (mHandler == null) { + throw new IllegalStateException("Must construct LockPatternUtils on a looper thread" + + " to use progress callbacks."); + } return new ICheckCredentialProgressCallback.Stub() { @Override |