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

Commit 94951245 authored by Ilya Matyukhin's avatar Ilya Matyukhin Committed by Android (Google) Code Review
Browse files

Merge "Only enable UDFPS display mode for optical sensors" into tm-qpr-dev

parents af57f130 5eb272d3
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -777,13 +777,16 @@ public class AuthController implements CoreStartable, CommandQueue.Callbacks,
    private void updateUdfpsLocation() {
    private void updateUdfpsLocation() {
        if (mUdfpsController != null) {
        if (mUdfpsController != null) {
            final FingerprintSensorPropertiesInternal udfpsProp = mUdfpsProps.get(0);
            final FingerprintSensorPropertiesInternal udfpsProp = mUdfpsProps.get(0);

            final Rect previousUdfpsBounds = mUdfpsBounds;
            final Rect previousUdfpsBounds = mUdfpsBounds;
            mUdfpsBounds = udfpsProp.getLocation().getRect();
            mUdfpsBounds = udfpsProp.getLocation().getRect();
            mUdfpsBounds.scale(mScaleFactor);
            mUdfpsBounds.scale(mScaleFactor);
            mUdfpsController.updateOverlayParams(udfpsProp.sensorId,

                    new UdfpsOverlayParams(mUdfpsBounds, mCachedDisplayInfo.getNaturalWidth(),
            final UdfpsOverlayParams overlayParams = new UdfpsOverlayParams(mUdfpsBounds,
                            mCachedDisplayInfo.getNaturalHeight(), mScaleFactor,
                    mCachedDisplayInfo.getNaturalWidth(), mCachedDisplayInfo.getNaturalHeight(),
                            mCachedDisplayInfo.rotation));
                    mScaleFactor, mCachedDisplayInfo.rotation);

            mUdfpsController.updateOverlayParams(udfpsProp, overlayParams);
            if (!Objects.equals(previousUdfpsBounds, mUdfpsBounds)) {
            if (!Objects.equals(previousUdfpsBounds, mUdfpsBounds)) {
                for (Callback cb : mCallbacks) {
                for (Callback cb : mCallbacks) {
                    cb.onUdfpsLocationChanged();
                    cb.onUdfpsLocationChanged();
+50 −22
Original line number Original line Diff line number Diff line
@@ -23,16 +23,17 @@ import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.systemui.classifier.Classifier.LOCK_ICON;
import static com.android.systemui.classifier.Classifier.LOCK_ICON;
import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION;
import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION;


import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.graphics.Point;
import android.graphics.Point;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.SensorProperties;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.hardware.fingerprint.IUdfpsOverlayControllerCallback;
import android.hardware.fingerprint.IUdfpsOverlayControllerCallback;
import android.os.Handler;
import android.os.Handler;
@@ -50,10 +51,14 @@ import android.view.VelocityTracker;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager;


import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.LatencyTracker;
import com.android.internal.util.LatencyTracker;
import com.android.keyguard.FaceAuthApiRequestReason;
import com.android.keyguard.FaceAuthApiRequestReason;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.biometrics.dagger.BiometricsBackground;
import com.android.systemui.biometrics.dagger.BiometricsBackground;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
@@ -77,6 +82,8 @@ import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.concurrency.Execution;
import com.android.systemui.util.concurrency.Execution;
import com.android.systemui.util.time.SystemClock;
import com.android.systemui.util.time.SystemClock;


import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashSet;
import java.util.Optional;
import java.util.Optional;
import java.util.Set;
import java.util.Set;
@@ -99,7 +106,7 @@ import kotlin.Unit;
 */
 */
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation")
@SysUISingleton
@SysUISingleton
public class UdfpsController implements DozeReceiver {
public class UdfpsController implements DozeReceiver, Dumpable {
    private static final String TAG = "UdfpsController";
    private static final String TAG = "UdfpsController";
    private static final long AOD_INTERRUPT_TIMEOUT_MILLIS = 1000;
    private static final long AOD_INTERRUPT_TIMEOUT_MILLIS = 1000;


@@ -137,7 +144,7 @@ public class UdfpsController implements DozeReceiver {


    // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
    // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
    // sensors, this, in addition to a lot of the code here, will be updated.
    // sensors, this, in addition to a lot of the code here, will be updated.
    @VisibleForTesting int mSensorId;
    @VisibleForTesting @NonNull FingerprintSensorPropertiesInternal mSensorProps;
    @VisibleForTesting @NonNull UdfpsOverlayParams mOverlayParams = new UdfpsOverlayParams();
    @VisibleForTesting @NonNull UdfpsOverlayParams mOverlayParams = new UdfpsOverlayParams();
    // TODO(b/229290039): UDFPS controller should manage its dimensions on its own. Remove this.
    // TODO(b/229290039): UDFPS controller should manage its dimensions on its own. Remove this.
    @Nullable private Runnable mAuthControllerUpdateUdfpsLocation;
    @Nullable private Runnable mAuthControllerUpdateUdfpsLocation;
@@ -202,6 +209,11 @@ public class UdfpsController implements DozeReceiver {
        }
        }
    };
    };


    @Override
    public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
        pw.println("mSensorProps=(" + mSensorProps + ")");
    }

    public class UdfpsOverlayController extends IUdfpsOverlayController.Stub {
    public class UdfpsOverlayController extends IUdfpsOverlayController.Stub {
        @Override
        @Override
        public void showUdfpsOverlay(long requestId, int sensorId, int reason,
        public void showUdfpsOverlay(long requestId, int sensorId, int reason,
@@ -249,7 +261,7 @@ public class UdfpsController implements DozeReceiver {
                    }
                    }
                    mAcquiredReceived = true;
                    mAcquiredReceived = true;
                    final UdfpsView view = mOverlay.getOverlayView();
                    final UdfpsView view = mOverlay.getOverlayView();
                    if (view != null) {
                    if (view != null && isOptical()) {
                        unconfigureDisplay(view);
                        unconfigureDisplay(view);
                    }
                    }
                    if (acquiredGood) {
                    if (acquiredGood) {
@@ -295,12 +307,13 @@ public class UdfpsController implements DozeReceiver {
    /**
    /**
     * Updates the overlay parameters and reconstructs or redraws the overlay, if necessary.
     * Updates the overlay parameters and reconstructs or redraws the overlay, if necessary.
     *
     *
     * @param sensorId      sensor for which the overlay is getting updated.
     * @param sensorProps   sensor for which the overlay is getting updated.
     * @param overlayParams See {@link UdfpsOverlayParams}.
     * @param overlayParams See {@link UdfpsOverlayParams}.
     */
     */
    public void updateOverlayParams(int sensorId, @NonNull UdfpsOverlayParams overlayParams) {
    public void updateOverlayParams(@NonNull FingerprintSensorPropertiesInternal sensorProps,
        if (sensorId != mSensorId) {
            @NonNull UdfpsOverlayParams overlayParams) {
            mSensorId = sensorId;
        if (mSensorProps.sensorId != sensorProps.sensorId) {
            mSensorProps = sensorProps;
            Log.w(TAG, "updateUdfpsParams | sensorId has changed");
            Log.w(TAG, "updateUdfpsParams | sensorId has changed");
        }
        }


@@ -324,7 +337,7 @@ public class UdfpsController implements DozeReceiver {
        mAuthControllerUpdateUdfpsLocation = r;
        mAuthControllerUpdateUdfpsLocation = r;
    }
    }


    public void setUdfpsDisplayMode(UdfpsDisplayMode udfpsDisplayMode) {
    public void setUdfpsDisplayMode(@Nullable UdfpsDisplayMode udfpsDisplayMode) {
        mUdfpsDisplayMode = udfpsDisplayMode;
        mUdfpsDisplayMode = udfpsDisplayMode;
    }
    }


@@ -428,7 +441,6 @@ public class UdfpsController implements DozeReceiver {
        }
        }


        final UdfpsView udfpsView = mOverlay.getOverlayView();
        final UdfpsView udfpsView = mOverlay.getOverlayView();
        final boolean isDisplayConfigured = udfpsView.isDisplayConfigured();
        boolean handled = false;
        boolean handled = false;
        switch (event.getActionMasked()) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_OUTSIDE:
            case MotionEvent.ACTION_OUTSIDE:
@@ -512,15 +524,14 @@ public class UdfpsController implements DozeReceiver {
                                "minor: %.1f, major: %.1f, v: %.1f, exceedsVelocityThreshold: %b",
                                "minor: %.1f, major: %.1f, v: %.1f, exceedsVelocityThreshold: %b",
                                minor, major, v, exceedsVelocityThreshold);
                                minor, major, v, exceedsVelocityThreshold);
                        final long sinceLastLog = mSystemClock.elapsedRealtime() - mTouchLogTime;
                        final long sinceLastLog = mSystemClock.elapsedRealtime() - mTouchLogTime;
                        if (!isDisplayConfigured && !mAcquiredReceived
                                && !exceedsVelocityThreshold) {


                        if (!mOnFingerDown && !mAcquiredReceived && !exceedsVelocityThreshold) {
                            final float scale = mOverlayParams.getScaleFactor();
                            final float scale = mOverlayParams.getScaleFactor();
                            float scaledMinor = minor / scale;
                            float scaledMinor = minor / scale;
                            float scaledMajor = major / scale;
                            float scaledMajor = major / scale;

                            onFingerDown(requestId, scaledTouch.x, scaledTouch.y, scaledMinor,
                            onFingerDown(requestId, scaledTouch.x, scaledTouch.y, scaledMinor,
                                    scaledMajor);
                                    scaledMajor);

                            Log.v(TAG, "onTouch | finger down: " + touchInfo);
                            Log.v(TAG, "onTouch | finger down: " + touchInfo);
                            mTouchLogTime = mSystemClock.elapsedRealtime();
                            mTouchLogTime = mSystemClock.elapsedRealtime();
                            handled = true;
                            handled = true;
@@ -614,7 +625,7 @@ public class UdfpsController implements DozeReceiver {
            @NonNull LatencyTracker latencyTracker,
            @NonNull LatencyTracker latencyTracker,
            @NonNull ActivityLaunchAnimator activityLaunchAnimator,
            @NonNull ActivityLaunchAnimator activityLaunchAnimator,
            @NonNull Optional<AlternateUdfpsTouchProvider> alternateTouchProvider,
            @NonNull Optional<AlternateUdfpsTouchProvider> alternateTouchProvider,
            @BiometricsBackground Executor biometricsExecutor,
            @NonNull @BiometricsBackground Executor biometricsExecutor,
            @NonNull BouncerInteractor bouncerInteractor) {
            @NonNull BouncerInteractor bouncerInteractor) {
        mContext = context;
        mContext = context;
        mExecution = execution;
        mExecution = execution;
@@ -644,10 +655,20 @@ public class UdfpsController implements DozeReceiver {
        mLatencyTracker = latencyTracker;
        mLatencyTracker = latencyTracker;
        mActivityLaunchAnimator = activityLaunchAnimator;
        mActivityLaunchAnimator = activityLaunchAnimator;
        mAlternateTouchProvider = alternateTouchProvider.orElse(null);
        mAlternateTouchProvider = alternateTouchProvider.orElse(null);
        mSensorProps = new FingerprintSensorPropertiesInternal(
                -1 /* sensorId */,
                SensorProperties.STRENGTH_CONVENIENCE,
                0 /* maxEnrollmentsPerUser */,
                new ArrayList<>() /* componentInfo */,
                FingerprintSensorProperties.TYPE_UNKNOWN,
                false /* resetLockoutRequiresHardwareAuthToken */);

        mBiometricExecutor = biometricsExecutor;
        mBiometricExecutor = biometricsExecutor;
        mFeatureFlags = featureFlags;
        mFeatureFlags = featureFlags;
        mBouncerInteractor = bouncerInteractor;
        mBouncerInteractor = bouncerInteractor;


        mDumpManager.registerDumpable(TAG, this);

        mOrientationListener = new BiometricDisplayListener(
        mOrientationListener = new BiometricDisplayListener(
                context,
                context,
                displayManager,
                displayManager,
@@ -843,6 +864,10 @@ public class UdfpsController implements DozeReceiver {
        mIsAodInterruptActive = false;
        mIsAodInterruptActive = false;
    }
    }


    private boolean isOptical() {
        return mSensorProps.sensorType == FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
    }

    public boolean isFingerDown() {
    public boolean isFingerDown() {
        return mOnFingerDown;
        return mOnFingerDown;
    }
    }
@@ -859,7 +884,9 @@ public class UdfpsController implements DozeReceiver {
                    + " current: " + mOverlay.getRequestId());
                    + " current: " + mOverlay.getRequestId());
            return;
            return;
        }
        }
        if (isOptical()) {
            mLatencyTracker.onActionStart(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
            mLatencyTracker.onActionStart(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
        }
        // Refresh screen timeout and boost process priority if possible.
        // Refresh screen timeout and boost process priority if possible.
        mPowerManager.userActivity(mSystemClock.uptimeMillis(),
        mPowerManager.userActivity(mSystemClock.uptimeMillis(),
                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
                PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
@@ -882,11 +909,11 @@ public class UdfpsController implements DozeReceiver {
                }
                }
            });
            });
        } else {
        } else {
            mFingerprintManager.onPointerDown(requestId, mSensorId, x, y, minor, major);
            mFingerprintManager.onPointerDown(requestId, mSensorProps.sensorId, x, y, minor, major);
        }
        }
        Trace.endAsyncSection("UdfpsController.e2e.onPointerDown", 0);
        Trace.endAsyncSection("UdfpsController.e2e.onPointerDown", 0);
        final UdfpsView view = mOverlay.getOverlayView();
        final UdfpsView view = mOverlay.getOverlayView();
        if (view != null) {
        if (view != null && isOptical()) {
            view.configureDisplay(() -> {
            view.configureDisplay(() -> {
                if (mAlternateTouchProvider != null) {
                if (mAlternateTouchProvider != null) {
                    mBiometricExecutor.execute(() -> {
                    mBiometricExecutor.execute(() -> {
@@ -894,7 +921,7 @@ public class UdfpsController implements DozeReceiver {
                        mLatencyTracker.onActionEnd(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
                        mLatencyTracker.onActionEnd(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
                    });
                    });
                } else {
                } else {
                    mFingerprintManager.onUiReady(requestId, mSensorId);
                    mFingerprintManager.onUiReady(requestId, mSensorProps.sensorId);
                    mLatencyTracker.onActionEnd(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
                    mLatencyTracker.onActionEnd(LatencyTracker.ACTION_UDFPS_ILLUMINATE);
                }
                }
            });
            });
@@ -920,15 +947,16 @@ public class UdfpsController implements DozeReceiver {
                    }
                    }
                });
                });
            } else {
            } else {
                mFingerprintManager.onPointerUp(requestId, mSensorId);
                mFingerprintManager.onPointerUp(requestId, mSensorProps.sensorId);
            }
            }
            for (Callback cb : mCallbacks) {
            for (Callback cb : mCallbacks) {
                cb.onFingerUp();
                cb.onFingerUp();
            }
            }
        }
        }
        mOnFingerDown = false;
        mOnFingerDown = false;
        if (isOptical()) {
            unconfigureDisplay(view);
            unconfigureDisplay(view);

        }
    }
    }


    /**
    /**
+270 −129

File changed.

Preview size limit exceeded, changes collapsed.