Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +8 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -226,6 +227,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. Loading Loading @@ -256,7 +258,8 @@ public class KeyguardIndicationController { AlternateBouncerInteractor alternateBouncerInteractor, AlarmManager alarmManager, UserTracker userTracker, BouncerMessageInteractor bouncerMessageInteractor BouncerMessageInteractor bouncerMessageInteractor, FeatureFlags flags ) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; Loading @@ -282,6 +285,8 @@ public class KeyguardIndicationController { mAlternateBouncerInteractor = alternateBouncerInteractor; mUserTracker = userTracker; mBouncerMessageInteractor = bouncerMessageInteractor; mFeatureFlags = flags; mFaceAcquiredMessageDeferral = faceHelpMessageDeferral; mCoExFaceAcquisitionMsgIdsToShow = new HashSet<>(); int[] msgIds = context.getResources().getIntArray( Loading Loading @@ -345,7 +350,8 @@ public class KeyguardIndicationController { mLockScreenIndicationView, mExecutor, mStatusBarStateController, mKeyguardLogger mKeyguardLogger, mFeatureFlags ); updateDeviceEntryIndication(false /* animate */); updateOrganizedOwnedDevice(); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java +17 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class KeyguardIndicationTextView extends TextView { private KeyguardIndication mKeyguardIndicationInfo; private Animator mLastAnimator; private boolean mAlwaysAnnounceText; public KeyguardIndicationTextView(Context context) { super(context); Loading Loading @@ -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. * Loading Loading @@ -227,6 +241,9 @@ public class KeyguardIndicationTextView extends TextView { setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null); } setText(mMessage); if (mAlwaysAnnounceText) { announceForAccessibility(mMessage); } } private AnimatorSet getInAnimator() { Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewControllerTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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()); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -286,6 +288,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { Looper.prepare(); } FakeFeatureFlags flags = new FakeFeatureFlags(); flags.set(KEYGUARD_TALKBACK_FIX, true); mController = new KeyguardIndicationController( mContext, mTestableLooper.getLooper(), Loading @@ -299,7 +303,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mAlternateBouncerInteractor, mAlarmManager, mUserTracker, mock(BouncerMessageInteractor.class) mock(BouncerMessageInteractor.class), flags ); mController.init(); mController.setIndicationArea(mIndicationArea); Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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(); Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +8 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -226,6 +227,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. Loading Loading @@ -256,7 +258,8 @@ public class KeyguardIndicationController { AlternateBouncerInteractor alternateBouncerInteractor, AlarmManager alarmManager, UserTracker userTracker, BouncerMessageInteractor bouncerMessageInteractor BouncerMessageInteractor bouncerMessageInteractor, FeatureFlags flags ) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; Loading @@ -282,6 +285,8 @@ public class KeyguardIndicationController { mAlternateBouncerInteractor = alternateBouncerInteractor; mUserTracker = userTracker; mBouncerMessageInteractor = bouncerMessageInteractor; mFeatureFlags = flags; mFaceAcquiredMessageDeferral = faceHelpMessageDeferral; mCoExFaceAcquisitionMsgIdsToShow = new HashSet<>(); int[] msgIds = context.getResources().getIntArray( Loading Loading @@ -345,7 +350,8 @@ public class KeyguardIndicationController { mLockScreenIndicationView, mExecutor, mStatusBarStateController, mKeyguardLogger mKeyguardLogger, mFeatureFlags ); updateDeviceEntryIndication(false /* animate */); updateOrganizedOwnedDevice(); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java +17 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class KeyguardIndicationTextView extends TextView { private KeyguardIndication mKeyguardIndicationInfo; private Animator mLastAnimator; private boolean mAlwaysAnnounceText; public KeyguardIndicationTextView(Context context) { super(context); Loading Loading @@ -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. * Loading Loading @@ -227,6 +241,9 @@ public class KeyguardIndicationTextView extends TextView { setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null); } setText(mMessage); if (mAlwaysAnnounceText) { announceForAccessibility(mMessage); } } private AnimatorSet getInAnimator() { Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewControllerTest.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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()); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -286,6 +288,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { Looper.prepare(); } FakeFeatureFlags flags = new FakeFeatureFlags(); flags.set(KEYGUARD_TALKBACK_FIX, true); mController = new KeyguardIndicationController( mContext, mTestableLooper.getLooper(), Loading @@ -299,7 +303,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mAlternateBouncerInteractor, mAlarmManager, mUserTracker, mock(BouncerMessageInteractor.class) mock(BouncerMessageInteractor.class), flags ); mController.init(); mController.setIndicationArea(mIndicationArea); Loading