diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TransitionController.java | 17 | 
2 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 788bfbcd65c9..64b37d496dbc 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7981,6 +7981,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A                  mLastReportedConfiguration.getMergedConfiguration())) {              ensureActivityConfiguration(0 /* globalChanges */, false /* preserveWindow */,                      false /* ignoreVisibility */, true /* isRequestedOrientationChanged */); +            if (mTransitionController.inPlayingTransition(this)) { +                mTransitionController.mValidateActivityCompat.add(this); +            }          }          mAtmService.getTaskChangeNotificationController().notifyActivityRequestedOrientationChanged( diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index a539a4893d4f..b05c6b4839e5 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -30,6 +30,7 @@ import android.annotation.Nullable;  import android.app.ActivityManager;  import android.app.IApplicationThread;  import android.app.WindowConfiguration; +import android.graphics.Point;  import android.graphics.Rect;  import android.os.Handler;  import android.os.IBinder; @@ -141,6 +142,14 @@ class TransitionController {      final ArrayList<ActivityRecord> mValidateCommitVis = new ArrayList<>();      /** +     * List of activity-level participants. ActivityRecord is not expected to change independently, +     * however, recent compatibility logic can now cause this at arbitrary times determined by +     * client code. If it happens during an animation, the surface can be left at the wrong spot. +     * TODO(b/290237710) remove when compat logic is moved. +     */ +    final ArrayList<ActivityRecord> mValidateActivityCompat = new ArrayList<>(); + +    /**       * Currently playing transitions (in the order they were started). When finished, records are       * removed from this list.       */ @@ -905,6 +914,14 @@ class TransitionController {              }          }          mValidateCommitVis.clear(); +        for (int i = 0; i < mValidateActivityCompat.size(); ++i) { +            ActivityRecord ar = mValidateActivityCompat.get(i); +            if (ar.getSurfaceControl() == null) continue; +            final Point tmpPos = new Point(); +            ar.getRelativePosition(tmpPos); +            ar.getSyncTransaction().setPosition(ar.getSurfaceControl(), tmpPos.x, tmpPos.y); +        } +        mValidateActivityCompat.clear();      }      /**  |