Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be2c7449 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android Git Automerger
Browse files

am 6a587acd: Merge "Fix fingerprint for multiuser" into mnc-dev

* commit '6a587acd':
  Fix fingerprint for multiuser
parents bd16a8c5 6a587acd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 {
+6 −48
Original line number Diff line number Diff line
@@ -100,7 +100,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;
@@ -172,9 +171,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;
@@ -756,15 +752,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) {
@@ -869,6 +861,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) {
@@ -885,6 +880,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) {
@@ -1043,19 +1041,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}
     */
@@ -1100,21 +1085,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();
@@ -1139,13 +1109,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
        return false;
    }

    /**
     * @return The default plmn (no service)
     */
    private CharSequence getDefaultPlmn() {
        return mContext.getResources().getText(R.string.keyguard_carrier_default);
    }

    /**
     * Remove the given observer's callback.
     *
@@ -1211,11 +1174,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
+42 −4
Original line number Diff line number Diff line
@@ -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;
@@ -62,6 +65,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

@@ -84,6 +88,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);
            }
@@ -166,6 +174,10 @@ public class FingerprintService extends SystemService {
        }
    }

    void handleUserSwitching(int userId) {
        updateActiveGroup(userId);
    }

    /*
     * Dispatch notify events to clients.
     *
@@ -615,11 +627,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);
        }
    }
}