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

Commit 16b71aef authored by Steven Ng's avatar Steven Ng
Browse files

Use injected main thread handler in LightBarTransitionsController

The Handler within `LightBarTransitionsController` was being instantiated without an explicit Looper, causing it to default to the Looper of its creation thread. In scenarios where its parent, `SystemUIDisplaySubcomponent` (after ag/35378953), is created eagerly on a background thread, this resulted in the Handler also operating on a background thread, which is not suitable for its intended UI operations

Flag: EXEMPT a small bug fix
Bug: 441940469
Test: atest SystemUITests:LightBarTransitionsControllerTest
Change-Id: I37ed48b991e61064ffe73e5d631fe7aadd160a52
parent 5230bd5d
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -60,6 +60,8 @@ public class LightBarTransitionsControllerTest extends SysuiTestCase {
    @Mock
    @Mock
    private StatusBarStateController mStatusBarStateController;
    private StatusBarStateController mStatusBarStateController;
    @Mock
    @Mock
    private Handler mMainHandler;
    @Mock
    private Handler mBgHandler;
    private Handler mBgHandler;


    private LightBarTransitionsController mLightBarTransitionsController;
    private LightBarTransitionsController mLightBarTransitionsController;
@@ -67,7 +69,7 @@ public class LightBarTransitionsControllerTest extends SysuiTestCase {
    @Before
    @Before
    public void setup() {
    public void setup() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mLightBarTransitionsController = new LightBarTransitionsController(mContext,
        mLightBarTransitionsController = new LightBarTransitionsController(mContext, mMainHandler,
                mBgHandler, mApplier, new CommandQueue(mContext, new FakeDisplayTracker(mContext)),
                mBgHandler, mApplier, new CommandQueue(mContext, new FakeDisplayTracker(mContext)),
                mKeyguardStateController, mStatusBarStateController);
                mKeyguardStateController, mStatusBarStateController);
    }
    }
+7 −5
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.app.animation.Interpolators;
import com.android.internal.policy.GestureNavigationSettingsObserver;
import com.android.internal.policy.GestureNavigationSettingsObserver;
import com.android.systemui.Dumpable;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CommandQueue;
@@ -94,7 +95,7 @@ public class LightBarTransitionsController implements Dumpable {


    private final Callback mCallback;
    private final Callback mCallback;


    private final Handler mHandler;
    private final Handler mMainHandler;
    private final DarkIntensityApplier mApplier;
    private final DarkIntensityApplier mApplier;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardStateController mKeyguardStateController;
    private final StatusBarStateController mStatusBarStateController;
    private final StatusBarStateController mStatusBarStateController;
@@ -125,13 +126,14 @@ public class LightBarTransitionsController implements Dumpable {
    @AssistedInject
    @AssistedInject
    public LightBarTransitionsController(
    public LightBarTransitionsController(
            Context context,
            Context context,
            @Main Handler mainHandler,
            @Background Handler bgHandler,
            @Background Handler bgHandler,
            @Assisted DarkIntensityApplier applier,
            @Assisted DarkIntensityApplier applier,
            CommandQueue commandQueue,
            CommandQueue commandQueue,
            KeyguardStateController keyguardStateController,
            KeyguardStateController keyguardStateController,
            StatusBarStateController statusBarStateController) {
            StatusBarStateController statusBarStateController) {
        mApplier = applier;
        mApplier = applier;
        mHandler = new Handler();
        mMainHandler = mainHandler;
        mKeyguardStateController = keyguardStateController;
        mKeyguardStateController = keyguardStateController;
        mStatusBarStateController = statusBarStateController;
        mStatusBarStateController = statusBarStateController;
        mCommandQueue = commandQueue;
        mCommandQueue = commandQueue;
@@ -142,7 +144,7 @@ public class LightBarTransitionsController implements Dumpable {
        mContext = context;
        mContext = context;
        mDisplayId = mContext.getDisplayId();
        mDisplayId = mContext.getDisplayId();
        mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(
        mGestureNavigationSettingsObserver = new GestureNavigationSettingsObserver(
                mHandler, bgHandler, mContext, this::onNavigationSettingsChanged);
                mMainHandler, bgHandler, mContext, this::onNavigationSettingsChanged);
        mGestureNavigationSettingsObserver.register();
        mGestureNavigationSettingsObserver.register();
        onNavigationSettingsChanged();
        onNavigationSettingsChanged();
    }
    }
@@ -201,8 +203,8 @@ public class LightBarTransitionsController implements Dumpable {
            mTransitionDeferring = true;
            mTransitionDeferring = true;
            mTransitionDeferringStartTime = startTime;
            mTransitionDeferringStartTime = startTime;
            mTransitionDeferringDuration = duration;
            mTransitionDeferringDuration = duration;
            mHandler.removeCallbacks(mTransitionDeferringDoneRunnable);
            mMainHandler.removeCallbacks(mTransitionDeferringDoneRunnable);
            mHandler.postAtTime(mTransitionDeferringDoneRunnable, startTime);
            mMainHandler.postAtTime(mTransitionDeferringDoneRunnable, startTime);
        }
        }
        mTransitionPending = false;
        mTransitionPending = false;
    }
    }