Skip to content
Open
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
4 changes: 4 additions & 0 deletions packages/react-native/ReactAndroid/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ val preparePrefab by
Pair("../ReactCommon/hermes/inspector-modern/", "hermes/inspector-modern/"),
// fabricjni
Pair("src/main/jni/react/fabric", "react/fabric/"),
Pair(
"src/main/jni/react/newarchdefaults/CoreComponentsRegistry.h",
"react/fabric/",
),
// uimanagerjni
Pair("src/main/jni/react/uimanager", "react/uimanager/"),
// glog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,8 @@ target_link_libraries(
rrc_legacyviewmanagerinterop
react_utils
reactnativejni
rrc_image
rrc_modal
rrc_progressbar
rrc_root
rrc_safeareaview
rrc_scrollview
rrc_switch
rrc_text
rrc_textinput
rrc_unimplementedview
rrc_view
yoga
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* 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 <folly/dynamic.h>
#include <react/jni/ReadableNativeMap.h>
#include <react/renderer/core/LayoutConstraints.h>
#include <react/renderer/core/ReactPrimitives.h>
#include <react/renderer/core/conversions.h>
#include <react/utils/ContextContainer.h>
#include <bit>
#include <utility>

namespace facebook::react {

struct FabricUIManagerMeasureArgs {
SurfaceId surfaceId;
const char *componentName;
LayoutConstraints layoutConstraints;
folly::dynamic localData{nullptr};
folly::dynamic props{nullptr};
folly::dynamic state{nullptr};
};

inline Size measureHostComponent(const ContextContainer &contextContainer, FabricUIManagerMeasureArgs args)
{
const auto fabricUIManager = contextContainer.at<jni::global_ref<jobject>>("FabricUIManager");
static const auto measure = jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
->getMethod<jlong(
jint,
jstring,
ReadableMap::javaobject,
ReadableMap::javaobject,
ReadableMap::javaobject,
jfloat,
jfloat,
jfloat,
jfloat)>("measure");

auto toReadableMap = [](folly::dynamic &value) -> jni::local_ref<ReadableMap::javaobject> {
if (value.isNull()) {
return {};
}
auto nativeMap = jni::make_local(ReadableNativeMap::createWithContents(std::move(value)));
return jni::adopt_local(std::bit_cast<ReadableMap::javaobject>(nativeMap.release()));
};

auto componentName = jni::make_jstring(args.componentName);
auto localData = toReadableMap(args.localData);
auto props = toReadableMap(args.props);
auto state = toReadableMap(args.state);
const auto &minimumSize = args.layoutConstraints.minimumSize;
const auto &maximumSize = args.layoutConstraints.maximumSize;

return yogaMeassureToSize(measure(
fabricUIManager,
args.surfaceId,
componentName.get(),
localData.get(),
props.get(),
state.get(),
minimumSize.width,
maximumSize.width,
minimumSize.height,
maximumSize.height));
}

} // namespace facebook::react
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,19 @@ target_link_libraries(react_newarchdefaults
react_nativemodule_featureflags
react_nativemodule_microtasks
react_nativemodule_idlecallbacks
react_renderer_attributedstring
react_renderer_componentregistry
react_renderer_textlayoutmanager
rrc_image
rrc_modal
rrc_progressbar
rrc_safeareaview
rrc_scrollview
rrc_switch
rrc_text
rrc_textinput
rrc_unimplementedview
rrc_view
jsi)

