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

Commit de5c8613 authored by Rambo Wang's avatar Rambo Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix Settings app ANR due to blocking IDumpstateDevice IPC call" into udc-qpr-dev

parents 290d241b 7d44d327
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import androidx.preference.SwitchPreference;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.utils.ThreadUtils;

import java.util.NoSuchElementException;

@@ -66,23 +67,34 @@ public class EnableVerboseVendorLoggingPreferenceController
        return isIDumpstateDeviceAidlServiceAvailable() || isIDumpstateDeviceV1_1ServiceAvailable();
    }

    @SuppressWarnings("FutureReturnValueIgnored")
    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final boolean isEnabled = (Boolean) newValue;
        setVerboseLoggingEnabled(isEnabled);
        // IDumpstateDevice IPC may be blocking when system is extremely heavily-loaded.
        // Post to background thread to avoid ANR. Ignore the returned Future.
        ThreadUtils.postOnBackgroundThread(() ->
                setVerboseLoggingEnabled(isEnabled));
        return true;
    }

    @SuppressWarnings("FutureReturnValueIgnored")
    @Override
    public void updateState(Preference preference) {
        ThreadUtils.postOnBackgroundThread(() -> {
                    final boolean enabled = getVerboseLoggingEnabled();
        ((SwitchPreference) mPreference).setChecked(enabled);
                    ThreadUtils.getUiThreadHandler().post(() ->
                            ((SwitchPreference) mPreference).setChecked(enabled));
                }
        );
    }

    @SuppressWarnings("FutureReturnValueIgnored")
    @Override
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        setVerboseLoggingEnabled(false);
        ThreadUtils.postOnBackgroundThread(() ->
                setVerboseLoggingEnabled(false));
        ((SwitchPreference) mPreference).setChecked(false);
    }