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

Commit 78fa8b5f authored by Diya Bera's avatar Diya Bera
Browse files

Add logs for mandatory biometrics

Flag: android.hardware.biometrics.flags.mandatory_biometrics
Test: statsd_testdrive 88
Bug: 339910180

Change-Id: Iacb3f1e4abbbe9e43ceaaf6816edb7a0a67d1eb4
parent bb06e31e
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -74,4 +74,7 @@ public interface AuthenticateOptions {

    /** The attribution tag, if any. */
    @Nullable String getAttributionTag();

    /** If the authentication is requested due to mandatory biometrics being active. */
    boolean isMandatoryBiometrics();
}
+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ interface IBiometricAuthenticator {
    void prepareForAuthentication(boolean requireConfirmation, IBinder token, long operationId,
            int userId, IBiometricSensorReceiver sensorReceiver, String opPackageName,
            long requestId, int cookie, boolean allowBackgroundAuthentication,
            boolean isForLegacyFingerprintManager);
            boolean isForLegacyFingerprintManager, boolean isMandatoryBiometrics);

    // Starts authentication with the previously prepared client.
    void startPreparedClient(int cookie);
+51 −12
Original line number Diff line number Diff line
@@ -120,6 +120,8 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
    }


    /** If the authentication is requested due to mandatory biometrics being active. */
    private boolean mIsMandatoryBiometrics;

    // Code below generated by codegen v1.0.23.
    //
@@ -188,7 +190,8 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
            @AuthenticateReason int authenticateReason,
            @PowerManager.WakeReason int wakeReason,
            @NonNull String opPackageName,
            @Nullable String attributionTag) {
            @Nullable String attributionTag,
            boolean isMandatoryBiometrics) {
        this.mUserId = userId;
        this.mSensorId = sensorId;
        this.mDisplayState = displayState;
@@ -229,6 +232,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mOpPackageName);
        this.mAttributionTag = attributionTag;
        this.mIsMandatoryBiometrics = isMandatoryBiometrics;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -261,7 +265,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
     * The reason for this operation when requested by the system (sysui),
     * otherwise AUTHENTICATE_REASON_UNKNOWN.
     *
     * See packages/SystemUI/src/com/android/systemui/deviceentry/shared/FaceAuthReason.kt
     * See frameworks/base/packages/SystemUI/src/com/android/keyguard/FaceAuthReason.kt
     * for more details about each reason.
     */
    @DataClass.Generated.Member
@@ -298,6 +302,14 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        return mAttributionTag;
    }

    /**
     * If the authentication is requested due to mandatory biometrics being active.
     */
    @DataClass.Generated.Member
    public boolean isMandatoryBiometrics() {
        return mIsMandatoryBiometrics;
    }

    /**
     * The sensor id for this operation.
     */
@@ -332,6 +344,15 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        return this;
    }

    /**
     * If the authentication is requested due to mandatory biometrics being active.
     */
    @DataClass.Generated.Member
    public @NonNull FaceAuthenticateOptions setIsMandatoryBiometrics( boolean value) {
        mIsMandatoryBiometrics = value;
        return this;
    }

    @Override
    @DataClass.Generated.Member
    public boolean equals(@Nullable Object o) {
@@ -351,7 +372,8 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
                && mAuthenticateReason == that.mAuthenticateReason
                && mWakeReason == that.mWakeReason
                && java.util.Objects.equals(mOpPackageName, that.mOpPackageName)
                && java.util.Objects.equals(mAttributionTag, that.mAttributionTag);
                && java.util.Objects.equals(mAttributionTag, that.mAttributionTag)
                && mIsMandatoryBiometrics == that.mIsMandatoryBiometrics;
    }

    @Override
@@ -368,6 +390,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        _hash = 31 * _hash + mWakeReason;
        _hash = 31 * _hash + java.util.Objects.hashCode(mOpPackageName);
        _hash = 31 * _hash + java.util.Objects.hashCode(mAttributionTag);
        _hash = 31 * _hash + Boolean.hashCode(mIsMandatoryBiometrics);
        return _hash;
    }