target_compile_reactnative_options(react_newarchdefaults PRIVATE)
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ sharedProviderRegistry() {
void addCoreComponents(
std::shared_ptr<const ComponentDescriptorProviderRegistry>
providerRegistry) {
if (providerRegistry == nullptr) {
return;
}

providerRegistry->add(
concreteComponentDescriptorProvider<
AndroidProgressBarComponentDescriptor>());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,57 +7,23 @@

#include "AndroidProgressBarMeasurementsManager.h"

#include <fbjni/fbjni.h>
#include <react/jni/ReadableNativeMap.h>
#include <react/fabric/FabricUIManagerMeasure.h>
#include <react/renderer/components/progressbar/conversions.h>
#include <react/renderer/core/conversions.h>

using namespace facebook::jni;

namespace facebook::react {

Size AndroidProgressBarMeasurementsManager::measure(
SurfaceId surfaceId,
const AndroidProgressBarProps& props,
LayoutConstraints layoutConstraints) const {
const jni::global_ref<jobject>& fabricUIManager =
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");

static auto measure = facebook::jni::findClassStatic(
"com/facebook/react/fabric/FabricUIManager")
->getMethod<jlong(
jint,
jstring,
ReadableMap::javaobject,
ReadableMap::javaobject,
ReadableMap::javaobject,
jfloat,
jfloat,
jfloat,
jfloat)>("measure");

auto minimumSize = layoutConstraints.minimumSize;
auto maximumSize = layoutConstraints.maximumSize;

local_ref<JString> componentName = make_jstring("AndroidProgressBar");

auto serialiazedProps = toDynamic(props);
local_ref<ReadableNativeMap::javaobject> propsRNM =
ReadableNativeMap::newObjectCxxArgs(serialiazedProps);
local_ref<ReadableMap::javaobject> propsRM =
make_local(reinterpret_cast<ReadableMap::javaobject>(propsRNM.get()));

return yogaMeassureToSize(measure(
fabricUIManager,
surfaceId,
componentName.get(),
nullptr,
propsRM.get(),
nullptr,
minimumSize.width,
maximumSize.width,
minimumSize.height,
maximumSize.height));
return measureHostComponent(
*contextContainer_,
{
.surfaceId = surfaceId,
.componentName = "AndroidProgressBar",
.layoutConstraints = layoutConstraints,
.props = toDynamic(props),
});
}

} // namespace facebook::react
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,20 @@

#include "AndroidSwitchMeasurementsManager.h"

#include <fbjni/fbjni.h>
#include <react/jni/ReadableNativeMap.h>
#include <react/renderer/core/conversions.h>

using namespace facebook::jni;
#include <react/fabric/FabricUIManagerMeasure.h>

namespace facebook::react {

Size AndroidSwitchMeasurementsManager::measure(
SurfaceId surfaceId,
LayoutConstraints layoutConstraints) const {
{
const jni::global_ref<jobject>& fabricUIManager =
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");

static auto measure =
jni::findClassStatic("com/facebook/react/fabric/FabricUIManager")
->getMethod<jlong(
jint,
jstring,
ReadableMap::javaobject,
ReadableMap::javaobject,
ReadableMap::javaobject,
jfloat,
jfloat,
jfloat,
jfloat)>("measure");

auto minimumSize = layoutConstraints.minimumSize;
auto maximumSize = layoutConstraints.maximumSize;

local_ref<JString> componentName = make_jstring("AndroidSwitch");

return yogaMeassureToSize(measure(
fabricUIManager,
surfaceId,
componentName.get(),
nullptr,
nullptr,
nullptr,
minimumSize.width,
maximumSize.width,
minimumSize.height,
maximumSize.height));
}
return measureHostComponent(
*contextContainer_,
{
.surfaceId = surfaceId,
.componentName = "AndroidSwitch",
.layoutConstraints = layoutConstraints,
});
}

} // namespace facebook::react
10 changes: 10 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ facebook::react::SharedColor facebook::react::colorFromComponents(facebook::reac
facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value);
facebook::react::SharedColor facebook::react::whiteColor();
facebook::react::Size facebook::react::measureHostComponent(const facebook::react::ContextContainer& contextContainer, facebook::react::FabricUIManagerMeasureArgs args);
facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value);
facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value);
facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value);
Expand Down Expand Up @@ -3244,6 +3245,15 @@ struct facebook::react::EventPayload {
public virtual ~EventPayload() = default;
}

