diff --git a/android/src/main/java/com/bleplx/BlePlxModule.java b/android/src/main/java/com/bleplx/BlePlxModule.java index ca1d171c..73be7144 100644 --- a/android/src/main/java/com/bleplx/BlePlxModule.java +++ b/android/src/main/java/com/bleplx/BlePlxModule.java @@ -19,6 +19,7 @@ import com.bleplx.adapter.ScanResult; import com.bleplx.adapter.Service; import com.bleplx.adapter.errors.BleError; +import com.bleplx.adapter.errors.BleErrorCode; import com.bleplx.converter.BleErrorToJsObjectConverter; import com.bleplx.converter.CharacteristicToJsObjectConverter; import com.bleplx.converter.DescriptorToJsObjectConverter; @@ -117,25 +118,41 @@ public void onEvent(Integer data) { } @ReactMethod - public void destroyClient() { + public void destroyClient(final Promise promise) { + if (!this.isRequestPossibleHandler("destroyClient", promise)) { + return; + } + bleAdapter.destroyClient(); bleAdapter = null; + promise.resolve(null); } // Mark: Common -------------------------------------------------------------------------------- @ReactMethod - public void cancelTransaction(String transactionId) { + public void cancelTransaction(String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("cancelTransaction", promise)) { + return; + } bleAdapter.cancelTransaction(transactionId); + promise.resolve(null); } @ReactMethod - public void setLogLevel(String logLevel) { + public void setLogLevel(String logLevel, final Promise promise) { + if (!this.isRequestPossibleHandler("setLogLevel", promise)) { + return; + } bleAdapter.setLogLevel(logLevel); + promise.resolve(bleAdapter.getLogLevel()); } @ReactMethod - public void logLevel(Promise promise) { + public void logLevel(final Promise promise) { + if (!this.isRequestPossibleHandler("logLevel", promise)) { + return; + } promise.resolve(bleAdapter.getLogLevel()); } @@ -143,6 +160,9 @@ public void logLevel(Promise promise) { @ReactMethod public void enable(final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("enable", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.enable(transactionId, new OnSuccessCallback() { @Override @@ -159,6 +179,9 @@ public void onError(BleError error) { @ReactMethod public void disable(final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("disable", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.disable(transactionId, new OnSuccessCallback() { @Override @@ -174,14 +197,20 @@ public void onError(BleError error) { } @ReactMethod - public void state(Promise promise) { + public void state(final Promise promise) { + if (!this.isRequestPossibleHandler("state", promise)) { + return; + } promise.resolve(bleAdapter.getCurrentState()); } // Mark: Scanning ------------------------------------------------------------------------------ @ReactMethod - public void startDeviceScan(@Nullable ReadableArray filteredUUIDs, @Nullable ReadableMap options) { + public void startDeviceScan(@Nullable ReadableArray filteredUUIDs, @Nullable ReadableMap options, final Promise promise) { + if (!this.isRequestPossibleHandler("startDeviceScan", promise)) { + return; + } final int DEFAULT_SCAN_MODE_LOW_POWER = 0; final int DEFAULT_CALLBACK_TYPE_ALL_MATCHES = 1; @@ -215,17 +244,26 @@ public void onError(BleError error) { sendEvent(Event.ScanEvent, errorConverter.toJSCallback(error)); } }); + + promise.resolve(null); } @ReactMethod - public void stopDeviceScan() { + public void stopDeviceScan(final Promise promise) { + if (!this.isRequestPossibleHandler("stopDeviceScan", promise)) { + return; + } bleAdapter.stopDeviceScan(); + promise.resolve(null); } // Mark: Device management --------------------------------------------------------------------- @ReactMethod public void devices(final ReadableArray deviceIdentifiers, final Promise promise) { + if (!this.isRequestPossibleHandler("devices", promise)) { + return; + } bleAdapter.getKnownDevices(ReadableArrayConverter.toStringArray(deviceIdentifiers), new OnSuccessCallback() { @Override @@ -246,6 +284,9 @@ public void onError(BleError error) { @ReactMethod public void connectedDevices(final ReadableArray serviceUUIDs, final Promise promise) { + if (!this.isRequestPossibleHandler("connectedDevices", promise)) { + return; + } bleAdapter.getConnectedDevices(ReadableArrayConverter.toStringArray(serviceUUIDs), new OnSuccessCallback() { @Override @@ -268,6 +309,9 @@ public void onError(BleError error) { @ReactMethod public void requestConnectionPriorityForDevice(final String deviceId, int connectionPriority, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("requestConnectionPriorityForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.requestConnectionPriorityForDevice(deviceId, connectionPriority, transactionId, new OnSuccessCallback() { @@ -285,6 +329,9 @@ public void onError(BleError error) { @ReactMethod public void requestMTUForDevice(final String deviceId, int mtu, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("requestMTUForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.requestMTUForDevice(deviceId, mtu, transactionId, new OnSuccessCallback() { @@ -302,6 +349,9 @@ public void onError(BleError error) { @ReactMethod public void readRSSIForDevice(final String deviceId, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readRSSIForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.readRSSIForDevice(deviceId, transactionId, new OnSuccessCallback() { @@ -319,6 +369,9 @@ public void onError(BleError error) { @ReactMethod public void connectToDevice(final String deviceId, @Nullable ReadableMap options, final Promise promise) { + if (!this.isRequestPossibleHandler("connectToDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); boolean autoConnect = false; @@ -379,7 +432,10 @@ public void onError(BleError error) { } @ReactMethod - public void cancelDeviceConnection(String deviceId, Promise promise) { + public void cancelDeviceConnection(String deviceId, final Promise promise) { + if (!this.isRequestPossibleHandler("cancelDeviceConnection", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.cancelDeviceConnection(deviceId, new OnSuccessCallback() { @@ -397,6 +453,9 @@ public void onError(BleError error) { @ReactMethod public void isDeviceConnected(String deviceId, final Promise promise) { + if (!this.isRequestPossibleHandler("isDeviceConnected", promise)) { + return; + } bleAdapter.isDeviceConnected(deviceId, new OnSuccessCallback() { @Override @@ -415,6 +474,9 @@ public void onError(BleError error) { @ReactMethod public void discoverAllServicesAndCharacteristicsForDevice(String deviceId, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("discoverAllServicesAndCharacteristicsForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.discoverAllServicesAndCharacteristicsForDevice(deviceId, transactionId, new OnSuccessCallback() { @@ -434,6 +496,9 @@ public void onError(BleError error) { @ReactMethod public void servicesForDevice(final String deviceId, final Promise promise) { + if (!this.isRequestPossibleHandler("servicesForDevice", promise)) { + return; + } try { List services = bleAdapter.getServicesForDevice(deviceId); WritableArray jsArray = Arguments.createArray(); @@ -451,6 +516,9 @@ public void servicesForDevice(final String deviceId, final Promise promise) { public void characteristicsForDevice(final String deviceId, final String serviceUUID, final Promise promise) { + if (!this.isRequestPossibleHandler("characteristicsForDevice", promise)) { + return; + } try { List characteristics = bleAdapter.getCharacteristicsForDevice(deviceId, serviceUUID); @@ -466,6 +534,9 @@ public void characteristicsForDevice(final String deviceId, @ReactMethod public void characteristicsForService(final int serviceIdentifier, final Promise promise) { + if (!this.isRequestPossibleHandler("characteristicsForService", promise)) { + return; + } try { List characteristics = bleAdapter.getCharacteristicsForService(serviceIdentifier); WritableArray jsCharacteristics = Arguments.createArray(); @@ -483,6 +554,9 @@ public void descriptorsForDevice(final String deviceIdentifier, final String serviceUUID, final String characteristicUUID, final Promise promise) { + if (!this.isRequestPossibleHandler("descriptorsForDevice", promise)) { + return; + } try { List descriptors = bleAdapter.descriptorsForDevice(deviceIdentifier, serviceUUID, characteristicUUID); WritableArray jsDescriptors = Arguments.createArray(); @@ -499,6 +573,9 @@ public void descriptorsForDevice(final String deviceIdentifier, public void descriptorsForService(final int serviceIdentifier, final String characteristicUUID, final Promise promise) { + if (!this.isRequestPossibleHandler("descriptorsForService", promise)) { + return; + } try { List descriptors = bleAdapter.descriptorsForService(serviceIdentifier, characteristicUUID); WritableArray jsDescriptors = Arguments.createArray(); @@ -514,6 +591,9 @@ public void descriptorsForService(final int serviceIdentifier, @ReactMethod public void descriptorsForCharacteristic(final int characteristicIdentifier, final Promise promise) { + if (!this.isRequestPossibleHandler("descriptorsForCharacteristic", promise)) { + return; + } try { List descriptors = bleAdapter.descriptorsForCharacteristic(characteristicIdentifier); WritableArray jsDescriptors = Arguments.createArray(); @@ -536,6 +616,9 @@ public void writeCharacteristicForDevice(final String deviceId, final Boolean response, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeCharacteristicForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.writeCharacteristicForDevice( @@ -561,6 +644,9 @@ public void writeCharacteristicForService(final int serviceIdentifier, final Boolean response, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeCharacteristicForService", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.writeCharacteristicForService( serviceIdentifier, characteristicUUID, valueBase64, response, transactionId, @@ -584,6 +670,9 @@ public void writeCharacteristic(final int characteristicIdentifier, final Boolean response, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeCharacteristic", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.writeCharacteristic(characteristicIdentifier, valueBase64, response, transactionId, @@ -606,6 +695,9 @@ public void readCharacteristicForDevice(final String deviceId, final String characteristicUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readCharacteristicForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.readCharacteristicForDevice( @@ -629,6 +721,9 @@ public void readCharacteristicForService(final int serviceIdentifier, final String characteristicUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readCharacteristicForService", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.readCharacteristicForService( @@ -651,6 +746,9 @@ public void onError(BleError error) { public void readCharacteristic(final int characteristicIdentifier, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readCharacteristic", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.readCharacteristic( @@ -675,6 +773,9 @@ public void monitorCharacteristicForDevice(final String deviceId, final String characteristicUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("monitorCharacteristicForDevice", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.monitorCharacteristicForDevice( deviceId, serviceUUID, characteristicUUID, transactionId, @@ -701,6 +802,9 @@ public void monitorCharacteristicForService(final int serviceIdentifier, final String characteristicUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("monitorCharacteristicForService", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); bleAdapter.monitorCharacteristicForService( serviceIdentifier, characteristicUUID, transactionId, @@ -726,6 +830,9 @@ public void onError(BleError error) { public void monitorCharacteristic(final int characteristicIdentifier, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("monitorCharacteristic", promise)) { + return; + } final SafePromise safePromise = new SafePromise(promise); //TODO resolve safePromise with null when monitoring has been completed bleAdapter.monitorCharacteristic( @@ -755,6 +862,9 @@ public void readDescriptorForDevice(final String deviceId, final String descriptorUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readDescriptorForDevice", promise)) { + return; + } bleAdapter.readDescriptorForDevice( deviceId, serviceUUID, @@ -780,6 +890,9 @@ public void readDescriptorForService(final int serviceIdentifier, final String descriptorUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readDescriptorForService", promise)) { + return; + } bleAdapter.readDescriptorForService( serviceIdentifier, characteristicUUID, @@ -804,6 +917,9 @@ public void readDescriptorForCharacteristic(final int characteristicIdentifier, final String descriptorUUID, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readDescriptorForCharacteristic", promise)) { + return; + } bleAdapter.readDescriptorForCharacteristic( characteristicIdentifier, descriptorUUID, @@ -826,6 +942,9 @@ public void onError(BleError bleError) { public void readDescriptor(final int descriptorIdentifier, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("readDescriptor", promise)) { + return; + } bleAdapter.readDescriptor( descriptorIdentifier, transactionId, @@ -851,6 +970,9 @@ public void writeDescriptorForDevice(final String deviceId, final String valueBase64, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeDescriptorForDevice", promise)) { + return; + } bleAdapter.writeDescriptorForDevice( deviceId, serviceUUID, @@ -880,6 +1002,9 @@ public void writeDescriptorForService(final int serviceIdentifier, final String valueBase64, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeDescriptorForService", promise)) { + return; + } bleAdapter.writeDescriptorForService( serviceIdentifier, characteristicUUID, @@ -907,6 +1032,9 @@ public void writeDescriptorForCharacteristic(final int characteristicIdentifier, final String valueBase64, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeDescriptorForCharacteristic", promise)) { + return; + } bleAdapter.writeDescriptorForCharacteristic( characteristicIdentifier, descriptorUUID, @@ -932,6 +1060,9 @@ public void writeDescriptor(final int descriptorIdentifier, final String valueBase64, final String transactionId, final Promise promise) { + if (!this.isRequestPossibleHandler("writeDescriptor", promise)) { + return; + } bleAdapter.writeDescriptor( descriptorIdentifier, valueBase64, @@ -966,4 +1097,15 @@ private void sendEvent(@NonNull Event event, @Nullable Object params) { .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(event.name, params); } + + private boolean isRequestPossibleHandler(String functionName, final Promise promise) { + if(this.bleAdapter == null){ + BleError bleError = new BleError(BleErrorCode.BluetoothManagerDestroyed, String.format("BleManager cannot call the %s function because BleManager has been destroyed", functionName), null); + + promise.reject(null, errorConverter.toJs(bleError)); + return false; + } + + return true; + } } diff --git a/babel.config.js b/babel.config.js index 80949cbb..94eb9817 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,3 @@ module.exports = { - presets: ['module:metro-react-native-babel-preset', '@babel/preset-flow'], - plugins: ['babel-plugin-syntax-hermes-parser'] + presets: ['module:@react-native/babel-preset', '@babel/preset-flow'] } diff --git a/example/Gemfile b/example/Gemfile index 1fa2c2e1..8d72c37a 100644 --- a/example/Gemfile +++ b/example/Gemfile @@ -3,4 +3,7 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version ruby ">= 2.6.10" -gem 'cocoapods', '~> 1.12' +# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper +# bound in the template on Cocoapods with next React Native release. +gem 'cocoapods', '>= 1.13', '< 1.15' +gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index ce374d6b..a4126465 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" /** @@ -70,8 +71,8 @@ def jscFlavor = 'org.webkit:android-jsc:+' android { ndkVersion rootProject.ext.ndkVersion - - compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion namespace "com.bleplxexample" defaultConfig { @@ -107,12 +108,6 @@ dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") - debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { - exclude group:'com.squareup.okhttp3', module:'okhttp' - } - - debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { diff --git a/example/android/app/src/debug/java/com/bleplxexample/ReactNativeFlipper.java b/example/android/app/src/debug/java/com/bleplxexample/ReactNativeFlipper.java deleted file mode 100644 index 49515ec6..00000000 --- a/example/android/app/src/debug/java/com/bleplxexample/ReactNativeFlipper.java +++ /dev/null @@ -1,75 +0,0 @@ -/** - * 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.bleplxexample; - -import android.content.Context; -import com.facebook.flipper.android.AndroidFlipperClient; -import com.facebook.flipper.android.utils.FlipperUtils; -import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.react.ReactInstanceEventListener; -import com.facebook.react.ReactInstanceManager; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.modules.network.NetworkingModule; -import okhttp3.OkHttpClient; - -/** - * Class responsible of loading Flipper inside your React Native application. This is the debug - * flavor of it. Here you can add your own plugins and customize the Flipper setup. - */ -public class ReactNativeFlipper { - public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { - if (FlipperUtils.shouldEnableFlipper(context)) { - final FlipperClient client = AndroidFlipperClient.getInstance(context); - - client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); - client.addPlugin(new DatabasesFlipperPlugin(context)); - client.addPlugin(new SharedPreferencesFlipperPlugin(context)); - client.addPlugin(CrashReporterPlugin.getInstance()); - - NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); - NetworkingModule.setCustomClientBuilder( - new NetworkingModule.CustomClientBuilder() { - @Override - public void apply(OkHttpClient.Builder builder) { - builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); - } - }); - client.addPlugin(networkFlipperPlugin); - client.start(); - - // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized - // Hence we run if after all native modules have been initialized - ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); - if (reactContext == null) { - reactInstanceManager.addReactInstanceEventListener( - new ReactInstanceEventListener() { - @Override - public void onReactContextInitialized(ReactContext reactContext) { - reactInstanceManager.removeReactInstanceEventListener(this); - reactContext.runOnNativeModulesQueueThread( - new Runnable() { - @Override - public void run() { - client.addPlugin(new FrescoFlipperPlugin()); - } - }); - } - }); - } else { - client.addPlugin(new FrescoFlipperPlugin()); - } - } - } -} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 0e144786..275feffe 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ - + getPackages() { - @SuppressWarnings("UnnecessaryLocalVariable") - List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); - return packages; - } - - @Override - protected String getJSMainModuleName() { - return "index"; - } - - @Override - protected boolean isNewArchEnabled() { - return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; - } - - @Override - protected Boolean isHermesEnabled() { - return BuildConfig.IS_HERMES_ENABLED; - } - }; - - @Override - public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; - } - - @Override - public void onCreate() { - super.onCreate(); - SoLoader.init(this, /* native exopackage */ false); - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - DefaultNewArchitectureEntryPoint.load(); - } - ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); - } -} diff --git a/example/android/app/src/main/java/com/bleplxexample/MainApplication.kt b/example/android/app/src/main/java/com/bleplxexample/MainApplication.kt new file mode 100644 index 00000000..3175256b --- /dev/null +++ b/example/android/app/src/main/java/com/bleplxexample/MainApplication.kt @@ -0,0 +1,43 @@ +package com.bleplxexample + +import android.app.Application +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.soloader.SoLoader + +class MainApplication : Application(), ReactApplication { + + override val reactNativeHost: ReactNativeHost = + object : DefaultReactNativeHost(this) { + override fun getPackages(): List = + PackageList(this).packages.apply { + // Packages that cannot be autolinked yet can be added manually here, for example: + // add(MyReactNativePackage()) + } + + override fun getJSMainModuleName(): String = "index" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + } + + override val reactHost: ReactHost + get() = getDefaultReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, false) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + } +} diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml index 73b37e4d..5c25e728 100644 --- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -17,7 +17,8 @@ android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" - android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> + android:insetBottom="@dimen/abc_edit_text_inset_bottom_material" + >