Merge "Add workaround to handle overlay package changes for non-primary users" into qt-dev
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
index 30f6e1a..87d90ad 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
@@ -156,10 +156,7 @@
      */
     protected void onConfigurationChanged(Configuration newConfig) {
         if (mConfigChanges.applyNewConfig(mContext.getResources())) {
-            // Save the old state.
-            Parcelable p = destroyFragmentHost();
-            // Generate a new fragment host and restore its state.
-            createFragmentHost(p);
+            reloadFragments();
         } else {
             mFragments.dispatchConfigurationChanged(newConfig);
         }
@@ -217,6 +214,13 @@
         Dependency.get(FragmentService.class).removeAndDestroy(view);
     }
 
+    public void reloadFragments() {
+        // Save the old state.
+        Parcelable p = destroyFragmentHost();
+        // Generate a new fragment host and restore its state.
+        createFragmentHost(p);
+    }
+
     class HostCallbacks extends FragmentHostCallback<FragmentHostManager> {
         public HostCallbacks() {
             super(mContext, FragmentHostManager.this.mHandler, 0);
@@ -293,13 +297,6 @@
             reloadFragments();
         }
 
-        private void reloadFragments() {
-            // Save the old state.
-            Parcelable p = destroyFragmentHost();
-            // Generate a new fragment host and restore its state.
-            createFragmentHost(p);
-        }
-
         Fragment instantiate(Context context, String className, Bundle arguments) {
             Context extensionContext = mExtensionLookup.get(className);
             if (extensionContext != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 1429718..e7dab8e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -979,6 +979,17 @@
     public void onNavigationModeChanged(int mode) {
         mNavBarMode = mode;
         updateScreenPinningGestures();
+
+        // Workaround for b/132825155, for secondary users, we currently don't receive configuration
+        // changes on overlay package change since SystemUI runs for the system user. In this case,
+        // trigger a new configuration change to ensure that the nav bar is updated in the same way.
+        int userId = ActivityManagerWrapper.getInstance().getCurrentUserId();
+        if (userId != UserHandle.USER_SYSTEM) {
+            mHandler.post(() -> {
+                FragmentHostManager fragmentHost = FragmentHostManager.get(mNavigationBarView);
+                fragmentHost.reloadFragments();
+            });
+        }
     }
 
     public void disableAnimationsDuringHide(long delay) {