struct facebook::react::FabricUIManagerMeasureArgs {
public const char* componentName;
public facebook::react::LayoutConstraints layoutConstraints;
public facebook::react::SurfaceId surfaceId;
public folly::dynamic localData;
public folly::dynamic props;
public folly::dynamic state;
}

struct facebook::react::FilterFunction {
public bool operator==(const facebook::react::FilterFunction& other) const = default;
public facebook::react::FilterType type;
Expand Down
10 changes: 10 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,7 @@ facebook::react::SharedColor facebook::react::colorFromComponents(facebook::reac
facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value);
facebook::react::SharedColor facebook::react::whiteColor();
facebook::react::Size facebook::react::measureHostComponent(const facebook::react::ContextContainer& contextContainer, facebook::react::FabricUIManagerMeasureArgs args);
facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value);
facebook::react::SurfaceId facebook::react::getNextRootViewTag() noexcept;
facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value);
Expand Down Expand Up @@ -6082,6 +6083,15 @@ struct facebook::react::EventPayload {
public virtual ~EventPayload() = default;
}

struct facebook::react::FabricUIManagerMeasureArgs {
public const char* componentName;
public facebook::react::LayoutConstraints layoutConstraints;
public facebook::react::SurfaceId surfaceId;
public folly::dynamic localData;
public folly::dynamic props;
public folly::dynamic state;
}

struct facebook::react::FilterFunction {
public bool operator==(const facebook::react::FilterFunction& other) const = default;
public facebook::react::FilterType type;
Expand Down
10 changes: 10 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ facebook::react::SharedColor facebook::react::colorFromComponents(facebook::reac
facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value);
facebook::react::SharedColor facebook::react::whiteColor();
facebook::react::Size facebook::react::measureHostComponent(const facebook::react::ContextContainer& contextContainer, facebook::react::FabricUIManagerMeasureArgs args);
facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value);
facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value);
facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value);
Expand Down Expand Up @@ -3237,6 +3238,15 @@ struct facebook::react::EventPayload {
public virtual ~EventPayload() = default;
}

struct facebook::react::FabricUIManagerMeasureArgs {
public const char* componentName;
public facebook::react::LayoutConstraints layoutConstraints;
public facebook::react::SurfaceId surfaceId;
public folly::dynamic localData;
public folly::dynamic props;
public folly::dynamic state;
}

struct facebook::react::FilterFunction {
public bool operator==(const facebook::react::FilterFunction& other) const = default;
public facebook::react::FilterType type;
Expand Down
10 changes: 10 additions & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ facebook::react::SharedColor facebook::react::colorFromComponents(facebook::reac
facebook::react::SharedColor facebook::react::colorFromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
facebook::react::SharedColor facebook::react::parsePlatformColor(const facebook::react::ContextContainer& contextContainer, int32_t surfaceId, const facebook::react::RawValue& value);
facebook::react::SharedColor facebook::react::whiteColor();
facebook::react::Size facebook::react::measureHostComponent(const facebook::react::ContextContainer& contextContainer, facebook::react::FabricUIManagerMeasureArgs args);
facebook::react::Size facebook::react::yogaMeassureToSize(int64_t value);
facebook::react::TurboModuleMethodValueKind facebook::react::getTurboModuleMethodValueKind(facebook::jsi::Runtime& rt, const facebook::jsi::Value* value);
facebook::react::ValueUnit facebook::react::toValueUnit(const facebook::react::RawValue& value);
Expand Down Expand Up @@ -3237,6 +3238,15 @@ struct facebook::react::EventPayload {
public virtual ~EventPayload() = default;
}

struct facebook::react::FabricUIManagerMeasureArgs {
public const char* componentName;
public facebook::react::LayoutConstraints layoutConstraints;
public facebook::react::SurfaceId surfaceId;
public folly::dynamic localData;
public folly::dynamic props;
public folly::dynamic state;
}

struct facebook::react::FilterFunction {
public bool operator==(const facebook::react::FilterFunction& other) const = default;
public facebook::react::FilterType type;
Expand Down
Loading