@@ -377,9 +400,10 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        byte flg = 0;
        int flg = 0;
        if (mIsMandatoryBiometrics) flg |= 0x80;
        if (mAttributionTag != null) flg |= 0x40;
        dest.writeByte(flg);
        dest.writeInt(flg);
        dest.writeInt(mUserId);
        dest.writeInt(mSensorId);
        dest.writeInt(mDisplayState);
@@ -400,7 +424,8 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        byte flg = in.readByte();
        int flg = in.readInt();
        boolean isMandatoryBiometrics = (flg & 0x80) != 0;
        int userId = in.readInt();
        int sensorId = in.readInt();
        int displayState = in.readInt();
@@ -449,6 +474,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        com.android.internal.util.AnnotationValidations.validate(
                NonNull.class, null, mOpPackageName);
        this.mAttributionTag = attributionTag;
        this.mIsMandatoryBiometrics = isMandatoryBiometrics;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -481,6 +507,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
        private @PowerManager.WakeReason int mWakeReason;
        private @NonNull String mOpPackageName;
        private @Nullable String mAttributionTag;
        private boolean mIsMandatoryBiometrics;

        private long mBuilderFieldsSet = 0L;

@@ -524,7 +551,7 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
         * The reason for this operation when requested by the system (sysui),
         * otherwise AUTHENTICATE_REASON_UNKNOWN.
         *
         * See packages/SystemUI/src/com/android/systemui/deviceentry/shared/FaceAuthReason.kt
         * See frameworks/base/packages/SystemUI/src/com/android/keyguard/FaceAuthReason.kt
         * for more details about each reason.
         */
        @DataClass.Generated.Member
