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

Commit f084d889 authored by Brad Stenning's avatar Brad Stenning
Browse files

Update Hvac to remove the self register or ui components with their controller

They were being removed from the status bar when the device was un-provisioned
due to a false state change. There was also an issue where the background
tried to animate before it was on screen causing an exception

Bug:110105682
Test: run on bench or test hardware of the outside kind
Change-Id: I1a3815bf7f08b321f92919a2fb6e20c7d859f95e
parent deee3950
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -131,7 +131,9 @@ class TemperatureBackgroundAnimator {
    }

    void animateOpen() {
        if (!mAnimationsReady || mCircleState == CircleState.ENTERING) {
        if (!mAnimationsReady
                || !mAnimatedView.isAttachedToWindow()
                || mCircleState == CircleState.ENTERING) {
            return;
        }

+26 −6
Original line number Diff line number Diff line
@@ -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
+0 −1
Original line number Diff line number Diff line
@@ -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;
+0 −7
Original line number Diff line number Diff line
@@ -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);
    }

    /**