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

Commit 8ab04d4c authored by Evan Laird's avatar Evan Laird
Browse files

Don't send PLUGIN_CHANGED broadcast unless something changed

If a plugin changes the layout (e.g., CameraCutout changing status bar
height), the preference screen will call persistBoolean, which would
always cause PLUGIN_CHANGED to be broadcasted. This causes bad infinite
loops.

Test: install CameraCutout plugin and navigate to Settings > Sysui tuner
> Plugins and watch it loop a lot

Change-Id: Id340bbfb0864508f1895bbd1e6cb2849a839bad8
parent fde6ea8d
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -169,16 +169,23 @@ public class PluginFragment extends PreferenceFragment {
        protected boolean persistBoolean(boolean value) {
            final int desiredState = value ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
            boolean shouldSendBroadcast = false;
            for (int i = 0; i < mInfo.services.length; i++) {
                ComponentName componentName = new ComponentName(mInfo.packageName,
                        mInfo.services[i].name);

                if (mPm.getComponentEnabledSetting(componentName) != desiredState) {
                    mPm.setComponentEnabledSetting(componentName, desiredState,
                            PackageManager.DONT_KILL_APP);
                    shouldSendBroadcast = true;
                }
            }
            if (shouldSendBroadcast) {
                final String pkg = mInfo.packageName;
                final Intent intent = new Intent(PluginManager.PLUGIN_CHANGED,
                        pkg != null ? Uri.fromParts("package", pkg, null) : null);
                getContext().sendBroadcast(intent);
            }
            return true;
        }