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

Commit 541aed72 authored by Andrii Kulian's avatar Andrii Kulian
Browse files

Use main thread executor in the split controller

Running on non-main queue causes out-of-order issues.

Bug: 190433398
Test: Placehoder sample
Change-Id: If94d4778f9ba9ab2664fea904aac150c2b097734
parent a22be8fb
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -26,7 +26,9 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.window.TaskFragmentAppearedInfo;
import android.window.TaskFragmentInfo;
import android.window.WindowContainerTransaction;
@@ -40,6 +42,7 @@ import androidx.window.extensions.ExtensionTaskFragment;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

/**
 * Main controller class that manages split states and presentation.
@@ -57,8 +60,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
    private SplitOrganizerCallback mSplitOrganizerCallback;

    public SplitController() {
        mPresenter = new SplitPresenter(ActivityThread.currentActivityThread().getExecutor(),
                this);
        mPresenter = new SplitPresenter(new MainThreadExecutor(), this);
        // Register a callback to be notified about activities being created.
        ActivityThread.currentActivityThread().getApplication().registerActivityLifecycleCallbacks(
                new LifecycleCallbacks());
@@ -577,4 +579,14 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
        public void onActivityDestroyed(Activity activity) {
        }
    }

    /** Executor that posts on the main application thread. */
    private static class MainThreadExecutor implements Executor {
        private final Handler handler = new Handler(Looper.getMainLooper());

        @Override
        public void execute(Runnable r) {
            handler.post(r);
        }
    }
}