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

Commit 3474dc14 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add a11y click action for keyguard UDFPS" into udc-qpr-dev am: ad89e3f9

parents 78f8fb01 ad89e3f9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2817,6 +2817,8 @@
    <!-- Secondary label for alarm tile when there is no next alarm information [CHAR LIMIT=20] -->
    <string name="qs_alarm_tile_no_alarm">No alarm set</string>

    <!-- Accessibility label for a11y action to show the bouncer (pin/pattern/password) screen lock [CHAR LIMIT=NONE] -->
    <string name="accessibility_bouncer">enter screen lock</string>
    <!-- Accessibility label for fingerprint sensor [CHAR LIMIT=NONE] -->
    <string name="accessibility_fingerprint_label">Fingerprint sensor</string>
    <!-- Accessibility action for tapping on an affordance that will bring up the user's
+6 −2
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    @NonNull private final SecureSettings mSecureSettings;
    @NonNull private final UdfpsUtils mUdfpsUtils;
    @NonNull private final InputManager mInputManager;
    @NonNull private final UdfpsKeyguardAccessibilityDelegate mUdfpsKeyguardAccessibilityDelegate;
    private final boolean mIgnoreRefreshRate;

    // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
@@ -272,7 +273,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
                            mUdfpsDisplayMode, mSecureSettings, requestId, reason, callback,
                            (view, event, fromUdfpsView) -> onTouch(requestId, event,
                                    fromUdfpsView), mActivityLaunchAnimator, mFeatureFlags,
                            mPrimaryBouncerInteractor, mAlternateBouncerInteractor, mUdfpsUtils)));
                            mPrimaryBouncerInteractor, mAlternateBouncerInteractor, mUdfpsUtils,
                            mUdfpsKeyguardAccessibilityDelegate)));
        }

        @Override
@@ -825,7 +827,8 @@ public class UdfpsController implements DozeReceiver, Dumpable {
            @NonNull SecureSettings secureSettings,
            @NonNull InputManager inputManager,
            @NonNull UdfpsUtils udfpsUtils,
            @NonNull KeyguardFaceAuthInteractor keyguardFaceAuthInteractor) {
            @NonNull KeyguardFaceAuthInteractor keyguardFaceAuthInteractor,
            @NonNull UdfpsKeyguardAccessibilityDelegate udfpsKeyguardAccessibilityDelegate) {
        mContext = context;
        mExecution = execution;
        mVibrator = vibrator;
@@ -871,6 +874,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
        mSecureSettings = secureSettings;
        mUdfpsUtils = udfpsUtils;
        mInputManager = inputManager;
        mUdfpsKeyguardAccessibilityDelegate = udfpsKeyguardAccessibilityDelegate;

        mTouchProcessor = mFeatureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)
                ? singlePointerTouchProcessor : null;
+3 −1
Original line number Diff line number Diff line
@@ -103,7 +103,8 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
        private val primaryBouncerInteractor: PrimaryBouncerInteractor,
        private val alternateBouncerInteractor: AlternateBouncerInteractor,
        private val isDebuggable: Boolean = Build.IS_DEBUGGABLE,
        private val udfpsUtils: UdfpsUtils
        private val udfpsUtils: UdfpsUtils,
        private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate,
) {
    /** The view, when [isShowing], or null. */
    var overlayView: UdfpsView? = null
@@ -261,6 +262,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
                    featureFlags,
                    primaryBouncerInteractor,
                    alternateBouncerInteractor,
                    udfpsKeyguardAccessibilityDelegate,
                )
            }
            REASON_AUTH_BP -> {
+54 −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.res.Resources
import android.os.Bundle
import android.view.View
import android.view.accessibility.AccessibilityNodeInfo
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import javax.inject.Inject

@SysUISingleton
class UdfpsKeyguardAccessibilityDelegate
@Inject
constructor(
    @Main private val resources: Resources,
    private val keyguardViewManager: StatusBarKeyguardViewManager,
) : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(host: View?, info: AccessibilityNodeInfo) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        val clickAction =
            AccessibilityNodeInfo.AccessibilityAction(
                AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK.id,
                resources.getString(R.string.accessibility_bouncer)
            )
        info.addAction(clickAction)
    }

    override fun performAccessibilityAction(host: View?, action: Int, args: Bundle?): Boolean {
        // when an a11y service is enabled, double tapping on the fingerprint sensor should
        // show the primary bouncer
        return if (action == AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK.id) {
            keyguardViewManager.showPrimaryBouncer(/* scrimmed */ true)
            true
        } else super.performAccessibilityAction(host, action, args)
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.animation.ValueAnimator
import android.content.res.Configuration
import android.util.MathUtils
import android.view.MotionEvent
import android.view.View
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
@@ -71,6 +72,7 @@ constructor(
    featureFlags: FeatureFlags,
    private val primaryBouncerInteractor: PrimaryBouncerInteractor,
    private val alternateBouncerInteractor: AlternateBouncerInteractor,
    private val udfpsKeyguardAccessibilityDelegate: UdfpsKeyguardAccessibilityDelegate,
) :
    UdfpsAnimationViewController<UdfpsKeyguardViewLegacy>(
        view,
@@ -300,7 +302,10 @@ constructor(
        lockScreenShadeTransitionController.mUdfpsKeyguardViewControllerLegacy = this
        activityLaunchAnimator.addListener(activityLaunchAnimatorListener)
        view.mUseExpandedOverlay = useExpandedOverlay
        view.startIconAsyncInflate()
        view.startIconAsyncInflate {
            (view.findViewById(R.id.udfps_animation_view_internal) as View).accessibilityDelegate =
                udfpsKeyguardAccessibilityDelegate
        }
    }

    override fun onViewDetached() {
Loading