Handle the case where launch root is not attached
- Throw illegalstateException if the task that is being set as launch root task is not attached to the wm hierarchy - in other words: when it doesn't have a display area. - This makes sure that system server doesn't crash with NPE when this happens. Bug: 283152174 Test: Tested manually using the car portrait target Change-Id: I330560cbb1ecf8f267c37e1696084b6872c3068e
This commit is contained in:
@@ -845,11 +845,14 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
|
||||
case HIERARCHY_OP_TYPE_SET_LAUNCH_ROOT: {
|
||||
final WindowContainer wc = WindowContainer.fromBinder(hop.getContainer());
|
||||
final Task task = wc != null ? wc.asTask() : null;
|
||||
if (task != null) {
|
||||
if (task == null) {
|
||||
throw new IllegalArgumentException("Cannot set non-task as launch root: " + wc);
|
||||
} else if (task.getTaskDisplayArea() == null) {
|
||||
throw new IllegalArgumentException("Cannot set a task without display area as "
|
||||
+ "launch root: " + wc);
|
||||
} else {
|
||||
task.getDisplayArea().setLaunchRootTask(task,
|
||||
hop.getWindowingModes(), hop.getActivityTypes());
|
||||
} else {
|
||||
throw new IllegalArgumentException("Cannot set non-task as launch root: " + wc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user