Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -3974,8 +3974,9 @@ public abstract interface class com/facebook/react/uimanager/ComponentNameResolv
public abstract fun getComponentNames ()[Ljava/lang/String;
}

public class com/facebook/react/uimanager/ComponentNameResolverManager {
public fun <init> (Lcom/facebook/react/bridge/RuntimeExecutor;Ljava/lang/Object;)V
public final class com/facebook/react/uimanager/ComponentNameResolverBinding {
public static final field INSTANCE Lcom/facebook/react/uimanager/ComponentNameResolverBinding;
public static final fun install (Lcom/facebook/react/bridge/RuntimeExecutor;Ljava/lang/Object;)V
}

public class com/facebook/react/uimanager/DisplayMetricsHolder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
import com.facebook.react.turbomodule.core.NativeMethodCallInvokerHolderImpl;
import com.facebook.react.uimanager.ComponentNameResolver;
import com.facebook.react.uimanager.ComponentNameResolverManager;
import com.facebook.react.uimanager.ComponentNameResolverBinding;
import com.facebook.react.uimanager.DisplayMetricsHolder;
import com.facebook.react.uimanager.IllegalViewOperationException;
import com.facebook.react.uimanager.UIConstantsProviderManager;
Expand Down Expand Up @@ -97,7 +97,6 @@ final class ReactInstance {

private JavaScriptContextHolder mJavaScriptContextHolder;

@DoNotStrip @Nullable private ComponentNameResolverManager mComponentNameResolverManager;
@DoNotStrip @Nullable private UIConstantsProviderManager mUIConstantsProviderManager;

static {
Expand Down Expand Up @@ -212,19 +211,18 @@ final class ReactInstance {
new BridgelessViewManagerResolver(mReactPackages, mBridgelessReactContext);

// Initialize function for JS's UIManager.hasViewManagerConfig()
mComponentNameResolverManager =
new ComponentNameResolverManager(
// Use unbuffered RuntimeExecutor to install binding
unbufferedRuntimeExecutor,
(ComponentNameResolver)
() -> {
Collection<String> viewManagerNames = mViewManagerResolver.getViewManagerNames();
if (viewManagerNames.size() < 1) {
FLog.e(TAG, "No ViewManager names found");
return new String[0];
}
return viewManagerNames.toArray(new String[0]);
});
ComponentNameResolverBinding.install(
// Use unbuffered RuntimeExecutor to install binding
unbufferedRuntimeExecutor,
(ComponentNameResolver)
() -> {
Collection<String> viewManagerNames = mViewManagerResolver.getViewManagerNames();
if (viewManagerNames.size() < 1) {
FLog.e(TAG, "No ViewManager names found");
return new String[0];
}
return viewManagerNames.toArray(new String[0]);
});

// Initialize function for JS's UIManager.getViewManagerConfig()
// It should come after getTurboModuleManagerDelegate as it relies on react packages being
Expand Down Expand Up @@ -432,7 +430,6 @@ public Collection<NativeModule> getNativeModules() {
mFabricUIManager.invalidate();
mJavaTimerManager.onInstanceDestroy();
mHybridData.resetNative();
mComponentNameResolverManager = null;
mUIConstantsProviderManager = null;
mJavaScriptContextHolder.clear();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* 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 com.facebook.proguard.annotations.DoNotStripAny
import com.facebook.react.bridge.RuntimeExecutor
import com.facebook.soloader.SoLoader
import kotlin.jvm.JvmStatic

@DoNotStripAny
object ComponentNameResolverBinding {
init {
SoLoader.loadLibrary("uimanagerjni")
}

@JvmStatic external fun install(runtimeExecutor: RuntimeExecutor, componentNameResolver: Object)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* 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.
*/

#include "ComponentNameResolverBinding.h"

#include <react/renderer/componentregistry/native/NativeComponentRegistryBinding.h>

#include <unordered_set>

namespace facebook::react {

using namespace facebook::jni;

constexpr static auto ComponentNameResolverJavaDescriptor =
"com/facebook/react/uimanager/ComponentNameResolver";

void ComponentNameResolverBinding::registerNatives() {
javaClassStatic()->registerNatives({
makeNativeMethod("install", ComponentNameResolverBinding::install),
});
}

void ComponentNameResolverBinding::install(
jni::alias_ref<jclass> /* unused */,
jni::alias_ref<JRuntimeExecutor::javaobject> runtimeExecutor,
jni::alias_ref<jobject> componentNameResolver) {
auto executor = runtimeExecutor->cthis()->get();
executor([componentNameResolver = make_global(componentNameResolver)](
jsi::Runtime& runtime) mutable {
auto viewManagerProvider =
[componentNameResolver = std::move(componentNameResolver),
componentNames = std::unordered_set<std::string>()](
const std::string& name) mutable {
if (componentNames.empty()) {
static auto getComponentNames =
jni::findClassStatic(ComponentNameResolverJavaDescriptor)
->getMethod<jni::alias_ref<jtypeArray<jstring>>()>(
"getComponentNames");

auto componentNamesJArray =
getComponentNames(componentNameResolver);
auto len = componentNamesJArray->size();
for (size_t i = 0; i < len; i++) {
jni::local_ref<jstring> elem = (*componentNamesJArray)[i];
componentNames.insert(elem->toStdString());
}
}
return componentNames.find(name) != componentNames.end();
};

bindHasComponentProvider(runtime, std::move(viewManagerProvider));
});
}

} // namespace facebook::react
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* 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.
*/

#pragma once

#include <fbjni/fbjni.h>
#include <react/jni/JRuntimeExecutor.h>

namespace facebook::react {

class ComponentNameResolverBinding
: public facebook::jni::JavaClass<ComponentNameResolverBinding> {
public:
static auto constexpr kJavaDescriptor =
"Lcom/facebook/react/uimanager/ComponentNameResolverBinding;";

static void install(
jni::alias_ref<jclass> /* unused */,
jni::alias_ref<JRuntimeExecutor::javaobject> runtimeExecutor,
jni::alias_ref<jobject> componentNameResolver);

static void registerNatives();
};

} // namespace facebook::react

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

#include <fbjni/fbjni.h>

#include "ComponentNameResolverManager.h"
#include "ComponentNameResolverBinding.h"
#include "UIConstantsProviderManager.h"

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
return facebook::jni::initialize(vm, [] {
facebook::react::ComponentNameResolverManager::registerNatives();
facebook::react::ComponentNameResolverBinding::registerNatives();
facebook::react::UIConstantsProviderManager::registerNatives();
});
}