Merge "Modify Taskbar code to accommodate bubble bar gesture to stash/unstash" into udc-dev am: 3291bfecf2
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/22534248 Change-Id: Id30ee20f29b5a2ae1a53780d39b157bffafb87da Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -444,6 +444,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
|||||||
return mControllers.taskbarDragController;
|
return mControllers.taskbarDragController;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public BubbleControllers getBubbleControllers() {
|
||||||
|
return mControllers.bubbleControllers.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViewCache getViewCache() {
|
public ViewCache getViewCache() {
|
||||||
return mViewCache;
|
return mViewCache;
|
||||||
@@ -620,8 +625,12 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
|||||||
mControllers.taskbarForceVisibleImmersiveController.updateSysuiFlags(systemUiStateFlags);
|
mControllers.taskbarForceVisibleImmersiveController.updateSysuiFlags(systemUiStateFlags);
|
||||||
mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible(
|
mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible(
|
||||||
(systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit);
|
(systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit);
|
||||||
|
|
||||||
mControllers.uiController.updateStateForSysuiFlags(systemUiStateFlags);
|
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;
|
mWindowLayoutParams.height = height;
|
||||||
mControllers.taskbarInsetsController.onTaskbarWindowHeightOrInsetsChanged();
|
mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
|
||||||
mWindowManager.updateViewLayout(mDragLayer, mWindowLayoutParams);
|
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.
|
* Called when we want to unstash taskbar when user performs swipes up gesture.
|
||||||
*/
|
*/
|
||||||
public void onSwipeToUnstashTaskbar() {
|
public void onSwipeToUnstashTaskbar() {
|
||||||
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false);
|
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(/* stash= */ false);
|
||||||
mControllers.taskbarEduTooltipController.hide();
|
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. */
|
/** Returns {@code true} if taskbar All Apps is open. */
|
||||||
public boolean isTaskbarAllAppsOpen() {
|
public boolean isTaskbarAllAppsOpen() {
|
||||||
return mControllers.taskbarAllAppsController.isOpen();
|
return mControllers.taskbarAllAppsController.isOpen();
|
||||||
|
|||||||
@@ -53,13 +53,13 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
private val touchableRegion: Region = Region()
|
private val touchableRegion: Region = Region()
|
||||||
private val insetsOwner: IBinder = Binder()
|
private val insetsOwner: IBinder = Binder()
|
||||||
private val deviceProfileChangeListener = { _: DeviceProfile ->
|
private val deviceProfileChangeListener = { _: DeviceProfile ->
|
||||||
onTaskbarWindowHeightOrInsetsChanged()
|
onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
|
||||||
}
|
}
|
||||||
private val gestureNavSettingsObserver =
|
private val gestureNavSettingsObserver =
|
||||||
GestureNavigationSettingsObserver(
|
GestureNavigationSettingsObserver(
|
||||||
context.mainThreadHandler,
|
context.mainThreadHandler,
|
||||||
context,
|
context,
|
||||||
this::onTaskbarWindowHeightOrInsetsChanged
|
this::onTaskbarOrBubblebarWindowHeightOrInsetsChanged
|
||||||
)
|
)
|
||||||
|
|
||||||
// Initialized in init.
|
// Initialized in init.
|
||||||
@@ -69,7 +69,7 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
fun init(controllers: TaskbarControllers) {
|
fun init(controllers: TaskbarControllers) {
|
||||||
this.controllers = controllers
|
this.controllers = controllers
|
||||||
windowLayoutParams = context.windowLayoutParams
|
windowLayoutParams = context.windowLayoutParams
|
||||||
onTaskbarWindowHeightOrInsetsChanged()
|
onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
|
||||||
|
|
||||||
context.addOnDeviceProfileChangeListener(deviceProfileChangeListener)
|
context.addOnDeviceProfileChangeListener(deviceProfileChangeListener)
|
||||||
gestureNavSettingsObserver.registerForCallingUser()
|
gestureNavSettingsObserver.registerForCallingUser()
|
||||||
@@ -80,7 +80,7 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
gestureNavSettingsObserver.unregister()
|
gestureNavSettingsObserver.unregister()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onTaskbarWindowHeightOrInsetsChanged() {
|
fun onTaskbarOrBubblebarWindowHeightOrInsetsChanged() {
|
||||||
if (context.isGestureNav) {
|
if (context.isGestureNav) {
|
||||||
windowLayoutParams.providedInsets =
|
windowLayoutParams.providedInsets =
|
||||||
arrayOf(
|
arrayOf(
|
||||||
@@ -102,13 +102,33 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val touchableHeight = controllers.taskbarStashController.touchableHeight
|
val taskbarTouchableHeight = controllers.taskbarStashController.touchableHeight
|
||||||
touchableRegion.set(
|
val bubblesTouchableHeight =
|
||||||
0,
|
if (controllers.bubbleControllers.isPresent)
|
||||||
windowLayoutParams.height - touchableHeight,
|
controllers.bubbleControllers.get().bubbleStashController.touchableHeight
|
||||||
context.deviceProfile.widthPx,
|
else 0
|
||||||
windowLayoutParams.height
|
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 contentHeight = controllers.taskbarStashController.contentHeightToReportToApps
|
||||||
val tappableHeight = controllers.taskbarStashController.tappableHeightToReportToApps
|
val tappableHeight = controllers.taskbarStashController.tappableHeightToReportToApps
|
||||||
val res = context.resources
|
val res = context.resources
|
||||||
@@ -197,6 +217,9 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
context.dragLayer,
|
context.dragLayer,
|
||||||
insetsInfo.touchableRegion
|
insetsInfo.touchableRegion
|
||||||
)
|
)
|
||||||
|
val bubbleBarVisible =
|
||||||
|
controllers.bubbleControllers.isPresent &&
|
||||||
|
controllers.bubbleControllers.get().bubbleBarViewController.isBubbleBarVisible()
|
||||||
var insetsIsTouchableRegion = true
|
var insetsIsTouchableRegion = true
|
||||||
if (context.dragLayer.alpha < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD) {
|
if (context.dragLayer.alpha < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD) {
|
||||||
// Let touches pass through us.
|
// Let touches pass through us.
|
||||||
@@ -217,7 +240,9 @@ class TaskbarInsetsController(val context: TaskbarActivityContext) : LoggableTas
|
|||||||
insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME)
|
insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME)
|
||||||
insetsIsTouchableRegion = false
|
insetsIsTouchableRegion = false
|
||||||
} else if (
|
} else if (
|
||||||
controllers.taskbarViewController.areIconsVisible() || context.isNavBarKidsModeActive
|
controllers.taskbarViewController.areIconsVisible() ||
|
||||||
|
context.isNavBarKidsModeActive ||
|
||||||
|
bubbleBarVisible
|
||||||
) {
|
) {
|
||||||
// Taskbar has some touchable elements, take over the full taskbar area
|
// Taskbar has some touchable elements, take over the full taskbar area
|
||||||
insetsInfo.touchableRegion.set(touchableRegion)
|
insetsInfo.touchableRegion.set(touchableRegion)
|
||||||
|
|||||||
@@ -408,6 +408,14 @@ public class TaskbarLauncherStateController {
|
|||||||
+ ", mLauncherState: " + mLauncherState
|
+ ", mLauncherState: " + mLauncherState
|
||||||
+ ", toAlignment: " + toAlignment);
|
+ ", 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();
|
AnimatorSet animatorSet = new AnimatorSet();
|
||||||
|
|
||||||
if (hasAnyFlag(changedFlags, FLAG_LAUNCHER_IN_STATE_TRANSITION)) {
|
if (hasAnyFlag(changedFlags, FLAG_LAUNCHER_IN_STATE_TRANSITION)) {
|
||||||
@@ -475,7 +483,7 @@ public class TaskbarLauncherStateController {
|
|||||||
TaskbarStashController stashController =
|
TaskbarStashController stashController =
|
||||||
mControllers.taskbarStashController;
|
mControllers.taskbarStashController;
|
||||||
stashController.updateAndAnimateTransientTaskbar(
|
stashController.updateAndAnimateTransientTaskbar(
|
||||||
/* stash */ true, /* duration */ 0);
|
/* stash */ true, /* duration */ 0, true /* bubblesShouldFollow */);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.launcher3.taskbar;
|
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_EXPANDED;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_MANAGE_MENU_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 android.view.animation.PathInterpolator;
|
||||||
|
|
||||||
import com.android.launcher3.anim.AnimatedFloat;
|
import com.android.launcher3.anim.AnimatedFloat;
|
||||||
|
import com.android.launcher3.util.DisplayController;
|
||||||
import com.android.quickstep.SystemUiProxy;
|
import com.android.quickstep.SystemUiProxy;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -63,6 +65,10 @@ public class TaskbarScrimViewController implements TaskbarControllers.LoggableTa
|
|||||||
* Updates the scrim state based on the flags.
|
* Updates the scrim state based on the flags.
|
||||||
*/
|
*/
|
||||||
public void updateStateForSysuiFlags(int stateFlags, boolean skipAnim) {
|
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 bubblesExpanded = (stateFlags & SYSUI_STATE_BUBBLES_EXPANDED) != 0;
|
||||||
final boolean manageMenuExpanded =
|
final boolean manageMenuExpanded =
|
||||||
(stateFlags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0;
|
(stateFlags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0;
|
||||||
|
|||||||
@@ -255,14 +255,15 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
|||||||
private boolean mEnableBlockingTimeoutDuringTests = false;
|
private boolean mEnableBlockingTimeoutDuringTests = false;
|
||||||
|
|
||||||
// Evaluate whether the handle should be stashed
|
// 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(
|
private final StatePropertyHolder mStatePropertyHolder = new StatePropertyHolder(
|
||||||
flags -> {
|
mIsStashedPredicate);
|
||||||
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 boolean mIsTaskbarSystemActionRegistered = false;
|
private boolean mIsTaskbarSystemActionRegistered = false;
|
||||||
private TaskbarSharedState mTaskbarSharedState;
|
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.
|
* 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) {
|
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.
|
* 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)) {
|
if (!DisplayController.isTransientTaskbar(mActivity)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -526,6 +541,34 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
|||||||
updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, stash);
|
updateStateForFlag(FLAG_STASHED_IN_APP_AUTO, stash);
|
||||||
applyState();
|
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) {
|
private void onIsStashedChanged(boolean isStashed) {
|
||||||
mControllers.runAfterInit(() -> {
|
mControllers.runAfterInit(() -> {
|
||||||
mControllers.stashedHandleViewController.onIsStashedChanged(isStashed);
|
mControllers.stashedHandleViewController.onIsStashedChanged(isStashed);
|
||||||
mControllers.taskbarInsetsController.onTaskbarWindowHeightOrInsetsChanged();
|
mControllers.taskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1127,7 +1170,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
|
|||||||
if (mControllers.taskbarAutohideSuspendController.isSuspended()) {
|
if (mControllers.taskbarAutohideSuspendController.isSuspended()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
updateAndAnimateTransientTaskbar(true);
|
updateAndAnimateTransientTaskbarForTimeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -108,7 +108,18 @@ class TaskbarStashViaTouchController(val controllers: TaskbarControllers) : Touc
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onControllerInterceptTouchEvent(ev: MotionEvent): Boolean {
|
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
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,7 +133,12 @@ class TaskbarStashViaTouchController(val controllers: TaskbarControllers) : Touc
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
} else if (ev.action == MotionEvent.ACTION_DOWN) {
|
} 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)
|
controllers.taskbarStashController.updateAndAnimateTransientTaskbar(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,10 @@ public class TaskbarTranslationController implements TaskbarControllers.Loggable
|
|||||||
mControllers.stashedHandleViewController.setTranslationYForSwipe(transY);
|
mControllers.stashedHandleViewController.setTranslationYForSwipe(transY);
|
||||||
mControllers.taskbarViewController.setTranslationYForSwipe(transY);
|
mControllers.taskbarViewController.setTranslationYForSwipe(transY);
|
||||||
mControllers.taskbarDragLayerController.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.anim.AnimatedFloat;
|
||||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||||
import com.android.launcher3.taskbar.TaskbarControllers;
|
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.MultiPropertyFactory;
|
||||||
import com.android.launcher3.util.MultiValueAlpha;
|
import com.android.launcher3.util.MultiValueAlpha;
|
||||||
import com.android.quickstep.SystemUiProxy;
|
import com.android.quickstep.SystemUiProxy;
|
||||||
@@ -51,6 +53,8 @@ public class BubbleBarViewController {
|
|||||||
// Initialized in init.
|
// Initialized in init.
|
||||||
private BubbleStashController mBubbleStashController;
|
private BubbleStashController mBubbleStashController;
|
||||||
private BubbleBarController mBubbleBarController;
|
private BubbleBarController mBubbleBarController;
|
||||||
|
private TaskbarStashController mTaskbarStashController;
|
||||||
|
private TaskbarInsetsController mTaskbarInsetsController;
|
||||||
private View.OnClickListener mBubbleClickListener;
|
private View.OnClickListener mBubbleClickListener;
|
||||||
private View.OnClickListener mBubbleBarClickListener;
|
private View.OnClickListener mBubbleBarClickListener;
|
||||||
|
|
||||||
@@ -80,6 +84,8 @@ public class BubbleBarViewController {
|
|||||||
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
||||||
mBubbleStashController = bubbleControllers.bubbleStashController;
|
mBubbleStashController = bubbleControllers.bubbleStashController;
|
||||||
mBubbleBarController = bubbleControllers.bubbleBarController;
|
mBubbleBarController = bubbleControllers.bubbleBarController;
|
||||||
|
mTaskbarStashController = controllers.taskbarStashController;
|
||||||
|
mTaskbarInsetsController = controllers.taskbarInsetsController;
|
||||||
|
|
||||||
mActivity.addOnDeviceProfileChangeListener(dp ->
|
mActivity.addOnDeviceProfileChangeListener(dp ->
|
||||||
mBarView.getLayoutParams().height = mActivity.getDeviceProfile().taskbarHeight
|
mBarView.getLayoutParams().height = mActivity.getDeviceProfile().taskbarHeight
|
||||||
@@ -89,7 +95,9 @@ public class BubbleBarViewController {
|
|||||||
mBubbleClickListener = v -> onBubbleClicked(v);
|
mBubbleClickListener = v -> onBubbleClicked(v);
|
||||||
mBubbleBarClickListener = v -> setExpanded(true);
|
mBubbleBarClickListener = v -> setExpanded(true);
|
||||||
mBarView.setOnClickListener(mBubbleBarClickListener);
|
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) {
|
private void onBubbleClicked(View v) {
|
||||||
@@ -283,7 +291,8 @@ public class BubbleBarViewController {
|
|||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "trying to expand bubbles when there isn't one selected");
|
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.StashedHandleViewController;
|
||||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||||
import com.android.launcher3.taskbar.TaskbarControllers;
|
import com.android.launcher3.taskbar.TaskbarControllers;
|
||||||
|
import com.android.launcher3.taskbar.TaskbarInsetsController;
|
||||||
import com.android.launcher3.taskbar.TaskbarStashController;
|
import com.android.launcher3.taskbar.TaskbarStashController;
|
||||||
import com.android.launcher3.util.MultiPropertyFactory;
|
import com.android.launcher3.util.MultiPropertyFactory;
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ public class BubbleStashController {
|
|||||||
|
|
||||||
// Initialized in init.
|
// Initialized in init.
|
||||||
private TaskbarControllers mControllers;
|
private TaskbarControllers mControllers;
|
||||||
|
private TaskbarInsetsController mTaskbarInsetsController;
|
||||||
private BubbleBarViewController mBarViewController;
|
private BubbleBarViewController mBarViewController;
|
||||||
private BubbleStashedHandleViewController mHandleViewController;
|
private BubbleStashedHandleViewController mHandleViewController;
|
||||||
private TaskbarStashController mTaskbarStashController;
|
private TaskbarStashController mTaskbarStashController;
|
||||||
@@ -77,6 +79,7 @@ public class BubbleStashController {
|
|||||||
|
|
||||||
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
|
||||||
mControllers = controllers;
|
mControllers = controllers;
|
||||||
|
mTaskbarInsetsController = controllers.taskbarInsetsController;
|
||||||
mBarViewController = bubbleControllers.bubbleBarViewController;
|
mBarViewController = bubbleControllers.bubbleBarViewController;
|
||||||
mHandleViewController = bubbleControllers.bubbleStashedHandleViewController;
|
mHandleViewController = bubbleControllers.bubbleStashedHandleViewController;
|
||||||
mTaskbarStashController = controllers.taskbarStashController;
|
mTaskbarStashController = controllers.taskbarStashController;
|
||||||
@@ -271,7 +274,7 @@ public class BubbleStashController {
|
|||||||
private void onIsStashedChanged() {
|
private void onIsStashedChanged() {
|
||||||
mControllers.runAfterInit(() -> {
|
mControllers.runAfterInit(() -> {
|
||||||
mHandleViewController.onIsStashedChanged();
|
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.Utilities;
|
||||||
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
import com.android.launcher3.taskbar.TaskbarActivityContext;
|
||||||
import com.android.launcher3.taskbar.TaskbarTranslationController.TransitionCallback;
|
import com.android.launcher3.taskbar.TaskbarTranslationController.TransitionCallback;
|
||||||
|
import com.android.launcher3.taskbar.bubbles.BubbleControllers;
|
||||||
import com.android.launcher3.touch.OverScroll;
|
import com.android.launcher3.touch.OverScroll;
|
||||||
import com.android.launcher3.util.DisplayController;
|
import com.android.launcher3.util.DisplayController;
|
||||||
import com.android.quickstep.InputConsumer;
|
import com.android.quickstep.InputConsumer;
|
||||||
@@ -62,6 +63,7 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
|||||||
private final int mTaskbarNavThresholdY;
|
private final int mTaskbarNavThresholdY;
|
||||||
private final boolean mIsTaskbarAllAppsOpen;
|
private final boolean mIsTaskbarAllAppsOpen;
|
||||||
private boolean mHasPassedTaskbarNavThreshold;
|
private boolean mHasPassedTaskbarNavThreshold;
|
||||||
|
private boolean mIsInBubbleBarArea;
|
||||||
|
|
||||||
private final PointF mDownPos = new PointF();
|
private final PointF mDownPos = new PointF();
|
||||||
private final PointF mLastPos = new PointF();
|
private final PointF mLastPos = new PointF();
|
||||||
@@ -135,7 +137,7 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
|||||||
mHasPassedTaskbarNavThreshold = false;
|
mHasPassedTaskbarNavThreshold = false;
|
||||||
mTaskbarActivityContext.setAutohideSuspendFlag(
|
mTaskbarActivityContext.setAutohideSuspendFlag(
|
||||||
FLAG_AUTOHIDE_SUSPEND_TOUCHING, true);
|
FLAG_AUTOHIDE_SUSPEND_TOUCHING, true);
|
||||||
if (isInArea(x)) {
|
if (isInTaskbarArea(x)) {
|
||||||
if (!mIsTransientTaskbar) {
|
if (!mIsTransientTaskbar) {
|
||||||
mLongPressDownX = x;
|
mLongPressDownX = x;
|
||||||
mLongPressDownY = y;
|
mLongPressDownY = y;
|
||||||
@@ -144,10 +146,12 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
|||||||
mCanceledUnstashHint = false;
|
mCanceledUnstashHint = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mTransitionCallback != null && !mIsTaskbarAllAppsOpen) {
|
if (mTransitionCallback != null && !mIsTaskbarAllAppsOpen) {
|
||||||
mTransitionCallback.onActionDown();
|
mTransitionCallback.onActionDown();
|
||||||
}
|
}
|
||||||
|
if (mIsTransientTaskbar && isInBubbleBarArea(x)) {
|
||||||
|
mIsInBubbleBarArea = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_POINTER_UP:
|
case MotionEvent.ACTION_POINTER_UP:
|
||||||
int ptrIdx = ev.getActionIndex();
|
int ptrIdx = ev.getActionIndex();
|
||||||
@@ -184,7 +188,11 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
|||||||
|
|
||||||
if (!mHasPassedTaskbarNavThreshold && passedTaskbarNavThreshold) {
|
if (!mHasPassedTaskbarNavThreshold && passedTaskbarNavThreshold) {
|
||||||
mHasPassedTaskbarNavThreshold = true;
|
mHasPassedTaskbarNavThreshold = true;
|
||||||
mTaskbarActivityContext.onSwipeToUnstashTaskbar();
|
if (mIsInBubbleBarArea) {
|
||||||
|
mTaskbarActivityContext.onSwipeToOpenBubblebar();
|
||||||
|
} else {
|
||||||
|
mTaskbarActivityContext.onSwipeToUnstashTaskbar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dY < 0) {
|
if (dY < 0) {
|
||||||
@@ -207,21 +215,32 @@ public class TaskbarUnstashInputConsumer extends DelegateInputConsumer {
|
|||||||
mTransitionCallback.onActionEnd();
|
mTransitionCallback.onActionEnd();
|
||||||
}
|
}
|
||||||
mHasPassedTaskbarNavThreshold = false;
|
mHasPassedTaskbarNavThreshold = false;
|
||||||
|
mIsInBubbleBarArea = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isInArea(float x) {
|
private boolean isInTaskbarArea(float x) {
|
||||||
float areaFromMiddle = mUnstashArea / 2.0f;
|
float areaFromMiddle = mUnstashArea / 2.0f;
|
||||||
float distFromMiddle = Math.abs(mScreenWidth / 2.0f - x);
|
float distFromMiddle = Math.abs(mScreenWidth / 2.0f - x);
|
||||||
return distFromMiddle < areaFromMiddle;
|
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) {
|
private void onLongPressDetected(MotionEvent motionEvent) {
|
||||||
if (mTaskbarActivityContext != null
|
if (mTaskbarActivityContext != null
|
||||||
&& isInArea(motionEvent.getRawX())
|
&& isInTaskbarArea(motionEvent.getRawX())
|
||||||
&& !mIsTransientTaskbar) {
|
&& !mIsTransientTaskbar) {
|
||||||
boolean taskBarPressed = mTaskbarActivityContext.onLongPressToUnstashTaskbar();
|
boolean taskBarPressed = mTaskbarActivityContext.onLongPressToUnstashTaskbar();
|
||||||
if (taskBarPressed) {
|
if (taskBarPressed) {
|
||||||
|
|||||||
Reference in New Issue
Block a user