@@ -573,10 +600,21 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
            return this;
        }

        /**
         * If the authentication is requested due to mandatory biometrics being active.
         */
        @DataClass.Generated.Member
        public @NonNull Builder setIsMandatoryBiometrics(boolean value) {
            checkNotUsed();
            mBuilderFieldsSet |= 0x80;
            mIsMandatoryBiometrics = value;
            return this;
        }

        /** Builds the instance. This builder should not be touched after calling this! */
        public @NonNull FaceAuthenticateOptions build() {
            checkNotUsed();
            mBuilderFieldsSet |= 0x80; // Mark builder used
            mBuilderFieldsSet |= 0x100; // Mark builder used

            if ((mBuilderFieldsSet & 0x1) == 0) {
                mUserId = defaultUserId();
@@ -606,12 +644,13 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
                    mAuthenticateReason,
                    mWakeReason,
                    mOpPackageName,
                    mAttributionTag);
                    mAttributionTag,
                    mIsMandatoryBiometrics);
            return o;
        }

        private void checkNotUsed() {
            if ((mBuilderFieldsSet & 0x80) != 0) {
            if ((mBuilderFieldsSet & 0x100) != 0) {
                throw new IllegalStateException(
                        "This Builder should not be reused. Use a new Builder instance instead");
            }
@@ -619,10 +658,10 @@ public class FaceAuthenticateOptions implements AuthenticateOptions, Parcelable
    }

    @DataClass.Generated(
            time = 1677119626034L,
            time = 1723436679828L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/hardware/face/FaceAuthenticateOptions.java",
            inputSignatures = "private final  int mUserId\nprivate  int mSensorId\nprivate final @android.hardware.biometrics.AuthenticateOptions.DisplayState int mDisplayState\npublic static final  int AUTHENTICATE_REASON_UNKNOWN\npublic static final  int AUTHENTICATE_REASON_STARTED_WAKING_UP\npublic static final  int AUTHENTICATE_REASON_PRIMARY_BOUNCER_SHOWN\npublic static final  int AUTHENTICATE_REASON_ASSISTANT_VISIBLE\npublic static final  int AUTHENTICATE_REASON_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN\npublic static final  int AUTHENTICATE_REASON_NOTIFICATION_PANEL_CLICKED\npublic static final  int AUTHENTICATE_REASON_OCCLUDING_APP_REQUESTED\npublic static final  int AUTHENTICATE_REASON_PICK_UP_GESTURE_TRIGGERED\npublic static final  int AUTHENTICATE_REASON_QS_EXPANDED\npublic static final  int AUTHENTICATE_REASON_SWIPE_UP_ON_BOUNCER\npublic static final  int AUTHENTICATE_REASON_UDFPS_POINTER_DOWN\nprivate final @android.hardware.face.FaceAuthenticateOptions.AuthenticateReason int mAuthenticateReason\nprivate final @android.os.PowerManager.WakeReason int mWakeReason\nprivate @android.annotation.NonNull java.lang.String mOpPackageName\nprivate @android.annotation.Nullable java.lang.String mAttributionTag\nprivate static  int defaultUserId()\nprivate static  int defaultSensorId()\nprivate static  int defaultDisplayState()\nprivate static  int defaultAuthenticateReason()\nprivate static  int defaultWakeReason()\nprivate static  java.lang.String defaultOpPackageName()\nprivate static  java.lang.String defaultAttributionTag()\nclass FaceAuthenticateOptions extends java.lang.Object implements [android.hardware.biometrics.AuthenticateOptions, android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
            inputSignatures = "private final  int mUserId\nprivate  int mSensorId\nprivate final @android.hardware.biometrics.AuthenticateOptions.DisplayState int mDisplayState\npublic static final  int AUTHENTICATE_REASON_UNKNOWN\npublic static final  int AUTHENTICATE_REASON_STARTED_WAKING_UP\npublic static final  int AUTHENTICATE_REASON_PRIMARY_BOUNCER_SHOWN\npublic static final  int AUTHENTICATE_REASON_ASSISTANT_VISIBLE\npublic static final  int AUTHENTICATE_REASON_ALTERNATE_BIOMETRIC_BOUNCER_SHOWN\npublic static final  int AUTHENTICATE_REASON_NOTIFICATION_PANEL_CLICKED\npublic static final  int AUTHENTICATE_REASON_OCCLUDING_APP_REQUESTED\npublic static final  int AUTHENTICATE_REASON_PICK_UP_GESTURE_TRIGGERED\npublic static final  int AUTHENTICATE_REASON_QS_EXPANDED\npublic static final  int AUTHENTICATE_REASON_SWIPE_UP_ON_BOUNCER\npublic static final  int AUTHENTICATE_REASON_UDFPS_POINTER_DOWN\nprivate final @android.hardware.face.FaceAuthenticateOptions.AuthenticateReason int mAuthenticateReason\nprivate final @android.os.PowerManager.WakeReason int mWakeReason\nprivate @android.annotation.NonNull java.lang.String mOpPackageName\nprivate @android.annotation.Nullable java.lang.String mAttributionTag\nprivate  boolean mIsMandatoryBiometrics\nprivate static  int defaultUserId()\nprivate static  int defaultSensorId()\nprivate static  int defaultDisplayState()\nprivate static  int defaultAuthenticateReason()\nprivate static  int defaultWakeReason()\nprivate static  java.lang.String defaultOpPackageName()\nprivate static  java.lang.String defaultAttributionTag()\nclass FaceAuthenticateOptions extends java.lang.Object implements [android.hardware.biometrics.AuthenticateOptions, android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
    @Deprecated
    private void __metadata() {}

+52 −10
Original line number Diff line number Diff line
@@ -97,6 +97,11 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        return null;
    }

    /**
     * If the authentication is requested due to mandatory biometrics being active.
     */
    private boolean mIsMandatoryBiometrics;

    // Code below generated by codegen v1.0.23.
    //
    // DO NOT MODIFY!
@@ -118,7 +123,8 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
            @AuthenticateOptions.DisplayState int displayState,
            @NonNull String opPackageName,
            @Nullable String attributionTag,
            @Nullable AuthenticateReason.Vendor vendorReason) {
            @Nullable AuthenticateReason.Vendor vendorReason,
            boolean isMandatoryBiometrics) {
        this.mUserId = userId;
        this.mSensorId = sensorId;
        this.mIgnoreEnrollmentState = ignoreEnrollmentState;
@@ -130,6 +136,7 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
                NonNull.class, null, mOpPackageName);
        this.mAttributionTag = attributionTag;
        this.mVendorReason = vendorReason;
        this.mIsMandatoryBiometrics = isMandatoryBiometrics;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -198,6 +205,14 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        return mVendorReason;
    }

    /**
     * If the authentication is requested due to mandatory biometrics being active.
     */
    @DataClass.Generated.Member
    public boolean isMandatoryBiometrics() {
        return mIsMandatoryBiometrics;
    }

    /**
     * The sensor id for this operation.
     */
