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

Commit 66a3b3a9 authored by Jan Tomljanovic's avatar Jan Tomljanovic Committed by Android (Google) Code Review
Browse files

Merge changes from topics "facesettingchange",...

Merge changes from topics "facesettingchange", "presubmit-am-1a8eb017a271444b896f19197b617d62" into tm-dev

* changes:
  Trigger SafetyCenter update on each Face setting change.
  Trigger SafetyCenter update on each Fingerprint settting change.
parents 40caac3c aad5f295
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -19,9 +19,7 @@ package com.android.settings.biometrics.face;
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.hardware.face.FaceManager;
import android.os.UserHandle;

import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollSidecar;

import java.util.Arrays;
@@ -33,7 +31,7 @@ public class FaceEnrollSidecar extends BiometricEnrollSidecar {

    private final int[] mDisabledFeatures;

    private FaceManager mFaceManager;
    private FaceUpdater mFaceUpdater;

    public FaceEnrollSidecar(int[] disabledFeatures) {
        mDisabledFeatures = Arrays.copyOf(disabledFeatures, disabledFeatures.length);
@@ -42,13 +40,13 @@ public class FaceEnrollSidecar extends BiometricEnrollSidecar {
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mFaceManager = Utils.getFaceManagerOrNull(activity);
        mFaceUpdater = new FaceUpdater(activity);
    }

    @Override
    public void startEnrollment() {
        super.startEnrollment();
        mFaceManager.enroll(mUserId, mToken, mEnrollmentCancel,
        mFaceUpdater.enroll(mUserId, mToken, mEnrollmentCancel,
                mEnrollmentCallback, mDisabledFeatures);
    }

+3 −1
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private final Context mContext;
    private final FaceManager mFaceManager;
    private final FaceUpdater mFaceUpdater;
    private final FaceManager.RemovalCallback mRemovalCallback = new FaceManager.RemovalCallback() {
        @Override
        public void onRemovalError(Face face, int errMsgId, CharSequence errString) {
@@ -144,7 +145,7 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
                }

                // Remove the first/only face
                mFaceManager.remove(faces.get(0), mUserId, mRemovalCallback);
                mFaceUpdater.remove(faces.get(0), mUserId, mRemovalCallback);
            } else {
                mButton.setEnabled(true);
                mRemoving = false;
@@ -157,6 +158,7 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
        mContext = context;
        mFaceManager = context.getSystemService(FaceManager.class);
        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
        mFaceUpdater = new FaceUpdater(context, mFaceManager);
    }

    public FaceSettingsRemoveButtonPreferenceController(Context context) {
+137 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.biometrics.face;

import android.content.Context;
import android.hardware.face.Face;
import android.hardware.face.FaceEnrollCell;
import android.hardware.face.FaceManager;
import android.os.CancellationSignal;
import android.view.Surface;

import androidx.annotation.Nullable;

import com.android.settings.Utils;
import com.android.settings.safetycenter.BiometricsSafetySource;

/**
 * Responsible for making {@link FaceManager#enroll} and {@link FaceManager#remove} calls and thus
 * updating the face setting.
 */
public class FaceUpdater {

    private final Context mContext;
    private final FaceManager mFaceManager;

    public FaceUpdater(Context context) {
        mContext = context;
        mFaceManager = Utils.getFaceManagerOrNull(context);
    }

    public FaceUpdater(Context context, FaceManager faceManager) {
        mContext = context;
        mFaceManager = faceManager;
    }

    /** Wrapper around the {@link FaceManager#enroll} method. */
    public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
            FaceManager.EnrollmentCallback callback, int[] disabledFeatures) {
        mFaceManager.enroll(userId, hardwareAuthToken, cancel,
                new NotifyingEnrollmentCallback(mContext, callback), disabledFeatures);
    }

    /** Wrapper around the {@link FaceManager#enroll} method. */
    public void enroll(int userId, byte[] hardwareAuthToken, CancellationSignal cancel,
            FaceManager.EnrollmentCallback callback, int[] disabledFeatures,
            @Nullable Surface previewSurface, boolean debugConsent) {
        mFaceManager.enroll(userId, hardwareAuthToken, cancel,
                new NotifyingEnrollmentCallback(mContext, callback), disabledFeatures,
                previewSurface, debugConsent);
    }

    /** Wrapper around the {@link FaceManager#remove} method. */
    public void remove(Face face, int userId, FaceManager.RemovalCallback callback) {
        mFaceManager.remove(face, userId, new NotifyingRemovalCallback(mContext, callback));
    }

    /**
     * Decorator of the {@link FaceManager.EnrollmentCallback} class that notifies other
     * interested parties that a face setting has changed.
     */
    private static class NotifyingEnrollmentCallback
            extends FaceManager.EnrollmentCallback {

        private final Context mContext;
        private final FaceManager.EnrollmentCallback mCallback;

        NotifyingEnrollmentCallback(Context context,
                FaceManager.EnrollmentCallback callback) {
            mContext = context;
            mCallback = callback;
        }

        @Override
        public void onEnrollmentError(int errMsgId, CharSequence errString) {
            mCallback.onEnrollmentError(errMsgId, errString);
        }

        @Override
        public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
            mCallback.onEnrollmentHelp(helpMsgId, helpString);
        }

        @Override
        public void onEnrollmentFrame(int helpCode, @Nullable CharSequence helpMessage,
                @Nullable FaceEnrollCell cell, int stage, float pan, float tilt, float distance) {
            mCallback.onEnrollmentFrame(helpCode, helpMessage, cell, stage, pan, tilt, distance);
        }

        @Override
        public void onEnrollmentProgress(int remaining) {
            mCallback.onEnrollmentProgress(remaining);
            if (remaining == 0) {
                BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
            }
        }
    }

    /**
     * Decorator of the {@link FaceManager.RemovalCallback} class that notifies other
     * interested parties that a face setting has changed.
     */
    private static class NotifyingRemovalCallback extends FaceManager.RemovalCallback {

        private final Context mContext;
        private final FaceManager.RemovalCallback mCallback;

        NotifyingRemovalCallback(Context context, FaceManager.RemovalCallback callback) {
            mContext = context;
            mCallback = callback;
        }

        @Override
        public void onRemovalError(Face fp, int errMsgId, CharSequence errString) {
            mCallback.onRemovalError(fp, errMsgId, errString);
        }

        @Override
        public void onRemovalSucceeded(@Nullable Face fp, int remaining) {
            mCallback.onRemovalSucceeded(fp, remaining);
            BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
        }
    }
}
+3 −4
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.hardware.fingerprint.FingerprintManager;
import android.util.Log;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollSidecar;

/**
@@ -31,13 +30,13 @@ import com.android.settings.biometrics.BiometricEnrollSidecar;
public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
    private static final String TAG = "FingerprintEnrollSidecar";

    private FingerprintManager mFingerprintManager;
    private FingerprintUpdater mFingerprintUpdater;
    private @FingerprintManager.EnrollReason int mEnrollReason;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
        mFingerprintUpdater = new FingerprintUpdater(activity);
    }

    @Override
@@ -51,7 +50,7 @@ public class FingerprintEnrollSidecar extends BiometricEnrollSidecar {
            return;
        }

        mFingerprintManager.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback,
        mFingerprintUpdater.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback,
                mEnrollReason);
    }

+4 −5
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.app.settings.SettingsEnums;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;

import com.android.settings.core.InstrumentedFragment;
@@ -38,7 +37,7 @@ public class FingerprintRemoveSidecar extends InstrumentedFragment {
    private Listener mListener;
    private Fingerprint mFingerprintRemoving;
    private Queue<Object> mFingerprintsRemoved;
    FingerprintManager mFingerprintManager;
    private FingerprintUpdater mFingerprintUpdater;

    private class RemovalError {
        Fingerprint fingerprint;
@@ -80,15 +79,15 @@ public class FingerprintRemoveSidecar extends InstrumentedFragment {
            return;
        }
        mFingerprintRemoving = fingerprint;
        mFingerprintManager.remove(fingerprint, userId, mRemoveCallback);;
        mFingerprintUpdater.remove(fingerprint, userId, mRemoveCallback);
    }

    public FingerprintRemoveSidecar() {
        mFingerprintsRemoved = new LinkedList<>();
    }

    public void setFingerprintManager(FingerprintManager fingerprintManager) {
        mFingerprintManager = fingerprintManager;
    public void setFingerprintUpdater(FingerprintUpdater fingerprintUpdater) {
        mFingerprintUpdater = fingerprintUpdater;
    }

    @Override
Loading