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

Commit 0f4b580e authored by d34d's avatar d34d Committed by Gerrit Code Review
Browse files

SysUI: Reuse controllers and managers

Recreating the status bar causes a lot of objects to be recreated
that can easily be reused.  This patch only creates these objects
when they are null.

Change-Id: I5f6f475bab386a4cf381ca8c9cc6a4d46449a938
parent 9501c4aa
Loading
Loading
Loading
Loading
+97 −48
Original line number Diff line number Diff line
@@ -346,6 +346,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

    // settings
    private QSDragPanel mQSPanel;
    private QSTileHost mQSTileHost;
    private DevForceNavbarObserver mDevForceNavbarObserver;

    // top bar
@@ -911,7 +912,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                    R.color.notification_panel_solid_background)));
        }

        if (mHeadsUpManager == null) {
            mHeadsUpManager = new HeadsUpManager(context, mStatusBarWindow);
        }
        mHeadsUpManager.setBar(this);
        mHeadsUpManager.addListener(this);
        mHeadsUpManager.addListener(mNotificationPanel);
@@ -955,7 +958,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            // no window manager? good luck with that
        }

        if (mAssistManager == null) {
            mAssistManager = new AssistManager(this, context);
        }
        if (mNavigationBarView == null) {
            mAssistManager.onConfigurationChanged();
        }
@@ -1039,8 +1044,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        mHandlerThread.start();

        // Other icons
        if (mLocationController == null) {
            mLocationController = new LocationControllerImpl(mContext,
                    mHandlerThread.getLooper()); // will post a notification
        }
        if (mBatteryController == null) {
            mBatteryController = new BatteryController(mContext, mHandler);
            mBatteryController.addStateChangedCallback(new BatteryStateChangeCallback() {
                @Override
@@ -1050,29 +1058,51 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                        mDozeServiceHost.firePowerSaveChanged(mBatteryController.isPowerSave());
                    }
                }

                @Override
                public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
                    // noop
                }

                @Override
                public void onBatteryStyleChanged(int style, int percentMode) {
                    // noop
                }
            });
        }
        if (mNetworkController == null) {
            mNetworkController = new NetworkControllerImpl(mContext, mHandlerThread.getLooper());
        }
        if (mHotspotController == null) {
            mHotspotController = new HotspotControllerImpl(mContext);
        mBluetoothController = new BluetoothControllerImpl(mContext, mHandlerThread.getLooper());
        }
        if (mBluetoothController == null) {
            mBluetoothController = new BluetoothControllerImpl(mContext,
                    mHandlerThread.getLooper());
        }
        if (mSecurityController == null) {
            mSecurityController = new SecurityControllerImpl(mContext);
        }
        if (mContext.getResources().getBoolean(R.bool.config_showRotationLock)) {
            if (mRotationLockController == null) {
                mRotationLockController = new RotationLockControllerImpl(mContext);
            }
        }
        if (mUserInfoController == null) {
            mUserInfoController = new UserInfoController(mContext);
        }
        mVolumeComponent = getComponent(VolumeComponent.class);
        if (mVolumeComponent != null) {
            if (mZenModeController == null) {
                mZenModeController = mVolumeComponent.getZenController();
            }
        }
        if (mCastController == null) {
            mCastController = new CastControllerImpl(mContext);
        }
        if (mSuController == null) {
            mSuController = new SuControllerImpl(mContext);
        }
        final SignalClusterView signalCluster =
                (SignalClusterView) mStatusBarView.findViewById(R.id.signal_cluster);
        final SignalClusterView signalClusterKeyguard =
@@ -1093,19 +1123,31 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            mNetworkController.addEmergencyListener(mHeader);
        }

        if (mFlashlightController == null) {
            mFlashlightController = new FlashlightController(mContext);
        }
        mKeyguardBottomArea.setFlashlightController(mFlashlightController);
        mKeyguardBottomArea.setPhoneStatusBar(this);
        mKeyguardBottomArea.setUserSetupComplete(mUserSetup);
        if (mAccessibilityController == null) {
            mAccessibilityController = new AccessibilityController(mContext);
        }
        mKeyguardBottomArea.setAccessibilityController(mAccessibilityController);
        if (mNextAlarmController == null) {
            mNextAlarmController = new NextAlarmController(mContext);
        }
        if (mKeyguardMonitor == null) {
            mKeyguardMonitor = new KeyguardMonitor(mContext);
        }
        if (UserSwitcherController.isUserSwitcherAvailable(UserManager.get(mContext))) {
            if (mUserSwitcherController == null) {
                mUserSwitcherController = new UserSwitcherController(mContext, mKeyguardMonitor,
                        mHandler);
            }
        }
        if (mWeatherController == null) {
            mWeatherController = new WeatherControllerImpl(mContext);
        }

        mKeyguardUserSwitcher = new KeyguardUserSwitcher(mContext,
                (ViewStub) mStatusBarWindowContent.findViewById(R.id.keyguard_user_switcher),
@@ -1115,24 +1157,28 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        // Set up the quick settings tile panel
        mQSPanel = (QSDragPanel) mStatusBarWindowContent.findViewById(R.id.quick_settings_panel);
        if (mQSPanel != null) {
            final QSTileHost qsh = new QSTileHost(mContext, this,
            if (mQSTileHost == null) {
                mQSTileHost = new QSTileHost(mContext, this,
                        mBluetoothController, mLocationController, mRotationLockController,
                        mNetworkController, mZenModeController, mHotspotController,
                        mCastController, mFlashlightController,
                        mUserSwitcherController, mKeyguardMonitor,
                        mSecurityController);
            mQSPanel.setHost(qsh);
            mQSPanel.setTiles(qsh.getTiles());
            }
            mQSPanel.setHost(mQSTileHost);
            mQSPanel.setTiles(mQSTileHost.getTiles());
            if (mBrightnessMirrorController == null) {
                mBrightnessMirrorController = new BrightnessMirrorController(mStatusBarWindowContent);
            }
            mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
            mHeader.setQSPanel(mQSPanel);
            qsh.setCallback(new QSTileHost.Callback() {
            mQSTileHost.setCallback(new QSTileHost.Callback() {
                @Override
                public void onTilesChanged() {
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            mQSPanel.setTiles(qsh.getTiles());
                            mQSPanel.setTiles(mQSTileHost.getTiles());
                        }
                    });
                }
@@ -3595,6 +3641,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        if (mNetworkController != null) {
            removeSignalCallbacks(mNetworkController);
        }
        if (mHeadsUpManager != null) {
            mHeadsUpManager.removeListener(mNotificationPanel);
        }

        mStatusBarWindow.removeContent(mStatusBarWindowContent);
        mStatusBarWindow.clearDisappearingChildren();
+4 −0
Original line number Diff line number Diff line
@@ -160,6 +160,10 @@ public class HeadsUpManager implements ViewTreeObserver.OnComputeInternalInsetsL
        mListeners.add(listener);
    }

    public void removeListener(OnHeadsUpChangedListener listener) {
        mListeners.remove(listener);
    }

    public PhoneStatusBar getBar() {
        return mBar;
    }