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

Commit f6d89618 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Reduce the amount of I/O done on the UI thread.

There was unnecessary saving of IME settings when changing the state
of the checkboxes, causing ANRs when monkeys are switching between
Settings fragments quickly while other background activity is using
I/O as well. In fact, all I/O should be removed, but this change at least
reduces some of it.

Potential fix for:
Bug: 6414289

Change-Id: Ice96f0f9d921128b27ddbe26519a6791d9f01c75
parent 8f04a6fb
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -66,10 +66,10 @@ public class InputMethodPreference extends CheckBoxPreference
                return;
            }
            if (isChecked()) {
                setChecked(false);
                setChecked(false, true /* save */);
            } else {
                if (mAlwaysChecked) {
                    setChecked(true);
                    setChecked(true, true /* save */);
                } else {
                    showSecurityWarnDialog(mImi, InputMethodPreference.this);
                }
@@ -222,14 +222,25 @@ public class InputMethodPreference extends CheckBoxPreference
        setSummary(summary);
    }

    @Override
    public void setChecked(boolean checked) {
    /**
     * Sets the checkbox state and optionally saves the settings.
     * @param checked whether to check the box
     * @param save whether to save IME settings
     */
    public void setChecked(boolean checked, boolean save) {
        super.setChecked(checked);
        if (save) {
            saveImeSettings();
        }
        updateSummary();
    }

    private void showSecurityWarnDialog(InputMethodInfo imi, final CheckBoxPreference chkPref) {
    @Override
    public void setChecked(boolean checked) {
        setChecked(checked, false);
    }

    private void showSecurityWarnDialog(InputMethodInfo imi, final InputMethodPreference chkPref) {
        if (mDialog != null && mDialog.isShowing()) {
            mDialog.dismiss();
        }
@@ -241,7 +252,7 @@ public class InputMethodPreference extends CheckBoxPreference
                        new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        chkPref.setChecked(true);
                        chkPref.setChecked(true, true);
                    }
                })
                .setNegativeButton(android.R.string.cancel,