Revert "Implements the "Save App Pair" button in Overview Actions"

Revert submission 26391074-save-app-pair-button

Reason for revert: breaks image comparison tests b/327665771
Reverted changes: /q/submissionid:26391074-save-app-pair-button

Change-Id: Ic4580fc39d8394771551f100932157e6ef35c4b7
This commit is contained in:
Vinit Nayak
2024-03-01 01:02:33 +00:00
committed by Android (Google) Code Review
parent 41d8ae8a7a
commit 5c8978c4db
12 changed files with 48 additions and 179 deletions

View File

@@ -120,16 +120,6 @@
android:layout_height="1dp"
android:layout_weight="1"
android:visibility="gone" />
<Button
android:id="@+id/action_save_app_pair"
style="@style/GoOverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_save_app_pair"
android:text="@string/action_save_app_pair"
android:theme="@style/ThemeControlHighlightWorkspaceColor"
android:visibility="gone" />
</LinearLayout>
</com.android.quickstep.views.GoOverviewActionsView>

View File

@@ -55,15 +55,6 @@
android:theme="@style/ThemeControlHighlightWorkspaceColor"
android:visibility="gone" />
<Button
android:id="@+id/action_save_app_pair"
style="@style/OverviewActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/action_save_app_pair"
android:theme="@style/ThemeControlHighlightWorkspaceColor"
android:visibility="gone" />
<Space
android:layout_width="0dp"
android:layout_height="1dp"

View File

@@ -230,8 +230,6 @@
<string name="action_screenshot">Screenshot</string>
<!-- Label for a button that enters split screen selection mode. [CHAR_LIMIT=20] -->
<string name="action_split">Split</string>
<!-- Label for a button that saves a new app pair. [CHAR_LIMIT=20] -->
<string name="action_save_app_pair">Save app pair</string>
<!-- Label for toast with instructions for split screen selection mode. [CHAR_LIMIT=50] -->
<string name="toast_split_select_app">Tap another app to use split screen</string>
<string name="toast_contextual_split_select_app">Choose another app to use split screen</string>

View File

@@ -43,7 +43,6 @@ import com.android.launcher3.util.ResourceBasedOverride;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.Snackbar;
import com.android.quickstep.util.RecentsOrientedState;
import com.android.quickstep.views.GroupedTaskView;
import com.android.quickstep.views.OverviewActionsView;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskThumbnailView;
@@ -211,19 +210,13 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
}
}
protected void enterSplitSelect() {
private void enterSplitSelect() {
RecentsView overviewPanel = mThumbnailView.getTaskView().getRecentsView();
// Task has already been dismissed
if (overviewPanel == null) return;
overviewPanel.initiateSplitSelect(mThumbnailView.getTaskView());
}
protected void saveAppPair() {
GroupedTaskView taskView = (GroupedTaskView) mThumbnailView.getTaskView();
taskView.getRecentsView().getSplitSelectController().getAppPairsController()
.saveAppPair(taskView);
}
/**
* Called when the overlay is no longer used.
*/
@@ -336,10 +329,6 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
public void onSplit() {
endLiveTileMode(TaskOverlay.this::enterSplitSelect);
}
public void onSaveAppPair() {
endLiveTileMode(TaskOverlay.this::saveAppPair);
}
}
}
@@ -353,8 +342,5 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
/** User wants to start split screen with current app. */
void onSplit();
/** User wants to save an app pair with current group of apps. */
void onSaveAppPair();
}
}

View File

