Loading quickstep/src/com/android/quickstep/TopTaskTracker.java +53 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITIO import android.annotation.UserIdInt; import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading @@ -47,6 +48,7 @@ import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.wm.shell.splitscreen.ISplitScreenListener; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; Loading @@ -61,6 +63,10 @@ import java.util.List; public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskStackChangeListener, SafeCloseable { private static final String TAG = "TopTaskTracker"; private static final boolean DEBUG = true; public static MainThreadInitializedObject<TopTaskTracker> INSTANCE = new MainThreadInitializedObject<>(TopTaskTracker::new); Loading Loading @@ -92,10 +98,19 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onTaskRemoved(int taskId) { mOrderedTaskList.removeIf(rto -> rto.taskId == taskId); if (DEBUG) { Log.i(TAG, "onTaskRemoved: taskId=" + taskId); } } @Override public void onTaskMovedToFront(RunningTaskInfo taskInfo) { if (!mOrderedTaskList.isEmpty() && mOrderedTaskList.getFirst().taskId != taskInfo.taskId && DEBUG) { Log.i(TAG, "onTaskMovedToFront: (moved taskInfo to front) taskId=" + taskInfo.taskId + ", baseIntent=" + taskInfo.baseIntent); } mOrderedTaskList.removeIf(rto -> rto.taskId == taskInfo.taskId); mOrderedTaskList.addFirst(taskInfo); Loading @@ -106,6 +121,11 @@ public class TopTaskTracker extends ISplitScreenListener.Stub final RunningTaskInfo topTaskOnHomeDisplay = mOrderedTaskList.stream() .filter(rto -> rto.displayId == DEFAULT_DISPLAY).findFirst().orElse(null); if (topTaskOnHomeDisplay != null) { if (DEBUG) { Log.i(TAG, "onTaskMovedToFront: (removing top task on home display) taskId=" + topTaskOnHomeDisplay.taskId + ", baseIntent=" + topTaskOnHomeDisplay.baseIntent); } mOrderedTaskList.removeIf(rto -> rto.taskId == topTaskOnHomeDisplay.taskId); mOrderedTaskList.addFirst(topTaskOnHomeDisplay); } Loading @@ -119,6 +139,10 @@ public class TopTaskTracker extends ISplitScreenListener.Stub if (info.taskId != taskInfo.taskId && info.taskId != mMainStagePosition.taskId && info.taskId != mSideStagePosition.taskId) { if (DEBUG) { Log.i(TAG, "onTaskMovedToFront: (removing task list overflow) taskId=" + taskInfo.taskId + ", baseIntent=" + taskInfo.baseIntent); } itr.remove(); return; } Loading @@ -128,6 +152,9 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onStagePositionChanged(@StageType int stage, @StagePosition int position) { if (DEBUG) { Log.i(TAG, "onStagePositionChanged: stage=" + stage + ", position=" + position); } if (stage == SplitConfigurationOptions.STAGE_TYPE_MAIN) { mMainStagePosition.stagePosition = position; } else { Loading @@ -137,6 +164,10 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) { if (DEBUG) { Log.i(TAG, "onTaskStageChanged: taskId=" + taskId + ", stage=" + stage + ", visible=" + visible); } // If a task is not visible anymore or has been moved to undefined, stop tracking it. if (!visible || stage == SplitConfigurationOptions.STAGE_TYPE_UNDEFINED) { if (mMainStagePosition.taskId == taskId) { Loading @@ -156,11 +187,18 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onActivityPinned(String packageName, int userId, int taskId, int stackId) { if (DEBUG) { Log.i(TAG, "onActivityPinned: packageName=" + packageName + ", userId=" + userId + ", stackId=" + stackId); } mPinnedTaskId = taskId; } @Override public void onActivityUnpinned() { if (DEBUG) { Log.i(TAG, "onActivityUnpinned"); } mPinnedTaskId = INVALID_TASK_ID; } Loading Loading @@ -212,6 +250,21 @@ public class TopTaskTracker extends ISplitScreenListener.Stub return new CachedTaskInfo(tasks); } public void dump(String prefix, PrintWriter writer) { writer.println(prefix + "TopTaskTracker:"); writer.println(prefix + "\tmOrderedTaskList=["); for (RunningTaskInfo taskInfo : mOrderedTaskList) { writer.println(prefix + "\t\t(taskId=" + taskInfo.taskId + "; baseIntent=" + taskInfo.baseIntent + "; isRunning=" + taskInfo.isRunning + ")"); } writer.println(prefix + "\t]"); writer.println(prefix + "\tmMainStagePosition=" + mMainStagePosition); writer.println(prefix + "\tmSideStagePosition=" + mSideStagePosition); writer.println(prefix + "\tmPinnedTaskId=" + mPinnedTaskId); } /** * Class to provide information about a task which can be safely cached and do not change * during the lifecycle of the task. Loading quickstep/src/com/android/quickstep/TouchInteractionService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1546,6 +1546,7 @@ public class TouchInteractionService extends Service { pw.println("\tmConsumer=" + mConsumer.getName()); ActiveGestureLog.INSTANCE.dump("", pw); RecentsModel.INSTANCE.get(this).dump("", pw); TopTaskTracker.INSTANCE.get(this).dump("", pw); if (mTaskAnimationManager != null) { mTaskAnimationManager.dump("", pw); } Loading src/com/android/launcher3/util/SplitConfigurationOptions.java +6 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,12 @@ public final class SplitConfigurationOptions { public int stagePosition = STAGE_POSITION_UNDEFINED; @StageType public int stageType = STAGE_TYPE_UNDEFINED; @Override public String toString() { return "SplitStageInfo { taskId=" + taskId + ", stagePosition=" + stagePosition + ", stageType=" + stageType + " }"; } } public static StatsLogManager.EventEnum getLogEventForPosition(@StagePosition int position) { Loading Loading
quickstep/src/com/android/quickstep/TopTaskTracker.java +53 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITIO import android.annotation.UserIdInt; import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading @@ -47,6 +48,7 @@ import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.wm.shell.splitscreen.ISplitScreenListener; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; Loading @@ -61,6 +63,10 @@ import java.util.List; public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskStackChangeListener, SafeCloseable { private static final String TAG = "TopTaskTracker"; private static final boolean DEBUG = true; public static MainThreadInitializedObject<TopTaskTracker> INSTANCE = new MainThreadInitializedObject<>(TopTaskTracker::new); Loading Loading @@ -92,10 +98,19 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onTaskRemoved(int taskId) { mOrderedTaskList.removeIf(rto -> rto.taskId == taskId); if (DEBUG) { Log.i(TAG, "onTaskRemoved: taskId=" + taskId); } } @Override public void onTaskMovedToFront(RunningTaskInfo taskInfo) { if (!mOrderedTaskList.isEmpty() && mOrderedTaskList.getFirst().taskId != taskInfo.taskId && DEBUG) { Log.i(TAG, "onTaskMovedToFront: (moved taskInfo to front) taskId=" + taskInfo.taskId + ", baseIntent=" + taskInfo.baseIntent); } mOrderedTaskList.removeIf(rto -> rto.taskId == taskInfo.taskId); mOrderedTaskList.addFirst(taskInfo); Loading @@ -106,6 +121,11 @@ public class TopTaskTracker extends ISplitScreenListener.Stub final RunningTaskInfo topTaskOnHomeDisplay = mOrderedTaskList.stream() .filter(rto -> rto.displayId == DEFAULT_DISPLAY).findFirst().orElse(null); if (topTaskOnHomeDisplay != null) { if (DEBUG) { Log.i(TAG, "onTaskMovedToFront: (removing top task on home display) taskId=" + topTaskOnHomeDisplay.taskId + ", baseIntent=" + topTaskOnHomeDisplay.baseIntent); } mOrderedTaskList.removeIf(rto -> rto.taskId == topTaskOnHomeDisplay.taskId); mOrderedTaskList.addFirst(topTaskOnHomeDisplay); } Loading @@ -119,6 +139,10 @@ public class TopTaskTracker extends ISplitScreenListener.Stub if (info.taskId != taskInfo.taskId && info.taskId != mMainStagePosition.taskId && info.taskId != mSideStagePosition.taskId) { if (DEBUG) { Log.i(TAG, "onTaskMovedToFront: (removing task list overflow) taskId=" + taskInfo.taskId + ", baseIntent=" + taskInfo.baseIntent); } itr.remove(); return; } Loading @@ -128,6 +152,9 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onStagePositionChanged(@StageType int stage, @StagePosition int position) { if (DEBUG) { Log.i(TAG, "onStagePositionChanged: stage=" + stage + ", position=" + position); } if (stage == SplitConfigurationOptions.STAGE_TYPE_MAIN) { mMainStagePosition.stagePosition = position; } else { Loading @@ -137,6 +164,10 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) { if (DEBUG) { Log.i(TAG, "onTaskStageChanged: taskId=" + taskId + ", stage=" + stage + ", visible=" + visible); } // If a task is not visible anymore or has been moved to undefined, stop tracking it. if (!visible || stage == SplitConfigurationOptions.STAGE_TYPE_UNDEFINED) { if (mMainStagePosition.taskId == taskId) { Loading @@ -156,11 +187,18 @@ public class TopTaskTracker extends ISplitScreenListener.Stub @Override public void onActivityPinned(String packageName, int userId, int taskId, int stackId) { if (DEBUG) { Log.i(TAG, "onActivityPinned: packageName=" + packageName + ", userId=" + userId + ", stackId=" + stackId); } mPinnedTaskId = taskId; } @Override public void onActivityUnpinned() { if (DEBUG) { Log.i(TAG, "onActivityUnpinned"); } mPinnedTaskId = INVALID_TASK_ID; } Loading Loading @@ -212,6 +250,21 @@ public class TopTaskTracker extends ISplitScreenListener.Stub return new CachedTaskInfo(tasks); } public void dump(String prefix, PrintWriter writer) { writer.println(prefix + "TopTaskTracker:"); writer.println(prefix + "\tmOrderedTaskList=["); for (RunningTaskInfo taskInfo : mOrderedTaskList) { writer.println(prefix + "\t\t(taskId=" + taskInfo.taskId + "; baseIntent=" + taskInfo.baseIntent + "; isRunning=" + taskInfo.isRunning + ")"); } writer.println(prefix + "\t]"); writer.println(prefix + "\tmMainStagePosition=" + mMainStagePosition); writer.println(prefix + "\tmSideStagePosition=" + mSideStagePosition); writer.println(prefix + "\tmPinnedTaskId=" + mPinnedTaskId); } /** * Class to provide information about a task which can be safely cached and do not change * during the lifecycle of the task. Loading
quickstep/src/com/android/quickstep/TouchInteractionService.java +1 −0 Original line number Diff line number Diff line Loading @@ -1546,6 +1546,7 @@ public class TouchInteractionService extends Service { pw.println("\tmConsumer=" + mConsumer.getName()); ActiveGestureLog.INSTANCE.dump("", pw); RecentsModel.INSTANCE.get(this).dump("", pw); TopTaskTracker.INSTANCE.get(this).dump("", pw); if (mTaskAnimationManager != null) { mTaskAnimationManager.dump("", pw); } Loading
src/com/android/launcher3/util/SplitConfigurationOptions.java +6 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,12 @@ public final class SplitConfigurationOptions { public int stagePosition = STAGE_POSITION_UNDEFINED; @StageType public int stageType = STAGE_TYPE_UNDEFINED; @Override public String toString() { return "SplitStageInfo { taskId=" + taskId + ", stagePosition=" + stagePosition + ", stageType=" + stageType + " }"; } } public static StatsLogManager.EventEnum getLogEventForPosition(@StagePosition int position) { Loading