diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java index 211aeb9a56..031d409ece 100644 --- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java +++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java @@ -79,13 +79,6 @@ public class QuickstepTestInformationHandler extends TestInformationHandler { return response; } - case TestProtocol.REQUEST_GET_OVERVIEW_TASK_BORDER_WIDTH: { - Resources res = mContext.getResources(); - response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, - res.getDimensionPixelSize(R.dimen.keyboard_quick_switch_border_width)); - return response; - } - case TestProtocol.REQUEST_HAS_TIS: { response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, true); return response; diff --git a/quickstep/src/com/android/quickstep/util/BorderAnimator.java b/quickstep/src/com/android/quickstep/util/BorderAnimator.java index 5964a30be9..011d45c8e7 100644 --- a/quickstep/src/com/android/quickstep/util/BorderAnimator.java +++ b/quickstep/src/com/android/quickstep/util/BorderAnimator.java @@ -28,7 +28,6 @@ import android.view.animation.Interpolator; import androidx.annotation.NonNull; import androidx.annotation.Px; -import androidx.annotation.VisibleForTesting; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.anim.AnimatorListeners; @@ -176,12 +175,6 @@ public final class BorderAnimator { } } - @NonNull - @VisibleForTesting - public AnimatedFloat getBorderAnimationProgress() { - return mBorderAnimationProgress; - } - /** * Callback to update the border bounds when building this animation. */ diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index 607d83a759..fabc3fb3b6 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -70,7 +70,6 @@ import android.widget.Toast; import androidx.annotation.IntDef; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; import com.android.launcher3.DeviceProfile; import com.android.launcher3.LauncherSettings; @@ -412,11 +411,7 @@ public class TaskView extends FrameLayout implements Reusable { private boolean mIsClickableAsLiveTile = true; - @Nullable private BorderAnimator mBorderAnimator; - - private final boolean mCursorHoverStatesEnabled; - - private final boolean mKeyboardFocusHighlightEnabled; + @Nullable private final BorderAnimator mBorderAnimator; public TaskView(Context context) { this(context, null); @@ -439,29 +434,26 @@ public class TaskView extends FrameLayout implements Reusable { mCurrentFullscreenParams = new FullscreenDrawParams(context); mDigitalWellBeingToast = new DigitalWellBeingToast(mActivity, this); - mKeyboardFocusHighlightEnabled = FeatureFlags.ENABLE_KEYBOARD_QUICK_SWITCH.get() + boolean keyboardFocusHighlightEnabled = FeatureFlags.ENABLE_KEYBOARD_QUICK_SWITCH.get() || DesktopTaskView.DESKTOP_MODE_SUPPORTED; - mCursorHoverStatesEnabled = FeatureFlags.ENABLE_CURSOR_HOVER_STATES.get(); - if (mCursorHoverStatesEnabled) { - setOnHoverListener(this::onHover); - } - setWillNotDraw(!mKeyboardFocusHighlightEnabled && !mCursorHoverStatesEnabled); + setWillNotDraw(!keyboardFocusHighlightEnabled); - if (mKeyboardFocusHighlightEnabled || mCursorHoverStatesEnabled) { - TypedArray ta = context.obtainStyledAttributes( - attrs, R.styleable.TaskView, defStyleAttr, defStyleRes); - mBorderAnimator = new BorderAnimator( - /* borderRadiusPx= */ (int) mCurrentFullscreenParams.mCornerRadius, - /* borderColor= */ ta.getColor( - R.styleable.TaskView_borderColor, DEFAULT_BORDER_COLOR), - /* borderAnimationParams= */ new BorderAnimator.SimpleParams( - /* borderWidthPx= */ context.getResources().getDimensionPixelSize( - R.dimen.keyboard_quick_switch_border_width), - /* boundsBuilder= */ this::updateBorderBounds, - /* targetView= */ this)); - ta.recycle(); - } + TypedArray ta = context.obtainStyledAttributes( + attrs, R.styleable.TaskView, defStyleAttr, defStyleRes); + + mBorderAnimator = !keyboardFocusHighlightEnabled + ? null + : new BorderAnimator( + /* borderRadiusPx= */ (int) mCurrentFullscreenParams.mCornerRadius, + /* borderColor= */ ta.getColor( + R.styleable.TaskView_borderColor, DEFAULT_BORDER_COLOR), + /* borderAnimationParams= */ new BorderAnimator.SimpleParams( + /* borderWidthPx= */ context.getResources().getDimensionPixelSize( + R.dimen.keyboard_quick_switch_border_width), + /* boundsBuilder= */ this::updateBorderBounds, + /* targetView= */ this)); + ta.recycle(); } protected void updateBorderBounds(Rect bounds) { @@ -504,12 +496,6 @@ public class TaskView extends FrameLayout implements Reusable { return stubInfo; } - @Nullable - @VisibleForTesting - public BorderAnimator getBorderAnimator() { - return mBorderAnimator; - } - @Override protected void onFinishInflate() { super.onFinishInflate(); @@ -521,22 +507,11 @@ public class TaskView extends FrameLayout implements Reusable { @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); - if (mKeyboardFocusHighlightEnabled) { + if (mBorderAnimator != null) { mBorderAnimator.buildAnimator(gainFocus).start(); } } - @Override - public boolean onInterceptHoverEvent(MotionEvent event) { - if (mCursorHoverStatesEnabled) { - // avoid triggering hover event on child elements which would cause HOVER_EXIT for this - // task view - return true; - } else { - return super.onInterceptHoverEvent(event); - } - } - @Override public void draw(Canvas canvas) { super.draw(canvas); @@ -775,57 +750,6 @@ public class TaskView extends FrameLayout implements Reusable { .log(LAUNCHER_TASK_LAUNCH_TAP); } - private boolean onHover(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_HOVER_MOVE: - if (mKeyboardFocusHighlightEnabled && !isFocused()) { - // existing focus is on another task selected by keyboard, - // cursor then moves inside this task thumbnail and steals the focus - requestFocusAndExitTouchMode(v); - } - return true; - case MotionEvent.ACTION_HOVER_ENTER: - if (mKeyboardFocusHighlightEnabled) { - if (isFocused()) { - // the task is already focused with border, no action is needed - return true; - } else { - requestFocusAndExitTouchMode(v); - } - } else { - // mKeyboardFocusHighlightEnabled is turned off so it only shows hover - // state animation but not steals the focus - mBorderAnimator.buildAnimator(true).start(); - } - return true; - case MotionEvent.ACTION_HOVER_EXIT: - if (mKeyboardFocusHighlightEnabled) { - // clearFocus() does not work here because parent element is not focusable - // so it changes to touch mode to clear focus - v.getViewRootImpl().touchModeChanged(true); - } else { - // just show the disappearing animation but not change the focus when - // mKeyboardFocusHighlightEnabled is off - mBorderAnimator.buildAnimator(false).start(); - } - return true; - default: - return false; - } - } - - private void requestFocusAndExitTouchMode(View v) { - if (isInTouchMode()) { - // Tasks are not focusable in touch mode by default. As hover state would steal focus - // when both mKeyboardFocusHighlightEnabled and mCursorHoverStatesEnabled are on, - // touch mode needs to be set to false when hovering so it can steal focus to current - // task and show border animation as hover state - v.getViewRootImpl().touchModeChanged(false); - } - - requestFocus(); - } - /** * @return {@code true} if user is already in split select mode and this tap was to choose the * second app. {@code false} otherwise diff --git a/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java b/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java index b636d3bc75..788e7de0a3 100644 --- a/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java +++ b/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java @@ -140,10 +140,6 @@ public final class TestProtocol { public static final String REQUEST_GET_GRID_TASK_SIZE_RECT_FOR_TABLET = "get-grid-task-size-rect-for-tablet"; public static final String REQUEST_GET_OVERVIEW_PAGE_SPACING = "get-overview-page-spacing"; - - public static final String REQUEST_GET_OVERVIEW_TASK_BORDER_WIDTH = - "get-overview-task-border-width"; - public static final String REQUEST_ENABLE_ROTATION = "enable_rotation"; public static final String REQUEST_ENABLE_SUGGESTION = "enable-suggestion"; public static final String REQUEST_MODEL_QUEUE_CLEARED = "model-queue-cleared"; diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index a92b1f3835..0aefd68550 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -375,11 +375,6 @@ public final class LauncherInstrumentation { .getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD); } - public int getOverviewTaskBorderWidth() { - return getTestInfo(TestProtocol.REQUEST_GET_OVERVIEW_TASK_BORDER_WIDTH) - .getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD); - } - int getFocusedTaskHeightForTablet() { return getTestInfo(TestProtocol.REQUEST_GET_FOCUSED_TASK_HEIGHT_FOR_TABLET).getInt( TestProtocol.TEST_INFO_RESPONSE_FIELD); diff --git a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java index 1d25614cdd..39b93b4b59 100644 --- a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java +++ b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java @@ -18,13 +18,7 @@ package com.android.launcher3.tapl; import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; -import static com.android.launcher3.tapl.LauncherInstrumentation.CALLBACK_RUN_POINT.CALLBACK_HOVER_ENTER; -import static com.android.launcher3.tapl.LauncherInstrumentation.CALLBACK_RUN_POINT.CALLBACK_HOVER_EXIT; - -import android.graphics.Point; import android.graphics.Rect; -import android.os.SystemClock; -import android.view.MotionEvent; import androidx.annotation.NonNull; import androidx.test.uiautomator.By; @@ -193,35 +187,4 @@ public final class OverviewTask { boolean isTaskSplit() { return mLauncher.findObjectInContainer(mTask.getParent(), "bottomright_snapshot") != null; } - - /** - * Returns this task's visible bounds. - */ - public Rect getVisibleBounds() { - return mTask.getVisibleBounds(); - } - - /** - * Emulate the cursor entering and exiting a hover over this task. - */ - public void hoverCursor() { - try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); - LauncherInstrumentation.Closable c = mLauncher.addContextLayer( - "cursor hover entering task")) { - long downTime = SystemClock.uptimeMillis(); - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_HOVER_ENTER, - new Point(mTask.getVisibleCenter().x, mTask.getVisibleCenter().y), - null); - mLauncher.runCallbackIfActive(CALLBACK_HOVER_ENTER); - - try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( - "cursor hover exiting task")) { - downTime = SystemClock.uptimeMillis(); - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_HOVER_EXIT, - new Point(mTask.getVisibleCenter().x, mTask.getVisibleCenter().y), - null); - mLauncher.runCallbackIfActive(CALLBACK_HOVER_EXIT); - } - } - } }