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

Commit 86cd6840 authored by Steve Kondik's avatar Steve Kondik
Browse files

systemui: Fix KeyguardMonitor callbacks during configuration changes

 * Some of these objects are destroyed onConfigurationChange, we need to make
   sure that the SBWM gets a fresh KeyguardMonitor or certain features
   will end up wildly broken.

Change-Id: I430fb31916cc4e3bc262ab7f8ec1bde3b4ac0df8
parent 74f7cb94
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -1217,7 +1217,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                (ViewStub) mStatusBarWindowContent.findViewById(R.id.keyguard_user_switcher),
                (ViewStub) mStatusBarWindowContent.findViewById(R.id.keyguard_user_switcher),
                mKeyguardStatusBar, mNotificationPanel, mUserSwitcherController);
                mKeyguardStatusBar, mNotificationPanel, mUserSwitcherController);



        // Set up the quick settings tile panel
        // Set up the quick settings tile panel
        mQSPanel = (QSPanel) mStatusBarWindowContent.findViewById(R.id.quick_settings_panel);
        mQSPanel = (QSPanel) mStatusBarWindowContent.findViewById(R.id.quick_settings_panel);
        if (mQSPanel != null) {
        if (mQSPanel != null) {
@@ -1248,6 +1247,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            });
            });
        }
        }


        if (mStatusBarWindowManager != null) {
            mStatusBarWindowManager.setKeyguardMonitor(mKeyguardMonitor);
        }

        // User info. Trigger first load.
        // User info. Trigger first load.
        mHeader.setUserInfoController(mUserInfoController);
        mHeader.setUserInfoController(mUserInfoController);
        mKeyguardStatusBar.setUserInfoController(mUserInfoController);
        mKeyguardStatusBar.setUserInfoController(mUserInfoController);
@@ -3535,7 +3538,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    private void addStatusBarWindow() {
    private void addStatusBarWindow() {
        makeStatusBarView();
        makeStatusBarView();
        mStatusBarWindow.addContent(mStatusBarWindowContent);
        mStatusBarWindow.addContent(mStatusBarWindowContent);
        mStatusBarWindowManager = new StatusBarWindowManager(mContext, mKeyguardMonitor);
        mStatusBarWindowManager = new StatusBarWindowManager(mContext);
        mStatusBarWindowManager.setKeyguardMonitor(mKeyguardMonitor);
        mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
        mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
    }
    }


@@ -3809,6 +3813,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        // this MUST happen before makeStatusBarView();
        // this MUST happen before makeStatusBarView();
        haltTicker();
        haltTicker();


        mKeyguardMonitor.removeCallbacks();

        makeStatusBarView();
        makeStatusBarView();
        repositionNavigationBar();
        repositionNavigationBar();
        addHeadsUpView();
        addHeadsUpView();
+7 −5
Original line number Original line Diff line number Diff line
@@ -56,21 +56,18 @@ public class StatusBarWindowManager implements KeyguardMonitor.Callback {
    private final SurfaceSession mFxSession;
    private final SurfaceSession mFxSession;
    private final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();
    private final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();


    private final KeyguardMonitor mKeyguardMonitor;
    private KeyguardMonitor mKeyguardMonitor;


    private static final int TYPE_LAYER_MULTIPLIER = 10000; // refer to WindowManagerService.TYPE_LAYER_MULTIPLIER
    private static final int TYPE_LAYER_MULTIPLIER = 10000; // refer to WindowManagerService.TYPE_LAYER_MULTIPLIER
    private static final int TYPE_LAYER_OFFSET = 1000;      // refer to WindowManagerService.TYPE_LAYER_OFFSET
    private static final int TYPE_LAYER_OFFSET = 1000;      // refer to WindowManagerService.TYPE_LAYER_OFFSET


    private final State mCurrentState = new State();
    private final State mCurrentState = new State();


    public StatusBarWindowManager(Context context, KeyguardMonitor kgm) {
    public StatusBarWindowManager(Context context) {
        mContext = context;
        mContext = context;
        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();


        mKeyguardMonitor = kgm;
        mKeyguardMonitor.addCallback(this);

        mKeyguardBlurEnabled = mContext.getResources().getBoolean(
        mKeyguardBlurEnabled = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_ui_blur_enabled);
                com.android.internal.R.bool.config_ui_blur_enabled);
        mFxSession = new SurfaceSession();
        mFxSession = new SurfaceSession();
@@ -78,6 +75,11 @@ public class StatusBarWindowManager implements KeyguardMonitor.Callback {
                          * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET;
                          * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET;
    }
    }


    public void setKeyguardMonitor(KeyguardMonitor kgm) {
        mKeyguardMonitor = kgm;
        kgm.addCallback(this);
    }

    private boolean shouldEnableKeyguardScreenRotation() {
    private boolean shouldEnableKeyguardScreenRotation() {
        Resources res = mContext.getResources();
        Resources res = mContext.getResources();
        return SystemProperties.getBoolean("lockscreen.rot_override", false)
        return SystemProperties.getBoolean("lockscreen.rot_override", false)
+4 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,10 @@ public final class KeyguardMonitor {
        mCallbacks.add(callback);
        mCallbacks.add(callback);
    }
    }


    public void removeCallbacks() {
        mCallbacks.clear();
    }

    public void removeCallback(Callback callback) {
    public void removeCallback(Callback callback) {
        mCallbacks.remove(callback);
        mCallbacks.remove(callback);
    }
    }