@@ -311,21 +311,9 @@ public interface TaskShortcutFactory {
@Override
public List<SystemShortcut> getShortcuts(BaseDraggingActivity activity,
TaskIdAttributeContainer taskContainer) {
DeviceProfile deviceProfile = activity.getDeviceProfile();
final TaskView taskView = taskContainer.getTaskView();
final RecentsView recentsView = taskView.getRecentsView();
boolean isLargeTileFocusedTask = deviceProfile.isTablet && taskView.isFocusedTask();
boolean isInExpectedScrollPosition =
recentsView.isTaskInExpectedScrollPosition(recentsView.indexOfChild(taskView));
boolean shouldShowActionsButtonInstead =
isLargeTileFocusedTask && isInExpectedScrollPosition;
// No "save app pair" menu item if:
// - app pairs feature is not enabled
// - the task in question is a single task
// - the Overview Actions Button should be visible
if (!FeatureFlags.enableAppPairs() || !taskView.containsMultipleTasks()
|| shouldShowActionsButtonInstead) {
if (!FeatureFlags.enableAppPairs() || !taskView.containsMultipleTasks()) {
return null;
}

View File

@@ -24,7 +24,6 @@ import com.android.internal.jank.Cuj;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.CancellableTask;
import com.android.launcher3.util.RunnableList;
import com.android.launcher3.util.SplitConfigurationOptions;
@@ -41,11 +40,11 @@ import com.android.systemui.shared.recents.utilities.PreviewPositionHelper;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition;
import kotlin.Unit;
import java.util.HashMap;
import java.util.function.Consumer;
import kotlin.Unit;
/**
* TaskView that contains and shows thumbnails for not one, BUT TWO(!!) tasks
*
@@ -383,12 +382,8 @@ public class GroupedTaskView extends TaskView {
@Override
public void setOverlayEnabled(boolean overlayEnabled) {
if (FeatureFlags.enableAppPairs()) {
super.setOverlayEnabled(overlayEnabled);
} else {
// Intentional no-op to prevent setting smart actions overlay on thumbnails
}
}
@Override
public void setOrientationState(RecentsOrientedState orientationState) {

View File

@@ -33,7 +33,6 @@ import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Flags;
import com.android.launcher3.Insettable;
import com.android.launcher3.R;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.MultiPropertyFactory.MultiProperty;
import com.android.launcher3.util.MultiValueAlpha;
@@ -93,28 +92,14 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
private static final int INDEX_SCROLL_ALPHA = 5;
private static final int NUM_ALPHAS = 6;
public @interface ScreenshotButtonHiddenFlags { }
public static final int FLAG_MULTIPLE_TASKS_HIDE_SCREENSHOT = 1 << 0;
public @interface SplitButtonHiddenFlags { }
public static final int FLAG_SMALL_SCREEN_HIDE_SPLIT = 1 << 0;
public static final int FLAG_MULTIPLE_TASKS_HIDE_SPLIT = 1 << 1;
public static final int FLAG_IS_NOT_TABLET = 1 << 0;
public @interface SplitButtonDisabledFlags { }
public static final int FLAG_SINGLE_TASK_DISABLE_SPLIT = 1 << 0;
public @interface AppPairButtonHiddenFlags { }
public static final int FLAG_SINGLE_TASK_HIDE_APP_PAIR = 1 << 0;
public static final int FLAG_SMALL_SCREEN_HIDE_APP_PAIR = 1 << 1;
public static final int FLAG_SINGLE_TASK = 1 << 0;
private MultiValueAlpha mMultiValueAlpha;
// The screenshot button is implemented as a Button in launcher3 and NexusLauncher, but is an
// ImageButton in go launcher (does not share a common class with Button). Take care when
// casting this.
private View mScreenshotButton;
private Button mSplitButton;
private Button mSaveAppPairButton;
@ActionsHiddenFlags
private int mHiddenFlags;
@@ -122,14 +107,11 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
@ActionsDisabledFlags
protected int mDisabledFlags;
@ScreenshotButtonHiddenFlags
private int mScreenshotButtonHiddenFlags;
@SplitButtonHiddenFlags
private int mSplitButtonHiddenFlags;
@AppPairButtonHiddenFlags
private int mAppPairButtonHiddenFlags;
@SplitButtonDisabledFlags
private int mSplitButtonDisabledFlags;
@Nullable
protected T mCallbacks;
@@ -156,12 +138,9 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
mMultiValueAlpha = new MultiValueAlpha(findViewById(R.id.action_buttons), NUM_ALPHAS);
mMultiValueAlpha.setUpdateVisibility(true);
mScreenshotButton = findViewById(R.id.action_screenshot);
mScreenshotButton.setOnClickListener(this);
findViewById(R.id.action_screenshot).setOnClickListener(this);
mSplitButton = findViewById(R.id.action_split);
mSplitButton.setOnClickListener(this);
mSaveAppPairButton = findViewById(R.id.action_save_app_pair);
mSaveAppPairButton.setOnClickListener(this);
}
/**
@@ -183,8 +162,6 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
mCallbacks.onScreenshot();
} else if (id == R.id.action_split) {
mCallbacks.onSplit();
} else if (id == R.id.action_save_app_pair) {
mCallbacks.onSaveAppPair();
}
}
@@ -227,49 +204,7 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
}
boolean isEnabled = (mDisabledFlags & ~DISABLED_ROTATED) == 0;
LayoutUtils.setViewEnabled(this, isEnabled);
}
/**
* Updates a batch of flags to hide and show actions buttons when a grouped task (split screen)
* is focused.
* @param isGroupedTask True if the focused task is a grouped task.
*/
public void updateForGroupedTask(boolean isGroupedTask) {
// Update flags to see if split button should be hidden.
updateSplitButtonHiddenFlags(FLAG_MULTIPLE_TASKS_HIDE_SPLIT, isGroupedTask);
// Update flags to see if screenshot button should be hidden.
updateScreenshotButtonHiddenFlags(FLAG_MULTIPLE_TASKS_HIDE_SCREENSHOT, isGroupedTask);
// Update flags to see if save app pair button should be hidden.
updateAppPairButtonHiddenFlags(FLAG_SINGLE_TASK_HIDE_APP_PAIR, !isGroupedTask);
}
/**
* Updates a batch of flags to hide and show actions buttons for tablet/non tablet case.
* @param isSmallScreen True if the current display is a small screen.
*/
public void updateForSmallScreen(boolean isSmallScreen) {
// Update flags to see if split button should be hidden.
updateSplitButtonHiddenFlags(FLAG_SMALL_SCREEN_HIDE_SPLIT, isSmallScreen);
// Update flags to see if save app pair button should be hidden.
updateAppPairButtonHiddenFlags(FLAG_SMALL_SCREEN_HIDE_APP_PAIR, isSmallScreen);
}
/**
* Updates the proper flags to indicate whether the "Screenshot" button should be hidden.
*
* @param flag The flag to update.
* @param enable Whether to enable the hidden flag: True will cause view to be hidden.
*/
private void updateScreenshotButtonHiddenFlags(@ScreenshotButtonHiddenFlags int flag,
boolean enable) {
if (mScreenshotButton == null) return;
if (enable) {
mScreenshotButtonHiddenFlags |= flag;
} else {
mScreenshotButtonHiddenFlags &= ~flag;
}
int desiredVisibility = mScreenshotButtonHiddenFlags == 0 ? VISIBLE : GONE;
mScreenshotButton.setVisibility(desiredVisibility);
updateSplitButtonEnabledState();
}
/**
@@ -278,17 +213,16 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
* @param flag The flag to update.
* @param enable Whether to enable the hidden flag: True will cause view to be hidden.
*/
void updateSplitButtonHiddenFlags(@SplitButtonHiddenFlags int flag,
boolean enable) {
if (mSplitButton == null) return;
public void updateSplitButtonHiddenFlags(@SplitButtonHiddenFlags int flag, boolean enable) {
if (enable) {
mSplitButtonHiddenFlags |= flag;
} else {
mSplitButtonHiddenFlags &= ~flag;
}
int desiredVisibility = mSplitButtonHiddenFlags == 0 ? VISIBLE : GONE;
mSplitButton.setVisibility(desiredVisibility);
findViewById(R.id.action_split_space).setVisibility(desiredVisibility);
if (mSplitButton == null) return;
boolean shouldBeVisible = mSplitButtonHiddenFlags == 0;
mSplitButton.setVisibility(shouldBeVisible ? VISIBLE : GONE);
findViewById(R.id.action_split_space).setVisibility(shouldBeVisible ? VISIBLE : GONE);
String callStack = Arrays.stream(
Log.getStackTraceString(new Exception("thread stacktrace"))
@@ -298,30 +232,23 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
.collect(Collectors.joining("\n"));
Log.d("b/321291049", "updateSplitButtonHiddenFlags called with flag: " + flag
+ " enabled: " + enable
+ " visibility: " + desiredVisibility
+ " shouldBeVisible: " + shouldBeVisible
+ " partial trace: \n" + callStack);
}
/**
* Updates the proper flags to indicate whether the "Save app pair" button should be disabled.
* Updates the proper flags to indicate whether the "Split screen" button should be disabled.
*
* @param flag The flag to update.
* @param enable Whether to enable the hidden flag: True will cause view to be hidden.
* @param enable Whether to enable the disable flag: True will cause view to be disabled.
*/
private void updateAppPairButtonHiddenFlags(
@AppPairButtonHiddenFlags int flag, boolean enable) {
if (!FeatureFlags.enableAppPairs()) {
return;
}
if (mSaveAppPairButton == null) return;
public void updateSplitButtonDisabledFlags(@SplitButtonDisabledFlags int flag, boolean enable) {
if (enable) {
mAppPairButtonHiddenFlags |= flag;
mSplitButtonDisabledFlags |= flag;
} else {
mAppPairButtonHiddenFlags &= ~flag;
mSplitButtonDisabledFlags &= ~flag;
}
int desiredVisibility = mAppPairButtonHiddenFlags == 0 ? VISIBLE : GONE;
mSaveAppPairButton.setVisibility(desiredVisibility);
updateSplitButtonEnabledState();
}
public MultiProperty getContentAlpha() {
@@ -399,7 +326,19 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
? R.drawable.ic_split_horizontal
: R.drawable.ic_split_vertical;
mSplitButton.setCompoundDrawablesRelativeWithIntrinsicBounds(splitIconRes, 0, 0, 0);
mSaveAppPairButton.setCompoundDrawablesRelativeWithIntrinsicBounds(
R.drawable.ic_save_app_pair, 0, 0, 0);
}
/**
* Enables/disables the "Split" button based on the status of mSplitButtonDisabledFlags and
* mDisabledFlags.
*/
private void updateSplitButtonEnabledState() {
if (mSplitButton == null) {
return;
}
boolean isParentEnabled = (mDisabledFlags & ~DISABLED_ROTATED) == 0;
boolean shouldBeEnabled = mSplitButtonDisabledFlags == 0 && isParentEnabled;
mSplitButton.setEnabled(shouldBeEnabled);
}
}

View File

@@ -62,6 +62,8 @@ import static com.android.quickstep.util.TaskGridNavHelper.DIRECTION_TAB;
import static com.android.quickstep.util.TaskGridNavHelper.DIRECTION_UP;
import static com.android.quickstep.views.ClearAllButton.DISMISS_ALPHA;
import static com.android.quickstep.views.DesktopTaskView.isDesktopModeSupported;
import static com.android.quickstep.views.OverviewActionsView.FLAG_IS_NOT_TABLET;
import static com.android.quickstep.views.OverviewActionsView.FLAG_SINGLE_TASK;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_ACTIONS_IN_MENU;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_DESKTOP;
import static com.android.quickstep.views.OverviewActionsView.HIDDEN_NON_ZERO_ROTATION;
@@ -3985,24 +3987,18 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
/**
* Hides all overview actions if user is halfway through split selection, shows otherwise.
* We only show split option if:
* * Focused view is a single app
* Hides all overview actions if current page is for split apps, shows otherwise
* If actions are showing, we only show split option if
* * Device is large screen
* * There are at least 2 tasks to invoke split
*/
private void updateCurrentTaskActionsVisibility() {
boolean isCurrentSplit = getCurrentPageTaskView() instanceof GroupedTaskView;
// Update flags to see if entire actions bar should be hidden.
if (!FeatureFlags.enableAppPairs()) {
mActionsView.updateHiddenFlags(HIDDEN_SPLIT_SCREEN, isCurrentSplit);
}
mActionsView.updateHiddenFlags(HIDDEN_SPLIT_SELECT_ACTIVE, isSplitSelectionActive());
// Update flags to see if actions bar should show buttons for a single task or a pair of
// tasks.
mActionsView.updateForGroupedTask(isCurrentSplit);
// Update flags to see if actions bar should show buttons for tablets or phones.
mActionsView.updateForSmallScreen(!mActivity.getDeviceProfile().isTablet);
mActionsView.updateSplitButtonHiddenFlags(FLAG_IS_NOT_TABLET,
!mActivity.getDeviceProfile().isTablet);
mActionsView.updateSplitButtonDisabledFlags(FLAG_SINGLE_TASK, /*enable=*/ false);
if (isDesktopModeSupported()) {
boolean isCurrentDesktop = getCurrentPageTaskView() instanceof DesktopTaskView;
mActionsView.updateHiddenFlags(HIDDEN_DESKTOP, isCurrentDesktop);

View File

@@ -21,7 +21,6 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_TASKBAR_NAVBAR_UN
import static com.android.launcher3.config.FeatureFlags.FOLDABLE_SINGLE_PAGE;
import static com.android.launcher3.config.FeatureFlags.enableSplitContextually;
import static com.android.launcher3.testing.shared.TestProtocol.TEST_INFO_RESPONSE_FIELD;
import static com.android.launcher3.config.FeatureFlags.enableAppPairs;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import android.app.Activity;
@@ -301,11 +300,6 @@ public class TestInformationHandler implements ResourceBasedOverride {
return response;
}
case TestProtocol.REQUEST_FLAG_ENABLE_APP_PAIRS: {
response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, enableAppPairs());
return response;
}
default:
return null;
}

View File

@@ -181,7 +181,6 @@ public final class TestProtocol {
public static final String REQUEST_EMULATE_PRINT_DEVICE = "emulate-print-device";
public static final String REQUEST_FLAG_ENABLE_GRID_ONLY_OVERVIEW = "enable-grid-only-overview";
public static final String REQUEST_FLAG_ENABLE_APP_PAIRS = "enable-app-pairs";
public static final String REQUEST_UNSTASH_BUBBLE_BAR_IF_STASHED =
"unstash-bubble-bar-if-stashed";

View File

@@ -401,11 +401,8 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer {
if (isTablet && Math.abs(task.getExactCenterX() - mLauncher.getExactScreenCenterX()) >= 1) {
return false;
}
if (!mLauncher.isAppPairsEnabled() && task.isTaskSplit()) {
// Overview actions aren't visible for split screen tasks.
return false;
}
return true;
return !task.isTaskSplit();
}
/**

View File

@@ -1936,10 +1936,6 @@ public final class LauncherInstrumentation {
TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
boolean isAppPairsEnabled() {
return getTestInfo(TestProtocol.REQUEST_FLAG_ENABLE_APP_PAIRS).getBoolean(
TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
public void sendPointer(long downTime, long currentTime, int action, Point point,
GestureScope gestureScope) {
sendPointer(downTime, currentTime, action, point, gestureScope,