Merge "Modify Taskbar code to accommodate bubble bar gesture to stash/unstash" into udc-dev
This commit is contained in:
@@ -444,6 +444,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
return mControllers.taskbarDragController;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BubbleControllers getBubbleControllers() {
|
||||
return mControllers.bubbleControllers.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewCache getViewCache() {
|
||||
return mViewCache;
|
||||
@@ -620,8 +625,12 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
mControllers.taskbarForceVisibleImmersiveController.updateSysuiFlags(systemUiStateFlags);
|
||||
mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible(
|
||||
(systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit);
|
||||
|
||||
mControllers.uiController.updateStateForSysuiFlags(systemUiStateFlags);
|
||||
mControllers.bubbleControllers.ifPresent(controllers -> {
|
||||
controllers.bubbleBarController.updateStateForSysuiFlags(systemUiStateFlags);
|
||||
controllers.bubbleStashedHandleViewController.setIsHomeButtonDisabled(
|
||||
mControllers.navbarButtonsViewController.isHomeDisabled());
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -717,7 +726,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
}
|
||||
}
|
||||
mWindowLayoutParams.height = height;
|
||||
mControllers.taskbarInsetsController.onTaskbarWindowHeightOrInsetsChanged();
|
||||
mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
|
||||
mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams);
|
||||
}
|
||||
|
||||
@@ -975,10 +984,19 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
* Called when we want to unstash taskbar when user performs swipes up gesture.
|
||||
*/
|
||||
public void onSwipeToUnstashTaskbar() {
|
||||
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false);
|
||||
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(/* stash= */ false);
|
||||
mControllers.taskbarEduTooltipController.hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when we want to open bubblebar when user performs swipes up gesture.
|
||||
*/
|
||||
public void onSwipeToOpenBubblebar() {
|
||||
mControllers.bubbleControllers.ifPresent(controllers -> {
|
||||
controllers.bubbleStashController.showBubbleBar(/* expandBubbles= */ true);
|
||||
});
|
||||
}
|
||||
|
||||
/** Returns {@code true} if taskbar All Apps is open. */
|
||||
public boolean isTaskbarAllAppsOpen() {
|
||||
return mControllers.taskbarAllAppsController.isOpen();
|
||||
|
||||
@@ -53,13 +53,13 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
private val touchableRegion: Region = Region()
|
||||
private val insetsOwner: IBinder = Binder()
|
||||
private val deviceProfileChangeListener = { _: DeviceProfile ->
|
||||
onTaskbarWindowHeightOrInsetsChanged()
|
||||
onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
|
||||
}
|
||||
private val gestureNavSettingsObserver =
|
||||
GestureNavigationSettingsObserver(
|
||||
context.mainThreadHandler,
|
||||
context,
|
||||
this::onTaskbarWindowHeightOrInsetsChanged
|
||||
this::onTaskbarOrBubblebarWindowHeightOrInsetsChanged
|
||||
)
|
||||
|
||||
// Initialized in init.
|
||||
@@ -69,7 +69,7 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
fun init(controllers: TaskbarControllers) {
|
||||
this.controllers = controllers
|
||||
windowLayoutParams = context.windowLayoutParams
|
||||
onTaskbarWindowHeightOrInsetsChanged()
|
||||
onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
|
||||
|
||||
context.addOnDeviceProfileChangeListener(deviceProfileChangeListener)
|
||||
gestureNavSettingsObserver.registerForCallingUser()
|
||||
@@ -80,7 +80,7 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
gestureNavSettingsObserver.unregister()
|
||||
}
|
||||
|
||||
fun onTaskbarWindowHeightOrInsetsChanged() {
|
||||
fun onTaskbarOrBubblebarWindowHeightOrInsetsChanged() {
|
||||
if (context.isGestureNav) {
|
||||
windowLayoutParams.providedInsets =
|
||||
arrayOf(
|
||||
@@ -102,13 +102,33 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
)
|
||||
}
|
||||
|
||||
val touchableHeight = controllers.taskbarStashController.touchableHeight
|
||||
touchableRegion.set(
|
||||
0,
|
||||
windowLayoutParams.height - touchableHeight,
|
||||
context.deviceProfile.widthPx,
|
||||
windowLayoutParams.height
|
||||
)
|
||||
val taskbarTouchableHeight = controllers.taskbarStashController.touchableHeight
|
||||
val bubblesTouchableHeight =
|
||||
if (controllers.bubbleControllers.isPresent)
|
||||
controllers.bubbleControllers.get().bubbleStashController.touchableHeight
|
||||
else 0
|
||||
val touchableHeight = Math.max(taskbarTouchableHeight, bubblesTouchableHeight)
|
||||
|
||||
if (
|
||||
controllers.bubbleControllers.isPresent &&
|
||||
controllers.bubbleControllers.get().bubbleStashController.isBubblesShowingOnHome
|
||||
) {
|
||||
val iconBounds =
|
||||
controllers.bubbleControllers.get().bubbleBarViewController.bubbleBarBounds
|
||||
touchableRegion.set(
|
||||
iconBounds.left,
|
||||
iconBounds.top,
|
||||
iconBounds.right,
|
||||
iconBounds.bottom
|
||||
)
|
||||
} else {
|
||||
touchableRegion.set(
|
||||
0,
|
||||
windowLayoutParams.height - touchableHeight,
|
||||
context.deviceProfile.widthPx,
|
||||
windowLayoutParams.height
|
||||
)
|
||||
}
|
||||
val contentHeight = controllers.taskbarStashController.contentHeightToReportToApps
|
||||
val tappableHeight = controllers.taskbarStashController.tappableHeightToReportToApps
|
||||
val res = context.resources
|
||||
@@ -197,6 +217,9 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
context.dragLayer,
|
||||
insetsInfo.touchableRegion
|
||||
)
|
||||
val bubbleBarVisible =
|
||||
controllers.bubbleControllers.isPresent &&
|
||||
controllers.bubbleControllers.get().bubbleBarViewController.isBubbleBarVisible()
|
||||
var insetsIsTouchableRegion = true
|
||||
if (context.dragLayer.alpha < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD) {
|
||||
// Let touches pass through us.
|
||||
@@ -217,7 +240,9 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
||||
insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME)
|
||||
insetsIsTouchableRegion = false
|
||||
} else if (
|
||||
controllers.taskbarViewController.areIconsVisible() || context.isNavBarKidsModeActive
|
||||
controllers.taskbarViewController.areIconsVisible() ||
|
||||
context.isNavBarKidsModeActive ||
|
||||
bubbleBarVisible
|
||||
) {
|
||||
// Taskbar has some touchable elements, take over the full taskbar area
|
||||
insetsInfo.touchableRegion.set(touchableRegion)
|
||||
|
||||
@@ -408,6 +408,14 @@ public class TaskbarLauncherStateController {
|
||||
+ ", mLauncherState: " + mLauncherState
|
||||
+ ", toAlignment: " + toAlignment);
|
||||
}
|
||||
mControllers.bubbleControllers.ifPresent(controllers -> {
|
||||
// Show the bubble bar when on launcher home or in overview.
|
||||
boolean onHome = isInLauncher && mLauncherState == LauncherState.NORMAL;
|
||||
boolean onOverview = mLauncherState == LauncherState.OVERVIEW;
|
||||
controllers.bubbleStashController.setBubblesShowingOnHome(onHome);
|
||||
controllers.bubbleStashController.setBubblesShowingOnOverview(onOverview);
|
||||
});
|
||||
|
||||
AnimatorSet animatorSet = new AnimatorSet();
|
||||
|
||||
if (hasAnyFlag(changedFlags, FLAG_LAUNCHER_IN_STATE_TRANSITION)) {
|
||||
@@ -475,7 +483,7 @@ public class TaskbarLauncherStateController {
|
||||
TaskbarStashController stashController =
|
||||
mControllers.taskbarStashController;
|
||||
stashController.updateAndAnimateTransientTaskbar(
|
||||
/* stash */ true, /* duration */ 0);
|
||||
/* stash */ true, /* duration */ 0, true /* bubblesShouldFollow */);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.android.launcher3.taskbar;
|
||||
|
||||
import static com.android.launcher3.taskbar.bubbles.BubbleBarController.BUBBLE_BAR_ENABLED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED;
|
||||
|
||||
@@ -23,6 +24,7 @@ import android.view.animation.Interpolator;
|
||||
import android.view.animation.PathInterpolator;
|
||||
|
||||
import com.android.launcher3.anim.AnimatedFloat;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
import com.android.quickstep.SystemUiProxy;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -63,6 +65,10 @@ public class TaskbarScrimViewController implements TaskbarControllers.LoggableTa
|
||||
* Updates the scrim state based on the flags.
|
||||
*/
|
||||
public void updateStateForSysuiFlags(int stateFlags, boolean skipAnim) {
|
||||
if (BUBBLE_BAR_ENABLED && DisplayController.isTransientTaskbar(mActivity)) {
|
||||
// These scrims aren't used if bubble bar & transient taskbar are active.
|
||||
return;
|
||||
}
|
||||
final boolean bubblesExpanded = (stateFlags & SYSUI_STATE_BUBBLES_EXPANDED) != 0;
|
||||
final boolean manageMenuExpanded =
|
||||
(stateFlags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0;
|
||||
|
||||
@@ -255,14 +255,15 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
||||
private boolean mEnableBlockingTimeoutDuringTests = false;
|
||||
|
||||
// Evaluate whether the handle should be stashed
|
||||
private final IntPredicate mIsStashedPredicate = flags -> {
|
||||
boolean inApp = hasAnyFlag(flags, FLAGS_IN_APP);
|
||||
boolean stashedInApp = hasAnyFlag(flags, FLAGS_STASHED_IN_APP);
|
||||
boolean stashedLauncherState = hasAnyFlag(flags, FLAG_IN_STASHED_LAUNCHER_STATE);
|
||||
boolean forceStashed = hasAnyFlag(flags, FLAGS_FORCE_STASHED);
|
||||
return (inApp && stashedInApp) || (!inApp && stashedLauncherState) || forceStashed;
|
||||
};
|
||||
private final StatePropertyHolder mStatePropertyHolder = new StatePropertyHolder(
|
||||
flags -> {
|
||||
boolean inApp = hasAnyFlag(flags, FLAGS_IN_APP);
|
||||
boolean stashedInApp = hasAnyFlag(flags, FLAGS_STASHED_IN_APP);
|
||||
boolean stashedLauncherState = hasAnyFlag(flags, FLAG_IN_STASHED_LAUNCHER_STATE);
|
||||
boolean forceStashed = hasAnyFlag(flags, FLAGS_FORCE_STASHED);
|
||||
return (inApp && stashedInApp) || (!inApp && stashedLauncherState) || forceStashed;
|
||||
});
|
||||
mIsStashedPredicate);
|
||||
|
||||
private boolean mIsTaskbarSystemActionRegistered = false;
|
||||
private TaskbarSharedState mTaskbarSharedState;
|
||||
@@ -502,15 +503,29 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
||||
|
||||
/**
|
||||
* Stash or unstashes the transient taskbar, using the default TASKBAR_STASH_DURATION.
|
||||
* If bubble bar exists, it will match taskbars stashing behavior.
|
||||
*/
|
||||
public void updateAndAnimateTransientTaskbar(boolean stash) {
|
||||
updateAndAnimateTransientTaskbar(stash, TASKBAR_STASH_DURATION);
|
||||
updateAndAnimateTransientTaskbar(stash, TASKBAR_STASH_DURATION,
|
||||
/* shouldBubblesFollow= */ true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stash or unstashes the transient taskbar, using the default TASKBAR_STASH_DURATION.
|
||||
* If bubble bar exists, it will match taskbars stashing behavior.
|
||||
*/
|
||||
public void updateAndAnimateTransientTaskbar(boolean stash, boolean shouldBubblesFollow) {
|
||||
updateAndAnimateTransientTaskbar(stash, TASKBAR_STASH_DURATION, shouldBubblesFollow);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stash or unstashes the transient taskbar.
|
||||
* @param stash whether transient taskbar should be stashed.
|
||||
* @param duration how long the duration of the stash should take.
|
||||
* @param shouldBubblesFollow whether bubbles should match taskbars behavior.
|
||||
*/
|
||||
public void updateAndAnimateTransientTaskbar(boolean stash, long duration) {
|
||||
public void updateAndAnimateTransientTaskbar(boolean stash, long duration,
|
||||
boolean shouldBubblesFollow) {
|
||||
if (!DisplayController.isTransientTaskbar(mActivity)) {
|
||||
return;
|
||||
}
|
||||
@@ -526,6 +541,34 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
||||
updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, stash);
|
||||
applyState();
|
||||
}
|
||||
|
||||
mControllers.bubbleControllers.ifPresent(controllers -> {
|
||||
if (shouldBubblesFollow) {
|
||||
final boolean willStash = mIsStashedPredicate.test(mState);
|
||||
if (willStash != controllers.bubbleStashController.isStashed()) {
|
||||
// Typically bubbles gets stashed / unstashed along with Taskbar, however, if
|
||||
// taskbar is becoming stashed because bubbles is being expanded, we don't want
|
||||
// to stash bubbles.
|
||||
if (willStash) {
|
||||
controllers.bubbleStashController.stashBubbleBar();
|
||||
} else {
|
||||
controllers.bubbleStashController.showBubbleBar(false /* expandBubbles */);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Stashes transient taskbar after it has timed out.
|
||||
*/
|
||||
private void updateAndAnimateTransientTaskbarForTimeout() {
|
||||
// If bubbles are expanded we shouldn't stash them when taskbar is hidden
|
||||
// for the timeout.
|
||||
boolean bubbleBarExpanded = mControllers.bubbleControllers.isPresent()
|
||||
&& mControllers.bubbleControllers.get().bubbleBarViewController.isExpanded();
|
||||
updateAndAnimateTransientTaskbar(/* stash= */ true,
|
||||
/* shouldBubblesFollow= */ !bubbleBarExpanded);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -880,7 +923,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
||||
private void onIsStashedChanged(boolean isStashed) {
|
||||
mControllers.runAfterInit(() -> {
|
||||
mControllers.stashedHandleViewController.onIsStashedChanged(isStashed);
|
||||
mControllers.taskbarInsetsController.onTaskbarWindowHeightOrInsetsChanged();
|
||||
mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1127,7 +1170,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
||||
if (mControllers.taskbarAutohideSuspendController.isSuspended()) {
|
||||
return;
|
||||
}
|
||||
updateAndAnimateTransientTaskbar(true);
|
||||
updateAndAnimateTransientTaskbarForTimeout();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -108,7 +108,18 @@ class TaskbarStashViaTouchController(val controllers: TaskbarControllers) : Touc
|
||||
}
|
||||
|
||||
override fun onControllerInterceptTouchEvent(ev: MotionEvent): Boolean {
|
||||
if (!enabled || controllers.taskbarStashController.isStashed) {
|
||||
val bubbleControllers = controllers.bubbleControllers.orElse(null)
|
||||
if (!enabled || bubbleControllers == null) {
|
||||
return false
|
||||
}
|
||||
if (bubbleControllers.bubbleBarViewController.isExpanded) {
|
||||
// WMShell / bubbles will handle collapsing
|
||||
return false
|
||||
}
|
||||
if (
|
||||
controllers.taskbarStashController.isStashed &&
|
||||
bubbleControllers.bubbleStashController.isStashed
|
||||
) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -122,7 +133,12 @@ class TaskbarStashViaTouchController(val controllers: TaskbarControllers) : Touc
|
||||
return true
|
||||
}
|
||||
} else if (ev.action == MotionEvent.ACTION_DOWN) {
|
||||
if (screenCoordinatesEv.y < gestureHeightYThreshold) {
|
||||
val isDownOnBubbleBar =
|
||||
(bubbleControllers != null &&
|
||||
bubbleControllers.bubbleBarViewController.isEventOverAnyItem(
|
||||
screenCoordinatesEv
|
||||
))
|
||||
if (!isDownOnBubbleBar && screenCoordinatesEv.y < gestureHeightYThreshold) {
|
||||
controllers.taskbarStashController.updateAndAnimateTransientTaskbar(true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,6 +92,10 @@ public class TaskbarTranslationController implements TaskbarControllers.Loggable
|
||||
mControllers.stashedHandleViewController.setTranslationYForSwipe(transY);
|
||||
mControllers.taskbarViewController.setTranslationYForSwipe(transY);
|
||||
mControllers.taskbarDragLayerController.setTranslationYForSwipe(transY);
|
||||
mControllers.bubbleControllers.ifPresent(controllers -> {
|
||||
controllers.bubbleBarViewController.setTranslationYForSwipe(transY);
|
||||
controllers.bubbleStashedHandleViewController.setTranslationYForSwipe(transY);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,8 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.anim.AnimatedFloat;
|
||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||
import com.android.launcher3.taskbar.TaskbarControllers;
|
||||
import com.android.launcher3.taskbar.TaskbarInsetsController;
|
||||
import com.android.launcher3.taskbar.TaskbarStashController;
|
||||
import com.android.launcher3.util.MultiPropertyFactory;
|
||||
import com.android.launcher3.util.MultiValueAlpha;
|
||||
import com.android.quickstep.SystemUiProxy;
|
||||
@@ -51,6 +53,8 @@ public class BubbleBarViewController {
|
||||
// Initialized in init.
|
||||
private BubbleStashController mBubbleStashController;
|
||||
private BubbleBarController mBubbleBarController;
|
||||
private TaskbarStashController mTaskbarStashController;
|
||||
private TaskbarInsetsController mTaskbarInsetsController;
|
||||
private View.OnClickListener mBubbleClickListener;
|
||||
private View.OnClickListener mBubbleBarClickListener;
|
||||
|
||||
@@ -80,6 +84,8 @@ public class BubbleBarViewController {
|
||||
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
||||
mBubbleStashController = bubbleControllers.bubbleStashController;
|
||||
mBubbleBarController = bubbleControllers.bubbleBarController;
|
||||
mTaskbarStashController = controllers.taskbarStashController;
|
||||
mTaskbarInsetsController = controllers.taskbarInsetsController;
|
||||
|
||||
mActivity.addOnDeviceProfileChangeListener(dp ->
|
||||
mBarView.getLayoutParams().height = mActivity.getDeviceProfile().taskbarHeight
|
||||
@@ -89,7 +95,9 @@ public class BubbleBarViewController {
|
||||
mBubbleClickListener = v -> onBubbleClicked(v);
|
||||
mBubbleBarClickListener = v -> setExpanded(true);
|
||||
mBarView.setOnClickListener(mBubbleBarClickListener);
|
||||
// TODO: when barView layout changes tell taskbarInsetsController the insets have changed.
|
||||
mBarView.addOnLayoutChangeListener((view, i, i1, i2, i3, i4, i5, i6, i7) ->
|
||||
mTaskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
|
||||
);
|
||||
}
|
||||
|
||||
private void onBubbleClicked(View v) {
|
||||
@@ -283,7 +291,8 @@ public class BubbleBarViewController {
|
||||
} else {
|
||||
Log.w(TAG, "trying to expand bubbles when there isn't one selected");
|
||||
}
|
||||
// TODO: Tell taskbar stash controller to stash without bubbles following
|
||||
mTaskbarStashController.updateAndAnimateTransientTaskbar(true /* stash */,
|
||||
false /* shouldBubblesFollow */);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.android.launcher3.anim.AnimatedFloat;
|
||||
import com.android.launcher3.taskbar.StashedHandleViewController;
|
||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||
import com.android.launcher3.taskbar.TaskbarControllers;
|
||||
import com.android.launcher3.taskbar.TaskbarInsetsController;
|
||||
import com.android.launcher3.taskbar.TaskbarStashController;
|
||||
import com.android.launcher3.util.MultiPropertyFactory;
|
||||
|
||||
@@ -50,6 +51,7 @@ public class BubbleStashController {
|
||||
|
||||
// Initialized in init.
|
||||
private TaskbarControllers mControllers;
|
||||
private TaskbarInsetsController mTaskbarInsetsController;
|
||||
private BubbleBarViewController mBarViewController;
|
||||
private BubbleStashedHandleViewController mHandleViewController;
|
||||
private TaskbarStashController mTaskbarStashController;
|
||||
@@ -77,6 +79,7 @@ public class BubbleStashController {
|
||||
|
||||
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
||||
mControllers = controllers;
|
||||
mTaskbarInsetsController = controllers.taskbarInsetsController;
|
||||
mBarViewController = bubbleControllers.bubbleBarViewController;
|
||||
mHandleViewController = bubbleControllers.bubbleStashedHandleViewController;
|
||||
mTaskbarStashController = controllers.taskbarStashController;
|
||||
@@ -271,7 +274,7 @@ public class BubbleStashController {
|
||||
private void onIsStashedChanged() {
|
||||
mControllers.runAfterInit(() -> {
|
||||
mHandleViewController.onIsStashedChanged();
|
||||
// TODO: when stash changes tell taskbarInsetsController the insets have changed.
|
||||
mTaskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+24
-5
@@ -37,6 +37,7 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||
import com.android.launcher3.taskbar.TaskbarTranslationController.TransitionCallback;
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleControllers;
|
||||
import com.android.launcher3.touch.OverScroll;
|
||||
import com.android.launcher3.util.DisplayController;
|
||||
import com.android.quickstep.InputConsumer;
|
||||
@@ -62,6 +63,7 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
||||
private final int mTaskbarNavThresholdY;
|
||||
private final boolean mIsTaskbarAllAppsOpen;
|
||||
private boolean mHasPassedTaskbarNavThreshold;
|
||||
private boolean mIsInBubbleBarArea;
|
||||
|
||||
private final PointF mDownPos = new PointF();
|
||||
private final PointF mLastPos = new PointF();
|
||||
@@ -135,7 +137,7 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
||||
mHasPassedTaskbarNavThreshold = false;
|
||||
mTaskbarActivityContext.setAutohideSuspendFlag(
|
||||
FLAG_AUTOHIDE_SUSPEND_TOUCHING, true);
|
||||
if (isInArea(x)) {
|
||||
if (isInTaskbarArea(x)) {
|
||||
if (!mIsTransientTaskbar) {
|
||||
mLongPressDownX = x;
|
||||
mLongPressDownY = y;
|
||||
@@ -144,10 +146,12 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
||||
mCanceledUnstashHint = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (mTransitionCallback != null && !mIsTaskbarAllAppsOpen) {
|
||||
mTransitionCallback.onActionDown();
|
||||
}
|
||||
if (mIsTransientTaskbar && isInBubbleBarArea(x)) {
|
||||
mIsInBubbleBarArea = true;
|
||||
}
|
||||
break;
|
||||
case MotionEvent.ACTION_POINTER_UP:
|
||||
int ptrIdx = ev.getActionIndex();
|
||||
@@ -184,7 +188,11 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
||||
|
||||
if (!mHasPassedTaskbarNavThreshold && passedTaskbarNavThreshold) {
|
||||
mHasPassedTaskbarNavThreshold = true;
|
||||
mTaskbarActivityContext.onSwipeToUnstashTaskbar();
|
||||
if (mIsInBubbleBarArea) {
|
||||
mTaskbarActivityContext.onSwipeToOpenBubblebar();
|
||||
} else {
|
||||
mTaskbarActivityContext.onSwipeToUnstashTaskbar();
|
||||
}
|
||||
}
|
||||
|
||||
if (dY < 0) {
|
||||
@@ -207,21 +215,32 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
||||
mTransitionCallback.onActionEnd();
|
||||
}
|
||||
mHasPassedTaskbarNavThreshold = false;
|
||||
mIsInBubbleBarArea = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isInArea(float x) {
|
||||
private boolean isInTaskbarArea(float x) {
|
||||
float areaFromMiddle = mUnstashArea / 2.0f;
|
||||
float distFromMiddle = Math.abs(mScreenWidth / 2.0f - x);
|
||||
return distFromMiddle < areaFromMiddle;
|
||||
}
|
||||
|
||||
private boolean isInBubbleBarArea(float x) {
|
||||
if (mTaskbarActivityContext != null && mIsTransientTaskbar) {
|
||||
BubbleControllers controllers = mTaskbarActivityContext.getBubbleControllers();
|
||||
if (controllers == null) return false;
|
||||
Rect bubbleBarBounds = controllers.bubbleBarViewController.getBubbleBarBounds();
|
||||
return x >= bubbleBarBounds.left && x <= bubbleBarBounds.right;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void onLongPressDetected(MotionEvent motionEvent) {
|
||||
if (mTaskbarActivityContext != null
|
||||
&& isInArea(motionEvent.getRawX())
|
||||
&& isInTaskbarArea(motionEvent.getRawX())
|
||||
&& !mIsTransientTaskbar) {
|
||||
boolean taskBarPressed = mTaskbarActivityContext.onLongPressToUnstashTaskbar();
|
||||
if (taskBarPressed) {
|
||||
|
||||
Reference in New Issue
Block a user