diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 40c6dcd0..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: '@react-native-community', -}; diff --git a/.gitattributes b/.gitattributes index d42ff183..030ef144 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ *.pbxproj -text +# specific for windows script files +*.bat text eol=crlf \ No newline at end of file diff --git a/.gitignore b/.gitignore index 633848a0..a8389b69 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace +**/.xcode.env.local # Android/IJ # @@ -67,6 +68,15 @@ buck-out/ \.buckd/ android/app/libs android/keystores/debug.keystore +.kotlin/ + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions # Expo .expo/ @@ -77,6 +87,10 @@ android/keystores/debug.keystore # generated by bob lib/ +# React Native Codegen +ios/generated +android/generated + # Other dist/ out/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..f27575a8 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm run precommit diff --git a/.snyk b/.snyk index e380072b..7f52a9fb 100644 --- a/.snyk +++ b/.snyk @@ -7,16 +7,6 @@ ignore: reason: No fix available expires: 2025-05-12T09:15:05.191Z created: 2025-02-02T05:47:18.380Z - SNYK-JS-BABELHELPERS-9397697: - - '*': - reason: This issue is temporarily ignored while we evaluate alternative dependencies or wait for an update from Expo/Metro. - expires: 2025-05-12T09:15:05.191Z - created: 2025-03-12T09:15:05.191Z - SNYK-JS-IMAGESIZE-9634164: - - '*': - reason: This issue is temporarily ignored untill there is a new release of react native fixed this issue. - expires: 2025-05-12T09:15:05.191Z - created: 2025-04-07T09:15:05.191Z snyk:lic:npm:lightningcss-win32-x64-msvc:MPL-2.0: - '*': reason: This issue is temporarily ignored while we evaluate alternative dependencies or wait for an update from Expo/Metro. diff --git a/.yarnrc.yml b/.yarnrc.yml index 13215d63..5badb2e5 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -3,8 +3,8 @@ nmHoistingLimits: workspaces plugins: - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs - spec: "@yarnpkg/plugin-interactive-tools" + spec: '@yarnpkg/plugin-interactive-tools' - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs - spec: "@yarnpkg/plugin-workspace-tools" + spec: '@yarnpkg/plugin-workspace-tools' yarnPath: .yarn/releases/yarn-3.6.1.cjs diff --git a/A0Auth0.podspec b/A0Auth0.podspec index 166a459a..2404514b 100644 --- a/A0Auth0.podspec +++ b/A0Auth0.podspec @@ -10,7 +10,7 @@ Pod::Spec.new do |s| s.homepage = package['repository']['baseUrl'] s.license = package['license'] s.authors = package['author'] - s.platforms = { :ios => '13.0' } + s.platforms = { :ios => min_ios_version_supported } s.source = { :git => 'https://github.com/auth0/react-native-auth0.git', :tag => "v#{s.version}" } s.source_files = 'ios/**/*.{h,m,mm,swift}' diff --git a/EXAMPLES.md b/EXAMPLES.md index c8e99f17..d7390b16 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -190,12 +190,11 @@ const auth0 = new Auth0({ clientId: 'YOUR_AUTH0_CLIENT_ID', headers: { 'Accept-Language': 'fr-CA', - 'X-Tracking-Id': 'user-tracking-id-123' - } + 'X-Tracking-Id': 'user-tracking-id-123', + }, }); ``` - #### Using custom headers with Auth0Provider component If you're using the hooks-based approach with Auth0Provider, you can provide headers during initialization: @@ -209,31 +208,31 @@ import { Auth0Provider } from 'react-native-auth0'; clientId={'YOUR_CLIENT_ID'} headers={{ 'Accept-Language': 'fr-CA', - 'X-App-Version': '1.2.3' + 'X-App-Version': '1.2.3', }} > - +; ``` - #### Set request-specific headers You can also provide headers for specific API calls, which will override global headers with the same name: ```js // For specific authentication requests -auth0.auth.passwordRealm({ - username: 'info@auth0.com', - password: 'password', - realm: 'myconnection', - headers: { - 'X-Custom-Header': 'request-specific-value', - 'X-Request-ID': 'unique-request-id-456' - } -}) -.then(console.log) -.catch(console.error); +auth0.auth + .passwordRealm({ + username: 'info@auth0.com', + password: 'password', + realm: 'myconnection', + headers: { + 'X-Custom-Header': 'request-specific-value', + 'X-Request-ID': 'unique-request-id-456', + }, + }) + .then(console.log) + .catch(console.error); ``` ## Management API (Users) diff --git a/README.md b/README.md index be4341f8..3884d010 100644 --- a/README.md +++ b/README.md @@ -353,8 +353,8 @@ import { Auth0Provider } from 'react-native-auth0'; const App = () => { return ( - @@ -390,9 +390,10 @@ const auth0 = new Auth0({ clientId: 'YOUR_AUTH0_CLIENT_ID', headers: { 'X-Custom-Header': 'custom-value', - } + }, }); ``` + Then import the hook into a component where you want to get access to the properties and methods for integrating with Auth0: diff --git a/babel.config.js b/babel.config.js index 03a76d1e..77fbb1af 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ module.exports = { - presets: ['module:metro-react-native-babel-preset'], + presets: ['module:@react-native/babel-preset'], sourceMaps: true, }; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..b5e9db49 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,38 @@ +import { fixupConfigRules } from '@eslint/compat'; +import { FlatCompat } from '@eslint/eslintrc'; +import js from '@eslint/js'; +import prettier from 'eslint-plugin-prettier'; +import { defineConfig } from 'eslint/config'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default defineConfig([ + { + extends: fixupConfigRules(compat.extends('@react-native', 'prettier')), + plugins: { prettier }, + rules: { + 'react/react-in-jsx-scope': 'off', + 'prettier/prettier': [ + 'error', + { + quoteProps: 'consistent', + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', + useTabs: false, + }, + ], + }, + }, + { + ignores: ['node_modules/', 'lib/', 'docs'], + }, +]); diff --git a/example/.node-version b/example/.node-version deleted file mode 100644 index 3c032078..00000000 --- a/example/.node-version +++ /dev/null @@ -1 +0,0 @@ -18 diff --git a/example/Gemfile b/example/Gemfile index 295dd1eb..6a4c5f17 100644 --- a/example/Gemfile +++ b/example/Gemfile @@ -1,10 +1,16 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '>= 2.6.10' +ruby ">= 2.6.10" # Exclude problematic versions of cocoapods and activesupport that causes build failures. gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' gem 'xcodeproj', '< 1.26.0' -gem 'concurrent-ruby', '< 1.3.4' \ No newline at end of file +gem 'concurrent-ruby', '< 1.3.4' + +# Ruby 3.4.0 has removed some libraries from the standard library. +gem 'bigdecimal' +gem 'logger' +gem 'benchmark' +gem 'mutex_m' diff --git a/example/Gemfile.lock b/example/Gemfile.lock new file mode 100644 index 00000000..a99701f5 --- /dev/null +++ b/example/Gemfile.lock @@ -0,0 +1,116 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + activesupport (6.1.7.10) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + base64 (0.2.0) + benchmark (0.4.0) + bigdecimal (3.1.9) + claide (1.1.0) + cocoapods (1.15.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.15.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.3.3) + escape (0.0.4) + ethon (0.16.0) + ffi (>= 1.15.0) + ffi (1.17.2) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.9.0) + mutex_m + i18n (1.14.7) + concurrent-ruby (~> 1.0) + json (2.7.6) + logger (1.7.0) + minitest (5.25.4) + molinillo (0.8.0) + mutex_m (0.3.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + nkf (0.2.0) + public_suffix (4.0.7) + rexml (3.4.1) + ruby-macho (2.5.1) + typhoeus (1.4.1) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.25.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (>= 3.3.6, < 4.0) + zeitwerk (2.6.18) + +PLATFORMS + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.5, != 7.1.0) + benchmark + bigdecimal + cocoapods (>= 1.13, != 1.15.1, != 1.15.0) + concurrent-ruby (< 1.3.4) + logger + mutex_m + xcodeproj (< 1.26.0) + +RUBY VERSION + ruby 2.6.10p210 + +BUNDLED WITH + 1.17.2 diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index a277f3d7..279eada5 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,8 +1,6 @@ apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" apply plugin: "com.facebook.react" -apply plugin: 'org.jetbrains.kotlin.android' - -import com.android.build.OutputFile /** * This is the configuration block to customize your React Native Android app. @@ -56,14 +54,6 @@ react { autolinkLibrariesWithApp() } -/** - * Set this to true to create four separate APKs instead of one, - * one for each native architecture. This is useful if you don't - * use App Bundles (https://developer.android.com/guide/app-bundle/) - * and want to have separate APKs to upload to the Play Store. - */ -def enableSeparateBuildPerCPUArchitecture = false - /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ @@ -73,29 +63,19 @@ def enableProguardInReleaseBuilds = false * The preferred build flavor of JavaScriptCore (JSC) * * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` * * The international variant includes ICU i18n library and necessary data * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that * give correct results when using with locales other than en-US. Note that * this variant is about 6MiB larger per architecture than default. */ -def jscFlavor = 'org.webkit:android-jsc:+' - -/** - * Private function to get the list of Native Architectures you want to build. - * This reads the value from reactNativeArchitectures in your gradle.properties - * file and works together with the --active-arch-only flag of react-native run-android. - */ -def reactNativeArchitectures() { - def value = project.getProperties().get("reactNativeArchitectures") - return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] -} +def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' android { ndkVersion rootProject.ext.ndkVersion - - compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion namespace "com.auth0example" defaultConfig { @@ -105,15 +85,6 @@ android { versionCode 1 versionName "1.0" } - - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include (*reactNativeArchitectures()) - } - } signingConfigs { debug { storeFile file('debug.keystore') @@ -134,44 +105,15 @@ android { proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } - kotlinOptions { - jvmTarget = '17' - } - - // applicationVariants are e.g. debug, release - applicationVariants.all { variant -> - variant.outputs.each { output -> - // For each separate APK per architecture, set a unique version code as described here: - // https://developer.android.com/studio/build/configure-apk-splits.html - // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. - def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - defaultConfig.versionCode * 1000 + versionCodes.get(abi) - } - - } - } } dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") - implementation("org.jetbrains:annotations:16.0.2") - implementation 'androidx.core:core-ktx:1.15.0' - 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 { implementation jscFlavor } } - diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml index 4b185bc1..ced5aabf 100644 --- a/example/android/app/src/debug/AndroidManifest.xml +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -7,7 +7,5 @@ - - + tools:ignore="GoogleAppIndexingWarning"/> diff --git a/example/android/app/src/debug/java/com/auth0example/ReactNativeFlipper.java b/example/android/app/src/debug/java/com/auth0example/ReactNativeFlipper.java deleted file mode 100644 index 7e49e327..00000000 --- a/example/android/app/src/debug/java/com/auth0example/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.auth0example; - -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 2fbc0769..e1892528 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,45 +1,26 @@ - - + - - - - - - - - - - - - - + - - - - - - \ No newline at end of file + + + + + + + + + diff --git a/example/android/app/src/main/java/com/auth0example/MainActivity.java b/example/android/app/src/main/java/com/auth0example/MainActivity.java deleted file mode 100644 index 150a1442..00000000 --- a/example/android/app/src/main/java/com/auth0example/MainActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.auth0example; - -import com.facebook.react.ReactActivity; -import com.facebook.react.ReactActivityDelegate; -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; -import com.facebook.react.defaults.DefaultReactActivityDelegate; - -public class MainActivity extends ReactActivity { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "Auth0Example"; - } - - /** - * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link - * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React - * (aka React 18) with two boolean flags. - */ - @Override - protected ReactActivityDelegate createReactActivityDelegate() { - return new DefaultReactActivityDelegate( - this, - getMainComponentName(), - // If you opted-in for the New Architecture, we enable the Fabric Renderer. - DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled - // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18). - DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled - ); - } -} diff --git a/example/android/app/src/main/java/com/auth0example/MainActivity.kt b/example/android/app/src/main/java/com/auth0example/MainActivity.kt new file mode 100644 index 00000000..67b0d6c7 --- /dev/null +++ b/example/android/app/src/main/java/com/auth0example/MainActivity.kt @@ -0,0 +1,22 @@ +package com.auth0example + +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate + +class MainActivity : ReactActivity() { + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "Auth0Example" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate = + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) +} diff --git a/example/android/app/src/main/java/com/auth0example/MainApplication.kt b/example/android/app/src/main/java/com/auth0example/MainApplication.kt index 4f85130f..04bd8569 100644 --- a/example/android/app/src/main/java/com/auth0example/MainApplication.kt +++ b/example/android/app/src/main/java/com/auth0example/MainApplication.kt @@ -1,10 +1,6 @@ package com.auth0example import android.app.Application -import android.content.BroadcastReceiver -import android.content.Intent -import android.content.IntentFilter -import android.os.Build import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost @@ -45,12 +41,4 @@ class MainApplication : Application(), ReactApplication { load() } } - - override fun registerReceiver(receiver: BroadcastReceiver?, filter: IntentFilter?): Intent? { - return if (Build.VERSION.SDK_INT >= 34 && applicationInfo.targetSdkVersion >= 34) { - super.registerReceiver(receiver, filter, RECEIVER_EXPORTED) - } else { - super.registerReceiver(receiver, filter) - } - } } 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 f35d9962..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,10 +17,11 @@ 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" + > -