From bef845ffd521aa83d779de584ec370f9f88f27f3 Mon Sep 17 00:00:00 2001 From: Emily Janzer Date: Sat, 18 Jan 2020 11:57:48 -0800 Subject: [PATCH] Save a copy of DisplayMetrics native map in DeviceInfoModule Summary: After some more testing, I discovered a problem in D19395326 because the native map that DeviceInfoModule was storing in `mPreviousDisplayMetrics` had been consumed when the event was emitted to JS. This caused the comparison to fail, so it would emit the event again when the dimensions hadn't changed. In this diff, I'm storing a Java-only copy of the native map before emitting the event to JS so this shouldn't happen. Changelog: [Android][Fixed] Fix bug in updating dimensions in JS Reviewed By: mdvacca Differential Revision: D19462861 fbshipit-source-id: 2e47479df93377b85fe87f255972dd31e874e3a8 --- .../com/facebook/react/modules/deviceinfo/DeviceInfoModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java index a6a2e5c4a47..f8deb0e2e4e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java @@ -90,10 +90,10 @@ public class DeviceInfoModule extends ReactContextBaseJavaModule WritableNativeMap displayMetrics = DisplayMetricsHolder.getDisplayMetricsNativeMap(mFontScale); if (!displayMetrics.equals(mPreviousDisplayMetrics)) { + mPreviousDisplayMetrics = displayMetrics.copy(); mReactApplicationContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit("didUpdateDimensions", displayMetrics); - mPreviousDisplayMetrics = displayMetrics; } } else { ReactSoftException.logSoftException(