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

Commit 2bd021f9 authored by Chandru S's avatar Chandru S Committed by Android (Google) Code Review
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
parents 66204956 381c6361
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.systemui.keyguard;
package com.android.systemui.keyguard;


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

import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.res.ColorStateList;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Color;
@@ -28,6 +30,7 @@ import androidx.annotation.VisibleForTesting;
import com.android.keyguard.logging.KeyguardLogger;
import com.android.keyguard.logging.KeyguardLogger;
import com.android.systemui.Dumpable;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.KeyguardIndicationController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
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
    // Executor that will show the next message after a delay
    private final DelayableExecutor mExecutor;
    private final DelayableExecutor mExecutor;
    private final FeatureFlags mFeatureFlags;


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


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


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


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


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


    private Animator mLastAnimator;
    private Animator mLastAnimator;
    private boolean mAlwaysAnnounceText;


    public KeyguardIndicationTextView(Context context) {
    public KeyguardIndicationTextView(Context context) {
        super(context);
        super(context);
@@ -103,6 +104,19 @@ public class KeyguardIndicationTextView extends TextView {
        switchIndication(text, indication, true, null);
        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.
     * Updates the text with an optional animation.
     *
     *
@@ -227,6 +241,9 @@ public class KeyguardIndicationTextView extends TextView {
            setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null);
            setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null);
        }
        }
        setText(mMessage);
        setText(mMessage);
        if (mAlwaysAnnounceText) {
            announceForAccessibility(mMessage);
        }
    }
    }


    private AnimatorSet getInAnimator() {
    private AnimatorSet getInAnimator() {
+5 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.keyguard;
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_BATTERY;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_DISCLOSURE;
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.keyguard.logging.KeyguardLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.concurrency.DelayableExecutor;
@@ -81,8 +83,10 @@ public class KeyguardIndicationRotateTextViewControllerTest extends SysuiTestCas
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        when(mView.getTextColors()).thenReturn(ColorStateList.valueOf(Color.WHITE));
        when(mView.getTextColors()).thenReturn(ColorStateList.valueOf(Color.WHITE));
        FakeFeatureFlags flags = new FakeFeatureFlags();
        flags.set(KEYGUARD_TALKBACK_FIX, true);
        mController = new KeyguardIndicationRotateTextViewController(mView, mExecutor,
        mController = new KeyguardIndicationRotateTextViewController(mView, mExecutor,
                mStatusBarStateController, mLogger);
                mStatusBarStateController, mLogger, flags);
        mController.onViewAttached();
        mController.onViewAttached();


        verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture());
        verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture());
+6 −1
Original line number Original line 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_AVAILABLE;
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_RECOGNIZED;
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.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_ALIGNMENT;
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY;
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_BIOMETRIC_MESSAGE;
@@ -99,6 +100,7 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FaceHelpMessageDeferral;
import com.android.systemui.biometrics.FaceHelpMessageDeferral;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndication;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController;
import com.android.systemui.keyguard.ScreenLifecycle;
import com.android.systemui.keyguard.ScreenLifecycle;
@@ -285,6 +287,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
            Looper.prepare();
            Looper.prepare();
        }
        }


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