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

Commit 9417fe65 authored by Chandru S's avatar Chandru S Committed by Automerger Merge Worker
Browse files

Merge "Provide an option in KeyguardIndicationTextView to always announce the...

Merge "Provide an option in KeyguardIndicationTextView to always announce the text being displayed" into udc-dev am: 2bd021f9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23640530



Change-Id: I3eba3c3039b92fce15863c26d9e28a519a305cd8
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents a854195e 2bd021f9
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.keyguard;

import static com.android.systemui.flags.Flags.KEYGUARD_TALKBACK_FIX;

import android.annotation.Nullable;
import android.content.res.ColorStateList;
import android.graphics.Color;
@@ -28,6 +30,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.keyguard.logging.KeyguardLogger;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
@@ -75,6 +78,7 @@ public class KeyguardIndicationRotateTextViewController extends

    // Executor that will show the next message after a delay
    private final DelayableExecutor mExecutor;
    private final FeatureFlags mFeatureFlags;

    @VisibleForTesting
    @Nullable ShowNextIndication mShowNextIndicationRunnable;
@@ -91,7 +95,8 @@ public class KeyguardIndicationRotateTextViewController extends
            KeyguardIndicationTextView view,
            @Main DelayableExecutor executor,
            StatusBarStateController statusBarStateController,
            KeyguardLogger logger
            KeyguardLogger logger,
            FeatureFlags flags
    ) {
        super(view);
        mMaxAlpha = view.getAlpha();
@@ -100,12 +105,14 @@ public class KeyguardIndicationRotateTextViewController extends
                ? mView.getTextColors() : ColorStateList.valueOf(Color.WHITE);
        mStatusBarStateController = statusBarStateController;
        mLogger = logger;
        mFeatureFlags = flags;
        init();
    }

    @Override
    protected void onViewAttached() {
        mStatusBarStateController.addCallback(mStatusBarStateListener);
        mView.setAlwaysAnnounceEnabled(mFeatureFlags.isEnabled(KEYGUARD_TALKBACK_FIX));
    }

    @Override
+7 −2
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.keyguard.ScreenLifecycle;
@@ -224,6 +225,7 @@ public class KeyguardIndicationController {
    // triggered while the device is asleep
    private final AlarmTimeout mHideTransientMessageHandler;
    private final AlarmTimeout mHideBiometricMessageHandler;
    private FeatureFlags mFeatureFlags;

    /**
     * Creates a new KeyguardIndicationController and registers callbacks.
@@ -253,7 +255,8 @@ public class KeyguardIndicationController {
            KeyguardLogger keyguardLogger,
            AlternateBouncerInteractor alternateBouncerInteractor,
            AlarmManager alarmManager,
            UserTracker userTracker
            UserTracker userTracker,
            FeatureFlags flags
    ) {
        mContext = context;
        mBroadcastDispatcher = broadcastDispatcher;
@@ -278,6 +281,7 @@ public class KeyguardIndicationController {
        mScreenLifecycle.addObserver(mScreenObserver);
        mAlternateBouncerInteractor = alternateBouncerInteractor;
        mUserTracker = userTracker;
        mFeatureFlags = flags;

        mFaceAcquiredMessageDeferral = faceHelpMessageDeferral;
        mCoExFaceAcquisitionMsgIdsToShow = new HashSet<>();
@@ -342,7 +346,8 @@ public class KeyguardIndicationController {
                mLockScreenIndicationView,
                mExecutor,
                mStatusBarStateController,
                mKeyguardLogger
                mKeyguardLogger,
                mFeatureFlags
        );
        updateDeviceEntryIndication(false /* animate */);
        updateOrganizedOwnedDevice();
+17 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ public class KeyguardIndicationTextView extends TextView {
    private KeyguardIndication mKeyguardIndicationInfo;

    private Animator mLastAnimator;
    private boolean mAlwaysAnnounceText;

    public KeyguardIndicationTextView(Context context) {
        super(context);
@@ -103,6 +104,19 @@ public class KeyguardIndicationTextView extends TextView {
        switchIndication(text, indication, true, null);
    }

    /**
     * Controls whether the text displayed in the indication area will be announced always.
     */
    public void setAlwaysAnnounceEnabled(boolean enabled) {
        this.mAlwaysAnnounceText = enabled;
        if (mAlwaysAnnounceText) {
            // We will announce the text programmatically anyway.
            setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_NONE);
        } else {
            setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
        }
    }

    /**
     * Updates the text with an optional animation.
     *
@@ -227,6 +241,9 @@ public class KeyguardIndicationTextView extends TextView {
            setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null);
        }
        setText(mMessage);
        if (mAlwaysAnnounceText) {
            announceForAccessibility(mMessage);
        }
    }

    private AnimatorSet getInAnimator() {
+5 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.keyguard;


import static com.android.systemui.flags.Flags.KEYGUARD_TALKBACK_FIX;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_DISCLOSURE;
@@ -42,6 +43,7 @@ import androidx.test.filters.SmallTest;

import com.android.keyguard.logging.KeyguardLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -81,8 +83,10 @@ public class KeyguardIndicationRotateTextViewControllerTest extends SysuiTestCas
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        when(mView.getTextColors()).thenReturn(ColorStateList.valueOf(Color.WHITE));
        FakeFeatureFlags flags = new FakeFeatureFlags();
        flags.set(KEYGUARD_TALKBACK_FIX, true);
        mController = new KeyguardIndicationRotateTextViewController(mView, mExecutor,
                mStatusBarStateController, mLogger);
                mStatusBarStateController, mLogger, flags);
        mController.onViewAttached();

        verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture());
+6 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_TIME
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_AVAILABLE;
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_RECOGNIZED;
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FINGERPRINT_NOT_RECOGNIZED;
import static com.android.systemui.flags.Flags.KEYGUARD_TALKBACK_FIX;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_ALIGNMENT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE;
@@ -99,6 +100,7 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FaceHelpMessageDeferral;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.keyguard.ScreenLifecycle;
@@ -285,6 +287,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
            Looper.prepare();
        }

        FakeFeatureFlags flags = new FakeFeatureFlags();
        flags.set(KEYGUARD_TALKBACK_FIX, true);
        mController = new KeyguardIndicationController(
                mContext,
                mTestableLooper.getLooper(),
@@ -297,7 +301,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
                mFaceHelpMessageDeferral, mock(KeyguardLogger.class),
                mAlternateBouncerInteractor,
                mAlarmManager,
                mUserTracker
                mUserTracker,
                flags
        );
        mController.init();
        mController.setIndicationArea(mIndicationArea);
Loading