diff options
author | Jorim Jaggi <jjaggi@google.com> | 2015-05-13 16:30:04 -0700 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2015-05-13 16:35:56 -0700 |
commit | aa4d32add72fa728f9cfe4eeb014b26eb5d091c2 (patch) | |
tree | 3d18a2c573dc5d00a5e89512ba224909a85e8cf0 | |
parent | 827e0facfefd0c0033dcfb1747b4fa6f80f9e0e2 (diff) | |
download | frameworks_base-aa4d32add72fa728f9cfe4eeb014b26eb5d091c2.zip frameworks_base-aa4d32add72fa728f9cfe4eeb014b26eb5d091c2.tar.gz frameworks_base-aa4d32add72fa728f9cfe4eeb014b26eb5d091c2.tar.bz2 |
Fix fingerprint for multiuser
Change-Id: Iab18c4de9764da1a65490b186b33535f8e79e1e5
3 files changed, 49 insertions, 53 deletions
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index cf96145..657beee 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -686,7 +686,7 @@ public class FingerprintManager { private void sendAuthenticatedResult(Fingerprint fp) { if (mAuthenticationCallback != null) { - if (fp.getFingerId() == 0 && fp.getGroupId() == 0) { + if (fp.getFingerId() == 0) { // Fingerprint template valid but doesn't match one in database mAuthenticationCallback.onAuthenticationFailed(); } else { diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index d13d71c..0795f65 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -102,7 +102,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int MSG_SIM_STATE_CHANGE = 304; private static final int MSG_RINGER_MODE_CHANGED = 305; private static final int MSG_PHONE_STATE_CHANGED = 306; - private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307; private static final int MSG_DEVICE_PROVISIONED = 308; private static final int MSG_DPM_STATE_CHANGED = 309; private static final int MSG_USER_SWITCHING = 310; @@ -174,9 +173,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { case MSG_PHONE_STATE_CHANGED: handlePhoneStateChanged((String) msg.obj); break; - case MSG_CLOCK_VISIBILITY_CHANGED: - handleClockVisibilityChanged(); - break; case MSG_DEVICE_PROVISIONED: handleDeviceProvisioned(); break; @@ -764,15 +760,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { public void onUserSwitching(int newUserId, IRemoteCallback reply) { mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0, reply)); - mSwitchingUser = true; - updateFingerprintListeningState(); } @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCH_COMPLETE, newUserId, 0)); - mSwitchingUser = false; - updateFingerprintListeningState(); } @Override public void onForegroundProfileSwitch(int newProfileId) { @@ -877,6 +869,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { * Handle {@link #MSG_USER_SWITCHING} */ protected void handleUserSwitching(int userId, IRemoteCallback reply) { + mSwitchingUser = true; + updateFingerprintListeningState(); + for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { @@ -893,6 +888,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { * Handle {@link #MSG_USER_SWITCH_COMPLETE} */ protected void handleUserSwitchComplete(int userId) { + mSwitchingUser = false; + updateFingerprintListeningState(); + for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { @@ -1052,19 +1050,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } /** - * Handle {@link #MSG_CLOCK_VISIBILITY_CHANGED} - */ - private void handleClockVisibilityChanged() { - if (DEBUG) Log.d(TAG, "handleClockVisibilityChanged()"); - for (int i = 0; i < mCallbacks.size(); i++) { - KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); - if (cb != null) { - cb.onClockVisibilityChanged(); - } - } - } - - /** * Handle {@link #MSG_KEYGUARD_VISIBILITY_CHANGED} */ private void handleKeyguardVisibilityChanged(int showing) { @@ -1108,21 +1093,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } } - public boolean isKeyguardVisible() { - return mKeyguardIsVisible; - } - - /** - * @return if the keyguard is currently in bouncer mode. - */ - public boolean isKeyguardBouncer() { - return mBouncer; - } - - public boolean isSwitchingUser() { - return mSwitchingUser; - } - private static boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus current) { final boolean nowPluggedIn = current.isPluggedIn(); final boolean wasPluggedIn = old.isPluggedIn(); @@ -1148,13 +1118,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } /** - * @return The default plmn (no service) - */ - private CharSequence getDefaultPlmn() { - return mContext.getResources().getText(R.string.keyguard_carrier_default); - } - - /** * Remove the given observer's callback. * * @param callback The callback to remove @@ -1219,11 +1182,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { message.sendToTarget(); } - public void reportClockVisible(boolean visible) { - mClockVisible = visible; - mHandler.obtainMessage(MSG_CLOCK_VISIBILITY_CHANGED).sendToTarget(); - } - /** * Report that the user successfully entered the SIM PIN or PUK/SIM PIN so we * have the information earlier than waiting for the intent diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 0faccc6..2edfdf0 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -17,13 +17,16 @@ package com.android.server.fingerprint; import android.app.ActivityManager; +import android.app.ActivityManagerNative; import android.app.AppOpsManager; +import android.app.IUserSwitchObserver; import android.content.ContentResolver; import android.content.Context; import android.os.Binder; import android.os.Environment; import android.os.Handler; import android.os.IBinder; +import android.os.IRemoteCallback; import android.os.Looper; import android.os.MessageQueue; import android.os.RemoteException; @@ -63,6 +66,7 @@ public class FingerprintService extends SystemService { private final AppOpsManager mAppOps; private static final int MSG_NOTIFY = 10; + private static final int MSG_USER_SWITCHING = 11; private static final int ENROLLMENT_TIMEOUT_MS = 60 * 1000; // 1 minute @@ -85,6 +89,10 @@ public class FingerprintService extends SystemService { handleNotify(m.type, m.arg1, m.arg2, m.arg3); break; + case MSG_USER_SWITCHING: + handleUserSwitching(msg.arg1); + break; + default: Slog.w(TAG, "Unknown message:" + msg.what); } @@ -144,7 +152,7 @@ public class FingerprintService extends SystemService { void handleNotify(int type, int arg1, int arg2, int arg3) { Slog.v(TAG, "handleNotify(type=" + type + ", arg1=" + arg1 + ", arg2=" + arg2 + ")" - + ", mAuthClients = " + mAuthClient + ", mEnrollClient = " + mEnrollClient); + + ", mAuthClients = " + mAuthClient + ", mEnrollClient = " + mEnrollClient); if (mEnrollClient != null) { final IBinder token = mEnrollClient.token; if (dispatchNotify(mEnrollClient, type, arg1, arg2, arg3)) { @@ -166,6 +174,10 @@ public class FingerprintService extends SystemService { } } + void handleUserSwitching(int userId) { + updateActiveGroup(userId); + } + /* * Dispatch notify events to clients. * @@ -633,11 +645,37 @@ public class FingerprintService extends SystemService { publishBinderService(Context.FINGERPRINT_SERVICE, new FingerprintServiceWrapper()); mHalDeviceId = nativeOpenHal(); if (mHalDeviceId != 0) { - int userId = ActivityManager.getCurrentUser(); - File path = Environment.getUserSystemDirectory(userId); - nativeSetActiveGroup(0, path.getAbsolutePath().getBytes()); + updateActiveGroup(ActivityManager.getCurrentUser()); } if (DEBUG) Slog.v(TAG, "Fingerprint HAL id: " + mHalDeviceId); + listenForUserSwitches(); } + private void updateActiveGroup(int userId) { + File path = Environment.getUserSystemDirectory(userId); + nativeSetActiveGroup(userId, path.getAbsolutePath().getBytes()); + } + + private void listenForUserSwitches() { + try { + ActivityManagerNative.getDefault().registerUserSwitchObserver( + new IUserSwitchObserver.Stub() { + @Override + public void onUserSwitching(int newUserId, IRemoteCallback reply) { + mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0 /* unused */) + .sendToTarget(); + } + @Override + public void onUserSwitchComplete(int newUserId) throws RemoteException { + // Ignore. + } + @Override + public void onForegroundProfileSwitch(int newProfileId) { + // Ignore. + } + }); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to listen for user switching event" ,e); + } + } } |