Loading packages/SystemUI/aconfig/accessibility.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,16 @@ flag { bug: "281140482" } flag { name: "floating_menu_remove_fullscreen_taps" namespace: "accessibility" description: "Stops MenuViewLayer from taking some inputs by making it unclickable." bug: "411287116" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "redesign_magnification_window_size" namespace: "accessibility" Loading packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java +3 −2 Original line number Diff line number Diff line Loading @@ -515,8 +515,9 @@ class MenuAnimationController { mHandler.removeCallbacksAndMessages(/* token= */ null); } void startTuckedAnimationPreview() { Animation startTuckedAnimationPreview() { fadeInNowIfEnabled(); mMenuView.clearAnimation(); final float toXValue = isOnLeftSide() ? -ANIMATION_TO_X_VALUE Loading @@ -529,10 +530,10 @@ class MenuAnimationController { animation.setDuration(ANIMATION_DURATION_MS); animation.setRepeatMode(Animation.REVERSE); animation.setInterpolator(new OvershootInterpolator()); animation.setRepeatCount(Animation.INFINITE); animation.setStartOffset(ANIMATION_START_OFFSET_MS); mMenuView.startAnimation(animation); return animation; } private Handler createUiHandler() { Loading packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java +49 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowMetrics; import android.view.accessibility.AccessibilityManager; import android.view.animation.Animation; import android.widget.FrameLayout; import android.widget.TextView; Loading Loading @@ -134,6 +135,8 @@ class MenuViewLayer extends FrameLayout implements private final Rect mImeInsetsRect = new Rect(); private boolean mIsMigrationTooltipShowing; private boolean mShouldShowDockTooltip; private boolean mShouldLoopDockDemo; private boolean mIsDockDemoDocked; private boolean mIsNotificationShown; private Optional<MenuEduTooltipView> mEduTooltipView = Optional.empty(); private BroadcastReceiver mNotificationActionReceiver; Loading Loading @@ -179,6 +182,29 @@ class MenuViewLayer extends FrameLayout implements } }; Animation.AnimationListener mTuckDemoListener = new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { mIsDockDemoDocked = false; } @Override public void onAnimationEnd(Animation animation) { mEduTooltipView.ifPresent(view -> removeTooltip(view)); } @Override public void onAnimationRepeat(Animation animation) { if (Flags.floatingMenuRemoveFullscreenTaps()) { mIsDockDemoDocked = !mIsDockDemoDocked; // Only stop animation once MenuView has looped back to its normal position. if (!mShouldLoopDockDemo && !mIsDockDemoDocked) { mMenuView.clearAnimation(); } } } }; MenuViewLayer(@NonNull Context context, WindowManager windowManager, AccessibilityManager accessibilityManager, MenuViewModel menuViewModel, Loading Loading @@ -331,7 +357,9 @@ class MenuViewLayer extends FrameLayout implements super.onAttachedToWindow(); mMenuView.show(); if (!Flags.floatingMenuRemoveFullscreenTaps()) { setOnClickListener(this); } setOnApplyWindowInsetsListener((view, insets) -> onWindowInsetsApplied(insets)); getViewTreeObserver().addOnComputeInternalInsetsListener(this); mMenuViewModel.getDockTooltipVisibilityData().observeForever(mDockTooltipObserver); Loading Loading @@ -435,7 +463,11 @@ class MenuViewLayer extends FrameLayout implements getContext().getText(R.string.accessibility_floating_button_docking_tooltip), TooltipType.DOCK)); mMenuAnimationController.startTuckedAnimationPreview(); mShouldLoopDockDemo = true; dispatchTooltipTuckAnimation(); mHandler.postDelayed(() -> mShouldLoopDockDemo = false, mAccessibilityManager.getRecommendedTimeoutMillis( SHOW_MESSAGE_DELAY_MS, AccessibilityManager.FLAG_CONTENT_TEXT)); } if (!mMenuView.isMoveToTucked()) { Loading @@ -444,6 +476,14 @@ class MenuViewLayer extends FrameLayout implements mMenuView.onArrivalAtPosition(false); } void dispatchTooltipTuckAnimation() { Animation animation = mMenuAnimationController.startTuckedAnimationPreview(); if (Flags.floatingMenuRemoveFullscreenTaps()) { animation.setAnimationListener(mTuckDemoListener); } } void dispatchAccessibilityAction(int id) { if (id == R.id.action_remove_menu) { if (Flags.floatingMenuDragToHide()) { Loading Loading @@ -520,6 +560,9 @@ class MenuViewLayer extends FrameLayout implements mMenuListViewTouchHandler.setOnActionDownEndListener( () -> mEduTooltipView.ifPresent(this::removeTooltip)); if (Flags.floatingMenuRemoveFullscreenTaps()) { setOnClickListener(this); } } private void removeTooltip(View tooltipView) { Loading @@ -538,6 +581,10 @@ class MenuViewLayer extends FrameLayout implements mMenuListViewTouchHandler.setOnActionDownEndListener(null); mEduTooltipView = Optional.empty(); if (Flags.floatingMenuRemoveFullscreenTaps()) { setClickable(false); } } @VisibleForTesting Loading Loading
packages/SystemUI/aconfig/accessibility.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,16 @@ flag { bug: "281140482" } flag { name: "floating_menu_remove_fullscreen_taps" namespace: "accessibility" description: "Stops MenuViewLayer from taking some inputs by making it unclickable." bug: "411287116" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "redesign_magnification_window_size" namespace: "accessibility" Loading
packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuAnimationController.java +3 −2 Original line number Diff line number Diff line Loading @@ -515,8 +515,9 @@ class MenuAnimationController { mHandler.removeCallbacksAndMessages(/* token= */ null); } void startTuckedAnimationPreview() { Animation startTuckedAnimationPreview() { fadeInNowIfEnabled(); mMenuView.clearAnimation(); final float toXValue = isOnLeftSide() ? -ANIMATION_TO_X_VALUE Loading @@ -529,10 +530,10 @@ class MenuAnimationController { animation.setDuration(ANIMATION_DURATION_MS); animation.setRepeatMode(Animation.REVERSE); animation.setInterpolator(new OvershootInterpolator()); animation.setRepeatCount(Animation.INFINITE); animation.setStartOffset(ANIMATION_START_OFFSET_MS); mMenuView.startAnimation(animation); return animation; } private Handler createUiHandler() { Loading
packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java +49 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowMetrics; import android.view.accessibility.AccessibilityManager; import android.view.animation.Animation; import android.widget.FrameLayout; import android.widget.TextView; Loading Loading @@ -134,6 +135,8 @@ class MenuViewLayer extends FrameLayout implements private final Rect mImeInsetsRect = new Rect(); private boolean mIsMigrationTooltipShowing; private boolean mShouldShowDockTooltip; private boolean mShouldLoopDockDemo; private boolean mIsDockDemoDocked; private boolean mIsNotificationShown; private Optional<MenuEduTooltipView> mEduTooltipView = Optional.empty(); private BroadcastReceiver mNotificationActionReceiver; Loading Loading @@ -179,6 +182,29 @@ class MenuViewLayer extends FrameLayout implements } }; Animation.AnimationListener mTuckDemoListener = new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { mIsDockDemoDocked = false; } @Override public void onAnimationEnd(Animation animation) { mEduTooltipView.ifPresent(view -> removeTooltip(view)); } @Override public void onAnimationRepeat(Animation animation) { if (Flags.floatingMenuRemoveFullscreenTaps()) { mIsDockDemoDocked = !mIsDockDemoDocked; // Only stop animation once MenuView has looped back to its normal position. if (!mShouldLoopDockDemo && !mIsDockDemoDocked) { mMenuView.clearAnimation(); } } } }; MenuViewLayer(@NonNull Context context, WindowManager windowManager, AccessibilityManager accessibilityManager, MenuViewModel menuViewModel, Loading Loading @@ -331,7 +357,9 @@ class MenuViewLayer extends FrameLayout implements super.onAttachedToWindow(); mMenuView.show(); if (!Flags.floatingMenuRemoveFullscreenTaps()) { setOnClickListener(this); } setOnApplyWindowInsetsListener((view, insets) -> onWindowInsetsApplied(insets)); getViewTreeObserver().addOnComputeInternalInsetsListener(this); mMenuViewModel.getDockTooltipVisibilityData().observeForever(mDockTooltipObserver); Loading Loading @@ -435,7 +463,11 @@ class MenuViewLayer extends FrameLayout implements getContext().getText(R.string.accessibility_floating_button_docking_tooltip), TooltipType.DOCK)); mMenuAnimationController.startTuckedAnimationPreview(); mShouldLoopDockDemo = true; dispatchTooltipTuckAnimation(); mHandler.postDelayed(() -> mShouldLoopDockDemo = false, mAccessibilityManager.getRecommendedTimeoutMillis( SHOW_MESSAGE_DELAY_MS, AccessibilityManager.FLAG_CONTENT_TEXT)); } if (!mMenuView.isMoveToTucked()) { Loading @@ -444,6 +476,14 @@ class MenuViewLayer extends FrameLayout implements mMenuView.onArrivalAtPosition(false); } void dispatchTooltipTuckAnimation() { Animation animation = mMenuAnimationController.startTuckedAnimationPreview(); if (Flags.floatingMenuRemoveFullscreenTaps()) { animation.setAnimationListener(mTuckDemoListener); } } void dispatchAccessibilityAction(int id) { if (id == R.id.action_remove_menu) { if (Flags.floatingMenuDragToHide()) { Loading Loading @@ -520,6 +560,9 @@ class MenuViewLayer extends FrameLayout implements mMenuListViewTouchHandler.setOnActionDownEndListener( () -> mEduTooltipView.ifPresent(this::removeTooltip)); if (Flags.floatingMenuRemoveFullscreenTaps()) { setOnClickListener(this); } } private void removeTooltip(View tooltipView) { Loading @@ -538,6 +581,10 @@ class MenuViewLayer extends FrameLayout implements mMenuListViewTouchHandler.setOnActionDownEndListener(null); mEduTooltipView = Optional.empty(); if (Flags.floatingMenuRemoveFullscreenTaps()) { setClickable(false); } } @VisibleForTesting Loading