Merge "Fix bug where Taskbar was not auto-hiding after splitscreen launch from icon menu" into tm-qpr-dev

This commit is contained in:
Jeremy Sim
2023-03-21 23:34:34 +00:00
committed by Android (Google) Code Review
6 changed files with 37 additions and 20 deletions

View File

@@ -65,4 +65,10 @@ public abstract class BaseTaskbarContext extends ContextThemeWrapper implements
/** Callback invoked when a popup is shown or closed within this context. */
public abstract void onPopupVisibilityChanged(boolean isVisible);
/**
* Callback invoked when user attempts to split the screen through a long-press menu in Taskbar
* or AllApps.
*/
public abstract void onSplitScreenMenuButtonClicked();
}

View File

@@ -56,7 +56,6 @@ import android.view.Gravity;
import android.view.RoundedCorner;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.widget.FrameLayout;
import android.widget.Toast;
@@ -80,6 +79,7 @@ import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.FolderInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.popup.PopupContainerWithArrow;
import com.android.launcher3.popup.PopupDataProvider;
import com.android.launcher3.taskbar.TaskbarAutohideSuspendController.AutohideSuspendFlag;
import com.android.launcher3.taskbar.TaskbarTranslationController.TransitionCallback;
@@ -524,6 +524,16 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
setTaskbarWindowFocusable(isVisible);
}
@Override
public void onSplitScreenMenuButtonClicked() {
PopupContainerWithArrow popup = PopupContainerWithArrow.getOpen(this);
if (popup != null) {
popup.addOnCloseCallback(() -> {
mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true);
});
}
}
/**
* Sets a new data-source for this taskbar instance
*/

View File

@@ -65,6 +65,7 @@ import java.util.stream.Stream;
/**
* Implements interfaces required to show and allow interacting with a PopupContainerWithArrow.
* Controls the long-press menu on Taskbar and AllApps icons.
*/
public class TaskbarPopupController implements TaskbarControllers.LoggableTaskbarController {
@@ -191,9 +192,8 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba
// Make focusable to receive back events
context.onPopupVisibilityChanged(true);
container.setOnCloseCallback(() -> {
container.addOnCloseCallback(() -> {
context.getDragLayer().post(() -> context.onPopupVisibilityChanged(false));
container.setOnCloseCallback(null);
});
return container;
@@ -294,13 +294,19 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba
@Override
public void onClick(View view) {
// Add callbacks depending on what type of Taskbar context we're in (Taskbar or AllApps)
mTarget.onSplitScreenMenuButtonClicked();
AbstractFloatingView.closeAllOpenViews(mTarget);
// Depending on what app state we're in, we either want to initiate the split screen
// staging process or immediately launch a split with an existing app.
// - Initiate the split screen staging process
if (mAllowInitialSplitSelection) {
super.onClick(view);
return;
}
// Initiate splitscreen from the in-app Taskbar or Taskbar All Apps
// - Immediately launch split with the running app
Pair<InstanceId, com.android.launcher3.logging.InstanceId> instanceIds =
LogUtils.getShellShareableInstanceId();
mTarget.getStatsLogManager().logger()

View File

@@ -15,8 +15,6 @@
*/
package com.android.launcher3.taskbar.overlay;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
import android.content.Context;
import android.view.View;
@@ -33,10 +31,6 @@ import com.android.launcher3.taskbar.TaskbarStashController;
import com.android.launcher3.taskbar.TaskbarUIController;
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsContainerView;
import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.recents.model.Task;
import java.util.function.Consumer;
/**
* Window context for the taskbar overlays such as All Apps and EDU.
@@ -141,4 +135,8 @@ public class TaskbarOverlayContext extends BaseTaskbarContext {
@Override
public void onPopupVisibilityChanged(boolean isVisible) {}
@Override
public void onSplitScreenMenuButtonClicked() {
}
}

View File

@@ -174,7 +174,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
mContext.getDragLayer().getDescendantRectRelativeToSelf(host, pos);
ArrowPopup popup = OptionsPopupView.show(mContext, new RectF(pos), actions, false);
popup.requestFocus();
popup.setOnCloseCallback(() -> {
popup.addOnCloseCallback(() -> {
host.requestFocus();
host.sendAccessibilityEvent(TYPE_VIEW_FOCUSED);
host.performAccessibilityAction(ACTION_ACCESSIBILITY_FOCUS, null);

View File

@@ -48,14 +48,13 @@ import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import android.widget.FrameLayout;
import androidx.annotation.Nullable;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.shortcuts.DeepShortcutView;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.BaseDragLayer;
@@ -124,7 +123,7 @@ public abstract class ArrowPopup<T extends Context & ActivityContext>
private final GradientDrawable mRoundedTop;
private final GradientDrawable mRoundedBottom;
@Nullable private Runnable mOnCloseCallback = null;
private RunnableList mOnCloseCallbacks = new RunnableList();
// The rect string of the view that the arrow is attached to, in screen reference frame.
protected int mArrowColor;
@@ -785,16 +784,14 @@ public abstract class ArrowPopup<T extends Context & ActivityContext>
mDeferContainerRemoval = false;
getPopupContainer().removeView(this);
getPopupContainer().removeView(mArrow);
if (mOnCloseCallback != null) {
mOnCloseCallback.run();
}
mOnCloseCallbacks.executeAllAndClear();
}
/**
* Callback to be called when the popup is closed
* Callbacks to be called when the popup is closed
*/
public void setOnCloseCallback(@Nullable Runnable callback) {
mOnCloseCallback = callback;
public void addOnCloseCallback(Runnable callback) {
mOnCloseCallbacks.add(callback);
}
protected BaseDragLayer getPopupContainer() {