diff options
| author | 2023-01-28 01:47:59 +0000 | |
|---|---|---|
| committer | 2023-01-28 01:47:59 +0000 | |
| commit | e8120a0d28f2c5d9ad343500461ae8c976f73fcc (patch) | |
| tree | 4b6cce0a82420c88bd4e81c4da1e5bfb935776e1 | |
| parent | f8448a24483093118a886aab30342e0749ec174a (diff) | |
| parent | 52618fbbeb3a774595c8b4fc68f62c940cabe96d (diff) | |
Merge "Signal dream end to overlay in finish()."
| -rw-r--r-- | core/java/android/service/dreams/DreamService.java | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java index d3788862b6c0..cbe1ded3b2df 100644 --- a/core/java/android/service/dreams/DreamService.java +++ b/core/java/android/service/dreams/DreamService.java @@ -1050,6 +1050,24 @@ public class DreamService extends Service implements Window.Callback { * </p> */ public final void finish() { + // If there is an active overlay connection, signal that the dream is ending before + // continuing. Note that the overlay cannot rely on the unbound state, since another dream + // might have bound to it in the meantime. + if (mOverlayConnection != null) { + mOverlayConnection.addConsumer(overlay -> { + try { + overlay.endDream(); + mOverlayConnection.unbind(); + mOverlayConnection = null; + finish(); + } catch (RemoteException e) { + Log.e(mTag, "could not inform overlay of dream end:" + e); + } + }); + mOverlayConnection.clearConsumers(); + return; + } + if (mDebug) Slog.v(mTag, "finish(): mFinished=" + mFinished); Activity activity = mActivity; @@ -1066,10 +1084,6 @@ public class DreamService extends Service implements Window.Callback { } mFinished = true; - if (mOverlayConnection != null) { - mOverlayConnection.unbind(); - } - if (mDreamToken == null) { if (mDebug) Slog.v(mTag, "finish() called when not attached."); stopSelf(); @@ -1389,17 +1403,6 @@ public class DreamService extends Service implements Window.Callback { @Override public void onViewDetachedFromWindow(View v) { - if (mOverlayConnection != null) { - mOverlayConnection.addConsumer(overlay -> { - try { - overlay.endDream(); - } catch (RemoteException e) { - Log.e(mTag, "could not inform overlay of dream end:" + e); - } - }); - mOverlayConnection.clearConsumers(); - } - if (mActivity == null || !mActivity.isChangingConfigurations()) { // Only stop the dream if the view is not detached by relaunching // activity for configuration changes. It is important to also clear @@ -1408,6 +1411,10 @@ public class DreamService extends Service implements Window.Callback { mActivity = null; finish(); } + + if (mOverlayConnection != null && mDreamStartOverlayConsumer != null) { + mOverlayConnection.removeConsumer(mDreamStartOverlayConsumer); + } } }); } |