mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Revert "Add CUJ Jank interactions for App Pair saving and launching"
Revert submission 26567492-appPairsCUJ Reason for revert: http://b/330185095 Reverted changes: /q/submissionid:26567492-appPairsCUJ Change-Id: I73d29fe3618a55622e0daa22c9960e3c5783c275
This commit is contained in:
committed by
Android (Google) Code Review
parent
7ce42078da
commit
d8d4fb4375
@@ -1249,7 +1249,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
if (findExactPairMatch) {
|
||||
// We did not find the app pair we were looking for, so launch one.
|
||||
recents.getSplitSelectController().getAppPairsController().launchAppPair(
|
||||
(AppPairIcon) launchingIconView, -1 /*cuj*/);
|
||||
(AppPairIcon) launchingIconView);
|
||||
} else {
|
||||
startItemInfoActivity(itemInfos.get(0));
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPTIMIZE_MEAS
|
||||
import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;
|
||||
|
||||
import static com.android.app.animation.Interpolators.EMPHASIZED;
|
||||
import static com.android.internal.jank.Cuj.CUJ_LAUNCHER_LAUNCH_APP_PAIR_FROM_WORKSPACE;
|
||||
import static com.android.launcher3.Flags.enablePredictiveBackGesture;
|
||||
import static com.android.launcher3.Flags.enableUnfoldStateAnimation;
|
||||
import static com.android.launcher3.LauncherConstants.SavedInstanceKeys.PENDING_SPLIT_SELECT_INFO;
|
||||
@@ -1347,8 +1346,7 @@ public class QuickstepLauncher extends Launcher {
|
||||
* Launches two apps as an app pair.
|
||||
*/
|
||||
public void launchAppPair(AppPairIcon appPairIcon) {
|
||||
mSplitSelectStateController.getAppPairsController().launchAppPair(appPairIcon,
|
||||
CUJ_LAUNCHER_LAUNCH_APP_PAIR_FROM_WORKSPACE);
|
||||
mSplitSelectStateController.getAppPairsController().launchAppPair(appPairIcon);
|
||||
}
|
||||
|
||||
public boolean canStartHomeSafely() {
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.quickstep.util;
|
||||
|
||||
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
|
||||
|
||||
import static com.android.internal.jank.Cuj.CUJ_LAUNCHER_LAUNCH_APP_PAIR_FROM_TASKBAR;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_APP_PAIR_LAUNCH;
|
||||
import static com.android.launcher3.model.data.AppInfo.PACKAGE_KEY_COMPARATOR;
|
||||
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
|
||||
@@ -41,7 +40,6 @@ import android.util.Pair;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.jank.Cuj;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherSettings;
|
||||
@@ -64,7 +62,6 @@ import com.android.quickstep.TopTaskTracker;
|
||||
import com.android.quickstep.views.GroupedTaskView;
|
||||
import com.android.quickstep.views.TaskView;
|
||||
import com.android.systemui.shared.recents.model.Task;
|
||||
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
|
||||
import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -115,7 +112,6 @@ public class AppPairsController {
|
||||
* well on trampoline apps).
|
||||
*/
|
||||
public void saveAppPair(GroupedTaskView gtv) {
|
||||
InteractionJankMonitorWrapper.begin(gtv, Cuj.CUJ_LAUNCHER_SAVE_APP_PAIR);
|
||||
TaskView.TaskIdAttributeContainer[] attributes = gtv.getTaskIdAttributeContainers();
|
||||
WorkspaceItemInfo recentsInfo1 = attributes[0].getItemInfo();
|
||||
WorkspaceItemInfo recentsInfo2 = attributes[1].getItemInfo();
|
||||
@@ -172,13 +168,7 @@ public class AppPairsController {
|
||||
LauncherAccessibilityDelegate delegate =
|
||||
Launcher.getLauncher(mContext).getAccessibilityDelegate();
|
||||
if (delegate != null) {
|
||||
delegate.addToWorkspace(newAppPair, true, (success) -> {
|
||||
if (success) {
|
||||
InteractionJankMonitorWrapper.end(Cuj.CUJ_LAUNCHER_SAVE_APP_PAIR);
|
||||
} else {
|
||||
InteractionJankMonitorWrapper.cancel(Cuj.CUJ_LAUNCHER_SAVE_APP_PAIR);
|
||||
}
|
||||
});
|
||||
delegate.addToWorkspace(newAppPair, true);
|
||||
mStatsLogManager.logger().withItemInfo(newAppPair)
|
||||
.log(StatsLogManager.LauncherEvent.LAUNCHER_APP_PAIR_SAVE);
|
||||
}
|
||||
@@ -189,18 +179,12 @@ public class AppPairsController {
|
||||
/**
|
||||
* Launches an app pair by searching the RecentsModel for running instances of each app, and
|
||||
* staging either those running instances or launching the apps as new Intents.
|
||||
*
|
||||
* @param cuj Should be an integer from {@link Cuj} or -1 if no CUJ needs to be logged for jank
|
||||
* monitoring
|
||||
*/
|
||||
public void launchAppPair(AppPairIcon appPairIcon, int cuj) {
|
||||
public void launchAppPair(AppPairIcon appPairIcon) {
|
||||
WorkspaceItemInfo app1 = appPairIcon.getInfo().contents.get(0);
|
||||
WorkspaceItemInfo app2 = appPairIcon.getInfo().contents.get(1);
|
||||
ComponentKey app1Key = new ComponentKey(app1.getTargetComponent(), app1.user);
|
||||
ComponentKey app2Key = new ComponentKey(app2.getTargetComponent(), app2.user);
|
||||
mSplitSelectStateController.setLaunchingCuj(cuj);
|
||||
InteractionJankMonitorWrapper.begin(appPairIcon, cuj);
|
||||
|
||||
mSplitSelectStateController.findLastActiveTasksAndRunCallback(
|
||||
Arrays.asList(app1Key, app2Key),
|
||||
false /* findExactPairMatch */,
|
||||
@@ -359,8 +343,7 @@ public class AppPairsController {
|
||||
&& !lastActiveTasksOfAppPair.contains(runningTaskId2)) {
|
||||
// Neither A nor B are on screen, so just launch a new app pair
|
||||
// normally.
|
||||
launchAppPair(launchingIconView,
|
||||
CUJ_LAUNCHER_LAUNCH_APP_PAIR_FROM_TASKBAR);
|
||||
launchAppPair(launchingIconView);
|
||||
} else {
|
||||
// Exactly one app (A or B) is on-screen, so we have to launch the other
|
||||
// on the appropriate side.
|
||||
@@ -405,8 +388,7 @@ public class AppPairsController {
|
||||
|
||||
if (!task1IsOnScreen && !task2IsOnScreen) {
|
||||
// Neither App A nor App B are on-screen, launch the app pair normally.
|
||||
launchAppPair(launchingIconView,
|
||||
CUJ_LAUNCHER_LAUNCH_APP_PAIR_FROM_TASKBAR);
|
||||
launchAppPair(launchingIconView);
|
||||
} else {
|
||||
// Either A or B is on-screen, so launch the other on the appropriate
|
||||
// side.
|
||||
|
||||
@@ -104,7 +104,6 @@ import com.android.quickstep.views.SplitInstructionsView;
|
||||
import com.android.systemui.animation.RemoteAnimationRunnerCompat;
|
||||
import com.android.systemui.shared.recents.model.Task;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
|
||||
import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition;
|
||||
import com.android.wm.shell.splitscreen.ISplitSelectListener;
|
||||
|
||||
@@ -152,12 +151,6 @@ public class SplitSelectStateController {
|
||||
/** True when the first selected split app is being launched in fullscreen. */
|
||||
private boolean mLaunchingFirstAppFullscreen;
|
||||
|
||||
/**
|
||||
* Should be a constant from {@link com.android.internal.jank.Cuj} or -1, does not need to be
|
||||
* set for all launches.
|
||||
*/
|
||||
private int mLaunchCuj = -1;
|
||||
|
||||
private FloatingTaskView mFirstFloatingTaskView;
|
||||
private SplitInstructionsView mSplitInstructionsView;
|
||||
|
||||
@@ -714,10 +707,6 @@ public class SplitSelectStateController {
|
||||
return mSplitAnimationController;
|
||||
}
|
||||
|
||||
public void setLaunchingCuj(int launchCuj) {
|
||||
mLaunchCuj = launchCuj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Requires Shell Transitions
|
||||
*/
|
||||
@@ -861,11 +850,6 @@ public class SplitSelectStateController {
|
||||
mSplitInstructionsView = null;
|
||||
mLaunchingFirstAppFullscreen = false;
|
||||
|
||||
if (mLaunchCuj != -1) {
|
||||
InteractionJankMonitorWrapper.end(mLaunchCuj);
|
||||
}
|
||||
mLaunchCuj = -1;
|
||||
|
||||
if (mSessionInstanceIds != null) {
|
||||
mStatsLogManager.logger()
|
||||
.withInstanceId(mSessionInstanceIds.second)
|
||||
|
||||
@@ -105,7 +105,7 @@ class AppPairsControllerTest {
|
||||
whenever(mockTopTaskTracker.getCachedTopTask(any())).thenReturn(mockCachedTaskInfo)
|
||||
whenever(mockTask1.getKey()).thenReturn(mockTaskKey1)
|
||||
whenever(mockTask2.getKey()).thenReturn(mockTaskKey2)
|
||||
doNothing().whenever(spyAppPairsController).launchAppPair(any(), any())
|
||||
doNothing().whenever(spyAppPairsController).launchAppPair(any())
|
||||
doNothing()
|
||||
.whenever(spyAppPairsController)
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull())
|
||||
@@ -210,7 +210,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchAppPair and launchToSide were never called
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, never())
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull())
|
||||
}
|
||||
@@ -234,7 +234,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_BOTTOM_OR_RIGHT))
|
||||
}
|
||||
@@ -258,7 +258,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_TOP_OR_LEFT))
|
||||
}
|
||||
@@ -282,7 +282,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_BOTTOM_OR_RIGHT))
|
||||
}
|
||||
@@ -306,7 +306,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_TOP_OR_LEFT))
|
||||
}
|
||||
@@ -330,7 +330,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchAppPair was called
|
||||
verify(spyAppPairsController, times(1)).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, times(1)).launchAppPair(any())
|
||||
verify(spyAppPairsController, never())
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull())
|
||||
}
|
||||
@@ -354,7 +354,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_BOTTOM_OR_RIGHT))
|
||||
}
|
||||
@@ -378,7 +378,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchToSide was called with the correct arguments
|
||||
verify(spyAppPairsController, never()).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, never()).launchAppPair(any())
|
||||
verify(spyAppPairsController, times(1))
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), eq(STAGE_POSITION_TOP_OR_LEFT))
|
||||
}
|
||||
@@ -402,7 +402,7 @@ class AppPairsControllerTest {
|
||||
callback.accept(arrayOf(mockTask1, mockTask2))
|
||||
|
||||
// Verify that launchAppPair was called
|
||||
verify(spyAppPairsController, times(1)).launchAppPair(any(), any())
|
||||
verify(spyAppPairsController, times(1)).launchAppPair(any())
|
||||
verify(spyAppPairsController, never())
|
||||
.launchToSide(anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull())
|
||||
}
|
||||
|
||||
@@ -22,8 +22,6 @@ import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.launcher3.BubbleTextView;
|
||||
import com.android.launcher3.ButtonDropTarget;
|
||||
import com.android.launcher3.CellLayout;
|
||||
@@ -60,7 +58,6 @@ import com.android.launcher3.widget.util.WidgetSizes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Launcher> {
|
||||
|
||||
@@ -176,7 +173,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
|
||||
} else if (action == MOVE) {
|
||||
return beginAccessibleDrag(host, item, fromKeyboard);
|
||||
} else if (action == ADD_TO_WORKSPACE) {
|
||||
return addToWorkspace(item, true /*accessibility*/, null /*finishCallback*/);
|
||||
return addToWorkspace(item, true);
|
||||
} else if (action == MOVE_TO_WORKSPACE) {
|
||||
return moveToWorkspace(item);
|
||||
} else if (action == RESIZE) {
|
||||
@@ -387,19 +384,13 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
|
||||
* @param item item to be added
|
||||
* @param accessibility true if the first item to be added to the workspace
|
||||
* should be focused for accessibility.
|
||||
* @param finishCallback Callback which will be run after this item has been added
|
||||
* and the view has been transitioned to the workspace, or on failure.
|
||||
*
|
||||
* @return true if the item could be successfully added
|
||||
*/
|
||||
public boolean addToWorkspace(ItemInfo item, boolean accessibility,
|
||||
@Nullable Consumer<Boolean> finishCallback) {
|
||||
public boolean addToWorkspace(ItemInfo item, boolean accessibility) {
|
||||
final int[] coordinates = new int[2];
|
||||
final int screenId = findSpaceOnWorkspace(item, coordinates);
|
||||
if (screenId == -1) {
|
||||
if (finishCallback != null) {
|
||||
finishCallback.accept(false /*success*/);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
mContext.getStateManager().goToState(NORMAL, true, forSuccessCallback(() -> {
|
||||
@@ -409,7 +400,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
|
||||
LauncherSettings.Favorites.CONTAINER_DESKTOP,
|
||||
screenId, coordinates[0], coordinates[1]);
|
||||
|
||||
bindItem(item, accessibility, finishCallback);
|
||||
bindItem(item, accessibility);
|
||||
announceConfirmation(R.string.item_added_to_workspace);
|
||||
} else if (item instanceof PendingAddItemInfo) {
|
||||
PendingAddItemInfo info = (PendingAddItemInfo) item;
|
||||
@@ -422,7 +413,7 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
|
||||
mContext.getModelWriter().addItemToDatabase(info,
|
||||
LauncherSettings.Favorites.CONTAINER_DESKTOP,
|
||||
screenId, coordinates[0], coordinates[1]);
|
||||
bindItem(info, accessibility, finishCallback);
|
||||
bindItem(info, accessibility);
|
||||
} else if (item instanceof FolderInfo fi) {
|
||||
Workspace<?> workspace = mContext.getWorkspace();
|
||||
workspace.snapToPage(workspace.getPageIndexForScreenId(screenId));
|
||||
@@ -432,30 +423,23 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate<Lau
|
||||
fi.contents.forEach(member -> {
|
||||
mContext.getModelWriter().addItemToDatabase(member, fi.id, -1, -1, -1);
|
||||
});
|
||||
bindItem(fi, accessibility, finishCallback);
|
||||
bindItem(fi, accessibility);
|
||||
}
|
||||
}));
|
||||
return true;
|
||||
}
|
||||
|
||||
private void bindItem(ItemInfo item, boolean focusForAccessibility,
|
||||
@Nullable Consumer<Boolean> finishCallback) {
|
||||
private void bindItem(ItemInfo item, boolean focusForAccessibility) {
|
||||
View view = mContext.getItemInflater().inflateItem(item, mContext.getModelWriter());
|
||||
if (view == null) {
|
||||
if (finishCallback != null) {
|
||||
finishCallback.accept(false /*success*/);
|
||||
}
|
||||
return;
|
||||
}
|
||||
AnimatorSet anim = new AnimatorSet();
|
||||
anim.addListener(forEndCallback((success) -> {
|
||||
if (focusForAccessibility) {
|
||||
view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
|
||||
}
|
||||
if (finishCallback != null) {
|
||||
finishCallback.accept(success);
|
||||
}
|
||||
}));
|
||||
AnimatorSet anim = null;
|
||||
if (focusForAccessibility) {
|
||||
anim = new AnimatorSet();
|
||||
anim.addListener(forEndCallback(
|
||||
() -> view.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)));
|
||||
}
|
||||
mContext.bindInflatedItems(Collections.singletonList(Pair.create(item, view)), anim);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user