Skip to content

Commit

Permalink
Add viewIsDescendantOf for UIManager on Android
Browse files Browse the repository at this point in the history
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 663df57
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
Expand Up @@ -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
Expand Down
Expand Up @@ -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.
Expand Down
Expand Up @@ -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}.
*/
Expand Down

0 comments on commit 663df57

Please sign in to comment.