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

Commit 97b8ce1e authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

OverlayPlugin listener method called from main thread

- onPluginDisconnected is being called from non-main thread
causing fatal exception when calling setForcePluginOpen()
- this is a temporary fix

Test: manual
Bug: 123532083
Change-Id: I585c53844244f3acc2f87bc752ad7b564fb7d36d
parent 45289f0b
Loading
Loading
Loading
Loading
+31 −17
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
import android.os.SystemProperties;
import android.os.Trace;
@@ -200,12 +202,16 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
        }
        Dependency.get(InitController.class).executePostInitTasks();
        log.traceEnd();
        final Handler mainHandler = new Handler(Looper.getMainLooper());
        Dependency.get(PluginManager.class).addPluginListener(
                new PluginListener<OverlayPlugin>() {
                    private ArraySet<OverlayPlugin> mOverlays;

                    @Override
                    public void onPluginConnected(OverlayPlugin plugin, Context pluginContext) {
                        mainHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                StatusBar statusBar = getComponent(StatusBar.class);
                                if (statusBar != null) {
                                    plugin.setup(statusBar.getStatusBarWindow(),
@@ -215,20 +221,28 @@ public class SystemUIApplication extends Application implements SysUiServiceProv
                                if (mOverlays == null) mOverlays = new ArraySet<>();
                                if (plugin.holdStatusBarOpen()) {
                                    mOverlays.add(plugin);
                            Dependency.get(StatusBarWindowController.class).setStateListener(b ->
                                    mOverlays.forEach(o -> o.setCollapseDesired(b)));
                            Dependency.get(StatusBarWindowController.class).setForcePluginOpen(
                                    mOverlays.size() != 0);
                                    Dependency.get(StatusBarWindowController.class)
                                            .setStateListener(b -> mOverlays.forEach(
                                                    o -> o.setCollapseDesired(b)));
                                    Dependency.get(StatusBarWindowController.class)
                                            .setForcePluginOpen(mOverlays.size() != 0);

                                }
                            }
                        });
                    }

                    @Override
                    public void onPluginDisconnected(OverlayPlugin plugin) {
                        mainHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                mOverlays.remove(plugin);
                                Dependency.get(StatusBarWindowController.class).setForcePluginOpen(
                                        mOverlays.size() != 0);
                            }
                        });
                    }
                }, OverlayPlugin.class, true /* Allow multiple plugins */);

        mServicesStarted = true;