diff options
5 files changed, 31 insertions, 24 deletions
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/AnimatedTemperatureView.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/AnimatedTemperatureView.java index 27d31064955d..6473f0d2778a 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/AnimatedTemperatureView.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/AnimatedTemperatureView.java @@ -23,8 +23,6 @@ import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; -import com.android.systemui.statusbar.car.hvac.TemperatureView; -import com.android.systemui.statusbar.car.hvac.HvacController; import android.util.AttributeSet; import android.util.Property; import android.view.Gravity; @@ -36,8 +34,8 @@ import android.widget.ImageView; import android.widget.TextSwitcher; import android.widget.TextView; -import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.statusbar.car.hvac.TemperatureView; /** * Simple text display of HVAC properties, It is designed to show mTemperature and is configured in @@ -47,8 +45,6 @@ import com.android.systemui.R; * hvacAreaId - Example: VehicleSeat.SEAT_ROW_1_LEFT (1) * hvacTempFormat - Example: "%.1f\u00B0" (1 decimal and the degree symbol) * hvacOrientaion = Example: left - * <p> - * Note: It registers itself with {@link HvacController} */ public class AnimatedTemperatureView extends FrameLayout implements TemperatureView { @@ -158,12 +154,9 @@ public class AnimatedTemperatureView extends FrameLayout implements TemperatureV ViewGroup.LayoutParams.MATCH_PARENT); typedArray.recycle(); - - // register with controller - HvacController hvacController = Dependency.get(HvacController.class); - hvacController.addHvacTextView(this); } + private TextView generateTextView() { TextView textView = new TextView(getContext()); textView.setTextAppearance(mTextAppearanceRes); diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/TemperatureBackgroundAnimator.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/TemperatureBackgroundAnimator.java index 0bc94b500387..3c6d623c8ff7 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/TemperatureBackgroundAnimator.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/hvac/TemperatureBackgroundAnimator.java @@ -131,7 +131,9 @@ class TemperatureBackgroundAnimator { } void animateOpen() { - if (!mAnimationsReady || mCircleState == CircleState.ENTERING) { + if (!mAnimationsReady + || !mAnimatedView.isAttachedToWindow() + || mCircleState == CircleState.ENTERING) { return; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index aa07c70f00c2..6920d1063a91 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -41,6 +41,7 @@ import com.android.systemui.recents.misc.SysUiTaskStackChangeListener; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.car.hvac.HvacController; +import com.android.systemui.statusbar.car.hvac.TemperatureView; import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.BatteryController; @@ -82,6 +83,7 @@ public class CarStatusBar extends StatusBar implements private ActivityManagerWrapper mActivityManagerWrapper; private DeviceProvisionedController mDeviceProvisionedController; private boolean mDeviceIsProvisioned = true; + private HvacController mHvacController; @Override public void start() { @@ -95,8 +97,7 @@ public class CarStatusBar extends StatusBar implements createBatteryController(); mCarBatteryController.startListening(); - Log.d(TAG, "Connecting to HVAC service"); - Dependency.get(HvacController.class).connectToCarService(); + mHvacController.connectToCarService(); mCarFacetButtonController = Dependency.get(CarFacetButtonController.class); mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); @@ -119,10 +120,11 @@ public class CarStatusBar extends StatusBar implements * before and after the device is provisioned */ private void restartNavBars() { + // remove and reattach all hvac components such that we don't keep a reference to unused + // ui elements + mHvacController.removeAllComponents(); + addTemperatureViewToController(mStatusBarWindow); mCarFacetButtonController.removeAll(); - - Dependency.get(HvacController.class).removeAllComponents(); - if (mNavigationBarWindow != null) { mNavigationBarWindow.removeAllViews(); mNavigationBarView = null; @@ -137,9 +139,22 @@ public class CarStatusBar extends StatusBar implements mRightNavigationBarWindow.removeAllViews(); mRightNavigationBarView = null; } + buildNavBarContent(); } + private void addTemperatureViewToController(View v) { + if (v instanceof TemperatureView) { + Log.d(TAG, "addTemperatureViewToController: found "); + mHvacController.addHvacTextView((TemperatureView) v); + } else if (v instanceof ViewGroup) { + ViewGroup viewGroup = (ViewGroup) v; + for (int i = 0; i < viewGroup.getChildCount(); i++) { + addTemperatureViewToController(viewGroup.getChildAt(i)); + } + } + } + /** * Allows for showing or hiding just the navigation bars. This is indented to be used when * the full screen user selector is shown. @@ -214,6 +229,7 @@ public class CarStatusBar extends StatusBar implements @Override protected void makeStatusBarView() { super.makeStatusBarView(); + mHvacController = Dependency.get(HvacController.class); mNotificationPanelBackground = getDefaultWallpaper(); mScrimController.setScrimBehindDrawable(mNotificationPanelBackground); @@ -226,6 +242,7 @@ public class CarStatusBar extends StatusBar implements // when a device has connected by bluetooth. mBatteryMeterView.setVisibility(View.GONE); }); + addTemperatureViewToController(mStatusBarWindow); } private BatteryController createBatteryController() { @@ -264,7 +281,6 @@ public class CarStatusBar extends StatusBar implements private void buildNavBarWindows() { if (mShowBottom) { - mNavigationBarWindow = (ViewGroup) View.inflate(mContext, R.layout.navigation_bar_window, null); } @@ -342,6 +358,7 @@ public class CarStatusBar extends StatusBar implements throw new RuntimeException("Unable to build botom nav bar due to missing layout"); } mNavigationBarView.setStatusBar(this); + addTemperatureViewToController(mNavigationBarView); } private void buildLeft(int layout) { @@ -352,6 +369,7 @@ public class CarStatusBar extends StatusBar implements throw new RuntimeException("Unable to build left nav bar due to missing layout"); } mLeftNavigationBarView.setStatusBar(this); + addTemperatureViewToController(mLeftNavigationBarView); } @@ -362,6 +380,8 @@ public class CarStatusBar extends StatusBar implements Log.e(TAG, "CarStatusBar failed inflate for R.layout.car_navigation_bar"); throw new RuntimeException("Unable to build right nav bar due to missing layout"); } + mRightNavigationBarView.setStatusBar(this); + addTemperatureViewToController(mRightNavigationBarView); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java index 32fd054e8ae6..6c924e3c2c16 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.car.hvac; import android.car.Car; -import android.car.CarNotConnectedException; import android.car.hardware.CarPropertyValue; import android.car.hardware.hvac.CarHvacManager; import android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/TemperatureTextView.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/TemperatureTextView.java index 8143c13b8b55..4d8ce4348319 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/TemperatureTextView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/TemperatureTextView.java @@ -21,7 +21,6 @@ import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.TextView; -import com.android.systemui.Dependency; import com.android.systemui.R; /** @@ -31,8 +30,6 @@ import com.android.systemui.R; * hvacPropertyId - Example: CarHvacManager.ID_ZONED_TEMP_SETPOINT (16385) * hvacAreaId - Example: VehicleSeat.SEAT_ROW_1_LEFT (1) * hvacTempFormat - Example: "%.1f\u00B0" (1 decimal and the degree symbol) - * - * Note: It registers itself with {@link HvacController} */ public class TemperatureTextView extends TextView implements TemperatureView { @@ -47,10 +44,6 @@ public class TemperatureTextView extends TextView implements TemperatureView { mPropertyId = typedArray.getInt(R.styleable.TemperatureView_hvacPropertyId, -1); String format = typedArray.getString(R.styleable.TemperatureView_hvacTempFormat); mTempFormat = (format == null) ? "%.1f\u00B0" : format; - - // register with controller - HvacController hvacController = Dependency.get(HvacController.class); - hvacController.addHvacTextView(this); } /** |