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
This commit is contained in:
Adrian Roos
2016-07-12 15:31:55 -07:00
parent a8b4e7320a
commit 7a3bf7c46e

View File

@@ -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