Change onTaskInfoChanged to only use display id from task info.
Fixes a potential NPE where task appears before display and does not have a valid Display object to reference. Bug: b/264218571 Test: atest MultiWindowTests#testDisallowReparentOperationWhenInLockedTask Change-Id: I9191a1ee85842873bedede9745c9f9b11ea42b99
This commit is contained in:
@@ -129,11 +129,11 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
|
||||
@Override
|
||||
public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
|
||||
final State state = mTasks.get(taskInfo.taskId);
|
||||
state.mTaskInfo = taskInfo;
|
||||
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Freeform Task Info Changed: #%d",
|
||||
taskInfo.taskId);
|
||||
mWindowDecorationViewModel.onTaskInfoChanged(state.mTaskInfo);
|
||||
|
||||
mWindowDecorationViewModel.onTaskInfoChanged(taskInfo);
|
||||
state.mTaskInfo = taskInfo;
|
||||
if (DesktopModeStatus.isAnyEnabled()) {
|
||||
mDesktopModeTaskRepository.ifPresent(repository -> {
|
||||
if (taskInfo.isVisible) {
|
||||
|
||||
@@ -123,10 +123,11 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
|
||||
public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
|
||||
final State state = mTasks.get(taskInfo.taskId);
|
||||
final Point oldPositionInParent = state.mTaskInfo.positionInParent;
|
||||
state.mTaskInfo = taskInfo;
|
||||
|
||||
if (mWindowDecorViewModelOptional.isPresent()) {
|
||||
mWindowDecorViewModelOptional.get().onTaskInfoChanged(state.mTaskInfo);
|
||||
mWindowDecorViewModelOptional.get().onTaskInfoChanged(taskInfo);
|
||||
}
|
||||
state.mTaskInfo = taskInfo;
|
||||
if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
|
||||
updateRecentsForVisibleFullscreenTask(taskInfo);
|
||||
|
||||
|
||||
@@ -153,12 +153,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
|
||||
@Override
|
||||
public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
|
||||
final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskInfo.taskId);
|
||||
|
||||
if (decoration == null) return;
|
||||
final RunningTaskInfo oldTaskInfo = decoration.mTaskInfo;
|
||||
|
||||
int oldDisplayId = decoration.mDisplay.getDisplayId();
|
||||
if (taskInfo.displayId != oldDisplayId) {
|
||||
removeTaskFromEventReceiver(oldDisplayId);
|
||||
if (taskInfo.displayId != oldTaskInfo.displayId) {
|
||||
removeTaskFromEventReceiver(oldTaskInfo.displayId);
|
||||
incrementEventReceiverTasks(taskInfo.displayId);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user