Merge "Cache call to WM#hasNavigationBar" into main
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
index 79aedff..9f5e1b7 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarControllerImpl.java
@@ -35,6 +35,7 @@
import android.provider.Settings;
import android.util.Log;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import android.view.Display;
import android.view.IWindowManager;
import android.view.View;
@@ -94,6 +95,9 @@
@VisibleForTesting
SparseArray<NavigationBar> mNavigationBars = new SparseArray<>();
+ /** Local cache for {@link IWindowManager#hasNavigationBar(int)}. */
+ private SparseBooleanArray mHasNavBar = new SparseBooleanArray();
+
// Tracks config changes that will actually recreate the nav bar
private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges(
ActivityInfo.CONFIG_FONT_SCALE
@@ -221,10 +225,16 @@
}
private boolean shouldCreateNavBarAndTaskBar(int displayId) {
+ if (mHasNavBar.indexOfKey(displayId) > -1) {
+ return mHasNavBar.get(displayId);
+ }
+
final IWindowManager wms = WindowManagerGlobal.getWindowManagerService();
try {
- return wms.hasNavigationBar(displayId);
+ boolean hasNavigationBar = wms.hasNavigationBar(displayId);
+ mHasNavBar.put(displayId, hasNavigationBar);
+ return hasNavigationBar;
} catch (RemoteException e) {
// Cannot get wms, just return false with warning message.
Log.w(TAG, "Cannot get WindowManager.");