MCPcopy Create free account
hub / github.com/Snapchat/Valdi / createViewFactory

Method createViewFactory

valdi/src/valdi/android/NativeBridge.cpp:1845–1890  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1843}
1844
1845jlong ValdiAndroid::NativeBridge::createViewFactory( // NOLINT
1846 fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT
1847 jlong runtimeManagerHandle,
1848 jstring viewClassName,
1849 jobject viewFactory,
1850 jboolean hasBindAttributes) {
1851 auto* runtimeManagerWrapper = getRuntimeManagerWrapper(runtimeManagerHandle);
1852 if (runtimeManagerWrapper == nullptr) {
1853 return 0;
1854 }
1855
1856 const auto& viewManagerContext = runtimeManagerWrapper->getAndroidViewManagerContext();
1857 auto& androidViewManager = runtimeManagerWrapper->getAndroidViewManager();
1858
1859 auto javaEnv = ValdiAndroid::JavaEnv();
1860
1861 auto cppViewClassName = ValdiAndroid::toInternedString(javaEnv, viewClassName);
1862
1863 auto viewFactoryObject = ValdiAndroid::GlobalRefJavaObjectBase(javaEnv, viewFactory, "ViewFactory");
1864
1865 auto attributes = viewManagerContext->getAttributesManager().getAttributesForClass(cppViewClassName);
1866
1867 if (hasBindAttributes == JNI_TRUE) {
1868 Valdi::AttributesBindingContextImpl bindingContext(viewManagerContext->getAttributesManager().getAttributeIds(),
1869 viewManagerContext->getAttributesManager().getColorPalette(),
1870 runtimeManagerWrapper->getRuntimeManager().getLogger());
1871
1872 auto wrapper = Valdi::makeShared<AttributesBindingContextWrapper>(androidViewManager, bindingContext);
1873 auto ptr = reinterpret_cast<int64_t>(Valdi::unsafeBridgeCast(wrapper.get()));
1874
1875 ValdiAndroid::JavaEnv::getCache().getViewFactoryBindAttributesMethod().call(viewFactoryObject.toObject(), ptr);
1876
1877 attributes = attributes->merge(cppViewClassName,
1878 bindingContext.getHandlers(),
1879 bindingContext.getDefaultDelegate(),
1880 bindingContext.getMeasureDelegate(),
1881 bindingContext.scrollAttributesBound(),
1882 true);
1883 }
1884
1885 auto viewFactoryCpp = Valdi::makeShared<AndroidViewFactory>(
1886 std::move(viewFactoryObject), cppViewClassName, androidViewManager, attributes, true);
1887
1888 auto* value = new Valdi::Value(viewFactoryCpp);
1889 return reinterpret_cast<jlong>(value);
1890}
1891
1892void ValdiAndroid::NativeBridge::registerLocalViewFactory( // NOLINT
1893 fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT

Callers

nothing calls this directly

Calls 13

getRuntimeManagerWrapperFunction · 0.85
toInternedStringFunction · 0.85
unsafeBridgeCastFunction · 0.85
getLoggerMethod · 0.80
toObjectMethod · 0.80
scrollAttributesBoundMethod · 0.80
getMethod · 0.65
callMethod · 0.65
JavaEnvClass · 0.50
getAttributesForClassMethod · 0.45
getColorPaletteMethod · 0.45

Tested by

no test coverage detected