Pass WindowContext to DisplayInfoChangeListener

- WindowContext (or updated DisplayContext for Pre-S) contains updated Resources to be used for the listener

Fixes: 181215299
Fixes: 176656141
Test: Swap between large/small screen, large sreen UI is seen
Test: Swap between font size, launcher icon text is updated
Test: Start secondary home
Test: Repeat the above tests with Utilities.ATLEAST_S hardcoded to false
Change-Id: Ib33025ac0276c84fe2b3213e9946721e5988e3da
diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java
index cc9f594..4c5f9f2 100644
--- a/src/com/android/launcher3/BaseDraggingActivity.java
+++ b/src/com/android/launcher3/BaseDraggingActivity.java
@@ -21,6 +21,7 @@
 
 import android.app.ActivityOptions;
 import android.content.ActivityNotFoundException;
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.LauncherApps;
 import android.content.res.Configuration;
@@ -296,7 +297,7 @@
     }
 
     @Override
-    public void onDisplayInfoChanged(Info info, int flags) {
+    public void onDisplayInfoChanged(Context context, Info info, int flags) {
         if ((flags & CHANGE_ROTATION) != 0 && mDeviceProfile.updateIsSeascape(this)) {
             reapplyUi();
         }
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 11dc0c4..1332e14 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -203,9 +203,9 @@
                 .apply();
 
         DisplayController.INSTANCE.get(context).addChangeListener(
-                (info, flags) -> {
+                (displayContext, info, flags) -> {
                     if ((flags & (CHANGE_SIZE | CHANGE_DENSITY)) != 0) {
-                        onConfigChanged(context);
+                        onConfigChanged(displayContext);
                     }
                 });
         mOverlayMonitor = new OverlayMonitor(context);
@@ -226,7 +226,7 @@
      */
     public InvariantDeviceProfile(Context context, Display display) {
         // Ensure that the main device profile is initialized
-        InvariantDeviceProfile originalProfile = INSTANCE.get(context);
+        INSTANCE.get(context);
         String gridName = getCurrentGridName(context);
 
         // Get the display info based on default display and interpolate it to existing display
diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java
index 07c89b9..75c089e 100644
--- a/src/com/android/launcher3/util/DisplayController.java
+++ b/src/com/android/launcher3/util/DisplayController.java
@@ -87,7 +87,7 @@
                     new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
         }
 
-        mInfo = createInfo(display);
+        mInfo = new Info(getContext(display), display);
         mDM.registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler());
     }
 
@@ -125,7 +125,13 @@
      */
     public interface DisplayInfoChangeListener {
 
-        void onDisplayInfoChanged(Info info, int flags);
+        /**
+         * Invoked when display info has changed.
+         * @param context updated context associated with the display.
+         * @param info updated display information.
+         * @param flags bitmask indicating type of change.
+         */
+        void onDisplayInfoChanged(Context context, Info info, int flags);
     }
 
     /**
@@ -172,14 +178,15 @@
         return mInfo;
     }
 
-    private Info createInfo(Display display) {
-        return new Info(mContext.createDisplayContext(display), display);
+    private Context getContext(Display display) {
+        return Utilities.ATLEAST_S ? mWindowContext : mContext.createDisplayContext(display);
     }
 
     @AnyThread
     private void handleInfoChange(Display display) {
         Info oldInfo = mInfo;
-        Info newInfo = createInfo(display);
+        Context context = getContext(display);
+        Info newInfo = new Info(context, display);
         int change = 0;
         if (newInfo.hasDifferentSize(oldInfo)) {
             change |= CHANGE_SIZE;
@@ -197,13 +204,13 @@
         if (change != 0) {
             mInfo = newInfo;
             final int flags = change;
-            MAIN_EXECUTOR.execute(() -> notifyChange(flags));
+            MAIN_EXECUTOR.execute(() -> notifyChange(context, flags));
         }
     }
 
-    private void notifyChange(int flags) {
+    private void notifyChange(Context context, int flags) {
         for (int i = mListeners.size() - 1; i >= 0; i--) {
-            mListeners.get(i).onDisplayInfoChanged(mInfo, flags);
+            mListeners.get(i).onDisplayInfoChanged(context, mInfo, flags);
         }
     }