diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/Transition.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TransitionController.java | 16 |
2 files changed, 27 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index f8736e764a6e..e7c6ff4d887f 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1527,6 +1527,17 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { mTargetDisplays.add(dc); } + for (int i = 0; i < mTargets.size(); ++i) { + final DisplayArea da = mTargets.get(i).mContainer.asDisplayArea(); + if (da == null) continue; + if (da.isVisibleRequested()) { + mController.mValidateDisplayVis.remove(da); + } else { + // In case something accidentally hides a displayarea and nothing shows it again. + mController.mValidateDisplayVis.add(da); + } + } + if (mOverrideOptions != null) { info.setAnimationOptions(mOverrideOptions); if (mOverrideOptions.getType() == ANIM_OPEN_CROSS_PROFILE_APPS) { diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 034299659dd5..a43a6f6292ae 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -150,6 +150,13 @@ class TransitionController { final ArrayList<ActivityRecord> mValidateActivityCompat = new ArrayList<>(); /** + * List of display areas which were last sent as "closing"-type and haven't yet had a + * corresponding "opening"-type transition. A mismatch here is usually related to issues in + * keyguard unlock. + */ + final ArrayList<DisplayArea> mValidateDisplayVis = new ArrayList<>(); + + /** * Currently playing transitions (in the order they were started). When finished, records are * removed from this list. */ @@ -933,6 +940,15 @@ class TransitionController { ar.getSyncTransaction().setPosition(ar.getSurfaceControl(), tmpPos.x, tmpPos.y); } mValidateActivityCompat.clear(); + for (int i = 0; i < mValidateDisplayVis.size(); ++i) { + final DisplayArea da = mValidateDisplayVis.get(i); + if (!da.isAttached() || da.getSurfaceControl() == null) continue; + if (da.isVisibleRequested()) { + Slog.e(TAG, "DisplayArea became visible outside of a transition: " + da); + da.getSyncTransaction().show(da.getSurfaceControl()); + } + } + mValidateDisplayVis.clear(); } /** |