From c3a8cf4671773d267e25bed19feeef1147d78978 Mon Sep 17 00:00:00 2001 From: kwaky Date: Tue, 10 Dec 2019 16:42:09 -0800 Subject: [PATCH] DO NOT MERGE Defer Hvac initialization until after BOOT_COMPLETED event. Test: Manual Bug: 144185429 Change-Id: Ide705146544b5b8904da54d6a5db42242752494c --- packages/CarSystemUI/AndroidManifest.xml | 2 + .../systemui/statusbar/car/CarStatusBar.java | 53 ++++++++++++++++--- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/packages/CarSystemUI/AndroidManifest.xml b/packages/CarSystemUI/AndroidManifest.xml index 261b9f508ccd6..c5da135f529e3 100644 --- a/packages/CarSystemUI/AndroidManifest.xml +++ b/packages/CarSystemUI/AndroidManifest.xml @@ -25,4 +25,6 @@ + + diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index db98c36b8c1f9..ec3414603db8d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -28,7 +28,10 @@ import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarUxRestrictionsManager; import android.car.hardware.power.CarPowerManager.CarPowerStateListener; import android.car.media.CarAudioManager; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -246,12 +249,27 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } }; + private boolean mBootCompleted = false; + private final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mBootCompleted = true; + String action = intent.getAction(); + if (action != null && action.equals(Intent.ACTION_BOOT_COMPLETED)) { + initHvac(); + } + } + }; + @Override public void start() { // Non blocking call to connect to car service. Call this early so that we'll be connected // asap. ((CarSystemUIFactory) SystemUIFactory.getInstance()).getCarServiceProvider(mContext); + // Defer some actions for CarStatusBar initialization until after boot complete event + registerBootCompletedReceiver(); + // get the provisioned state before calling the parent class since it's that flow that // builds the nav bar mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); @@ -396,6 +414,16 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt // ignore. } + private void registerBootCompletedReceiver() { + IntentFilter bootCompletedFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); + bootCompletedFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); + mContext.registerReceiver(mBootCompletedReceiver, bootCompletedFilter); + } + + private void unregisterBootCompletedListener() { + mContext.unregisterReceiver(mBootCompletedReceiver); + } + /** * Remove all content from navbars and rebuild them. Used to allow for different nav bars * before and after the device is provisioned. . Also for change of density and font size. @@ -403,7 +431,9 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt private void restartNavBars() { // remove and reattach all hvac components such that we don't keep a reference to unused // ui elements - mHvacController.removeAllComponents(); + if (mHvacController != null) { + mHvacController.removeAllComponents(); + } mCarFacetButtonController.removeAll(); if (mNavigationBarWindow != null) { @@ -422,6 +452,9 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } buildNavBarContent(); + if (mBootCompleted) { + initHvac(); + } // If the UI was rebuilt (day/night change) while the keyguard was up we need to // correctly respect that state. if (mIsKeyguard) { @@ -433,6 +466,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } private void addTemperatureViewToController(View v) { + if (v == null) return; + if (v instanceof TemperatureView) { mHvacController.addHvacTextView((TemperatureView) v); } else if (v instanceof ViewGroup) { @@ -442,7 +477,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt } } } - /** * Allows for showing or hiding just the navigation bars. This is indented to be used when * the full screen user selector is shown. @@ -1034,7 +1068,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt throw new RuntimeException("Unable to build top nav bar due to missing layout"); } mTopNavigationBarView.setStatusBar(this); - addTemperatureViewToController(mTopNavigationBarView); mTopNavigationBarView.setStatusBarWindowTouchListener(mTopNavBarNotificationTouchListener); } @@ -1049,7 +1082,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt throw new RuntimeException("Unable to build bottom nav bar due to missing layout"); } mNavigationBarView.setStatusBar(this); - addTemperatureViewToController(mNavigationBarView); mNavigationBarView.setStatusBarWindowTouchListener(mNavBarNotificationTouchListener); } @@ -1061,7 +1093,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt throw new RuntimeException("Unable to build left nav bar due to missing layout"); } mLeftNavigationBarView.setStatusBar(this); - addTemperatureViewToController(mLeftNavigationBarView); mLeftNavigationBarView.setStatusBarWindowTouchListener(mNavBarNotificationTouchListener); } @@ -1074,10 +1105,20 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt throw new RuntimeException("Unable to build right nav bar due to missing layout"); } mRightNavigationBarView.setStatusBar(this); - addTemperatureViewToController(mRightNavigationBarView); mRightNavigationBarView.setStatusBarWindowTouchListener(mNavBarNotificationTouchListener); } + private void initHvac() { + if (mHvacController == null) { + mHvacController = Dependency.get(HvacController.class); + mHvacController.connectToCarService(); + } + addTemperatureViewToController(mTopNavigationBarView); + addTemperatureViewToController(mNavigationBarView); + addTemperatureViewToController(mLeftNavigationBarView); + addTemperatureViewToController(mRightNavigationBarView); + } + @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { //When executing dump() function simultaneously, we need to serialize them