mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
8bd3edec88
Reviewed By: aaronabramov Differential Revision: D33367752 fbshipit-source-id: 4ce94d184485e5ee0a62cf67ad2d3ba16e285c8f
50 lines
1.4 KiB
Java
50 lines
1.4 KiB
Java
/*
|
|
* 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.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 {
|
|
|
|
/** Returns the root view of a given view in a react application. */
|
|
public static RootView getRootView(View reactView) {
|
|
View current = reactView;
|
|
while (true) {
|
|
if (current instanceof RootView) {
|
|
return (RootView) current;
|
|
}
|
|
ViewParent next = current.getParent();
|
|
if (next == null) {
|
|
return null;
|
|
}
|
|
Assertions.assertCondition(next instanceof View);
|
|
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]);
|
|
}
|
|
}
|