Merge "Fix Settings app ANR due to blocking IDumpstateDevice IPC call"

This commit is contained in:
TreeHugger Robot
2023-06-19 05:20:22 +00:00
committed by Android (Google) Code Review

View File

@@ -29,6 +29,7 @@ import androidx.preference.SwitchPreference;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController; import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.utils.ThreadUtils;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
@@ -66,23 +67,34 @@ public class EnableVerboseVendorLoggingPreferenceController
return isIDumpstateDeviceAidlServiceAvailable() || isIDumpstateDeviceV1_1ServiceAvailable(); return isIDumpstateDeviceAidlServiceAvailable() || isIDumpstateDeviceV1_1ServiceAvailable();
} }
@SuppressWarnings("FutureReturnValueIgnored")
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean isEnabled = (Boolean) 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; return true;
} }
@SuppressWarnings("FutureReturnValueIgnored")
@Override @Override
public void updateState(Preference preference) { public void updateState(Preference preference) {
final boolean enabled = getVerboseLoggingEnabled(); ThreadUtils.postOnBackgroundThread(() -> {
((SwitchPreference) mPreference).setChecked(enabled); final boolean enabled = getVerboseLoggingEnabled();
ThreadUtils.getUiThreadHandler().post(() ->
((SwitchPreference) mPreference).setChecked(enabled));
}
);
} }
@SuppressWarnings("FutureReturnValueIgnored")
@Override @Override
protected void onDeveloperOptionsSwitchDisabled() { protected void onDeveloperOptionsSwitchDisabled() {
super.onDeveloperOptionsSwitchDisabled(); super.onDeveloperOptionsSwitchDisabled();
setVerboseLoggingEnabled(false); ThreadUtils.postOnBackgroundThread(() ->
setVerboseLoggingEnabled(false));
((SwitchPreference) mPreference).setChecked(false); ((SwitchPreference) mPreference).setChecked(false);
} }