mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Merge "Ignore taskbar launch request if app(s) are already running" into main
This commit is contained in:
@@ -104,6 +104,13 @@ public class FallbackTaskbarUIController extends TaskbarUIController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isInOverview() {
|
||||
TopTaskTracker.CachedTaskInfo topTask = TopTaskTracker.INSTANCE
|
||||
.get(mControllers.taskbarActivityContext).getCachedTopTask(true);
|
||||
return topTask.isRecentsTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecentsView getRecentsView() {
|
||||
return mRecentsActivity.getOverviewPanel();
|
||||
|
||||
@@ -42,7 +42,9 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_V
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.ActivityManager.RunningTaskInfo;
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -130,10 +132,13 @@ import com.android.systemui.unfold.updates.RotationChangeProvider;
|
||||
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* The {@link ActivityContext} with which we inflate Taskbar-related Views. This allows UI elements
|
||||
@@ -1147,15 +1152,25 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
@Nullable Task foundTask = foundTasks[0];
|
||||
if (foundTask != null) {
|
||||
TaskView foundTaskView = recents.getTaskViewByTaskId(foundTask.key.id);
|
||||
if (foundTaskView != null
|
||||
&& foundTaskView.isVisibleToUser()) {
|
||||
TestLogging.recordEvent(
|
||||
TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon");
|
||||
foundTaskView.launchTasks();
|
||||
return;
|
||||
if (foundTaskView != null) {
|
||||
// The foundTaskView contains the 1-2 taskIds we are looking for.
|
||||
// If we are already in-app and running the correct tasks, no need
|
||||
// to do anything.
|
||||
if (FeatureFlags.enableAppPairs()
|
||||
&& isAlreadyInApp(foundTaskView.getTaskIds())) {
|
||||
return;
|
||||
}
|
||||
// If we are in Overview and the TaskView tile is visible, expand that
|
||||
// tile.
|
||||
if (foundTaskView.isVisibleToUser()) {
|
||||
TestLogging.recordEvent(
|
||||
TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon");
|
||||
foundTaskView.launchTasks();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If none of the above cases apply, launch a new app or app pair.
|
||||
if (findExactPairMatch) {
|
||||
// We did not find the app pair we were looking for, so launch one.
|
||||
recents.getSplitSelectController().getAppPairsController().launchAppPair(
|
||||
@@ -1167,6 +1182,27 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a given list of taskIds are all already running in-app.
|
||||
*/
|
||||
private boolean isAlreadyInApp(int[] ids) {
|
||||
if (mControllers.uiController.isInOverview()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RunningTaskInfo[] currentlyRunningTasks = ActivityManagerWrapper.getInstance()
|
||||
.getRunningTasks(false /* filterOnlyVisibleRecents */);
|
||||
Set<Integer> currentlyRunningIds = Arrays.stream(currentlyRunningTasks)
|
||||
.map(task -> task.taskId).collect(Collectors.toSet());
|
||||
|
||||
for (int id : ids) {
|
||||
if (id != ActivityTaskManager.INVALID_TASK_ID && !currentlyRunningIds.contains(id)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startItemInfoActivity(ItemInfo info) {
|
||||
Intent intent = new Intent(info.getIntent())
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
Reference in New Issue
Block a user