Add viewIsDescendantOf for UIManager on Android
Summary: Add the ability for UIManager to check if a node is an ancestor of anther one on Android like #7876 did on iOS Closes https://github.com/facebook/react-native/pull/13129 Differential Revision: D4938319 Pulled By: hramos fbshipit-source-id: abe20779be2142a1ea9ac46f52d8cd8609236419
This commit is contained in:
parent
2d1c721fd6
commit
663df57c62
|
@ -452,6 +452,23 @@ public class ReactShadowNode {
|
||||||
return mTotalNativeChildren;
|
return mTotalNativeChildren;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDescendantOf(ReactShadowNode ancestorNode) {
|
||||||
|
ReactShadowNode parentNode = getParent();
|
||||||
|
|
||||||
|
boolean isDescendant = false;
|
||||||
|
|
||||||
|
while (parentNode != null) {
|
||||||
|
if (parentNode == ancestorNode) {
|
||||||
|
isDescendant = true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
parentNode = parentNode.getParent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isDescendant;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the offset within the native children owned by all layout-only nodes in the subtree
|
* Returns the offset within the native children owned by all layout-only nodes in the subtree
|
||||||
* rooted at this node for the given child. Put another way, this returns the number of native
|
* rooted at this node for the given child. Put another way, this returns the number of native
|
||||||
|
|
|
@ -469,6 +469,22 @@ public class UIImplementation {
|
||||||
mOperationsQueue.enqueueFindTargetForTouch(reactTag, targetX, targetY, callback);
|
mOperationsQueue.enqueueFindTargetForTouch(reactTag, targetX, targetY, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the first shadow node is the descendant of the second shadow node
|
||||||
|
*/
|
||||||
|
public void viewIsDescendantOf(
|
||||||
|
final int reactTag,
|
||||||
|
final int ancestorReactTag,
|
||||||
|
final Callback callback) {
|
||||||
|
ReactShadowNode node = mShadowNodeRegistry.getNode(reactTag);
|
||||||
|
ReactShadowNode ancestorNode = mShadowNodeRegistry.getNode(ancestorReactTag);
|
||||||
|
if (node == null || ancestorNode == null) {
|
||||||
|
callback.invoke(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
callback.invoke(node.isDescendantOf(ancestorNode));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines the location on screen, width, and height of the given view relative to the root
|
* Determines the location on screen, width, and height of the given view relative to the root
|
||||||
* view and returns the values via an async callback.
|
* view and returns the values via an async callback.
|
||||||
|
|
|
@ -412,6 +412,17 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
|
||||||
callback);
|
callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the first shadow node is the descendant of the second shadow node
|
||||||
|
*/
|
||||||
|
@ReactMethod
|
||||||
|
public void viewIsDescendantOf(
|
||||||
|
final int reactTag,
|
||||||
|
final int ancestorReactTag,
|
||||||
|
final Callback callback) {
|
||||||
|
mUIImplementation.viewIsDescendantOf(reactTag, ancestorReactTag, callback);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a new Animation that can then be added to a View using {@link #addAnimation}.
|
* Registers a new Animation that can then be added to a View using {@link #addAnimation}.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue