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

Commit e68894cd authored by Sultan Alsawaf's avatar Sultan Alsawaf Committed by Michael W
Browse files

SystemUI: Set brightness slider view restriction from the right thread

The brightness slider view can only be safely touched from the main
handler, not the background handler.

This fixes the following crash:
E AndroidRuntime: FATAL EXCEPTION: SysUiBg
E AndroidRuntime: Process: com.android.systemui, PID: 4217
E AndroidRuntime: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
E AndroidRuntime: 	at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8804)
E AndroidRuntime: 	at android.view.ViewRootImpl.focusableViewAvailable(ViewRootImpl.java:4612)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:962)
E AndroidRuntime: 	at android.view.View.setFlags(View.java:16122)
E AndroidRuntime: 	at android.view.View.setEnabled(View.java:11744)
E AndroidRuntime: 	at com.android.systemui.settings.ToggleSliderView.setEnforcedAdmin(ToggleSliderView.java:101)
E AndroidRuntime: 	at com.android.systemui.settings.BrightnessController$10.run(BrightnessController.java:432)
E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:223)
E AndroidRuntime: 	at android.os.HandlerThread.run(HandlerThread.java:67)

Change-Id: Iac48d0b652f148411c5d7a48b19d7ba0c9c24fca
parent dc0b1cab
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.widget.ImageView;
import com.android.internal.BrightnessSynchronizer;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.systemui.Dependency;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -62,6 +63,7 @@ public class BrightnessController implements ToggleSlider.Listener {
    private static final int MSG_ATTACH_LISTENER = 3;
    private static final int MSG_DETACH_LISTENER = 4;
    private static final int MSG_VR_MODE_CHANGED = 5;
    private static final int MSG_BRIGHTNESS_RESTRICTION = 6;

    private static final Uri BRIGHTNESS_MODE_URI =
            Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
@@ -292,6 +294,10 @@ public class BrightnessController implements ToggleSlider.Listener {
                    case MSG_VR_MODE_CHANGED:
                        updateVrMode(msg.arg1 != 0);
                        break;
                    case MSG_BRIGHTNESS_RESTRICTION:
                        ((ToggleSliderView)mControl).setEnforcedAdmin(
                                (RestrictedLockUtils.EnforcedAdmin) msg.obj);
                        break;
                    default:
                        super.handleMessage(msg);
                }
@@ -426,15 +432,10 @@ public class BrightnessController implements ToggleSlider.Listener {
    }

    public void checkRestrictionAndSetEnabled() {
        mBackgroundHandler.post(new Runnable() {
            @Override
            public void run() {
                ((ToggleSliderView)mControl).setEnforcedAdmin(
        mHandler.obtainMessage(MSG_BRIGHTNESS_RESTRICTION,
                RestrictedLockUtilsInternal.checkIfRestrictionEnforced(mContext,
                        UserManager.DISALLOW_CONFIG_BRIGHTNESS,
                                mUserTracker.getCurrentUserId()));
            }
        });
                        mUserTracker.getCurrentUserId())).sendToTarget();
    }

    private void setMode(int mode) {