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

Commit 682c51f5 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Modernize UDFPS views for maintainability" into udc-qpr-dev

parents aaef6a2d cb1b8cb7
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2023 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.
  -->
<com.android.systemui.biometrics.UdfpsKeyguardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/udfps_animation_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Add fingerprint views here. See udfps_keyguard_view_internal.xml. -->

</com.android.systemui.biometrics.UdfpsKeyguardView>
+1 −2
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@
  -->
<com.android.systemui.biometrics.UdfpsKeyguardViewLegacy
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/udfps_animation_view"
    android:id="@+id/udfps_animation_view_legacy"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

+9 −3
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
import com.android.systemui.keyguard.ui.adapter.UdfpsKeyguardViewControllerAdapter;
import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -153,6 +155,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    @NonNull private final SystemUIDialogManager mDialogManager;
    @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @NonNull private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor;
    @NonNull private final Provider<UdfpsKeyguardViewModels> mUdfpsKeyguardViewModels;
    @NonNull private final VibratorHelper mVibrator;
    @NonNull private final FeatureFlags mFeatureFlags;
    @NonNull private final FalsingManager mFalsingManager;
@@ -272,7 +275,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
                            (view, event, fromUdfpsView) -> onTouch(requestId, event,
                                    fromUdfpsView), mActivityLaunchAnimator, mFeatureFlags,
                            mPrimaryBouncerInteractor, mAlternateBouncerInteractor, mUdfpsUtils,
                            mUdfpsKeyguardAccessibilityDelegate)));
                            mUdfpsKeyguardAccessibilityDelegate,
                            mUdfpsKeyguardViewModels)));
        }

        @Override
@@ -784,7 +788,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    private boolean shouldTryToDismissKeyguard() {
        return mOverlay != null
                && mOverlay.getAnimationViewController()
                instanceof UdfpsKeyguardViewControllerLegacy
                instanceof UdfpsKeyguardViewControllerAdapter
                && mKeyguardStateController.canDismissLockScreen()
                && !mAttemptedToDismissKeyguard;
    }
@@ -829,7 +833,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
            @NonNull InputManager inputManager,
            @NonNull UdfpsUtils udfpsUtils,
            @NonNull KeyguardFaceAuthInteractor keyguardFaceAuthInteractor,
            @NonNull UdfpsKeyguardAccessibilityDelegate udfpsKeyguardAccessibilityDelegate) {
            @NonNull UdfpsKeyguardAccessibilityDelegate udfpsKeyguardAccessibilityDelegate,
            @NonNull Provider<UdfpsKeyguardViewModels> udfpsKeyguardViewModelsProvider) {
        mContext = context;
        mExecution = execution;
        mVibrator = vibrator;
@@ -895,6 +900,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
                    return Unit.INSTANCE;
                });
        mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor;
        mUdfpsKeyguardViewModels = udfpsKeyguardViewModelsProvider;

        final UdfpsOverlayController mUdfpsOverlayController = new UdfpsOverlayController();
        mFingerprintManager.setUdfpsOverlayController(mUdfpsOverlayController);
+46 −25
Original line number Diff line number Diff line
@@ -46,15 +46,19 @@ import android.view.accessibility.AccessibilityManager.TouchExplorationStateChan
import androidx.annotation.LayoutRes
import androidx.annotation.VisibleForTesting
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.settingslib.udfps.UdfpsUtils
import com.android.settingslib.udfps.UdfpsOverlayParams
import com.android.settingslib.udfps.UdfpsUtils
import com.android.systemui.R
import com.android.systemui.animation.ActivityLaunchAnimator
import com.android.systemui.biometrics.ui.controller.UdfpsKeyguardViewController
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dump.DumpManager
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.flags.Flags.REFACTOR_UDFPS_KEYGUARD_VIEWS
import com.android.systemui.keyguard.ui.adapter.UdfpsKeyguardViewControllerAdapter
import com.android.systemui.keyguard.ui.viewmodel.UdfpsKeyguardViewModels
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionStateManager
import com.android.systemui.statusbar.LockscreenShadeTransitionController
@@ -64,6 +68,8 @@ import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.settings.SecureSettings
import kotlinx.coroutines.ExperimentalCoroutinesApi
import javax.inject.Provider

private const val TAG = "UdfpsControllerOverlay"

@@ -75,6 +81,7 @@ const val SETTING_REMOVE_ENROLLMENT_UI = "udfps_overlay_remove_enrollment_ui"
 * request. This state can persist across configuration changes via the [show] and [hide]
 * methods.
 */
@ExperimentalCoroutinesApi
@UiThread
class UdfpsControllerOverlay @JvmOverloads constructor(
        private val context: Context,
@@ -105,6 +112,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
        private val isDebuggable: Boolean = Build.IS_DEBUGGABLE,
        private val udfpsUtils: UdfpsUtils,
        private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate,
        private val udfpsKeyguardViewModels: Provider<UdfpsKeyguardViewModels>,
) {
    /** The view, when [isShowing], or null. */
    var overlayView: UdfpsView? = null
@@ -243,6 +251,18 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                )
            }
            REASON_AUTH_KEYGUARD -> {
                if (featureFlags.isEnabled(REFACTOR_UDFPS_KEYGUARD_VIEWS)) {
                    udfpsKeyguardViewModels.get().setSensorBounds(sensorBounds)
                    UdfpsKeyguardViewController(
                        view.addUdfpsView(R.layout.udfps_keyguard_view),
                        statusBarStateController,
                        shadeExpansionStateManager,
                        dialogManager,
                        dumpManager,
                        alternateBouncerInteractor,
                        udfpsKeyguardViewModels.get(),
                    )
                } else {
                    UdfpsKeyguardViewControllerLegacy(
                        view.addUdfpsView(R.layout.udfps_keyguard_view_legacy) {
                            updateSensorLocation(sensorBounds)
@@ -265,6 +285,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                        udfpsKeyguardAccessibilityDelegate,
                    )
                }
            }
            REASON_AUTH_BP -> {
                // note: empty controller, currently shows no visual affordance
                UdfpsBpViewController(
@@ -415,7 +436,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
    }

    private fun shouldRotate(animation: UdfpsAnimationViewController<*>?): Boolean {
        if (animation !is UdfpsKeyguardViewControllerLegacy) {
        if (animation !is UdfpsKeyguardViewControllerAdapter) {
            // always rotate view if we're not on the keyguard
            return true
        }
+58 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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.systemui.biometrics

import android.content.Context
import android.util.AttributeSet
import kotlinx.coroutines.ExperimentalCoroutinesApi

/** View corresponding with udfps_keyguard_view.xml */
@ExperimentalCoroutinesApi
class UdfpsKeyguardView(
    context: Context,
    attrs: AttributeSet?,
) :
    UdfpsAnimationView(
        context,
        attrs,
    ) {
    private val fingerprintDrawablePlaceHolder = UdfpsFpDrawable(context)
    private var visible = false

    override fun calculateAlpha(): Int {
        return if (mPauseAuth) {
            0
        } else 255 // ViewModels handle animating alpha values
    }

    override fun getDrawable(): UdfpsDrawable {
        return fingerprintDrawablePlaceHolder
    }

    fun useExpandedOverlay(useExpandedOverlay: Boolean) {
        mUseExpandedOverlay = useExpandedOverlay
    }

    fun isVisible(): Boolean {
        return visible
    }

    fun setVisible(isVisible: Boolean) {
        visible = isVisible
        isPauseAuth = !visible
    }
}
Loading