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.");