mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 00:06:47 +00:00
Extend recents button hitbox on tablet
* Extends hitbox when recents is tapped when going from taskbar to overview. * Extended region lasts for 400ms after the animation ends. Fixes: 225885714 Test: Manual, added unit test Change-Id: I8766279c1a5bf6867f8d69ddd3af2aa3565deec2
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package com.android.launcher3.taskbar;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
|
||||
import static com.android.launcher3.Utilities.getDescendantCoordRelativeToAncestor;
|
||||
import static com.android.launcher3.taskbar.LauncherTaskbarUIController.SYSUI_SURFACE_PROGRESS_INDEX;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y;
|
||||
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK;
|
||||
@@ -51,6 +52,7 @@ import android.graphics.Region.Op;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.PaintDrawable;
|
||||
import android.inputmethodservice.InputMethodService;
|
||||
import android.os.Handler;
|
||||
import android.util.Property;
|
||||
import android.view.Gravity;
|
||||
import android.view.MotionEvent;
|
||||
@@ -158,6 +160,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
private BaseDragLayer<TaskbarActivityContext> mSeparateWindowParent; // Initialized in init.
|
||||
private final ViewTreeObserverWrapper.OnComputeInsetsListener mSeparateWindowInsetsComputer =
|
||||
this::onComputeInsetsForSeparateWindow;
|
||||
private final RecentsHitboxExtender mHitboxExtender = new RecentsHitboxExtender();
|
||||
|
||||
public NavbarButtonsViewController(TaskbarActivityContext context, FrameLayout navButtonsView) {
|
||||
mContext = context;
|
||||
@@ -388,8 +391,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
|| (flags & FLAG_KEYGUARD_VISIBLE) != 0,
|
||||
VIEW_TRANSLATE_X, navButtonSize * (isRtl ? -2 : 2), 0));
|
||||
|
||||
|
||||
// home and recents buttons
|
||||
// home button
|
||||
mHomeButton = addButton(R.drawable.ic_sysbar_home, BUTTON_HOME, navContainer,
|
||||
navButtonController, R.id.home);
|
||||
mHomeButtonAlpha = new MultiValueAlpha(mHomeButton, NUM_ALPHA_CHANNELS);
|
||||
@@ -399,8 +401,21 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
ALPHA_INDEX_KEYGUARD_OR_DISABLE),
|
||||
flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 &&
|
||||
(flags & FLAG_DISABLE_HOME) == 0));
|
||||
|
||||
// Recents button
|
||||
View recentsButton = addButton(R.drawable.ic_sysbar_recent, BUTTON_RECENTS,
|
||||
navContainer, navButtonController, R.id.recent_apps);
|
||||
mHitboxExtender.init(recentsButton, mNavButtonsView, mContext.getDeviceProfile(),
|
||||
() -> {
|
||||
float[] recentsCoords = new float[2];
|
||||
getDescendantCoordRelativeToAncestor(recentsButton, mNavButtonsView,
|
||||
recentsCoords, false);
|
||||
return recentsCoords;
|
||||
}, new Handler());
|
||||
recentsButton.setOnClickListener(v -> {
|
||||
navButtonController.onButtonClick(BUTTON_RECENTS);
|
||||
mHitboxExtender.onRecentsButtonClicked();
|
||||
});
|
||||
mPropertyHolders.add(new StatePropertyHolder(recentsButton,
|
||||
flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0 && (flags & FLAG_DISABLE_RECENTS) == 0
|
||||
&& !mContext.isNavBarKidsModeActive()));
|
||||
@@ -504,6 +519,9 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
View button = mAllButtons.get(i);
|
||||
if (button.getVisibility() == View.VISIBLE) {
|
||||
parent.getDescendantRectRelativeToSelf(button, mTempRect);
|
||||
if (mHitboxExtender.extendedHitboxEnabled()) {
|
||||
mTempRect.bottom += mContext.mDeviceProfile.getTaskbarOffsetY();
|
||||
}
|
||||
outRegion.op(mTempRect, Op.UNION);
|
||||
}
|
||||
}
|
||||
@@ -733,6 +751,17 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
public TouchController getTouchController() {
|
||||
return mHitboxExtender;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param alignment 0 -> Taskbar, 1 -> Workspace
|
||||
*/
|
||||
public void updateTaskbarAlignment(float alignment) {
|
||||
mHitboxExtender.onAnimationProgressToOverview(alignment);
|
||||
}
|
||||
|
||||
private class RotationButtonListener implements RotationButton.RotationButtonUpdatesCallback {
|
||||
@Override
|
||||
public void onVisibilityChanged(boolean isVisible) {
|
||||
|
||||
Reference in New Issue
Block a user