@@ -244,6 +259,15 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        return this;
    }

    /**
     * If the authentication is requested due to mandatory biometrics being active.
     */
    @DataClass.Generated.Member
    public @NonNull FingerprintAuthenticateOptions setIsMandatoryBiometrics( boolean value) {
        mIsMandatoryBiometrics = value;
        return this;
    }

    @Override
    @DataClass.Generated.Member
    public boolean equals(@Nullable Object o) {
@@ -263,7 +287,8 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
                && mDisplayState == that.mDisplayState
                && java.util.Objects.equals(mOpPackageName, that.mOpPackageName)
                && java.util.Objects.equals(mAttributionTag, that.mAttributionTag)
                && java.util.Objects.equals(mVendorReason, that.mVendorReason);
                && java.util.Objects.equals(mVendorReason, that.mVendorReason)
                && mIsMandatoryBiometrics == that.mIsMandatoryBiometrics;
    }

    @Override
@@ -280,6 +305,7 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        _hash = 31 * _hash + java.util.Objects.hashCode(mOpPackageName);
        _hash = 31 * _hash + java.util.Objects.hashCode(mAttributionTag);
        _hash = 31 * _hash + java.util.Objects.hashCode(mVendorReason);
        _hash = 31 * _hash + Boolean.hashCode(mIsMandatoryBiometrics);
        return _hash;
    }

@@ -289,11 +315,12 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        // You can override field parcelling by defining methods like:
        // void parcelFieldName(Parcel dest, int flags) { ... }

        byte flg = 0;
        int flg = 0;
        if (mIgnoreEnrollmentState) flg |= 0x4;
        if (mIsMandatoryBiometrics) flg |= 0x80;
        if (mAttributionTag != null) flg |= 0x20;
        if (mVendorReason != null) flg |= 0x40;
        dest.writeByte(flg);
        dest.writeInt(flg);
        dest.writeInt(mUserId);
        dest.writeInt(mSensorId);
        dest.writeInt(mDisplayState);
@@ -313,8 +340,9 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        // You can override field unparcelling by defining methods like:
        // static FieldType unparcelFieldName(Parcel in) { ... }

        byte flg = in.readByte();
        int flg = in.readInt();
        boolean ignoreEnrollmentState = (flg & 0x4) != 0;
        boolean isMandatoryBiometrics = (flg & 0x80) != 0;
        int userId = in.readInt();
        int sensorId = in.readInt();
        int displayState = in.readInt();
@@ -333,6 +361,7 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
                NonNull.class, null, mOpPackageName);
        this.mAttributionTag = attributionTag;
        this.mVendorReason = vendorReason;
        this.mIsMandatoryBiometrics = isMandatoryBiometrics;

        // onConstructed(); // You can define this method to get a callback
    }
@@ -365,6 +394,7 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
        private @NonNull String mOpPackageName;
        private @Nullable String mAttributionTag;
        private @Nullable AuthenticateReason.Vendor mVendorReason;
        private boolean mIsMandatoryBiometrics;

        private long mBuilderFieldsSet = 0L;

