Extract getViewportOffset out RootView
Summary: This diff moves the method getViewportOffset out of ReactRootView. This is necessary to avoid Fabric to depend from paper. changelog: [internal] internal Reviewed By: JoshuaGross Differential Revision: D26716901 fbshipit-source-id: cec67c24860a776fb361d7cda08d3142e1214c8c
This commit is contained in:
Родитель
21a434ceec
Коммит
05f687fa88
|
@ -30,6 +30,7 @@ rn_android_library(
|
|||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_target("java/com/facebook/react/devsupport:devsupport"),
|
||||
react_native_target("java/com/facebook/react/devsupport:interfaces"),
|
||||
react_native_target("java/com/facebook/react/fabric:fabric"),
|
||||
react_native_target("java/com/facebook/react/jscexecutor:jscexecutor"),
|
||||
react_native_target("java/com/facebook/react/jstasks:jstasks"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
|
|
|
@ -27,7 +27,6 @@ import android.view.ViewTreeObserver;
|
|||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.UiThread;
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.infer.annotation.ThreadConfined;
|
||||
|
@ -52,6 +51,7 @@ import com.facebook.react.uimanager.JSTouchDispatcher;
|
|||
import com.facebook.react.uimanager.PixelUtil;
|
||||
import com.facebook.react.uimanager.ReactRoot;
|
||||
import com.facebook.react.uimanager.RootView;
|
||||
import com.facebook.react.uimanager.RootViewUtil;
|
||||
import com.facebook.react.uimanager.UIManagerHelper;
|
||||
import com.facebook.react.uimanager.common.UIManagerType;
|
||||
import com.facebook.react.uimanager.events.EventDispatcher;
|
||||
|
@ -420,21 +420,6 @@ public class ReactRootView extends FrameLayout implements RootView, ReactRoot {
|
|||
return mState;
|
||||
}
|
||||
|
||||
@UiThread
|
||||
public static Point getViewportOffset(View v) {
|
||||
int[] locationInWindow = new int[2];
|
||||
v.getLocationInWindow(locationInWindow);
|
||||
|
||||
// we need to subtract visibleWindowCoords - to subtract possible window insets, split
|
||||
// screen or multi window
|
||||
Rect visibleWindowFrame = new Rect();
|
||||
v.getWindowVisibleDisplayFrame(visibleWindowFrame);
|
||||
locationInWindow[0] -= visibleWindowFrame.left;
|
||||
locationInWindow[1] -= visibleWindowFrame.top;
|
||||
|
||||
return new Point(locationInWindow[0], locationInWindow[1]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call whenever measure specs change, or if you want to force an update of offsetX/offsetY. If
|
||||
* measureSpecsChanged is false and the offsetX/offsetY don't change, updateRootLayoutSpecs will
|
||||
|
@ -472,7 +457,7 @@ public class ReactRootView extends FrameLayout implements RootView, ReactRoot {
|
|||
int offsetX = 0;
|
||||
int offsetY = 0;
|
||||
if (getUIManagerType() == FABRIC) {
|
||||
Point viewportOffset = getViewportOffset(this);
|
||||
Point viewportOffset = RootViewUtil.getViewportOffset(this);
|
||||
offsetX = viewportOffset.x;
|
||||
offsetY = viewportOffset.y;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ rn_android_library(
|
|||
react_native_target("java/com/facebook/react/bridge:bridge"),
|
||||
react_native_target("java/com/facebook/react/config:config"),
|
||||
react_native_target("java/com/facebook/react/fabric/jni:jni"),
|
||||
react_native_target("java/com/facebook/react:react"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
react_native_target("java/com/facebook/react/modules/core:core"),
|
||||
react_native_target("java/com/facebook/react/modules/i18nmanager:i18nmanager"),
|
||||
|
|
|
@ -91,6 +91,7 @@ public class Binding {
|
|||
jsMessageQueueThread,
|
||||
componentFactory,
|
||||
reactNativeConfig);
|
||||
|
||||
setPixelDensity(PixelUtil.getDisplayMetricDensity());
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ import com.facebook.debug.holder.PrinterHolder;
|
|||
import com.facebook.debug.tags.ReactDebugOverlayTags;
|
||||
import com.facebook.infer.annotation.ThreadConfined;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
import com.facebook.react.ReactRootView;
|
||||
import com.facebook.react.bridge.LifecycleEventListener;
|
||||
import com.facebook.react.bridge.NativeArray;
|
||||
import com.facebook.react.bridge.NativeMap;
|
||||
|
@ -73,6 +72,7 @@ import com.facebook.react.uimanager.IllegalViewOperationException;
|
|||
import com.facebook.react.uimanager.PixelUtil;
|
||||
import com.facebook.react.uimanager.ReactRoot;
|
||||
import com.facebook.react.uimanager.ReactRootViewTagGenerator;
|
||||
import com.facebook.react.uimanager.RootViewUtil;
|
||||
import com.facebook.react.uimanager.StateWrapper;
|
||||
import com.facebook.react.uimanager.ThemedReactContext;
|
||||
import com.facebook.react.uimanager.UIManagerHelper;
|
||||
|
@ -252,7 +252,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener {
|
|||
// ViewportOffset during measurement or onLayout.
|
||||
@SuppressLint("WrongThread")
|
||||
Point viewportOffset =
|
||||
UiThreadUtil.isOnUiThread() ? ReactRootView.getViewportOffset(rootView) : new Point(0, 0);
|
||||
UiThreadUtil.isOnUiThread() ? RootViewUtil.getViewportOffset(rootView) : new Point(0, 0);
|
||||
|
||||
mBinding.startSurfaceWithConstraints(
|
||||
rootTag,
|
||||
|
|
|
@ -7,8 +7,11 @@
|
|||
|
||||
package com.facebook.react.uimanager;
|
||||
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.view.View;
|
||||
import android.view.ViewParent;
|
||||
import androidx.annotation.UiThread;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
|
||||
public class RootViewUtil {
|
||||
|
@ -28,4 +31,19 @@ public class RootViewUtil {
|
|||
current = (View) next;
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
public static Point getViewportOffset(View v) {
|
||||
int[] locationInWindow = new int[2];
|
||||
v.getLocationInWindow(locationInWindow);
|
||||
|
||||
// we need to subtract visibleWindowCoords - to subtract possible window insets, split
|
||||
// screen or multi window
|
||||
Rect visibleWindowFrame = new Rect();
|
||||
v.getWindowVisibleDisplayFrame(visibleWindowFrame);
|
||||
locationInWindow[0] -= visibleWindowFrame.left;
|
||||
locationInWindow[1] -= visibleWindowFrame.top;
|
||||
|
||||
return new Point(locationInWindow[0], locationInWindow[1]);
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче