summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java4
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java83
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java5
-rw-r--r--packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java100
-rw-r--r--packages/CarSystemUI/tests/src/com/android/systemui/navigationbar/car/CarNavigationBarControllerTest.java104
5 files changed, 197 insertions, 99 deletions
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 63bc66afddf8..98b91ebd8038 100644
--- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBar.java
@@ -25,6 +25,7 @@ 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;
@@ -291,7 +292,8 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks
}
boolean isKeyboardVisible = (vis & InputMethodService.IME_VISIBLE) != 0;
- mCarNavigationBarController.setBottomWindowVisibility(!isKeyboardVisible);
+ mCarNavigationBarController.setBottomWindowVisibility(
+ isKeyboardVisible ? View.GONE : View.VISIBLE);
}
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
index f59f886d487b..6bed69bdee88 100644
--- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java
+++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationBarController.java
@@ -98,31 +98,30 @@ public class CarNavigationBarController {
}
/** Toggles the bottom nav bar visibility. */
- public boolean setBottomWindowVisibility(boolean isVisible) {
- return setWindowVisibility(getBottomWindow(), isVisible);
+ public boolean setBottomWindowVisibility(@View.Visibility int visibility) {
+ return setWindowVisibility(getBottomWindow(), visibility);
}
/** Toggles the left nav bar visibility. */
- public boolean setLeftWindowVisibility(boolean isVisible) {
- return setWindowVisibility(getLeftWindow(), isVisible);
+ public boolean setLeftWindowVisibility(@View.Visibility int visibility) {
+ return setWindowVisibility(getLeftWindow(), visibility);
}
/** Toggles the right nav bar visibility. */
- public boolean setRightWindowVisibility(boolean isVisible) {
- return setWindowVisibility(getRightWindow(), isVisible);
+ public boolean setRightWindowVisibility(@View.Visibility int visibility) {
+ return setWindowVisibility(getRightWindow(), visibility);
}
- private boolean setWindowVisibility(ViewGroup window, boolean isVisible) {
+ private boolean setWindowVisibility(ViewGroup window, @View.Visibility int visibility) {
if (window == null) {
return false;
}
- int newVisibility = isVisible ? View.VISIBLE : View.GONE;
- if (window.getVisibility() == newVisibility) {
+ if (window.getVisibility() == visibility) {
return false;
}
- window.setVisibility(newVisibility);
+ window.setVisibility(visibility);
return true;
}
@@ -228,6 +227,63 @@ public class CarNavigationBarController {
}
}
+ /**
+ * Shows all of the keyguard specific buttons on the valid instances of
+ * {@link CarNavigationBarView}.
+ */
+ public void showAllKeyguardButtons(boolean isSetUp) {
+ checkAllBars(isSetUp);
+ if (mTopView != null) {
+ mTopView.showKeyguardButtons();
+ }
+ if (mBottomView != null) {
+ mBottomView.showKeyguardButtons();
+ }
+ if (mLeftView != null) {
+ mLeftView.showKeyguardButtons();
+ }
+ if (mRightView != null) {
+ mRightView.showKeyguardButtons();
+ }
+ }
+
+ /**
+ * Hides all of the keyguard specific buttons on the valid instances of
+ * {@link CarNavigationBarView}.
+ */
+ public void hideAllKeyguardButtons(boolean isSetUp) {
+ checkAllBars(isSetUp);
+ if (mTopView != null) {
+ mTopView.hideKeyguardButtons();
+ }
+ if (mBottomView != null) {
+ mBottomView.hideKeyguardButtons();
+ }
+ if (mLeftView != null) {
+ mLeftView.hideKeyguardButtons();
+ }
+ if (mRightView != null) {
+ mRightView.hideKeyguardButtons();
+ }
+ }
+
+ /** Toggles whether the notifications icon has an unseen indicator or not. */
+ public void toggleAllNotificationsUnseenIndicator(boolean isSetUp, boolean hasUnseen) {
+ checkAllBars(isSetUp);
+ if (mTopView != null) {
+ mTopView.toggleNotificationUnseenIndicator(hasUnseen);
+ }
+ if (mBottomView != null) {
+ mBottomView.toggleNotificationUnseenIndicator(hasUnseen);
+ }
+ if (mLeftView != null) {
+ mLeftView.toggleNotificationUnseenIndicator(hasUnseen);
+ }
+ if (mRightView != null) {
+ mRightView.toggleNotificationUnseenIndicator(hasUnseen);
+ }
+ }
+
/** Interface for controlling the notifications shade. */
public interface NotificationsShadeController {
/** Toggles the visibility of the notifications shade. */
@@ -244,4 +300,11 @@ public class CarNavigationBarController {
}
}
}
+
+ private void checkAllBars(boolean isSetUp) {
+ mTopView = getTopBar(isSetUp);
+ mBottomView = getBottomBar(isSetUp);
+ mLeftView = getLeftBar(isSetUp);
+ mRightView = getRightBar(isSetUp);
+ }
}
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 40823abaaead..922bfffcfa22 100644
--- a/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java
+++ b/packages/CarSystemUI/src/com/android/systemui/navigationbar/car/CarNavigationButton.java
@@ -150,6 +150,11 @@ public class CarNavigationButton extends com.android.keyguard.AlphaOptimizedImag
updateImage();
}
+ /** Gets whether the icon is in an unseen state. */
+ public boolean getUnseen() {
+ return mHasUnseen;
+ }
+
private void updateImage() {
if (mHasUnseen) {
setImageResource(mSelected ? UNSEEN_SELECTED_ICON_RESOURCE_ID
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 601bc4030226..ce763b900b9a 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -168,13 +168,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
private Drawable mNotificationPanelBackground;
private ViewGroup mTopNavigationBarContainer;
- private ViewGroup mNavigationBarWindow;
- private ViewGroup mLeftNavigationBarWindow;
- private ViewGroup mRightNavigationBarWindow;
private CarNavigationBarView mTopNavigationBarView;
- private CarNavigationBarView mNavigationBarView;
- private CarNavigationBarView mLeftNavigationBarView;
- private CarNavigationBarView mRightNavigationBarView;
private final Object mQueueLock = new Object();
private final CarNavigationBarController mCarNavigationBarController;
@@ -425,12 +419,12 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
new DeviceProvisionedController.DeviceProvisionedListener() {
@Override
public void onUserSetupChanged() {
- mHandler.post(() -> restartNavBarsIfNecessary());
+ mHandler.post(() -> resetSystemBarsIfNecessary());
}
@Override
public void onUserSwitched() {
- mHandler.post(() -> restartNavBarsIfNecessary());
+ mHandler.post(() -> resetSystemBarsIfNecessary());
}
});
@@ -444,11 +438,11 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
mSwitchToGuestTimer = new SwitchToGuestTimer(mContext);
}
- private void restartNavBarsIfNecessary() {
+ private void resetSystemBarsIfNecessary() {
boolean currentUserSetup = mDeviceProvisionedController.isCurrentUserSetup();
if (mDeviceIsSetUpForUser != currentUserSetup) {
mDeviceIsSetUpForUser = currentUserSetup;
- restartNavBars();
+ resetSystemBars();
}
}
@@ -456,19 +450,9 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
* 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.
*/
- private void restartNavBars() {
+ private void resetSystemBars() {
mCarFacetButtonController.removeAll();
- if (mNavigationBarWindow != null) {
- mNavigationBarView = null;
- }
- if (mLeftNavigationBarWindow != null) {
- mLeftNavigationBarView = null;
- }
- if (mRightNavigationBarWindow != null) {
- mRightNavigationBarView = null;
- }
-
buildNavBarContent();
// CarFacetButtonController was reset therefore we need to re-add the status bar elements
// to the controller.
@@ -480,51 +464,22 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
* the full screen user selector is shown.
*/
void setNavBarVisibility(@View.Visibility int visibility) {
- if (mNavigationBarWindow != null) {
- mNavigationBarWindow.setVisibility(visibility);
- }
- if (mLeftNavigationBarWindow != null) {
- mLeftNavigationBarWindow.setVisibility(visibility);
- }
- if (mRightNavigationBarWindow != null) {
- mRightNavigationBarWindow.setVisibility(visibility);
- }
+ mCarNavigationBarController.setBottomWindowVisibility(visibility);
+ mCarNavigationBarController.setLeftWindowVisibility(visibility);
+ mCarNavigationBarController.setRightWindowVisibility(visibility);
}
@Override
public boolean hideKeyguard() {
boolean result = super.hideKeyguard();
- if (mNavigationBarView != null) {
- mNavigationBarView.hideKeyguardButtons();
- }
- if (mLeftNavigationBarView != null) {
- mLeftNavigationBarView.hideKeyguardButtons();
- }
- if (mRightNavigationBarView != null) {
- mRightNavigationBarView.hideKeyguardButtons();
- }
+ mCarNavigationBarController.hideAllKeyguardButtons(mDeviceIsSetUpForUser);
return result;
}
@Override
public void showKeyguard() {
super.showKeyguard();
- updateNavBarForKeyguardContent();
- }
-
- /**
- * Switch to the keyguard applicable content contained in the nav bars
- */
- private void updateNavBarForKeyguardContent() {
- if (mNavigationBarView != null) {
- mNavigationBarView.showKeyguardButtons();
- }
- if (mLeftNavigationBarView != null) {
- mLeftNavigationBarView.showKeyguardButtons();
- }
- if (mRightNavigationBarView != null) {
- mRightNavigationBarView.showKeyguardButtons();
- }
+ mCarNavigationBarController.showAllKeyguardButtons(mDeviceIsSetUpForUser);
}
@Override
@@ -628,20 +583,11 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
mNotificationDataManager = new NotificationDataManager();
mNotificationDataManager.setOnUnseenCountUpdateListener(
() -> {
- if (mNavigationBarView != null && mNotificationDataManager != null) {
- Boolean hasUnseen =
+ if (mNotificationDataManager != null) {
+ boolean hasUnseen =
mNotificationDataManager.getUnseenNotificationCount() > 0;
- if (mNavigationBarView != null) {
- mNavigationBarView.toggleNotificationUnseenIndicator(hasUnseen);
- }
-
- if (mLeftNavigationBarView != null) {
- mLeftNavigationBarView.toggleNotificationUnseenIndicator(hasUnseen);
- }
-
- if (mRightNavigationBarView != null) {
- mRightNavigationBarView.toggleNotificationUnseenIndicator(hasUnseen);
- }
+ mCarNavigationBarController.toggleAllNotificationsUnseenIndicator(
+ mDeviceIsSetUpForUser, hasUnseen);
}
});
@@ -895,37 +841,27 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
@Override
protected void createNavigationBar(@Nullable RegisterStatusBarResult result) {
- buildNavBarWindows();
+ mTopNavigationBarContainer = mStatusBarWindow
+ .findViewById(R.id.car_top_navigation_bar_container);
+
buildNavBarContent();
}
private void buildNavBarContent() {
buildTopBar();
- mNavigationBarView = mCarNavigationBarController.getBottomBar(mDeviceIsSetUpForUser);
mCarNavigationBarController.registerBottomBarTouchListener(
mNavBarNotificationTouchListener);
- mLeftNavigationBarView = mCarNavigationBarController.getLeftBar(mDeviceIsSetUpForUser);
mCarNavigationBarController.registerLeftBarTouchListener(
mNavBarNotificationTouchListener);
- mRightNavigationBarView = mCarNavigationBarController.getLeftBar(mDeviceIsSetUpForUser);
mCarNavigationBarController.registerRightBarTouchListener(
mNavBarNotificationTouchListener);
mCarNavigationBarController.registerNotificationController(() -> togglePanel());
}
- private void buildNavBarWindows() {
- mTopNavigationBarContainer = mStatusBarWindow
- .findViewById(R.id.car_top_navigation_bar_container);
-
- mNavigationBarWindow = mCarNavigationBarController.getBottomWindow();
- mLeftNavigationBarWindow = mCarNavigationBarController.getLeftWindow();
- mRightNavigationBarWindow = mCarNavigationBarController.getRightWindow();
- }
-
private void buildTopBar() {
mTopNavigationBarContainer.removeAllViews();
mTopNavigationBarView = mCarNavigationBarController.getTopBar(mDeviceIsSetUpForUser);
@@ -1099,7 +1035,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
@Override
public void onDensityOrFontScaleChanged() {
super.onDensityOrFontScaleChanged();
- restartNavBars();
+ resetSystemBars();
// Need to update the background on density changed in case the change was due to night
// mode.
mNotificationPanelBackground = getDefaultWallpaper();
diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/navigationbar/car/CarNavigationBarControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/navigationbar/car/CarNavigationBarControllerTest.java
index 20ace44cfa19..901d2006eb12 100644
--- a/packages/CarSystemUI/tests/src/com/android/systemui/navigationbar/car/CarNavigationBarControllerTest.java
+++ b/packages/CarSystemUI/tests/src/com/android/systemui/navigationbar/car/CarNavigationBarControllerTest.java
@@ -31,7 +31,9 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.car.hvac.HvacController;
+import com.android.systemui.statusbar.phone.StatusBarIconController;
import org.junit.Before;
import org.junit.Test;
@@ -60,6 +62,10 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mNavigationBarViewFactory = new NavigationBarViewFactory(mContext);
mHvacControllerLazy = () -> mHvacController;
mTestableResources = mContext.getOrCreateTestableResources();
+
+ // Needed to inflate top navigation bar.
+ mDependency.injectMockDependency(DarkIconDispatcher.class);
+ mDependency.injectMockDependency(StatusBarIconController.class);
}
@Test
@@ -189,7 +195,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getBottomWindow();
- mCarNavigationBar.setBottomWindowVisibility(true);
+ mCarNavigationBar.setBottomWindowVisibility(View.VISIBLE);
assertThat(window.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -201,7 +207,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getBottomWindow();
- mCarNavigationBar.setBottomWindowVisibility(false);
+ mCarNavigationBar.setBottomWindowVisibility(View.GONE);
assertThat(window.getVisibility()).isEqualTo(View.GONE);
}
@@ -213,7 +219,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getLeftWindow();
- mCarNavigationBar.setLeftWindowVisibility(true);
+ mCarNavigationBar.setLeftWindowVisibility(View.VISIBLE);
assertThat(window.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -225,7 +231,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getLeftWindow();
- mCarNavigationBar.setLeftWindowVisibility(false);
+ mCarNavigationBar.setLeftWindowVisibility(View.GONE);
assertThat(window.getVisibility()).isEqualTo(View.GONE);
}
@@ -237,7 +243,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getRightWindow();
- mCarNavigationBar.setRightWindowVisibility(true);
+ mCarNavigationBar.setRightWindowVisibility(View.VISIBLE);
assertThat(window.getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -249,7 +255,7 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
mHvacControllerLazy);
ViewGroup window = mCarNavigationBar.getRightWindow();
- mCarNavigationBar.setRightWindowVisibility(false);
+ mCarNavigationBar.setRightWindowVisibility(View.GONE);
assertThat(window.getVisibility()).isEqualTo(View.GONE);
}
@@ -313,4 +319,90 @@ public class CarNavigationBarControllerTest extends SysuiTestCase {
assertThat(controller).isNotNull();
}
+
+ @Test
+ public void testShowAllKeyguardButtons_bottomEnabled_bottomKeyguardButtonsVisible() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ View bottomKeyguardButtons = bottomBar.findViewById(R.id.lock_screen_nav_buttons);
+
+ mCarNavigationBar.showAllKeyguardButtons(/* isSetUp= */ true);
+
+ assertThat(bottomKeyguardButtons.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void testShowAllKeyguardButtons_bottomEnabled_bottomNavButtonsGone() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ View bottomButtons = bottomBar.findViewById(R.id.nav_buttons);
+
+ mCarNavigationBar.showAllKeyguardButtons(/* isSetUp= */ true);
+
+ assertThat(bottomButtons.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void testHideAllKeyguardButtons_bottomEnabled_bottomKeyguardButtonsGone() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ View bottomKeyguardButtons = bottomBar.findViewById(R.id.lock_screen_nav_buttons);
+
+ mCarNavigationBar.showAllKeyguardButtons(/* isSetUp= */ true);
+ assertThat(bottomKeyguardButtons.getVisibility()).isEqualTo(View.VISIBLE);
+ mCarNavigationBar.hideAllKeyguardButtons(/* isSetUp= */ true);
+
+ assertThat(bottomKeyguardButtons.getVisibility()).isEqualTo(View.GONE);
+ }
+
+ @Test
+ public void testHideAllKeyguardButtons_bottomEnabled_bottomNavButtonsVisible() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ View bottomButtons = bottomBar.findViewById(R.id.nav_buttons);
+
+ mCarNavigationBar.showAllKeyguardButtons(/* isSetUp= */ true);
+ assertThat(bottomButtons.getVisibility()).isEqualTo(View.GONE);
+ mCarNavigationBar.hideAllKeyguardButtons(/* isSetUp= */ true);
+
+ assertThat(bottomButtons.getVisibility()).isEqualTo(View.VISIBLE);
+ }
+
+ @Test
+ public void testToggleAllNotificationsUnseenIndicator_bottomEnabled_hasUnseen_setCorrectly() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ CarNavigationButton notifications = bottomBar.findViewById(R.id.notifications);
+
+ boolean hasUnseen = true;
+ mCarNavigationBar.toggleAllNotificationsUnseenIndicator(/* isSetUp= */ true,
+ hasUnseen);
+
+ assertThat(notifications.getUnseen()).isTrue();
+ }
+
+ @Test
+ public void testToggleAllNotificationsUnseenIndicator_bottomEnabled_noUnseen_setCorrectly() {
+ mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true);
+ mCarNavigationBar = new CarNavigationBarController(mContext, mNavigationBarViewFactory,
+ mHvacControllerLazy);
+ CarNavigationBarView bottomBar = mCarNavigationBar.getBottomBar(/* isSetUp= */ true);
+ CarNavigationButton notifications = bottomBar.findViewById(R.id.notifications);
+
+ boolean hasUnseen = false;
+ mCarNavigationBar.toggleAllNotificationsUnseenIndicator(/* isSetUp= */ true,
+ hasUnseen);
+
+ assertThat(notifications.getUnseen()).isFalse();
+ }
}