From 44bc4daff31d2d6f632695008a0e5f5272ff4f56 Mon Sep 17 00:00:00 2001 From: Filip Gruszczynski Date: Sat, 3 Oct 2015 13:59:49 -0700 Subject: [PATCH] Only request resize for tasks on the freeform stack. This fixes a crash during orientation changes, where window manager requests a resize for a docked task, but activity manager throws an exception since dock tasks can only be resized when their stack is being resized. Bug: 24575031 Change-Id: I954c4e6ae60931b30200b10c8a4834b0a5757606 --- core/java/android/app/ActivityThread.java | 9 +++++++++ services/core/java/com/android/server/wm/Task.java | 9 ++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 4b8efab3e59e9..05a68ad786a6b 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -1368,6 +1368,7 @@ public final class ActivityThread { Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); } break; case RELAUNCH_ACTIVITY: { + Log.d(TAG, "handleRelaunchActivity: " + msg.obj); Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityRestart"); ActivityClientRecord r = (ActivityClientRecord)msg.obj; handleRelaunchActivity(r); @@ -3227,6 +3228,10 @@ public final class ActivityThread { if (r != null) { final Activity a = r.activity; + if (a.toString().contains("Recents")) { + Log.d(TAG, "handleResumeActivity ativity=" + a + ", windowAdded=" + a.mWindowAdded + + " " + Log.getStackTraceString(new Throwable())); + } if (localLOGV) Slog.v( TAG, "Resume " + r + " started activity: " + @@ -3969,6 +3974,10 @@ public final class ActivityThread { r.window.clearContentView(); } } else { + if (r.activity.toString().contains("Recents")) { + Log.d(TAG, "removeViewImmediate activity=" + r.activity + " " + + Log.getStackTraceString(new Throwable())); + } wm.removeViewImmediate(v); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index af33880e91b1a..c4600e02dfb92 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -294,9 +294,12 @@ class Task implements DimLayer.DimLayerUser { if (setBounds(mTmpRect2, mOverrideConfig) != BOUNDS_CHANGE_NONE) { // Post message to inform activity manager of the bounds change simulating // a one-way call. We do this to prevent a deadlock between window manager - // lock and activity manager lock been held. - mService.mH.sendMessage(mService.mH.obtainMessage( - RESIZE_TASK, mTaskId, RESIZE_MODE_SYSTEM_SCREEN_ROTATION, mBounds)); + // lock and activity manager lock been held. Only tasks within the freeform stack + // are resizeable independently of their stack resizing. + if (mStack.mStackId == FREEFORM_WORKSPACE_STACK_ID) { + mService.mH.sendMessage(mService.mH.obtainMessage( + RESIZE_TASK, mTaskId, RESIZE_MODE_SYSTEM_SCREEN_ROTATION, mBounds)); + } } }