Loading packages/CarSystemUI/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,16 @@ <integer name="config_rightSystemBarZOrder">0</integer> <integer name="config_bottomSystemBarZOrder">10</integer> <!-- If set to true, the corresponding system bar will be hidden when Keyboard (IME) appears. NOTE: hideBottomSystemBarKeyboard must not be overlaid directly here. To change its value, overlay config_automotiveHideNavBarForKeyboard in framework/base/core/res/res. --> <bool name="config_hideTopSystemBarForKeyboard">false</bool> <bool name="config_hideBottomSystemBarForKeyboard"> @*android:bool/config_automotiveHideNavBarForKeyboard </bool> <bool name="config_hideLeftSystemBarForKeyboard">false</bool> <bool name="config_hideRightSystemBarForKeyboard">false</bool> <!-- Disable normal notification rendering; we handle that ourselves --> <bool name="config_renderNotifications">false</bool> Loading packages/CarSystemUI/src/com/android/systemui/car/navigationbar/CarNavigationBar.java +31 −9 Original line number Diff line number Diff line Loading @@ -91,7 +91,11 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks private ActivityManagerWrapper mActivityManagerWrapper; // If the nav bar should be hidden when the soft keyboard is visible. private boolean mHideNavBarForKeyboard; private boolean mHideTopBarForKeyboard; private boolean mHideLeftBarForKeyboard; private boolean mHideRightBarForKeyboard; private boolean mHideBottomBarForKeyboard; private boolean mBottomNavBarVisible; // Nav bar views. Loading Loading @@ -160,8 +164,13 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks @Override public void start() { // Set initial state. mHideNavBarForKeyboard = mResources.getBoolean( com.android.internal.R.bool.config_automotiveHideNavBarForKeyboard); mHideTopBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide(SystemBarConfigs.TOP); mHideBottomBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide( SystemBarConfigs.BOTTOM); mHideLeftBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide(SystemBarConfigs.LEFT); mHideRightBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide( SystemBarConfigs.RIGHT); mBottomNavBarVisible = false; // Connect into the status bar manager service Loading Loading @@ -407,19 +416,32 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks @Override public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition, boolean showImeSwitcher) { if (!mHideNavBarForKeyboard) { return; } if (mContext.getDisplayId() != displayId) { return; } boolean isKeyboardVisible = (vis & InputMethodService.IME_VISIBLE) != 0; if (mHideTopBarForKeyboard) { mCarNavigationBarController.setTopWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideBottomBarForKeyboard) { mCarNavigationBarController.setBottomWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideLeftBarForKeyboard) { mCarNavigationBarController.setLeftWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideRightBarForKeyboard) { mCarNavigationBarController.setRightWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } } @Override public void onSystemBarAppearanceChanged( int displayId, Loading packages/CarSystemUI/src/com/android/systemui/car/navigationbar/CarNavigationBarController.java +7 −6 Original line number Diff line number Diff line Loading @@ -79,9 +79,7 @@ public class CarNavigationBarController { * Hides all system bars. */ public void hideBars() { if (mTopView != null) { mTopView.setVisibility(View.GONE); } setTopWindowVisibility(View.GONE); setBottomWindowVisibility(View.GONE); setLeftWindowVisibility(View.GONE); setRightWindowVisibility(View.GONE); Loading @@ -91,9 +89,7 @@ public class CarNavigationBarController { * Shows all system bars. */ public void showBars() { if (mTopView != null) { mTopView.setVisibility(View.VISIBLE); } setTopWindowVisibility(View.VISIBLE); setBottomWindowVisibility(View.VISIBLE); setLeftWindowVisibility(View.VISIBLE); setRightWindowVisibility(View.VISIBLE); Loading Loading @@ -135,6 +131,11 @@ public class CarNavigationBarController { return mShowRight ? mNavigationBarViewFactory.getRightWindow() : null; } /** Toggles the top nav bar visibility. */ public boolean setTopWindowVisibility(@View.Visibility int visibility) { return setWindowVisibility(getTopWindow(), visibility); } /** Toggles the bottom nav bar visibility. */ public boolean setBottomWindowVisibility(@View.Visibility int visibility) { return setWindowVisibility(getBottomWindow(), visibility); Loading packages/CarSystemUI/src/com/android/systemui/car/navigationbar/SystemBarConfigs.java +47 −2 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class SystemBarConfigs { readConfigs(); checkEnabledBarsHaveUniqueBarTypes(); checkSystemBarEnabledForNotificationPanel(); checkHideBottomBarForKeyboardConfigSync(); setInsetPaddingsForOverlappingCorners(); sortSystemBarSidesByZOrder(); } Loading @@ -122,6 +123,11 @@ public class SystemBarConfigs { } } protected boolean getHideForKeyboardBySide(@SystemBarSide int side) { return mSystemBarConfigMap.get(side) != null && mSystemBarConfigMap.get(side).getHideForKeyboard(); } protected void insetSystemBar(@SystemBarSide int side, CarNavigationBarView view) { int[] paddings = mSystemBarConfigMap.get(side).getPaddings(); view.setPadding(paddings[2], paddings[0], paddings[3], paddings[1]); Loading Loading @@ -167,6 +173,8 @@ public class SystemBarConfigs { com.android.internal.R.dimen.status_bar_height)) .setBarType(mResources.getInteger(R.integer.config_topSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_topSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideTopSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(TOP, topBarConfig); } Loading @@ -180,6 +188,8 @@ public class SystemBarConfigs { .setBarType(mResources.getInteger(R.integer.config_bottomSystemBarType)) .setZOrder( mResources.getInteger(R.integer.config_bottomSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideBottomSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(BOTTOM, bottomBarConfig); } Loading @@ -192,6 +202,8 @@ public class SystemBarConfigs { R.dimen.car_left_navigation_bar_width)) .setBarType(mResources.getInteger(R.integer.config_leftSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_leftSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideLeftSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(LEFT, leftBarConfig); } Loading @@ -204,6 +216,8 @@ public class SystemBarConfigs { R.dimen.car_right_navigation_bar_width)) .setBarType(mResources.getInteger(R.integer.config_rightSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_rightSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideRightSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(RIGHT, rightBarConfig); } Loading Loading @@ -252,6 +266,24 @@ public class SystemBarConfigs { } } private void checkHideBottomBarForKeyboardConfigSync() throws RuntimeException { if (mBottomNavBarEnabled) { boolean actual = mResources.getBoolean(R.bool.config_hideBottomSystemBarForKeyboard); boolean expected = mResources.getBoolean( com.android.internal.R.bool.config_automotiveHideNavBarForKeyboard); if (actual != expected) { throw new RuntimeException("config_hideBottomSystemBarForKeyboard must not be " + "overlaid directly and should always refer to" + "config_automotiveHideNavBarForKeyboard. However, their values " + "currently do not sync. Set config_hideBottomSystemBarForKeyguard to " + "@*android:bool/config_automotiveHideNavBarForKeyboard. To change its " + "value, overlay config_automotiveHideNavBarForKeyboard in " + "framework/base/core/res/res."); } } } private void setInsetPaddingsForOverlappingCorners() { setInsetPaddingForOverlappingCorner(TOP, LEFT); setInsetPaddingForOverlappingCorner(TOP, RIGHT); Loading Loading @@ -320,14 +352,17 @@ public class SystemBarConfigs { private final int mBarType; private final int mGirth; private final int mZOrder; private final boolean mHideForKeyboard; private int[] mPaddings = new int[]{0, 0, 0, 0}; private SystemBarConfig(@SystemBarSide int side, int barType, int girth, int zOrder) { private SystemBarConfig(@SystemBarSide int side, int barType, int girth, int zOrder, boolean hideForKeyboard) { mSide = side; mBarType = barType; mGirth = girth; mZOrder = zOrder; mHideForKeyboard = hideForKeyboard; } private int getSide() { Loading @@ -346,6 +381,10 @@ public class SystemBarConfigs { return mZOrder; } private boolean getHideForKeyboard() { return mHideForKeyboard; } private int[] getPaddings() { return mPaddings; } Loading Loading @@ -383,6 +422,7 @@ public class SystemBarConfigs { private int mBarType; private int mGirth; private int mZOrder; private boolean mHideForKeyboard; private SystemBarConfigBuilder setSide(@SystemBarSide int side) { mSide = side; Loading @@ -404,8 +444,13 @@ public class SystemBarConfigs { return this; } private SystemBarConfigBuilder setHideForKeyboard(boolean hide) { mHideForKeyboard = hide; return this; } private SystemBarConfig build() { return new SystemBarConfig(mSide, mBarType, mGirth, mZOrder); return new SystemBarConfig(mSide, mBarType, mGirth, mZOrder, mHideForKeyboard); } } } packages/CarSystemUI/tests/src/com/android/systemui/car/navigationbar/CarNavigationBarControllerTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,28 @@ public class CarNavigationBarControllerTest extends SysuiTestCase { assertThat(window1).isEqualTo(window2); } @Test public void testSetTopWindowVisibility_setTrue_isVisible() { mTestableResources.addOverride(R.bool.config_enableTopNavigationBar, true); mCarNavigationBar = createNavigationBarController(); ViewGroup window = mCarNavigationBar.getTopWindow(); mCarNavigationBar.setTopWindowVisibility(View.VISIBLE); assertThat(window.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void testSetTopWindowVisibility_setFalse_isGone() { mTestableResources.addOverride(R.bool.config_enableTopNavigationBar, true); mCarNavigationBar = createNavigationBarController(); ViewGroup window = mCarNavigationBar.getTopWindow(); mCarNavigationBar.setTopWindowVisibility(View.GONE); assertThat(window.getVisibility()).isEqualTo(View.GONE); } @Test public void testSetBottomWindowVisibility_setTrue_isVisible() { mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true); Loading Loading
packages/CarSystemUI/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,16 @@ <integer name="config_rightSystemBarZOrder">0</integer> <integer name="config_bottomSystemBarZOrder">10</integer> <!-- If set to true, the corresponding system bar will be hidden when Keyboard (IME) appears. NOTE: hideBottomSystemBarKeyboard must not be overlaid directly here. To change its value, overlay config_automotiveHideNavBarForKeyboard in framework/base/core/res/res. --> <bool name="config_hideTopSystemBarForKeyboard">false</bool> <bool name="config_hideBottomSystemBarForKeyboard"> @*android:bool/config_automotiveHideNavBarForKeyboard </bool> <bool name="config_hideLeftSystemBarForKeyboard">false</bool> <bool name="config_hideRightSystemBarForKeyboard">false</bool> <!-- Disable normal notification rendering; we handle that ourselves --> <bool name="config_renderNotifications">false</bool> Loading
packages/CarSystemUI/src/com/android/systemui/car/navigationbar/CarNavigationBar.java +31 −9 Original line number Diff line number Diff line Loading @@ -91,7 +91,11 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks private ActivityManagerWrapper mActivityManagerWrapper; // If the nav bar should be hidden when the soft keyboard is visible. private boolean mHideNavBarForKeyboard; private boolean mHideTopBarForKeyboard; private boolean mHideLeftBarForKeyboard; private boolean mHideRightBarForKeyboard; private boolean mHideBottomBarForKeyboard; private boolean mBottomNavBarVisible; // Nav bar views. Loading Loading @@ -160,8 +164,13 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks @Override public void start() { // Set initial state. mHideNavBarForKeyboard = mResources.getBoolean( com.android.internal.R.bool.config_automotiveHideNavBarForKeyboard); mHideTopBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide(SystemBarConfigs.TOP); mHideBottomBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide( SystemBarConfigs.BOTTOM); mHideLeftBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide(SystemBarConfigs.LEFT); mHideRightBarForKeyboard = mSystemBarConfigs.getHideForKeyboardBySide( SystemBarConfigs.RIGHT); mBottomNavBarVisible = false; // Connect into the status bar manager service Loading Loading @@ -407,19 +416,32 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks @Override public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition, boolean showImeSwitcher) { if (!mHideNavBarForKeyboard) { return; } if (mContext.getDisplayId() != displayId) { return; } boolean isKeyboardVisible = (vis & InputMethodService.IME_VISIBLE) != 0; if (mHideTopBarForKeyboard) { mCarNavigationBarController.setTopWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideBottomBarForKeyboard) { mCarNavigationBarController.setBottomWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideLeftBarForKeyboard) { mCarNavigationBarController.setLeftWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } if (mHideRightBarForKeyboard) { mCarNavigationBarController.setRightWindowVisibility( isKeyboardVisible ? View.GONE : View.VISIBLE); } } @Override public void onSystemBarAppearanceChanged( int displayId, Loading
packages/CarSystemUI/src/com/android/systemui/car/navigationbar/CarNavigationBarController.java +7 −6 Original line number Diff line number Diff line Loading @@ -79,9 +79,7 @@ public class CarNavigationBarController { * Hides all system bars. */ public void hideBars() { if (mTopView != null) { mTopView.setVisibility(View.GONE); } setTopWindowVisibility(View.GONE); setBottomWindowVisibility(View.GONE); setLeftWindowVisibility(View.GONE); setRightWindowVisibility(View.GONE); Loading @@ -91,9 +89,7 @@ public class CarNavigationBarController { * Shows all system bars. */ public void showBars() { if (mTopView != null) { mTopView.setVisibility(View.VISIBLE); } setTopWindowVisibility(View.VISIBLE); setBottomWindowVisibility(View.VISIBLE); setLeftWindowVisibility(View.VISIBLE); setRightWindowVisibility(View.VISIBLE); Loading Loading @@ -135,6 +131,11 @@ public class CarNavigationBarController { return mShowRight ? mNavigationBarViewFactory.getRightWindow() : null; } /** Toggles the top nav bar visibility. */ public boolean setTopWindowVisibility(@View.Visibility int visibility) { return setWindowVisibility(getTopWindow(), visibility); } /** Toggles the bottom nav bar visibility. */ public boolean setBottomWindowVisibility(@View.Visibility int visibility) { return setWindowVisibility(getBottomWindow(), visibility); Loading
packages/CarSystemUI/src/com/android/systemui/car/navigationbar/SystemBarConfigs.java +47 −2 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ public class SystemBarConfigs { readConfigs(); checkEnabledBarsHaveUniqueBarTypes(); checkSystemBarEnabledForNotificationPanel(); checkHideBottomBarForKeyboardConfigSync(); setInsetPaddingsForOverlappingCorners(); sortSystemBarSidesByZOrder(); } Loading @@ -122,6 +123,11 @@ public class SystemBarConfigs { } } protected boolean getHideForKeyboardBySide(@SystemBarSide int side) { return mSystemBarConfigMap.get(side) != null && mSystemBarConfigMap.get(side).getHideForKeyboard(); } protected void insetSystemBar(@SystemBarSide int side, CarNavigationBarView view) { int[] paddings = mSystemBarConfigMap.get(side).getPaddings(); view.setPadding(paddings[2], paddings[0], paddings[3], paddings[1]); Loading Loading @@ -167,6 +173,8 @@ public class SystemBarConfigs { com.android.internal.R.dimen.status_bar_height)) .setBarType(mResources.getInteger(R.integer.config_topSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_topSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideTopSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(TOP, topBarConfig); } Loading @@ -180,6 +188,8 @@ public class SystemBarConfigs { .setBarType(mResources.getInteger(R.integer.config_bottomSystemBarType)) .setZOrder( mResources.getInteger(R.integer.config_bottomSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideBottomSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(BOTTOM, bottomBarConfig); } Loading @@ -192,6 +202,8 @@ public class SystemBarConfigs { R.dimen.car_left_navigation_bar_width)) .setBarType(mResources.getInteger(R.integer.config_leftSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_leftSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideLeftSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(LEFT, leftBarConfig); } Loading @@ -204,6 +216,8 @@ public class SystemBarConfigs { R.dimen.car_right_navigation_bar_width)) .setBarType(mResources.getInteger(R.integer.config_rightSystemBarType)) .setZOrder(mResources.getInteger(R.integer.config_rightSystemBarZOrder)) .setHideForKeyboard(mResources.getBoolean( R.bool.config_hideRightSystemBarForKeyboard)) .build(); mSystemBarConfigMap.put(RIGHT, rightBarConfig); } Loading Loading @@ -252,6 +266,24 @@ public class SystemBarConfigs { } } private void checkHideBottomBarForKeyboardConfigSync() throws RuntimeException { if (mBottomNavBarEnabled) { boolean actual = mResources.getBoolean(R.bool.config_hideBottomSystemBarForKeyboard); boolean expected = mResources.getBoolean( com.android.internal.R.bool.config_automotiveHideNavBarForKeyboard); if (actual != expected) { throw new RuntimeException("config_hideBottomSystemBarForKeyboard must not be " + "overlaid directly and should always refer to" + "config_automotiveHideNavBarForKeyboard. However, their values " + "currently do not sync. Set config_hideBottomSystemBarForKeyguard to " + "@*android:bool/config_automotiveHideNavBarForKeyboard. To change its " + "value, overlay config_automotiveHideNavBarForKeyboard in " + "framework/base/core/res/res."); } } } private void setInsetPaddingsForOverlappingCorners() { setInsetPaddingForOverlappingCorner(TOP, LEFT); setInsetPaddingForOverlappingCorner(TOP, RIGHT); Loading Loading @@ -320,14 +352,17 @@ public class SystemBarConfigs { private final int mBarType; private final int mGirth; private final int mZOrder; private final boolean mHideForKeyboard; private int[] mPaddings = new int[]{0, 0, 0, 0}; private SystemBarConfig(@SystemBarSide int side, int barType, int girth, int zOrder) { private SystemBarConfig(@SystemBarSide int side, int barType, int girth, int zOrder, boolean hideForKeyboard) { mSide = side; mBarType = barType; mGirth = girth; mZOrder = zOrder; mHideForKeyboard = hideForKeyboard; } private int getSide() { Loading @@ -346,6 +381,10 @@ public class SystemBarConfigs { return mZOrder; } private boolean getHideForKeyboard() { return mHideForKeyboard; } private int[] getPaddings() { return mPaddings; } Loading Loading @@ -383,6 +422,7 @@ public class SystemBarConfigs { private int mBarType; private int mGirth; private int mZOrder; private boolean mHideForKeyboard; private SystemBarConfigBuilder setSide(@SystemBarSide int side) { mSide = side; Loading @@ -404,8 +444,13 @@ public class SystemBarConfigs { return this; } private SystemBarConfigBuilder setHideForKeyboard(boolean hide) { mHideForKeyboard = hide; return this; } private SystemBarConfig build() { return new SystemBarConfig(mSide, mBarType, mGirth, mZOrder); return new SystemBarConfig(mSide, mBarType, mGirth, mZOrder, mHideForKeyboard); } } }
packages/CarSystemUI/tests/src/com/android/systemui/car/navigationbar/CarNavigationBarControllerTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,28 @@ public class CarNavigationBarControllerTest extends SysuiTestCase { assertThat(window1).isEqualTo(window2); } @Test public void testSetTopWindowVisibility_setTrue_isVisible() { mTestableResources.addOverride(R.bool.config_enableTopNavigationBar, true); mCarNavigationBar = createNavigationBarController(); ViewGroup window = mCarNavigationBar.getTopWindow(); mCarNavigationBar.setTopWindowVisibility(View.VISIBLE); assertThat(window.getVisibility()).isEqualTo(View.VISIBLE); } @Test public void testSetTopWindowVisibility_setFalse_isGone() { mTestableResources.addOverride(R.bool.config_enableTopNavigationBar, true); mCarNavigationBar = createNavigationBarController(); ViewGroup window = mCarNavigationBar.getTopWindow(); mCarNavigationBar.setTopWindowVisibility(View.GONE); assertThat(window.getVisibility()).isEqualTo(View.GONE); } @Test public void testSetBottomWindowVisibility_setTrue_isVisible() { mTestableResources.addOverride(R.bool.config_enableBottomNavigationBar, true); Loading