@@ -456,10 +486,21 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
            return this;
        }

        /**
         * If the authentication is requested due to mandatory biometrics being active.
         */
        @DataClass.Generated.Member
        public @NonNull Builder setIsMandatoryBiometrics(boolean value) {
            checkNotUsed();
            mBuilderFieldsSet |= 0x80;
            mIsMandatoryBiometrics = value;
            return this;
        }

        /** Builds the instance. This builder should not be touched after calling this! */
        public @NonNull FingerprintAuthenticateOptions build() {
            checkNotUsed();
            mBuilderFieldsSet |= 0x80; // Mark builder used
            mBuilderFieldsSet |= 0x100; // Mark builder used

            if ((mBuilderFieldsSet & 0x1) == 0) {
                mUserId = defaultUserId();
@@ -489,12 +530,13 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
                    mDisplayState,
                    mOpPackageName,
                    mAttributionTag,
                    mVendorReason);
                    mVendorReason,
                    mIsMandatoryBiometrics);
            return o;
        }

        private void checkNotUsed() {
            if ((mBuilderFieldsSet & 0x80) != 0) {
            if ((mBuilderFieldsSet & 0x100) != 0) {
                throw new IllegalStateException(
                        "This Builder should not be reused. Use a new Builder instance instead");
            }
@@ -502,10 +544,10 @@ public final class FingerprintAuthenticateOptions implements AuthenticateOptions
    }

    @DataClass.Generated(
            time = 1689703591032L,
            time = 1723436831455L,
            codegenVersion = "1.0.23",
            sourceFile = "frameworks/base/core/java/android/hardware/fingerprint/FingerprintAuthenticateOptions.java",
            inputSignatures = "private final  int mUserId\nprivate  int mSensorId\nprivate final  boolean mIgnoreEnrollmentState\nprivate final @android.hardware.biometrics.AuthenticateOptions.DisplayState int mDisplayState\nprivate @android.annotation.NonNull java.lang.String mOpPackageName\nprivate @android.annotation.Nullable java.lang.String mAttributionTag\nprivate @android.annotation.Nullable android.hardware.biometrics.common.AuthenticateReason.Vendor mVendorReason\nprivate static  int defaultUserId()\nprivate static  int defaultSensorId()\nprivate static  boolean defaultIgnoreEnrollmentState()\nprivate static  int defaultDisplayState()\nprivate static  java.lang.String defaultOpPackageName()\nprivate static  java.lang.String defaultAttributionTag()\nprivate static  android.hardware.biometrics.common.AuthenticateReason.Vendor defaultVendorReason()\nclass FingerprintAuthenticateOptions extends java.lang.Object implements [android.hardware.biometrics.AuthenticateOptions, android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
            inputSignatures = "private final  int mUserId\nprivate  int mSensorId\nprivate final  boolean mIgnoreEnrollmentState\nprivate final @android.hardware.biometrics.AuthenticateOptions.DisplayState int mDisplayState\nprivate @android.annotation.NonNull java.lang.String mOpPackageName\nprivate @android.annotation.Nullable java.lang.String mAttributionTag\nprivate @android.annotation.Nullable android.hardware.biometrics.common.AuthenticateReason.Vendor mVendorReason\nprivate  boolean mIsMandatoryBiometrics\nprivate static  int defaultUserId()\nprivate static  int defaultSensorId()\nprivate static  boolean defaultIgnoreEnrollmentState()\nprivate static  int defaultDisplayState()\nprivate static  java.lang.String defaultOpPackageName()\nprivate static  java.lang.String defaultAttributionTag()\nprivate static  android.hardware.biometrics.common.AuthenticateReason.Vendor defaultVendorReason()\nclass FingerprintAuthenticateOptions extends java.lang.Object implements [android.hardware.biometrics.AuthenticateOptions, android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
    @Deprecated
    private void __metadata() {}

+4 −2
Original line number Diff line number Diff line
@@ -221,7 +221,8 @@ public final class AuthSession implements IBinder.DeathRecipient {
        mFingerprintSensorProperties = fingerprintSensorProperties;
        mCancelled = false;
        mBiometricFrameworkStatsLogger = logger;
        mOperationContext = new OperationContextExt(true /* isBP */);
        mOperationContext = new OperationContextExt(true /* isBP */,
                preAuthInfo.getIsMandatoryBiometricsAuthentication() /* isMandatoryBiometrics */);
        mBiometricManager = mContext.getSystemService(BiometricManager.class);

        mSfpsSensorIds = mFingerprintSensorProperties.stream().filter(
@@ -285,7 +286,8 @@ public final class AuthSession implements IBinder.DeathRecipient {
            sensor.goToStateWaitingForCookie(requireConfirmation, mToken, mOperationId,
                    mUserId, mSensorReceiver, mOpPackageName, mRequestId, cookie,
                    mPromptInfo.isAllowBackgroundAuthentication(),
                    mPromptInfo.isForLegacyFingerprintManager());
                    mPromptInfo.isForLegacyFingerprintManager(),
                    mOperationContext.getIsMandatoryBiometrics());
        }
    }

Loading