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

Commit d077ca6d authored by Chun-Ku Lin's avatar Chun-Ku Lin
Browse files

Pass null looper if the looper is not prepared in the calling thread

**Root cause**
The PreferenceController can be constructed by the
SettingsSearchIndexablesProvider where the looper of the thread is not
prepared. This result in not able to construct the PreferenceController
that will be used as part of the SettingsSearch.

Currently, if the SettingsSearchIndexablesProvider is not able to
construct the PreferenceController defined in xml, it would just
silently failed.

Test: atest SettingsUnitTests
Test: atest SettingsRoboTests

Flag: EXEMPT low risk bugfix
Bug: 352622249
Change-Id: I72a4ce24ec6842b9efe067e3cb7d1c73cd98a566
parent ef600038
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.VibrationAttributes;
import android.os.Vibrator;
import android.provider.Settings;
@@ -69,7 +70,8 @@ public class KeyboardVibrationTogglePreferenceController extends TogglePreferenc
    public KeyboardVibrationTogglePreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
        mVibrator = context.getSystemService(Vibrator.class);
        mContentObserver = new ContentObserver(new Handler(/* async= */ true)) {
        Handler handler = Looper.myLooper() != null ? new Handler(/* async= */ true) : null;
        mContentObserver = new ContentObserver(handler) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                if (uri.equals(MAIN_VIBRATION_SWITCH_URI)) {
+3 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.VibrationAttributes;
import android.os.Vibrator;
import android.provider.Settings;
@@ -49,7 +50,8 @@ public class VibrationMainSwitchPreferenceController extends SettingsMainSwitchP
    public VibrationMainSwitchPreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
        mVibrator = context.getSystemService(Vibrator.class);
        mSettingObserver = new ContentObserver(new Handler(/* async= */ true)) {
        Handler handler = Looper.myLooper() != null ? new Handler(/* async= */ true) : null;
        mSettingObserver = new ContentObserver(handler) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                updateState(mSwitchPreference);
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.database.ContentObserver;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.VibrationAttributes;
import android.os.VibrationEffect;
import android.os.Vibrator;
@@ -165,7 +166,7 @@ public abstract class VibrationPreferenceConfig {

        /** Creates observer for given preference. */
        public SettingObserver(VibrationPreferenceConfig preferenceConfig) {
            super(new Handler(/* async= */ true));
            super(Looper.myLooper() != null ? new Handler(/* async= */ true) : null);
            mUri = Settings.System.getUriFor(preferenceConfig.getSettingKey());

            if (preferenceConfig.isRestrictedByRingerModeSilent()) {
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.database.ContentObserver;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Vibrator;
import android.provider.DeviceConfig;
import android.provider.Settings;
@@ -74,7 +75,8 @@ public class VibrationRampingRingerTogglePreferenceController
        mRingVibrationPreferenceConfig = new RingVibrationPreferenceConfig(context);
        mRingSettingObserver = new VibrationPreferenceConfig.SettingObserver(
                mRingVibrationPreferenceConfig);
        mSettingObserver = new ContentObserver(new Handler(/* async= */ true)) {
        Handler handler = Looper.myLooper() != null ? new Handler(/* async= */ true) : null;
        mSettingObserver = new ContentObserver(handler) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                updateState(mPreference);