From 8613fd7d308e4034a4d7be25ff4c2f7d80ebbddf Mon Sep 17 00:00:00 2001 From: Mansi Date: Fri, 12 Dec 2025 23:45:12 +0530 Subject: [PATCH] feat: Add native module and package for custom functionality --- App.tsx | 7 ++++++- .../java/com/lynkeduppro/MainApplication.kt | 12 +++++++----- .../java/com/lynkeduppro/MyNativeModule.kt | 19 +++++++++++++++++++ .../java/com/lynkeduppro/MyNativePackage.kt | 19 +++++++++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 android/app/src/main/java/com/lynkeduppro/MyNativeModule.kt create mode 100644 android/app/src/main/java/com/lynkeduppro/MyNativePackage.kt diff --git a/App.tsx b/App.tsx index 963a631..e8880eb 100644 --- a/App.tsx +++ b/App.tsx @@ -5,7 +5,7 @@ import { StyleSheet, Text, TouchableOpacity, - Alert, + Alert, NativeModules } from 'react-native'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { useState, useEffect } from 'react'; @@ -14,6 +14,7 @@ import Register from './src/components/Register'; import { authAPI } from './src/services/authAPI'; import { networkService } from './src/services/networkService'; type Screen = 'login' | 'register' | 'home'; +const { MyNativeModule } = NativeModules; function App() { const isDarkMode = useColorScheme() === 'dark'; @@ -25,6 +26,10 @@ function App() { // Initialize app useEffect(() => { initializeApp(); + console.log("MyNativeModule", MyNativeModule); + MyNativeModule.greet("John").then((msg: any) => { + console.log(msg); + }); // Listen for network changes const unsubscribe = networkService.addListener((networkState) => { diff --git a/android/app/src/main/java/com/lynkeduppro/MainApplication.kt b/android/app/src/main/java/com/lynkeduppro/MainApplication.kt index 8e8a623..02b21ba 100644 --- a/android/app/src/main/java/com/lynkeduppro/MainApplication.kt +++ b/android/app/src/main/java/com/lynkeduppro/MainApplication.kt @@ -10,13 +10,15 @@ import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost class MainApplication : Application(), ReactApplication { override val reactHost: ReactHost by lazy { + + val packages = PackageList(this).packages.toMutableList() + + // ✅ Add your custom package HERE (Kotlin syntax) + packages.add(NativeModulesPackage()) + getDefaultReactHost( context = applicationContext, - packageList = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - }, + packageList = packages, ) } diff --git a/android/app/src/main/java/com/lynkeduppro/MyNativeModule.kt b/android/app/src/main/java/com/lynkeduppro/MyNativeModule.kt new file mode 100644 index 0000000..7e062d7 --- /dev/null +++ b/android/app/src/main/java/com/lynkeduppro/MyNativeModule.kt @@ -0,0 +1,19 @@ +package com.lynkeduppro + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.Promise + +class MyNativeModule(private val reactContext: ReactApplicationContext) + : ReactContextBaseJavaModule(reactContext) { + + override fun getName(): String { + return "MyNativeModule" // JS module name + } + + @ReactMethod + fun greet(name: String, promise: Promise) { + promise.resolve("Hello $name from Android(Kotlin)!") + } +} diff --git a/android/app/src/main/java/com/lynkeduppro/MyNativePackage.kt b/android/app/src/main/java/com/lynkeduppro/MyNativePackage.kt new file mode 100644 index 0000000..df0f8b8 --- /dev/null +++ b/android/app/src/main/java/com/lynkeduppro/MyNativePackage.kt @@ -0,0 +1,19 @@ +package com.lynkeduppro + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager + +class NativeModulesPackage : ReactPackage { + + override fun createNativeModules(reactContext: ReactApplicationContext): List { + return listOf( + MyNativeModule(reactContext) + ) + } + + override fun createViewManagers(reactContext: ReactApplicationContext): List> { + return emptyList() + } +}