mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Kotlinify DeviceInfoModule (#44536)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/44536 # Changelog: [Internal] - As in the title. Reviewed By: alanleedev Differential Revision: D57248069 fbshipit-source-id: 4187b620483d439da5fc4c81012c1124fa19fc09
This commit is contained in:
committed by
Facebook GitHub Bot
parent
8593eee9fe
commit
61887338ea
@@ -3241,10 +3241,10 @@ public abstract interface class com/facebook/react/modules/debug/interfaces/Deve
|
||||
public abstract fun setRemoteJSDebugEnabled (Z)V
|
||||
}
|
||||
|
||||
public class com/facebook/react/modules/deviceinfo/DeviceInfoModule : com/facebook/fbreact/specs/NativeDeviceInfoSpec, com/facebook/react/bridge/LifecycleEventListener {
|
||||
public final class com/facebook/react/modules/deviceinfo/DeviceInfoModule : com/facebook/fbreact/specs/NativeDeviceInfoSpec, com/facebook/react/bridge/LifecycleEventListener {
|
||||
public fun <init> (Landroid/content/Context;)V
|
||||
public fun <init> (Lcom/facebook/react/bridge/ReactApplicationContext;)V
|
||||
public fun emitUpdateDimensionsEvent ()V
|
||||
public final fun emitUpdateDimensionsEvent ()V
|
||||
public fun getTypedExportedConstants ()Ljava/util/Map;
|
||||
public fun invalidate ()V
|
||||
public fun onHostDestroy ()V
|
||||
|
||||
-109
@@ -1,109 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
package com.facebook.react.modules.deviceinfo;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.fbreact.specs.NativeDeviceInfoSpec;
|
||||
import com.facebook.react.bridge.LifecycleEventListener;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactNoCrashSoftException;
|
||||
import com.facebook.react.bridge.ReactSoftExceptionLogger;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.uimanager.DisplayMetricsHolder;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/** Module that exposes Android Constants to JS. */
|
||||
@ReactModule(name = NativeDeviceInfoSpec.NAME)
|
||||
public class DeviceInfoModule extends NativeDeviceInfoSpec implements LifecycleEventListener {
|
||||
|
||||
private final @Nullable ReactApplicationContext mReactApplicationContext;
|
||||
|
||||
private float mFontScale;
|
||||
private @Nullable ReadableMap mPreviousDisplayMetrics;
|
||||
|
||||
public DeviceInfoModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(reactContext);
|
||||
mFontScale = reactContext.getResources().getConfiguration().fontScale;
|
||||
mReactApplicationContext = reactContext;
|
||||
mReactApplicationContext.addLifecycleEventListener(this);
|
||||
}
|
||||
|
||||
public DeviceInfoModule(Context context) {
|
||||
super(null);
|
||||
mReactApplicationContext = null;
|
||||
DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(context);
|
||||
mFontScale = context.getResources().getConfiguration().fontScale;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Map<String, Object> getTypedExportedConstants() {
|
||||
WritableMap displayMetrics = DisplayMetricsHolder.getDisplayMetricsWritableMap(mFontScale);
|
||||
|
||||
// Cache the initial dimensions for later comparison in emitUpdateDimensionsEvent
|
||||
mPreviousDisplayMetrics = displayMetrics.copy();
|
||||
|
||||
HashMap<String, Object> constants = new HashMap<>();
|
||||
constants.put("Dimensions", displayMetrics.toHashMap());
|
||||
return constants;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHostResume() {
|
||||
if (mReactApplicationContext == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
float fontScale = mReactApplicationContext.getResources().getConfiguration().fontScale;
|
||||
if (mFontScale != fontScale) {
|
||||
mFontScale = fontScale;
|
||||
emitUpdateDimensionsEvent();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHostPause() {}
|
||||
|
||||
@Override
|
||||
public void onHostDestroy() {}
|
||||
|
||||
public void emitUpdateDimensionsEvent() {
|
||||
if (mReactApplicationContext == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mReactApplicationContext.hasActiveReactInstance()) {
|
||||
// Don't emit an event to JS if the dimensions haven't changed
|
||||
WritableMap displayMetrics = DisplayMetricsHolder.getDisplayMetricsWritableMap(mFontScale);
|
||||
if (mPreviousDisplayMetrics == null) {
|
||||
mPreviousDisplayMetrics = displayMetrics.copy();
|
||||
} else if (!displayMetrics.equals(mPreviousDisplayMetrics)) {
|
||||
mPreviousDisplayMetrics = displayMetrics.copy();
|
||||
mReactApplicationContext.emitDeviceEvent("didUpdateDimensions", displayMetrics);
|
||||
}
|
||||
} else {
|
||||
ReactSoftExceptionLogger.logSoftException(
|
||||
NAME,
|
||||
new ReactNoCrashSoftException(
|
||||
"No active CatalystInstance, cannot emitUpdateDimensionsEvent"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidate() {
|
||||
super.invalidate();
|
||||
|
||||
if (mReactApplicationContext != null) {
|
||||
mReactApplicationContext.removeLifecycleEventListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
package com.facebook.react.modules.deviceinfo
|
||||
|
||||
import android.content.Context
|
||||
import com.facebook.fbreact.specs.NativeDeviceInfoSpec
|
||||
import com.facebook.react.bridge.LifecycleEventListener
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactNoCrashSoftException
|
||||
import com.facebook.react.bridge.ReactSoftExceptionLogger
|
||||
import com.facebook.react.bridge.ReadableMap
|
||||
import com.facebook.react.module.annotations.ReactModule
|
||||
import com.facebook.react.uimanager.DisplayMetricsHolder.getDisplayMetricsWritableMap
|
||||
import com.facebook.react.uimanager.DisplayMetricsHolder.initDisplayMetricsIfNotInitialized
|
||||
|
||||
/** Module that exposes Android Constants to JS. */
|
||||
@ReactModule(name = NativeDeviceInfoSpec.NAME)
|
||||
public class DeviceInfoModule : NativeDeviceInfoSpec, LifecycleEventListener {
|
||||
private var reactApplicationContext: ReactApplicationContext? = null
|
||||
private var fontScale: Float
|
||||
private var previousDisplayMetrics: ReadableMap? = null
|
||||
|
||||
public constructor(reactContext: ReactApplicationContext) : super(reactContext) {
|
||||
initDisplayMetricsIfNotInitialized(reactContext)
|
||||
fontScale = reactContext.resources.configuration.fontScale
|
||||
reactContext.addLifecycleEventListener(this)
|
||||
reactApplicationContext = reactContext
|
||||
}
|
||||
|
||||
public constructor(context: Context) : super(null) {
|
||||
reactApplicationContext = null
|
||||
initDisplayMetricsIfNotInitialized(context)
|
||||
fontScale = context.resources.configuration.fontScale
|
||||
}
|
||||
|
||||
override public fun getTypedExportedConstants(): Map<String, Any> {
|
||||
val displayMetrics = getDisplayMetricsWritableMap(fontScale.toDouble())
|
||||
|
||||
// Cache the initial dimensions for later comparison in emitUpdateDimensionsEvent
|
||||
previousDisplayMetrics = displayMetrics.copy()
|
||||
return mapOf("Dimensions" to displayMetrics.toHashMap())
|
||||
}
|
||||
|
||||
override fun onHostResume() {
|
||||
val newFontScale = reactApplicationContext?.resources?.configuration?.fontScale
|
||||
if (newFontScale != null && newFontScale != fontScale) {
|
||||
fontScale = newFontScale
|
||||
emitUpdateDimensionsEvent()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onHostPause(): Unit = Unit
|
||||
|
||||
override fun onHostDestroy(): Unit = Unit
|
||||
|
||||
public fun emitUpdateDimensionsEvent() {
|
||||
reactApplicationContext?.let { context ->
|
||||
if (context.hasActiveReactInstance()) {
|
||||
// Don't emit an event to JS if the dimensions haven't changed
|
||||
val displayMetrics = getDisplayMetricsWritableMap(fontScale.toDouble())
|
||||
if (previousDisplayMetrics == null) {
|
||||
previousDisplayMetrics = displayMetrics.copy()
|
||||
} else if (displayMetrics != previousDisplayMetrics) {
|
||||
previousDisplayMetrics = displayMetrics.copy()
|
||||
context.emitDeviceEvent("didUpdateDimensions", displayMetrics)
|
||||
}
|
||||
} else {
|
||||
ReactSoftExceptionLogger.logSoftException(
|
||||
NativeDeviceInfoSpec.NAME,
|
||||
ReactNoCrashSoftException(
|
||||
"No active CatalystInstance, cannot emitUpdateDimensionsEvent"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun invalidate() {
|
||||
super.invalidate()
|
||||
reactApplicationContext?.removeLifecycleEventListener(this)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user