From 86df2c575789622a5073ba2f2d0f823a52f9bb1a Mon Sep 17 00:00:00 2001 From: Yuncheol Heo Date: Thu, 28 Jan 2021 09:26:28 -0800 Subject: [PATCH] Fix NPE in TaskView. - TaskInfo can be null before Listener is executed. Bug: 178710250 Test: atest CarDevicePolicyManagerTest Change-Id: I90cd57dbd01692b86924ec1b762e31f91a6cd6e0 --- .../Shell/src/com/android/wm/shell/TaskView.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java index 1df2a4a9030de..bb8a973446645 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/TaskView.java @@ -225,8 +225,9 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback, mTaskOrganizer.applyTransaction(wct); // TODO(b/151449487): Only call callback once we enable synchronization if (mListener != null) { + final int taskId = mTaskInfo.taskId; mListenerExecutor.execute(() -> { - mListener.onTaskVisibilityChanged(mTaskInfo.taskId, mSurfaceCreated); + mListener.onTaskVisibilityChanged(taskId, mSurfaceCreated); }); } } @@ -256,8 +257,10 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback, } if (mListener != null) { + final int taskId = taskInfo.taskId; + final ComponentName baseActivity = taskInfo.baseActivity; mListenerExecutor.execute(() -> { - mListener.onTaskCreated(taskInfo.taskId, taskInfo.baseActivity); + mListener.onTaskCreated(taskId, baseActivity); }); } } @@ -267,8 +270,9 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback, if (mTaskToken == null || !mTaskToken.equals(taskInfo.token)) return; if (mListener != null) { + final int taskId = taskInfo.taskId; mListenerExecutor.execute(() -> { - mListener.onTaskRemovalStarted(taskInfo.taskId); + mListener.onTaskRemovalStarted(taskId); }); } mTaskOrganizer.setInterceptBackPressedOnTaskRoot(mTaskToken, false); @@ -289,8 +293,9 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback, public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) { if (mTaskToken == null || !mTaskToken.equals(taskInfo.token)) return; if (mListener != null) { + final int taskId = taskInfo.taskId; mListenerExecutor.execute(() -> { - mListener.onBackPressedOnTaskRoot(taskInfo.taskId); + mListener.onBackPressedOnTaskRoot(taskId); }); } }