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

Commit 7e45bd46 authored by Bryce Lee's avatar Bryce Lee Committed by Automerger Merge Worker
Browse files

Merge "Marshal dream overlay connection logic with Handler." into tm-qpr-dev am: 0f588ae5

parents 2fefe88e 0f588ae5
Loading
Loading
Loading
Loading
+35 −23
Original line number Diff line number Diff line
@@ -251,6 +251,8 @@ public class DreamService extends Service implements Window.Callback {
        // A Queue of pending requests to execute on the overlay.
        private final ArrayDeque<Consumer<IDreamOverlay>> mRequests;

        private Handler mHandler = new Handler(Looper.getMainLooper());

        private boolean mBound;

        OverlayConnection() {
@@ -259,6 +261,7 @@ public class DreamService extends Service implements Window.Callback {

        public void bind(Context context, @Nullable ComponentName overlayService,
                ComponentName dreamService) {
            mHandler.post(() -> {
                if (overlayService == null) {
                    return;
                }
@@ -273,20 +276,25 @@ public class DreamService extends Service implements Window.Callback {
                context.bindService(overlayIntent,
                        this, Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE);
                mBound = true;
            });
        }

        public void unbind(Context context) {
            mHandler.post(() -> {
                if (!mBound) {
                    return;
                }

                context.unbindService(this);
                mBound = false;
            });
        }

        public void request(Consumer<IDreamOverlay> request) {
            mHandler.post(() -> {
                mRequests.push(request);
                evaluate();
            });
        }

        private void evaluate() {
@@ -304,15 +312,19 @@ public class DreamService extends Service implements Window.Callback {

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mHandler.post(() -> {
                // Store Overlay and execute pending requests.
                mOverlay = IDreamOverlay.Stub.asInterface(service);
                evaluate();
            });
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mHandler.post(() -> {
                // Clear Overlay binder to prevent further request processing.
                mOverlay = null;
            });
        }
    }