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

This commit is contained in:
Rambo Wang
2023-06-21 01:48:56 +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);
} }