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

Commit 42ebe548 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Fix StatusBarWindowController initialization NPE

Plugins might be initialized before the StatusBar service is ready.
This means that #setForcePluginOpen might be called before #add.

Test: atest StatusBarWindowControllerTest
Change-Id: I99a220521272a2348ecece4c4581e7c82fa79490
Fixes: 123051520
parent 454e59d5
Loading
Loading
Loading
Loading
+8 −6
Original line number Original line Diff line number Diff line
@@ -69,13 +69,13 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
    private final WindowManager mWindowManager;
    private final WindowManager mWindowManager;
    private final IActivityManager mActivityManager;
    private final IActivityManager mActivityManager;
    private final DozeParameters mDozeParameters;
    private final DozeParameters mDozeParameters;
    private final WindowManager.LayoutParams mLpChanged;
    private final boolean mKeyguardScreenRotation;
    private ViewGroup mStatusBarView;
    private ViewGroup mStatusBarView;
    private WindowManager.LayoutParams mLp;
    private WindowManager.LayoutParams mLp;
    private WindowManager.LayoutParams mLpChanged;
    private boolean mHasTopUi;
    private boolean mHasTopUi;
    private boolean mHasTopUiChanged;
    private boolean mHasTopUiChanged;
    private int mBarHeight;
    private int mBarHeight;
    private final boolean mKeyguardScreenRotation;
    private float mScreenBrightnessDoze;
    private float mScreenBrightnessDoze;
    private final State mCurrentState = new State();
    private final State mCurrentState = new State();
    private OtherwisedCollapsedListener mListener;
    private OtherwisedCollapsedListener mListener;
@@ -97,6 +97,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
        mDozeParameters = dozeParameters;
        mDozeParameters = dozeParameters;
        mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze();
        mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze();
        mLpChanged = new WindowManager.LayoutParams();
        Dependency.get(StatusBarStateController.class).addCallback(
        Dependency.get(StatusBarStateController.class).addCallback(
                mStateListener, StatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
                mStateListener, StatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
        Dependency.get(ConfigurationController.class).addCallback(this);
        Dependency.get(ConfigurationController.class).addCallback(this);
@@ -138,7 +139,6 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
        mStatusBarView = statusBarView;
        mStatusBarView = statusBarView;
        mBarHeight = barHeight;
        mBarHeight = barHeight;
        mWindowManager.addView(mStatusBarView, mLp);
        mWindowManager.addView(mStatusBarView, mLp);
        mLpChanged = new WindowManager.LayoutParams();
        mLpChanged.copyFrom(mLp);
        mLpChanged.copyFrom(mLp);
        onThemeChanged();
        onThemeChanged();
    }
    }
@@ -228,7 +228,9 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
    private void applyHeight(State state) {
    private void applyHeight(State state) {
        boolean expanded = isExpanded(state);
        boolean expanded = isExpanded(state);
        if (state.forcePluginOpen) {
        if (state.forcePluginOpen) {
            if (mListener != null) {
                mListener.setWouldOtherwiseCollapse(expanded);
                mListener.setWouldOtherwiseCollapse(expanded);
            }
            expanded = true;
            expanded = true;
        }
        }
        if (expanded) {
        if (expanded) {
@@ -247,7 +249,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat


    private void applyFitsSystemWindows(State state) {
    private void applyFitsSystemWindows(State state) {
        boolean fitsSystemWindows = !state.isKeyguardShowingAndNotOccluded();
        boolean fitsSystemWindows = !state.isKeyguardShowingAndNotOccluded();
        if (mStatusBarView.getFitsSystemWindows() != fitsSystemWindows) {
        if (mStatusBarView != null && mStatusBarView.getFitsSystemWindows() != fitsSystemWindows) {
            mStatusBarView.setFitsSystemWindows(fitsSystemWindows);
            mStatusBarView.setFitsSystemWindows(fitsSystemWindows);
            mStatusBarView.requestApplyInsets();
            mStatusBarView.requestApplyInsets();
        }
        }
@@ -289,7 +291,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat
        applyBrightness(state);
        applyBrightness(state);
        applyHasTopUi(state);
        applyHasTopUi(state);
        applyNotTouchable(state);
        applyNotTouchable(state);
        if (mLp.copyFrom(mLpChanged) != 0) {
        if (mLp != null && mLp.copyFrom(mLpChanged) != 0) {
            mWindowManager.updateViewLayout(mStatusBarView, mLp);
            mWindowManager.updateViewLayout(mStatusBarView, mLp);
        }
        }
        if (mHasTopUi != mHasTopUiChanged) {
        if (mHasTopUi != mHasTopUiChanged) {
+7 −0
Original line number Original line Diff line number Diff line
@@ -95,4 +95,11 @@ public class StatusBarWindowControllerTest extends SysuiTestCase {
    public void testAdd_updatesVisibilityFlags() {
    public void testAdd_updatesVisibilityFlags() {
        verify(mStatusBarView).setSystemUiVisibility(anyInt());
        verify(mStatusBarView).setSystemUiVisibility(anyInt());
    }
    }

    @Test
    public void testSetForcePluginOpen_beforeStatusBarInitialization() {
        mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager,
                mActivityManager, mDozeParameters);
        mStatusBarWindowController.setForcePluginOpen(true);
    }
}
}