Skip to content

Commit 2ef1bb9

Browse files
alanleedevfacebook-github-bot
authored andcommitted
Back out "Fix Dimensions window values on Android < 15" (facebook#53149)
Summary: Pull Request resolved: facebook#53149 Reverting PR facebook#52738 Changelog: [Internal] reverting D78738516 Original commit changeset: fdb22f3cc76b Original Phabricator Diff: D78738516 Reviewed By: mdvacca, lenaic, Abbondanzo Differential Revision: D79835424
1 parent aaf4712 commit 2ef1bb9

File tree

11 files changed

+34
-95
lines changed

11 files changed

+34
-95
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3348,10 +3348,8 @@ public final class com/facebook/react/uimanager/DisplayMetricsHolder {
33483348
public static final fun getDisplayMetricsWritableMap (D)Lcom/facebook/react/bridge/WritableMap;
33493349
public static final fun getScreenDisplayMetrics ()Landroid/util/DisplayMetrics;
33503350
public static final fun getWindowDisplayMetrics ()Landroid/util/DisplayMetrics;
3351-
public static final fun initScreenDisplayMetrics (Landroid/content/Context;)V
3352-
public static final fun initScreenDisplayMetricsIfNotInitialized (Landroid/content/Context;)V
3353-
public static final fun initWindowDisplayMetrics (Landroid/content/Context;)V
3354-
public static final fun initWindowDisplayMetricsIfNotInitialized (Landroid/content/Context;)V
3351+
public static final fun initDisplayMetrics (Landroid/content/Context;)V
3352+
public static final fun initDisplayMetricsIfNotInitialized (Landroid/content/Context;)V
33553353
public static final fun setScreenDisplayMetrics (Landroid/util/DisplayMetrics;)V
33563354
public static final fun setWindowDisplayMetrics (Landroid/util/DisplayMetrics;)V
33573355
}

packages/react-native/ReactAndroid/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,6 @@ dependencies {
630630
api(libs.androidx.autofill)
631631
api(libs.androidx.swiperefreshlayout)
632632
api(libs.androidx.tracing)
633-
api(libs.androidx.window)
634633

635634
api(libs.fbjni)
636635
api(libs.fresco)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,7 @@ public static ReactInstanceManagerBuilder builder() {
262262
FLog.d(TAG, "ReactInstanceManager.ctor()");
263263
initializeSoLoaderIfNecessary(applicationContext);
264264

265-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(applicationContext);
266-
267-
if (currentActivity != null) {
268-
DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(currentActivity);
269-
}
265+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(applicationContext);
270266

271267
// See {@code ReactInstanceManagerBuilder} for description of all flags here.
272268
mApplicationContext = applicationContext;
@@ -931,13 +927,6 @@ public void onConfigurationChanged(Context updatedContext, @Nullable Configurati
931927

932928
ReactContext currentReactContext = getCurrentReactContext();
933929
if (currentReactContext != null) {
934-
DisplayMetricsHolder.initScreenDisplayMetrics(currentReactContext);
935-
Activity currentActivity = currentReactContext.getCurrentActivity();
936-
937-
if (currentActivity != null) {
938-
DisplayMetricsHolder.initWindowDisplayMetrics(currentActivity);
939-
}
940-
941930
AppearanceModule appearanceModule =
942931
currentReactContext.getNativeModule(AppearanceModule.class);
943932

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,9 @@ private void init() {
136136
setRootViewTag(ReactRootViewTagGenerator.getNextRootViewTag());
137137
setClipChildren(false);
138138

139-
DisplayMetricsHolder.initScreenDisplayMetrics(getContext());
140-
DisplayMetricsHolder.initWindowDisplayMetrics(getContext());
139+
if (ReactNativeFeatureFlags.enableFontScaleChangesUpdatingLayout()) {
140+
DisplayMetricsHolder.initDisplayMetrics(getContext().getApplicationContext());
141+
}
141142
}
142143

143144
@Override
@@ -882,8 +883,7 @@ private class CustomGlobalLayoutListener implements ViewTreeObserver.OnGlobalLay
882883
private int mDeviceRotation = 0;
883884

884885
/* package */ CustomGlobalLayoutListener() {
885-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(getContext());
886-
DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(getContext());
886+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(getContext().getApplicationContext());
887887
mVisibleViewArea = new Rect();
888888
mMinKeyboardHeightDetected = (int) PixelUtil.toPixelFromDIP(60);
889889
}
@@ -1006,8 +1006,7 @@ private void checkForDeviceOrientationChanges() {
10061006
return;
10071007
}
10081008
mDeviceRotation = rotation;
1009-
DisplayMetricsHolder.initScreenDisplayMetrics(getContext());
1010-
DisplayMetricsHolder.initWindowDisplayMetrics(getContext());
1009+
DisplayMetricsHolder.initDisplayMetrics(getContext().getApplicationContext());
10111010
emitOrientationChanged(rotation);
10121011
}
10131012

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ import com.facebook.react.bridge.ReactSoftExceptionLogger
1515
import com.facebook.react.bridge.ReadableMap
1616
import com.facebook.react.module.annotations.ReactModule
1717
import com.facebook.react.uimanager.DisplayMetricsHolder.getDisplayMetricsWritableMap
18-
import com.facebook.react.uimanager.DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized
19-
import com.facebook.react.uimanager.DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized
18+
import com.facebook.react.uimanager.DisplayMetricsHolder.initDisplayMetricsIfNotInitialized
2019
import com.facebook.react.views.view.isEdgeToEdgeFeatureFlagOn
2120

2221
/** Module that exposes Android Constants to JS. */
@@ -27,8 +26,7 @@ internal class DeviceInfoModule(reactContext: ReactApplicationContext) :
2726
private var previousDisplayMetrics: ReadableMap? = null
2827

2928
init {
30-
initScreenDisplayMetricsIfNotInitialized(reactContext)
31-
reactContext.currentActivity?.let { initWindowDisplayMetricsIfNotInitialized(it) }
29+
initDisplayMetricsIfNotInitialized(reactContext)
3230
reactContext.addLifecycleEventListener(this)
3331
}
3432

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -625,8 +625,9 @@ public class ReactHostImpl(
625625
override fun onConfigurationChanged(context: Context) {
626626
val currentReactContext = this.currentReactContext
627627
if (currentReactContext != null) {
628-
DisplayMetricsHolder.initScreenDisplayMetrics(currentReactContext)
629-
currentReactContext.currentActivity?.let { DisplayMetricsHolder.initWindowDisplayMetrics(it) }
628+
if (ReactNativeFeatureFlags.enableFontScaleChangesUpdatingLayout()) {
629+
DisplayMetricsHolder.initDisplayMetrics(currentReactContext)
630+
}
630631

631632
val appearanceModule = currentReactContext.getNativeModule(AppearanceModule::class.java)
632633
appearanceModule?.onConfigurationChanged(context)
@@ -917,7 +918,6 @@ public class ReactHostImpl(
917918
val instance =
918919
ReactInstance(
919920
reactContext,
920-
currentActivity,
921921
reactHostDelegate,
922922
componentFactory,
923923
devSupportManager,

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package com.facebook.react.runtime
99

10-
import android.app.Activity
1110
import android.content.res.AssetManager
1211
import android.view.View
1312
import com.facebook.common.logging.FLog
@@ -89,7 +88,6 @@ import kotlin.jvm.JvmStatic
8988
@UnstableReactNativeAPI
9089
internal class ReactInstance(
9190
private val context: BridgelessReactContext,
92-
private val activity: Activity?,
9391
delegate: ReactHostDelegate,
9492
componentFactory: ComponentFactory,
9593
devSupportManager: DevSupportManager,
@@ -242,8 +240,7 @@ internal class ReactInstance(
242240
FabricUIManager(context, ViewManagerRegistry(viewManagerResolver), eventBeatManager)
243241

244242
// Misc initialization that needs to be done before Fabric init
245-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(context)
246-
activity?.let { DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(it) }
243+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(context)
247244

248245
val binding = FabricUIManagerBinding()
249246
binding.register(

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,25 @@ import android.util.DisplayMetrics
1313
import android.view.WindowManager
1414
import androidx.core.view.ViewCompat
1515
import androidx.core.view.WindowInsetsCompat
16-
import androidx.window.layout.WindowMetricsCalculator
1716
import com.facebook.react.bridge.WritableMap
1817
import com.facebook.react.bridge.WritableNativeMap
1918
import com.facebook.react.uimanager.PixelUtil.pxToDp
20-
import com.facebook.react.views.view.isEdgeToEdgeFeatureFlagOn
2119

2220
/**
2321
* Holds an instance of the current DisplayMetrics so we don't have to thread it through all the
2422
* classes that need it.
2523
*/
2624
public object DisplayMetricsHolder {
27-
private const val SCREEN_INITIALIZATION_MISSING_MESSAGE =
28-
"DisplayMetricsHolder must be initialized with initScreenDisplayMetricsIfNotInitialized or initScreenDisplayMetrics"
29-
private const val WINDOW_INITIALIZATION_MISSING_MESSAGE =
30-
"DisplayMetricsHolder must be initialized with initWindowDisplayMetricsIfNotInitialized or initWindowDisplayMetrics"
25+
private const val INITIALIZATION_MISSING_MESSAGE =
26+
"DisplayMetricsHolder must be initialized with initDisplayMetricsIfNotInitialized or initDisplayMetrics"
3127

3228
@JvmStatic private var windowDisplayMetrics: DisplayMetrics? = null
3329
@JvmStatic private var screenDisplayMetrics: DisplayMetrics? = null
3430

3531
/** The metrics of the window associated to the Context used to initialize ReactNative */
3632
@JvmStatic
3733
public fun getWindowDisplayMetrics(): DisplayMetrics {
38-
checkNotNull(windowDisplayMetrics) { WINDOW_INITIALIZATION_MISSING_MESSAGE }
34+
checkNotNull(windowDisplayMetrics) { INITIALIZATION_MISSING_MESSAGE }
3935
return windowDisplayMetrics as DisplayMetrics
4036
}
4137

@@ -47,7 +43,7 @@ public object DisplayMetricsHolder {
4743
/** Screen metrics returns the metrics of the default screen on the device. */
4844
@JvmStatic
4945
public fun getScreenDisplayMetrics(): DisplayMetrics {
50-
checkNotNull(screenDisplayMetrics) { SCREEN_INITIALIZATION_MISSING_MESSAGE }
46+
checkNotNull(screenDisplayMetrics) { INITIALIZATION_MISSING_MESSAGE }
5147
return screenDisplayMetrics as DisplayMetrics
5248
}
5349

@@ -57,58 +53,33 @@ public object DisplayMetricsHolder {
5753
}
5854

5955
@JvmStatic
60-
public fun initScreenDisplayMetricsIfNotInitialized(context: Context) {
61-
if (screenDisplayMetrics == null) {
62-
initScreenDisplayMetrics(context)
56+
public fun initDisplayMetricsIfNotInitialized(context: Context) {
57+
if (screenDisplayMetrics != null) {
58+
return
6359
}
60+
initDisplayMetrics(context)
6461
}
6562

6663
@JvmStatic
67-
public fun initWindowDisplayMetricsIfNotInitialized(context: Context) {
68-
if (windowDisplayMetrics == null) {
69-
initWindowDisplayMetrics(context)
70-
}
71-
}
72-
73-
@JvmStatic
74-
public fun initScreenDisplayMetrics(context: Context) {
75-
val displayMetrics = DisplayMetrics()
76-
displayMetrics.setTo(context.resources.displayMetrics)
77-
64+
public fun initDisplayMetrics(context: Context) {
65+
val displayMetrics = context.resources.displayMetrics
66+
windowDisplayMetrics = displayMetrics
67+
val screenDisplayMetrics = DisplayMetrics()
68+
screenDisplayMetrics.setTo(displayMetrics)
7869
val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
7970
// Get the real display metrics if we are using API level 17 or higher.
8071
// The real metrics include system decor elements (e.g. soft menu bar).
8172
//
8273
// See:
8374
// http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics)
84-
@Suppress("DEPRECATION") wm.defaultDisplay.getRealMetrics(displayMetrics)
85-
screenDisplayMetrics = displayMetrics
86-
}
87-
88-
/*
89-
* NOTE: Unlike [initScreenDisplayMetrics], this method needs a UiContext (Activity of
90-
* InputMethodService) else WindowMetircsCalculator will throw an exception.
91-
*/
92-
@JvmStatic
93-
public fun initWindowDisplayMetrics(context: Context) {
94-
val displayMetrics = DisplayMetrics()
95-
displayMetrics.setTo(context.resources.displayMetrics)
96-
97-
if (isEdgeToEdgeFeatureFlagOn) {
98-
WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context).let { windowMetrics
99-
->
100-
displayMetrics.widthPixels = windowMetrics.bounds.width()
101-
displayMetrics.heightPixels = windowMetrics.bounds.height()
102-
}
103-
}
104-
105-
windowDisplayMetrics = displayMetrics
75+
@Suppress("DEPRECATION") wm.defaultDisplay.getRealMetrics(screenDisplayMetrics)
76+
DisplayMetricsHolder.screenDisplayMetrics = screenDisplayMetrics
10677
}
10778

10879
@JvmStatic
10980
public fun getDisplayMetricsWritableMap(fontScale: Double): WritableMap {
110-
checkNotNull(windowDisplayMetrics) { WINDOW_INITIALIZATION_MISSING_MESSAGE }
111-
checkNotNull(screenDisplayMetrics) { SCREEN_INITIALIZATION_MISSING_MESSAGE }
81+
checkNotNull(windowDisplayMetrics) { INITIALIZATION_MISSING_MESSAGE }
82+
checkNotNull(screenDisplayMetrics) { INITIALIZATION_MISSING_MESSAGE }
11283

11384
return WritableNativeMap().apply {
11485
putMap(

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import static com.facebook.react.uimanager.common.UIManagerType.FABRIC;
1313
import static com.facebook.react.uimanager.common.UIManagerType.LEGACY;
1414

15-
import android.app.Activity;
1615
import android.content.ComponentCallbacks2;
1716
import android.content.res.Configuration;
1817
import android.view.View;
@@ -127,11 +126,7 @@ public UIManagerModule(
127126
ViewManagerResolver viewManagerResolver,
128127
int minTimeLeftInFrameForNonBatchedOperationMs) {
129128
super(reactContext);
130-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(reactContext);
131-
Activity currentActivity = reactContext.getCurrentActivity();
132-
if (currentActivity != null) {
133-
DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(currentActivity);
134-
}
129+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext);
135130
mEventDispatcher = new EventDispatcherImpl(reactContext);
136131
mModuleConstants = createConstants(viewManagerResolver);
137132
mCustomDirectEvents = UIManagerModuleConstants.directEventTypeConstants;
@@ -151,11 +146,7 @@ public UIManagerModule(
151146
List<ViewManager> viewManagersList,
152147
int minTimeLeftInFrameForNonBatchedOperationMs) {
153148
super(reactContext);
154-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(reactContext);
155-
Activity currentActivity = reactContext.getCurrentActivity();
156-
if (currentActivity != null) {
157-
DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(currentActivity);
158-
}
149+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext);
159150
mEventDispatcher = new EventDispatcherImpl(reactContext);
160151
mCustomDirectEvents = MapBuilder.newHashMap();
161152
mModuleConstants = createConstants(viewManagersList, null, mCustomDirectEvents);

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ class RootViewTest {
7171
reactContext = spy(BridgeReactContext(RuntimeEnvironment.getApplication()))
7272
reactContext.initializeWithInstance(catalystInstanceMock)
7373

74-
DisplayMetricsHolder.initScreenDisplayMetricsIfNotInitialized(reactContext)
75-
DisplayMetricsHolder.initWindowDisplayMetricsIfNotInitialized(reactContext)
74+
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext)
7675
val uiManagerModuleMock: UIManagerModule = mock()
7776
whenever(catalystInstanceMock.getNativeModule(UIManagerModule::class.java))
7877
.thenReturn(uiManagerModuleMock)

0 commit comments

Comments
 (0)