Merge "Signal dream end to overlay in finish()." into tm-qpr-dev

This commit is contained in:
Bryce Lee
2023-01-30 17:02:47 +00:00
committed by Android (Google) Code Review

View File

@@ -1064,6 +1064,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;
@@ -1080,10 +1098,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();
@@ -1403,17 +1417,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
@@ -1422,6 +1425,10 @@ public class DreamService extends Service implements Window.Callback {
mActivity = null;
finish();
}
if (mOverlayConnection != null && mDreamStartOverlayConsumer != null) {
mOverlayConnection.removeConsumer(mDreamStartOverlayConsumer);
}
}
});
}