| 727 | jlong runtimeHandle, |
| 728 | jlong viewNodeHandle) { |
| 729 | auto* runtimeWrapper = getRuntimeWrapper(runtimeHandle); |
| 730 | auto viewNode = getViewNode(viewNodeHandle); |
| 731 | if (viewNode == nullptr || runtimeWrapper == nullptr) { |
| 732 | return nullptr; |
| 733 | } |
| 734 | |
| 735 | std::vector<Valdi::Value> values; |
| 736 | AccessibilityBridge::walkViewNode(viewNode.get(), values, runtimeWrapper->getPointScale()); |
| 737 | |
| 738 | auto javaEnv = ValdiAndroid::JavaEnv(); |
| 739 | auto javaArray = ValdiAndroid::toJavaObject(javaEnv, values); |
| 740 | return javaArray.releaseObject(); |
| 741 | } |
| 742 | |
| 743 | jint ValdiAndroid::NativeBridge::performViewNodeAction( // NOLINT |
| 744 | fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT |
| 745 | jlong viewNodeHandle, |
| 746 | jint action, |
| 747 | jint param1, |
| 748 | jint param2) { |
| 749 | static constexpr jint kActionEnsureFrameIsVisibleWithinParentScrolls = 1; |
| 750 | static constexpr jint kActionScrollByOnePage = 2; |
| 751 | |
| 752 | auto viewNode = getViewNode(viewNodeHandle); |
| 753 | if (viewNode == nullptr) { |
| 754 | return 0; |
| 755 | } |
| 756 | |
| 757 | jint handled = 0; |
| 758 | |
| 759 | auto* viewNodeTree = viewNode->getViewNodeTree(); |
| 760 | |
| 761 | if (viewNodeTree == nullptr) { |
| 762 | // TODO: is this a valid state? |
| 763 | return 0; |
| 764 | } |
| 765 | |
| 766 | viewNodeTree->withLock([&]() { |
| 767 | auto& viewTransactionScope = viewNodeTree->getCurrentViewTransactionScope(); |
| 768 | if (action == kActionEnsureFrameIsVisibleWithinParentScrolls) { |
| 769 | auto animated = static_cast<bool>(param1); |
| 770 | viewNode->ensureFrameIsVisibleWithinParentScrolls(viewTransactionScope, animated); |
| 771 | handled = 0; |
| 772 | return; |
| 773 | } |
| 774 | |
| 775 | if (action == kActionScrollByOnePage) { |
nothing calls this directly
no test coverage detected