Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2843c5bf authored by Victor Truong's avatar Victor Truong
Browse files

Add overlayfinishing state.

There was an error due to unbind during an async function causing the
connection to be set to null before unbind is called.
Add overlayfinishing state to prevent overlay finishing consumer to be
added twice causing a NullPointerException.

Bug: 267335683
Test: Manually tested to see that the error can no longer be repro'd.
Change-Id: I1cfb5bd68c6568e304bb55064794aa0e09075d56
parent 56e67e63
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -234,6 +234,7 @@ public class DreamService extends Service implements Window.Callback {
    private boolean mCanDoze;
    private boolean mDozing;
    private boolean mWindowless;
    private boolean mOverlayFinishing;
    private int mDozeScreenState = Display.STATE_UNKNOWN;
    private int mDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;

@@ -1051,6 +1052,7 @@ public class DreamService extends Service implements Window.Callback {
        // We must unbind from any overlay connection if we are unbound before finishing.
        if (mOverlayConnection != null) {
            mOverlayConnection.unbind();
            mOverlayConnection = null;
        }

        return super.onUnbind(intent);
@@ -1067,7 +1069,9 @@ public class DreamService extends Service implements Window.Callback {
        // 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) {
        if (mOverlayConnection != null && !mOverlayFinishing) {
            // Set mOverlayFinish to true to only allow this consumer to be added once.
            mOverlayFinishing = true;
            mOverlayConnection.addConsumer(overlay -> {
                try {
                    overlay.endDream();