Permalink
Browse files

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 #13129

Differential Revision: D4938319

Pulled By: hramos

fbshipit-source-id: abe20779be2142a1ea9ac46f52d8cd8609236419
  • Loading branch information...
Swordsman-Inaction authored and facebook-github-bot committed May 23, 2017
1 parent 2d1c721 commit 663df57c6206105f8228ee3c57c46235837f6a4b
@@ -452,6 +452,23 @@ public final int getTotalNativeChildren() {
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
* rooted at this node for the given child. Put another way, this returns the number of native
@@ -469,6 +469,22 @@ public void findSubviewIn(int reactTag, float targetX, float targetY, Callback c
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
* view and returns the values via an async callback.
@@ -412,6 +412,17 @@ public void findSubviewIn(
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}.
*/

0 comments on commit 663df57

Please sign in to comment.