diff --git a/packages/CarSystemUI/res/layout/car_navigation_bar_unprovisioned.xml b/packages/CarSystemUI/res/layout/car_navigation_bar_unprovisioned.xml index 1cf48c5ffd0b5..0f964fd562856 100644 --- a/packages/CarSystemUI/res/layout/car_navigation_bar_unprovisioned.xml +++ b/packages/CarSystemUI/res/layout/car_navigation_bar_unprovisioned.xml @@ -31,14 +31,15 @@ android:paddingStart="@*android:dimen/car_padding_5" android:paddingEnd="@*android:dimen/car_padding_5"> - + systemui:selectedIcon="@drawable/car_ic_overview_selected" + systemui:useMoreIcon="false"/> diff --git a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java index 6fba1d516c735..63bc66afddf8d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java @@ -25,7 +25,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.view.Display; import android.view.Gravity; -import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -37,8 +36,6 @@ import com.android.systemui.dagger.qualifiers.MainHandler; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NavigationBarController; -import com.android.systemui.statusbar.car.hvac.HvacController; -import com.android.systemui.statusbar.car.hvac.TemperatureView; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -52,15 +49,13 @@ import dagger.Lazy; /** Navigation bars customized for the automotive use case. */ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks { - private final NavigationBarViewFactory mNavigationBarViewFactory; + private final CarNavigationBarController mCarNavigationBarController; private final WindowManager mWindowManager; private final DeviceProvisionedController mDeviceProvisionedController; private final Lazy mFacetButtonTaskStackListener; private final Handler mMainHandler; private final Lazy mKeyguardStateController; - private final Lazy mFacetButtonController; private final Lazy mNavigationBarController; - private final Lazy mHvacController; private IStatusBarService mBarService; private CommandQueue mCommandQueue; @@ -82,33 +77,23 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks // it's open. private boolean mDeviceIsSetUpForUser = true; - // Configuration values for if nav bars should be shown. - private boolean mShowBottom; - private boolean mShowLeft; - private boolean mShowRight; - - @Inject public CarNavigationBar(Context context, - NavigationBarViewFactory navigationBarViewFactory, + CarNavigationBarController carNavigationBarController, WindowManager windowManager, DeviceProvisionedController deviceProvisionedController, Lazy facetButtonTaskStackListener, @MainHandler Handler mainHandler, Lazy keyguardStateController, - Lazy facetButtonController, - Lazy navigationBarController, - Lazy hvacController) { + Lazy navigationBarController) { super(context); - mNavigationBarViewFactory = navigationBarViewFactory; + mCarNavigationBarController = carNavigationBarController; mWindowManager = windowManager; mDeviceProvisionedController = deviceProvisionedController; mFacetButtonTaskStackListener = facetButtonTaskStackListener; mMainHandler = mainHandler; mKeyguardStateController = keyguardStateController; - mFacetButtonController = facetButtonController; mNavigationBarController = navigationBarController; - mHvacController = hvacController; } @Override @@ -118,11 +103,6 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks com.android.internal.R.bool.config_automotiveHideNavBarForKeyboard); mBottomNavBarVisible = false; - // Read configuration. - mShowBottom = mContext.getResources().getBoolean(R.bool.config_enableBottomNavigationBar); - mShowLeft = mContext.getResources().getBoolean(R.bool.config_enableLeftNavigationBar); - mShowRight = mContext.getResources().getBoolean(R.bool.config_enableRightNavigationBar); - // Get bar service. mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); @@ -157,7 +137,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks mActivityManagerWrapper = ActivityManagerWrapper.getInstance(); mActivityManagerWrapper.registerTaskStackListener(mFacetButtonTaskStackListener.get()); - mHvacController.get().connectToCarService(); + mCarNavigationBarController.connectToHvac(); } private void restartNavBarsIfNecessary() { @@ -175,8 +155,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks private void restartNavBars() { // remove and reattach all hvac components such that we don't keep a reference to unused // ui elements - mHvacController.get().removeAllComponents(); - mFacetButtonController.get().removeAll(); + mCarNavigationBarController.removeAllFromHvac(); if (mNavigationBarWindow != null) { mNavigationBarWindow.removeAllViews(); @@ -199,10 +178,6 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks if (mKeyguardStateController.get().isShowing()) { updateNavBarForKeyguardContent(); } - - // CarFacetButtonController was reset therefore we need to re-add the status bar elements - // to the controller. - // TODO(hseog): Add facet buttons in status bar to controller. } private void createNavigationBar(RegisterStatusBarResult result) { @@ -224,54 +199,30 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks } private void buildNavBarWindows() { - if (mShowBottom) { - mNavigationBarWindow = mNavigationBarViewFactory.getBottomWindow(); - } - - if (mShowLeft) { - mLeftNavigationBarWindow = mNavigationBarViewFactory.getLeftWindow(); - } - - if (mShowRight) { - mRightNavigationBarWindow = mNavigationBarViewFactory.getRightWindow(); - } + mNavigationBarWindow = mCarNavigationBarController.getBottomWindow(); + mLeftNavigationBarWindow = mCarNavigationBarController.getLeftWindow(); + mRightNavigationBarWindow = mCarNavigationBarController.getRightWindow(); } private void buildNavBarContent() { - if (mShowBottom) { - mNavigationBarView = mNavigationBarViewFactory.getBottomBar(mDeviceIsSetUpForUser); + mNavigationBarView = mCarNavigationBarController.getBottomBar(mDeviceIsSetUpForUser); + if (mNavigationBarView != null) { mNavigationBarWindow.addView(mNavigationBarView); - addTemperatureViewToController(mNavigationBarView); } - if (mShowLeft) { - mLeftNavigationBarView = mNavigationBarViewFactory.getLeftBar(mDeviceIsSetUpForUser); + mLeftNavigationBarView = mCarNavigationBarController.getLeftBar(mDeviceIsSetUpForUser); + if (mLeftNavigationBarView != null) { mLeftNavigationBarWindow.addView(mLeftNavigationBarView); - addTemperatureViewToController(mLeftNavigationBarView); } - if (mShowRight) { - mRightNavigationBarView = mNavigationBarViewFactory.getRightBar(mDeviceIsSetUpForUser); + mRightNavigationBarView = mCarNavigationBarController.getRightBar(mDeviceIsSetUpForUser); + if (mRightNavigationBarView != null) { mRightNavigationBarWindow.addView(mRightNavigationBarView); - // Add ability to toggle notification center. - addTemperatureViewToController(mRightNavigationBarView); - // Add ability to close notification center on touch. - } - } - - private void addTemperatureViewToController(View v) { - if (v instanceof TemperatureView) { - mHvacController.get().addHvacTextView((TemperatureView) v); - } else if (v instanceof ViewGroup) { - ViewGroup viewGroup = (ViewGroup) v; - for (int i = 0; i < viewGroup.getChildCount(); i++) { - addTemperatureViewToController(viewGroup.getChildAt(i)); - } } } private void attachNavBarWindows() { - if (mShowBottom && !mBottomNavBarVisible) { + if (mNavigationBarWindow != null && !mBottomNavBarVisible) { mBottomNavBarVisible = true; WindowManager.LayoutParams lp = new WindowManager.LayoutParams( @@ -287,7 +238,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks mWindowManager.addView(mNavigationBarWindow, lp); } - if (mShowLeft) { + if (mLeftNavigationBarWindow != null) { int width = mContext.getResources().getDimensionPixelSize( R.dimen.car_left_navigation_bar_width); WindowManager.LayoutParams leftlp = new WindowManager.LayoutParams( @@ -304,7 +255,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks leftlp.gravity = Gravity.LEFT; mWindowManager.addView(mLeftNavigationBarWindow, leftlp); } - if (mShowRight) { + if (mRightNavigationBarWindow != null) { int width = mContext.getResources().getDimensionPixelSize( R.dimen.car_right_navigation_bar_width); WindowManager.LayoutParams rightlp = new WindowManager.LayoutParams( @@ -340,23 +291,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks } boolean isKeyboardVisible = (vis & InputMethodService.IME_VISIBLE) != 0; - showBottomNavBarWindow(isKeyboardVisible); - } - - private void showBottomNavBarWindow(boolean isKeyboardVisible) { - if (!mShowBottom) { - return; - } - - // If keyboard is visible and bottom nav bar not visible, this is the correct state, so do - // nothing. Same with if keyboard is not visible and bottom nav bar is visible. - if (isKeyboardVisible ^ mBottomNavBarVisible) { - return; - } - - mNavigationBarViewFactory.getBottomWindow().setVisibility( - isKeyboardVisible ? View.GONE : View.VISIBLE); - mBottomNavBarVisible = !isKeyboardVisible; + mCarNavigationBarController.setBottomWindowVisibility(!isKeyboardVisible); } private void updateNavBarForKeyguardContent() { diff --git a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java new file mode 100644 index 0000000000000..f59f886d487b6 --- /dev/null +++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.navigationbar.car; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.systemui.R; +import com.android.systemui.statusbar.car.hvac.HvacController; +import com.android.systemui.statusbar.car.hvac.TemperatureView; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import dagger.Lazy; + +/** A single class which controls the navigation bar views. */ +@Singleton +public class CarNavigationBarController { + + private final Context mContext; + private final NavigationBarViewFactory mNavigationBarViewFactory; + private final Lazy mHvacControllerLazy; + + private boolean mShowBottom; + private boolean mShowLeft; + private boolean mShowRight; + + private View.OnTouchListener mTopBarTouchListener; + private View.OnTouchListener mBottomBarTouchListener; + private View.OnTouchListener mLeftBarTouchListener; + private View.OnTouchListener mRightBarTouchListener; + private NotificationsShadeController mNotificationsShadeController; + + private CarNavigationBarView mTopView; + private CarNavigationBarView mBottomView; + private CarNavigationBarView mLeftView; + private CarNavigationBarView mRightView; + + @Inject + public CarNavigationBarController(Context context, + NavigationBarViewFactory navigationBarViewFactory, + Lazy hvacControllerLazy) { + mContext = context; + mNavigationBarViewFactory = navigationBarViewFactory; + mHvacControllerLazy = hvacControllerLazy; + + // Read configuration. + mShowBottom = mContext.getResources().getBoolean(R.bool.config_enableBottomNavigationBar); + mShowLeft = mContext.getResources().getBoolean(R.bool.config_enableLeftNavigationBar); + mShowRight = mContext.getResources().getBoolean(R.bool.config_enableRightNavigationBar); + } + + /** Connect to hvac service. */ + public void connectToHvac() { + mHvacControllerLazy.get().connectToCarService(); + } + + /** Clean up hvac. */ + public void removeAllFromHvac() { + mHvacControllerLazy.get().removeAllComponents(); + } + + /** Gets the bottom window if configured to do so. */ + @Nullable + public ViewGroup getBottomWindow() { + return mShowBottom ? mNavigationBarViewFactory.getBottomWindow() : null; + } + + /** Gets the left window if configured to do so. */ + @Nullable + public ViewGroup getLeftWindow() { + return mShowLeft ? mNavigationBarViewFactory.getLeftWindow() : null; + } + + /** Gets the right window if configured to do so. */ + @Nullable + public ViewGroup getRightWindow() { + return mShowRight ? mNavigationBarViewFactory.getRightWindow() : null; + } + + /** Toggles the bottom nav bar visibility. */ + public boolean setBottomWindowVisibility(boolean isVisible) { + return setWindowVisibility(getBottomWindow(), isVisible); + } + + /** Toggles the left nav bar visibility. */ + public boolean setLeftWindowVisibility(boolean isVisible) { + return setWindowVisibility(getLeftWindow(), isVisible); + } + + /** Toggles the right nav bar visibility. */ + public boolean setRightWindowVisibility(boolean isVisible) { + return setWindowVisibility(getRightWindow(), isVisible); + } + + private boolean setWindowVisibility(ViewGroup window, boolean isVisible) { + if (window == null) { + return false; + } + + int newVisibility = isVisible ? View.VISIBLE : View.GONE; + if (window.getVisibility() == newVisibility) { + return false; + } + + window.setVisibility(newVisibility); + return true; + } + + /** Gets the top navigation bar with the appropriate listeners set. */ + @NonNull + public CarNavigationBarView getTopBar(boolean isSetUp) { + mTopView = mNavigationBarViewFactory.getTopBar(isSetUp); + mTopView.setStatusBarWindowTouchListener(mTopBarTouchListener); + mTopView.setNotificationsPanelController(mNotificationsShadeController); + addTemperatureViewToController(mTopView); + return mTopView; + } + + /** Gets the bottom navigation bar with the appropriate listeners set. */ + @Nullable + public CarNavigationBarView getBottomBar(boolean isSetUp) { + if (!mShowBottom) { + return null; + } + + mBottomView = mNavigationBarViewFactory.getBottomBar(isSetUp); + mBottomView.setStatusBarWindowTouchListener(mBottomBarTouchListener); + mBottomView.setNotificationsPanelController(mNotificationsShadeController); + addTemperatureViewToController(mBottomView); + return mBottomView; + } + + /** Gets the left navigation bar with the appropriate listeners set. */ + @Nullable + public CarNavigationBarView getLeftBar(boolean isSetUp) { + if (!mShowLeft) { + return null; + } + + mLeftView = mNavigationBarViewFactory.getLeftBar(isSetUp); + mLeftView.setStatusBarWindowTouchListener(mLeftBarTouchListener); + mLeftView.setNotificationsPanelController(mNotificationsShadeController); + addTemperatureViewToController(mLeftView); + return mLeftView; + } + + /** Gets the right navigation bar with the appropriate listeners set. */ + @Nullable + public CarNavigationBarView getRightBar(boolean isSetUp) { + if (!mShowRight) { + return null; + } + + mRightView = mNavigationBarViewFactory.getRightBar(isSetUp); + mRightView.setStatusBarWindowTouchListener(mRightBarTouchListener); + mRightView.setNotificationsPanelController(mNotificationsShadeController); + addTemperatureViewToController(mRightView); + return mRightView; + } + + /** Sets a touch listener for the top navigation bar. */ + public void registerTopBarTouchListener(View.OnTouchListener listener) { + mTopBarTouchListener = listener; + if (mTopView != null) { + mTopView.setStatusBarWindowTouchListener(mTopBarTouchListener); + } + } + + /** Sets a touch listener for the bottom navigation bar. */ + public void registerBottomBarTouchListener(View.OnTouchListener listener) { + mBottomBarTouchListener = listener; + if (mBottomView != null) { + mBottomView.setStatusBarWindowTouchListener(mBottomBarTouchListener); + } + } + + /** Sets a touch listener for the left navigation bar. */ + public void registerLeftBarTouchListener(View.OnTouchListener listener) { + mLeftBarTouchListener = listener; + if (mLeftView != null) { + mLeftView.setStatusBarWindowTouchListener(mLeftBarTouchListener); + } + } + + /** Sets a touch listener for the right navigation bar. */ + public void registerRightBarTouchListener(View.OnTouchListener listener) { + mRightBarTouchListener = listener; + if (mRightView != null) { + mRightView.setStatusBarWindowTouchListener(mRightBarTouchListener); + } + } + + /** Sets a notification controller which toggles the notification panel. */ + public void registerNotificationController( + NotificationsShadeController notificationsShadeController) { + mNotificationsShadeController = notificationsShadeController; + if (mTopView != null) { + mTopView.setNotificationsPanelController(mNotificationsShadeController); + } + if (mBottomView != null) { + mBottomView.setNotificationsPanelController(mNotificationsShadeController); + } + if (mLeftView != null) { + mLeftView.setNotificationsPanelController(mNotificationsShadeController); + } + if (mRightView != null) { + mRightView.setNotificationsPanelController(mNotificationsShadeController); + } + } + + /** Interface for controlling the notifications shade. */ + public interface NotificationsShadeController { + /** Toggles the visibility of the notifications shade. */ + void togglePanel(); + } + + private void addTemperatureViewToController(View v) { + if (v instanceof TemperatureView) { + mHvacControllerLazy.get().addHvacTextView((TemperatureView) v); + } else if (v instanceof ViewGroup) { + ViewGroup viewGroup = (ViewGroup) v; + for (int i = 0; i < viewGroup.getChildCount(); i++) { + addTemperatureViewToController(viewGroup.getChildAt(i)); + } + } + } +} diff --git a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarView.java b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarView.java index afb69547cb474..24f8b74eed617 100644 --- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarView.java +++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarView.java @@ -24,7 +24,6 @@ import android.widget.LinearLayout; import com.android.systemui.Dependency; import com.android.systemui.R; -import com.android.systemui.statusbar.car.CarStatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; /** @@ -36,7 +35,7 @@ import com.android.systemui.statusbar.phone.StatusBarIconController; public class CarNavigationBarView extends LinearLayout { private View mNavButtons; private CarNavigationButton mNotificationsButton; - private CarStatusBar mCarStatusBar; + private CarNavigationBarController.NotificationsShadeController mNotificationsShadeController; private Context mContext; private View mLockScreenButtons; // used to wire in open/close gestures for notifications @@ -82,8 +81,9 @@ public class CarNavigationBarView extends LinearLayout { return super.onInterceptTouchEvent(ev); } - public void setStatusBar(CarStatusBar carStatusBar) { - mCarStatusBar = carStatusBar; + public void setNotificationsPanelController( + CarNavigationBarController.NotificationsShadeController controller) { + mNotificationsShadeController = controller; } /** @@ -104,7 +104,9 @@ public class CarNavigationBarView extends LinearLayout { } protected void onNotificationsClick(View v) { - mCarStatusBar.togglePanel(); + if (mNotificationsShadeController != null) { + mNotificationsShadeController.togglePanel(); + } } /** diff --git a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java index 707d80fc0d3bf..40823abaaead4 100644 --- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java +++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java @@ -85,6 +85,7 @@ public class CarNavigationButton extends com.android.keyguard.AlphaOptimizedImag super.onFinishInflate(); setScaleType(ImageView.ScaleType.CENTER); setAlpha(mUnselectedAlpha); + setImageResource(mIconResourceId); try { if (mIntent != null) { final Intent intent = Intent.parseUri(mIntent, Intent.URI_INTENT_SCHEME); 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 cd81a5cb5c4f4..924f9f2070bd9 100644 --- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -75,8 +75,8 @@ import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.keyguard.ScreenLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.navigationbar.car.CarFacetButtonController; +import com.android.systemui.navigationbar.car.CarNavigationBarController; import com.android.systemui.navigationbar.car.CarNavigationBarView; -import com.android.systemui.navigationbar.car.NavigationBarViewFactory; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.car.CarQSFragment; @@ -92,8 +92,6 @@ import com.android.systemui.statusbar.PulseExpansionHandler; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.VibratorHelper; -import com.android.systemui.statusbar.car.hvac.HvacController; -import com.android.systemui.statusbar.car.hvac.TemperatureView; import com.android.systemui.statusbar.notification.BypassHeadsUpNotifier; import com.android.systemui.statusbar.notification.DynamicPrivacyController; import com.android.systemui.statusbar.notification.NewNotifPipeline; @@ -170,14 +168,10 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt private CarNavigationBarView mRightNavigationBarView; private final Object mQueueLock = new Object(); - private boolean mShowLeft; - private boolean mShowRight; - private boolean mShowBottom; - private final NavigationBarViewFactory mNavigationBarViewFactory; + private final CarNavigationBarController mCarNavigationBarController; private CarFacetButtonController mCarFacetButtonController; private DeviceProvisionedController mDeviceProvisionedController; private boolean mDeviceIsSetUpForUser = true; - private HvacController mHvacController; private DrivingStateHelper mDrivingStateHelper; private PowerManagerHelper mPowerManagerHelper; private FlingAnimationUtils mFlingAnimationUtils; @@ -301,7 +295,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt Lazy lockscreenWallpaperLazy, /* Car Settings injected components. */ - NavigationBarViewFactory navigationBarViewFactory) { + CarNavigationBarController carNavigationBarController) { super( context, featureFlags, @@ -363,7 +357,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt scrimController, lockscreenWallpaperLazy); mScrimController = scrimController; - mNavigationBarViewFactory = navigationBarViewFactory; + mCarNavigationBarController = carNavigationBarController; } @Override @@ -378,10 +372,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mScreenLifecycle = Dependency.get(ScreenLifecycle.class); mScreenLifecycle.addObserver(mScreenObserver); - // Need to initialize HVAC controller before calling super.start - before system bars are - // created. - mHvacController = new HvacController(mContext); - super.start(); mNotificationPanel.setScrollingEnabled(true); @@ -395,8 +385,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt createBatteryController(); mCarBatteryController.startListening(); - mHvacController.connectToCarService(); - mDeviceProvisionedController.addCallback( new DeviceProvisionedController.DeviceProvisionedListener() { @Override @@ -433,9 +421,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt * before and after the device is provisioned. . Also for change of density and font size. */ private void restartNavBars() { - // remove and reattach all hvac components such that we don't keep a reference to unused - // ui elements - mHvacController.removeAllComponents(); mCarFacetButtonController.removeAll(); if (mNavigationBarWindow != null) { @@ -454,17 +439,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt mCarFacetButtonController.addAllFacetButtons(mStatusBarWindow); } - private void addTemperatureViewToController(View v) { - if (v instanceof TemperatureView) { - 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. @@ -885,10 +859,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt @Override protected void createNavigationBar(@Nullable RegisterStatusBarResult result) { - mShowBottom = mContext.getResources().getBoolean(R.bool.config_enableBottomNavigationBar); - mShowLeft = mContext.getResources().getBoolean(R.bool.config_enableLeftNavigationBar); - mShowRight = mContext.getResources().getBoolean(R.bool.config_enableRightNavigationBar); - buildNavBarWindows(); buildNavBarContent(); } @@ -896,50 +866,36 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt private void buildNavBarContent() { buildTopBar(); - if (mShowBottom) { - mNavigationBarView = mNavigationBarViewFactory.getBottomBar(mDeviceIsSetUpForUser); - mNavigationBarView.setStatusBar(this); - mNavigationBarView.setStatusBarWindowTouchListener(mNavBarNotificationTouchListener); - } + mNavigationBarView = mCarNavigationBarController.getBottomBar(mDeviceIsSetUpForUser); + mCarNavigationBarController.registerBottomBarTouchListener( + mNavBarNotificationTouchListener); - if (mShowLeft) { - mLeftNavigationBarView = mNavigationBarViewFactory.getLeftBar(mDeviceIsSetUpForUser); - mLeftNavigationBarView.setStatusBar(this); - mLeftNavigationBarView.setStatusBarWindowTouchListener( - mNavBarNotificationTouchListener); - } + mLeftNavigationBarView = mCarNavigationBarController.getLeftBar(mDeviceIsSetUpForUser); + mCarNavigationBarController.registerLeftBarTouchListener( + mNavBarNotificationTouchListener); - if (mShowRight) { - mRightNavigationBarView = mNavigationBarViewFactory.getLeftBar(mDeviceIsSetUpForUser); - mRightNavigationBarView.setStatusBar(this); - mRightNavigationBarView.setStatusBarWindowTouchListener( - mNavBarNotificationTouchListener); - } + mRightNavigationBarView = mCarNavigationBarController.getLeftBar(mDeviceIsSetUpForUser); + mCarNavigationBarController.registerRightBarTouchListener( + mNavBarNotificationTouchListener); + + mCarNavigationBarController.registerNotificationController(() -> togglePanel()); } private void buildNavBarWindows() { mTopNavigationBarContainer = mStatusBarWindow .findViewById(R.id.car_top_navigation_bar_container); - if (mShowBottom) { - mNavigationBarWindow = mNavigationBarViewFactory.getBottomWindow(); - } - if (mShowLeft) { - mLeftNavigationBarWindow = mNavigationBarViewFactory.getLeftWindow(); - } - if (mShowRight) { - mRightNavigationBarWindow = mNavigationBarViewFactory.getRightWindow(); - } + mNavigationBarWindow = mCarNavigationBarController.getBottomWindow(); + mLeftNavigationBarWindow = mCarNavigationBarController.getLeftWindow(); + mRightNavigationBarWindow = mCarNavigationBarController.getRightWindow(); } private void buildTopBar() { mTopNavigationBarContainer.removeAllViews(); - mTopNavigationBarView = mNavigationBarViewFactory.getTopBar(mDeviceIsSetUpForUser); + mTopNavigationBarView = mCarNavigationBarController.getTopBar(mDeviceIsSetUpForUser); + mCarNavigationBarController.registerTopBarTouchListener( + mTopNavBarNotificationTouchListener); mTopNavigationBarContainer.addView(mTopNavigationBarView); - - mTopNavigationBarView.setStatusBar(this); - addTemperatureViewToController(mTopNavigationBarView); - mTopNavigationBarView.setStatusBarWindowTouchListener(mTopNavBarNotificationTouchListener); } @Override