diff options
| author | wilsonshih <wilsonshih@google.com> | 2020-08-18 21:08:22 +0800 |
|---|---|---|
| committer | Wei Sheng Shih <wilsonshih@google.com> | 2020-08-21 05:10:11 +0000 |
| commit | 283da3bf5ffb0fe39f69171215a7cd950238bca6 (patch) | |
| tree | 5550373417205ff8c350a60fa30b170d4dbe000a /core/java/android/app/ActivityThread.java | |
| parent | 710634d502bc2eca08ffffb839909389373973a8 (diff) | |
Fixes activity didn't receive windowing mode change while exitPip
When user dismiss pip, WindowOrganizerController#applyChanges would
first try to resize pinned task, this will cause the activity to do
ensureActivityConfiguration and which could trigger configuration
change or relaunch the client activity. However, the windowing mode was
not change yet, so the windowing mode change would be scheduled in
another configuration change to client. But since the windowing mode
is not public, client will treat there is difference so skip that
configuration. To ensure client receive windowing mode change, check it
before check configuration difference.
And in order to prevent the WindowState#reportResized send before
ActivityRelaunchItem send to client, skip resize if we already know
that activity is going to relaunch.
Bug: 165051679
Test: atest ActivityLifecyclePipTests ActivityLifecycleSplitScreenTests
ActivityLifecycleTopResumedStateTests PinnedStackTests SplitScreenTests
ActivityLifecycleKeyguardTests
Change-Id: I7b96bbcf1a71ff75751e14db44c03261862bc857
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index f6b045349219..caca05a9e3b3 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5656,6 +5656,11 @@ public final class ActivityThread extends ClientTransactionHandler { throw new IllegalArgumentException("Activity token not set. Is the activity attached?"); } + // WindowConfiguration differences aren't considered as public, check it separately. + // multi-window / pip mode changes, if any, should be sent before the configuration + // change callback, see also PinnedStackTests#testConfigurationChangeOrderDuringTransition + handleWindowingModeChangeIfNeeded(activity, newConfig); + final boolean movedToDifferentDisplay = isDifferentDisplay(activity, displayId); boolean shouldReportChange = false; if (activity.mCurrentConfig == null) { @@ -5708,11 +5713,6 @@ public final class ActivityThread extends ClientTransactionHandler { } if (shouldReportChange) { - // multi-window / pip mode changes, if any, should be sent before the configuration - // change callback, see also - // PinnedStackTests#testConfigurationChangeOrderDuringTransition - handleWindowingModeChangeIfNeeded(activity, newConfig); - activity.mCalled = false; activity.onConfigurationChanged(configToReport); if (!activity.mCalled) { |
