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

Commit fb4be969 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Support disable extend Fingerprint Settings" into main

parents f9dc6c82 650f865d
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -332,6 +332,8 @@ public class FingerprintSettings extends SubSettings {
        private boolean mIsEnrolling;
        /** SaveInstance key if we are waiting activity result from a extension preference */
        @NonNull private String mLaunchedExtPrefKey = "";
        /** key list for changing visibility */
        @NonNull private final ArrayList<String> mExtPrefKeys = new ArrayList<>();

        private long mChallenge;

@@ -474,6 +476,7 @@ public class FingerprintSettings extends SubSettings {
                if (preference instanceof PrimarySwitchIntentPreference) {
                    preference.setOnPreferenceClickListener(this::onExtIntentPreferenceClick);
                }
                mExtPrefKeys.add(preference.getKey());
                mFingerprintUnlockCategory.addPreference(preference);
            }
        }
@@ -826,8 +829,17 @@ public class FingerprintSettings extends SubSettings {
            updateAddPreference();
        }

        /**
         * Lambda function for setCategoryHasChildrenSupplier
         */
        private boolean fingerprintUnlockCategoryHasChild() {
            return mFingerprintUnlockCategory.getPreferenceCount() > 0;
        }

        private void addFingerprintUnlockCategory() {
            mFingerprintUnlockCategory = findPreference(KEY_FINGERPRINT_UNLOCK_CATEGORY);
            mFingerprintUnlockCategoryPreferenceController.setCategoryHasChildrenSupplier(
                    this::fingerprintUnlockCategoryHasChild);
            if (isSfps()) {
                // For both SFPS "screen on to auth" and "rest to unlock"
                final Preference restToUnlockPreference = FeatureFactory.getFeatureFactory()
@@ -867,6 +879,14 @@ public class FingerprintSettings extends SubSettings {
                        mScreenOffUnlockUdfpsPreferenceController.getAvailabilityStatus();
                updatePreferenceVisibility(status, mScreenOffUnlockUdfpsPreference);
            }
            if (!mExtPrefKeys.isEmpty()) {
                for (String key: mExtPrefKeys) {
                    Preference preference = mFingerprintUnlockCategory.findPreference(key);
                    if (preference != null) {
                        updatePreferenceVisibility(categoryStatus, preference);
                    }
                }
            }
        }

        private void updatePreferenceVisibility(int availabilityStatus, Preference preference) {
+18 −3
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@

package com.android.settings.biometrics.fingerprint;

import static android.hardware.biometrics.Flags.screenOffUnlockUdfps;

import android.annotation.Nullable;
import android.content.Context;
import android.hardware.fingerprint.FingerprintManager;

@@ -25,6 +24,8 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;

import java.util.function.Supplier;

/**
 * Preference controller that controls the fingerprint unlock features to be shown / be hidden.
 */
@@ -34,17 +35,31 @@ public class FingerprintUnlockCategoryController extends BasePreferenceControlle
    private int mUserId;
    @VisibleForTesting
    protected FingerprintManager mFingerprintManager;
    @Nullable
    private Supplier<Boolean> mCategoryHasChildSupplier = null;

    public FingerprintUnlockCategoryController(Context context, String key) {
        super(context, key);
        mFingerprintManager = Utils.getFingerprintManagerOrNull(context);
    }

    public void setCategoryHasChildrenSupplier(
            @Nullable Supplier<Boolean> categoryHasChildSupplier
    ) {
        mCategoryHasChildSupplier = categoryHasChildSupplier;
    }

    @Override
    public int getAvailabilityStatus() {
        Supplier<Boolean> categoryHasChildSupplier = mCategoryHasChildSupplier;
        boolean hasChild = false;
        if (categoryHasChildSupplier != null) {
            hasChild = categoryHasChildSupplier.get();
        }

        if (mFingerprintManager != null
                && mFingerprintManager.isHardwareDetected()
                && (mFingerprintManager.isPowerbuttonFps() || screenOffUnlockUdfps())) {
                && hasChild) {
            return mFingerprintManager.hasEnrolledTemplates(getUserId())
                    ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
        } else {