diff --git a/android/build.gradle b/android/build.gradle index 3efa607..0e7d1fe 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:7.2.1" + classpath "com.android.tools.build:gradle:8.2.2" // noinspection DifferentKotlinGradleVersion classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } @@ -58,11 +58,11 @@ android { } } - compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") + compileSdkVersion 34 defaultConfig { - minSdkVersion getExtOrIntegerDefault("minSdkVersion") - targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") + minSdkVersion 24 + targetSdkVersion 34 } @@ -90,11 +90,10 @@ repositories { def kotlin_version = getExtOrDefault("kotlinVersion") dependencies { - // For < 0.71, this will be from the local maven repo - // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin - //noinspection GradleDynamicVersion + //noinspection GradleDependency implementation "com.facebook.react:react-android:+" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation "com.truecaller.android.sdk:truecaller-sdk:3.0.0" + // Update to latest OAuth SDK 3.1.0 + implementation "com.truecaller.android.sdk:truecaller-sdk:3.1.0" } diff --git a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.java b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.java deleted file mode 100644 index 159319d..0000000 --- a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.java +++ /dev/null @@ -1,249 +0,0 @@ -package com.kartikbhalla.truecaller; - -import android.app.Activity; -import android.content.Intent; -import android.graphics.Color; - -import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentActivity; - -import com.facebook.react.bridge.ActivityEventListener; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.BaseActivityEventListener; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.modules.core.DeviceEventManagerModule; - -import com.truecaller.android.sdk.oAuth.CodeVerifierUtil; -import com.truecaller.android.sdk.oAuth.TcOAuthCallback; -import com.truecaller.android.sdk.oAuth.TcOAuthData; -import com.truecaller.android.sdk.oAuth.TcOAuthError; -import com.truecaller.android.sdk.oAuth.TcSdk; -import com.truecaller.android.sdk.oAuth.TcSdkOptions; - -import java.math.BigInteger; -import java.security.SecureRandom; - - -public class TruecallerAndroidModule extends ReactContextBaseJavaModule { - private static ReactApplicationContext reactContext; - private String codeVerifier; - - TruecallerAndroidModule(ReactApplicationContext context) { - super(context); - reactContext = context; - - reactContext.addActivityEventListener(mActivityEventListener); - } - - @Override - public String getName() { - return "TruecallerAndroidModule"; - } - - private final TcOAuthCallback tcOAuthCallback = new TcOAuthCallback() { - @Override - public void onSuccess(TcOAuthData tcOAuthData) { - - WritableMap params = Arguments.createMap(); - params.putString("authorizationCode", tcOAuthData.getAuthorizationCode()); - params.putString("codeVerifier", codeVerifier); - - sendEvent(reactContext, "TruecallerAndroidSuccess", params); - } - - @Override - public void onFailure(TcOAuthError tcOAuthError) { - WritableMap params = Arguments.createMap(); - params.putInt("errorCode", tcOAuthError.getErrorCode()); - params.putString("errorMessage", tcOAuthError.getErrorMessage()); - - sendEvent(reactContext, "TruecallerAndroidFailure", params); - } - - @Override - public void onVerificationRequired(TcOAuthError tcOAuthError) { - } - - }; - - private int getButtonText(String text) { - switch (text) { - case "TRUECALLER_ANDROID_BUTTON_TEXT_ACCEPT": - return TcSdkOptions.CTA_TEXT_ACCEPT; - case "TRUECALLER_ANDROID_BUTTON_TEXT_CONFIRM": - return TcSdkOptions.CTA_TEXT_CONFIRM; - case "TRUECALLER_ANDROID_BUTTON_TEXT_PROCEED": - return TcSdkOptions.CTA_TEXT_PROCEED; - default: - return TcSdkOptions.CTA_TEXT_CONTINUE; - } - } - - private int getButtonShape(String shape) { - switch (shape) { - case "TRUECALLER_ANDROID_BUTTON_RECTANGLE": - return TcSdkOptions.BUTTON_SHAPE_RECTANGLE; - default: - return TcSdkOptions.BUTTON_SHAPE_ROUNDED; - } - } - - private int getFooterButtonText(String text) { - switch (text) { - case "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_ANOTHER_MOBILE_NUMBER": - return TcSdkOptions.FOOTER_TYPE_ANOTHER_MOBILE_NO; - case "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_ANOTHER_METHOD": - return TcSdkOptions.FOOTER_TYPE_ANOTHER_METHOD; - case "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_MANUALLY": - return TcSdkOptions.FOOTER_TYPE_MANUALLY; - case "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_LATER": - return TcSdkOptions.FOOTER_TYPE_LATER; - default: - return TcSdkOptions.FOOTER_TYPE_SKIP; - } - } - - - private int getConsentHeadingText(String text) { - switch (text) { - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SIGN_UP_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_SIGN_UP_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SIGN_IN_TO": - return TcSdkOptions.SDK_CONSENT_HEADING_SIGN_IN_TO; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_NUMBER_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_NUMBER_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_REGISTER_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_REGISTER_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_STARTED_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_GET_STARTED_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_PROCEED_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_PROCEED_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_PROFILE_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_PROFILE_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_YOUR_PROFILE_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_YOUR_PROFILE_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_PHONE_NO_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_PHONE_NO_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_YOUR_NO_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_YOUR_NO_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CONTINUE_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_CONTINUE_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_COMPLETE_ORDER_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_COMPLETE_ORDER_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_PLACE_ORDER_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_PLACE_ORDER_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_COMPLETE_BOOKING_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_COMPLETE_BOOKING_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CHECKOUT_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_CHECKOUT_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_MANAGE_DETAILS_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_MANAGE_DETAILS_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_MANAGE_YOUR_DETAILS_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_MANAGE_YOUR_DETAILS_WITH; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_LOGIN_TO_WITH_ONE_TAP": - return TcSdkOptions.SDK_CONSENT_HEADING_LOGIN_TO_WITH_ONE_TAP; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SUBSCRIBE_TO": - return TcSdkOptions.SDK_CONSENT_HEADING_SUBSCRIBE_TO; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_UPDATES_FROM": - return TcSdkOptions.SDK_CONSENT_HEADING_GET_UPDATES_FROM; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CONTINUE_READING_ON": - return TcSdkOptions.SDK_CONSENT_HEADING_CONTINUE_READING_ON; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_NEW_UPDATES_FROM": - return TcSdkOptions.SDK_CONSENT_HEADING_GET_NEW_UPDATES_FROM; - case "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_LOGIN_SIGNUP_WITH": - return TcSdkOptions.SDK_CONSENT_HEADING_LOGIN_SIGNUP_WITH; - default: - return TcSdkOptions.SDK_CONSENT_HEADING_LOG_IN_TO; - } - } - - - @ReactMethod - public void initialize(String buttonColor, String buttonTextColor, String buttonText, String buttonShape, String footerButtonText, String consentTitleText) { - - try { - TcSdkOptions tcSdkOptions = new TcSdkOptions.Builder(reactContext, tcOAuthCallback) - .buttonColor(Color.parseColor(buttonColor)) - .buttonTextColor(Color.parseColor(buttonTextColor)) - .ctaText(getButtonText(buttonText)) - .buttonShapeOptions(getButtonShape(buttonShape)) - - .footerType(getFooterButtonText(footerButtonText)) - .consentHeadingOption(getConsentHeadingText(consentTitleText)) - .build(); - - TcSdk.init(tcSdkOptions); - } catch (Exception e) { - sendTruecallerFailureEvent(0, e.getMessage()); - } - - } - - @ReactMethod - public void invoke() { - try { - SecureRandom random = new SecureRandom(); - BigInteger stateRequestedBigInt = new BigInteger(130, random); - String stateRequested = stateRequestedBigInt.toString(32); - - TcSdk.getInstance().setOAuthState(stateRequested); - TcSdk.getInstance().setOAuthScopes(new String[]{"profile", "phone", "email", "profile"}); - - codeVerifier = CodeVerifierUtil.Companion.generateRandomCodeVerifier(); - String codeChallenge = CodeVerifierUtil.Companion.getCodeChallenge(codeVerifier); - - if (codeChallenge != null) { - TcSdk.getInstance().setCodeChallenge(codeChallenge); - } - - TcSdk.getInstance().getAuthorizationCode((FragmentActivity) getCurrentActivity()); - } catch (Exception e) { - sendTruecallerFailureEvent(0, e.getMessage()); - } - - } - - - @ReactMethod - public boolean isUsable() { - - try { - return TcSdk.getInstance().isOAuthFlowUsable(); - } catch (Exception e) { - sendTruecallerFailureEvent(0, e.getMessage()); - - return false; - } - } - - private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() { - - @Override - public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) { - super.onActivityResult(activity, requestCode, resultCode, intent); - - if (requestCode == TcSdk.SHARE_PROFILE_REQUEST_CODE) { - TcSdk.getInstance().onActivityResultObtained((FragmentActivity) activity, requestCode, resultCode, intent); - } - } - }; - - private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params) { - reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params); - } - - private void sendTruecallerFailureEvent(int errorCode, String errorMessage) { - WritableMap params = Arguments.createMap(); - params.putInt("errorCode", errorCode); - params.putString("errorMessage", errorMessage); - - sendEvent(reactContext, "TruecallerAndroidFailure", params); - } -} diff --git a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.kt b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.kt new file mode 100644 index 0000000..6ab7567 --- /dev/null +++ b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidModule.kt @@ -0,0 +1,168 @@ +package com.kartikbhalla.truecaller + +import android.app.Activity +import android.content.Intent +import android.graphics.Color +import androidx.annotation.Nullable +import androidx.fragment.app.FragmentActivity +import com.facebook.react.bridge.* +import com.facebook.react.modules.core.DeviceEventManagerModule +import com.truecaller.android.sdk.oAuth.CodeVerifierUtil +import com.truecaller.android.sdk.oAuth.TcOAuthCallback +import com.truecaller.android.sdk.oAuth.TcOAuthData +import com.truecaller.android.sdk.oAuth.TcOAuthError +import com.truecaller.android.sdk.oAuth.TcSdk +import com.truecaller.android.sdk.oAuth.TcSdkOptions +import java.math.BigInteger +import java.security.SecureRandom + +class TruecallerAndroidModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { + + private var codeVerifier: String? = null + + override fun getName(): String = "TruecallerAndroidModule" + + private val tcOAuthCallback: TcOAuthCallback = object : TcOAuthCallback { + override fun onSuccess(tcOAuthData: TcOAuthData) { + val params = Arguments.createMap().apply { + putString("authorizationCode", tcOAuthData.authorizationCode) + putString("codeVerifier", codeVerifier) + } + sendEvent("TruecallerAndroidSuccess", params) + } + + override fun onFailure(tcOAuthError: TcOAuthError) { + sendTruecallerFailureEvent(tcOAuthError.errorCode, tcOAuthError.errorMessage) + } + + override fun onVerificationRequired(tcOAuthError: TcOAuthError) { + // No-op for now + } + } + + @ReactMethod + fun initialize( + buttonColor: String, + buttonTextColor: String, + buttonText: String, + buttonShape: String, + footerButtonText: String, + consentTitleText: String + ) { + try { + val options = TcSdkOptions.Builder(reactContext, tcOAuthCallback) + .buttonColor(Color.parseColor(buttonColor)) + .buttonTextColor(Color.parseColor(buttonTextColor)) + .ctaText(getButtonText(buttonText)) + .buttonShapeOptions(getButtonShape(buttonShape)) + .footerType(getFooterButtonText(footerButtonText)) + .consentHeadingOption(getConsentHeadingText(consentTitleText)) + .build() + TcSdk.init(options) + } catch (e: Exception) { + sendTruecallerFailureEvent(0, e.message) + } + } + + @ReactMethod + fun invoke() { + try { + val random = SecureRandom() + val stateRequested = BigInteger(130, random).toString(32) + TcSdk.getInstance().setOAuthState(stateRequested) + TcSdk.getInstance().setOAuthScopes(arrayOf("profile", "phone", "email", "profile")) + + codeVerifier = CodeVerifierUtil.generateRandomCodeVerifier() + val codeChallenge = CodeVerifierUtil.getCodeChallenge(codeVerifier) + codeChallenge?.let { TcSdk.getInstance().setCodeChallenge(it) } + + TcSdk.getInstance().getAuthorizationCode(currentActivity as FragmentActivity) + } catch (e: Exception) { + sendTruecallerFailureEvent(0, e.message) + } + } + + @ReactMethod + fun isUsable(): Boolean { + return try { + TcSdk.getInstance().isOAuthFlowUsable + } catch (e: Exception) { + sendTruecallerFailureEvent(0, e.message) + false + } + } + + // region Helper mappings + private fun getButtonText(text: String): Int = when (text) { + "TRUECALLER_ANDROID_BUTTON_TEXT_ACCEPT" -> TcSdkOptions.CTA_TEXT_ACCEPT + "TRUECALLER_ANDROID_BUTTON_TEXT_CONFIRM" -> TcSdkOptions.CTA_TEXT_CONFIRM + "TRUECALLER_ANDROID_BUTTON_TEXT_PROCEED" -> TcSdkOptions.CTA_TEXT_PROCEED + else -> TcSdkOptions.CTA_TEXT_CONTINUE + } + + private fun getButtonShape(shape: String): Int = when (shape) { + "TRUECALLER_ANDROID_BUTTON_RECTANGLE" -> TcSdkOptions.BUTTON_SHAPE_RECTANGLE + else -> TcSdkOptions.BUTTON_SHAPE_ROUNDED + } + + private fun getFooterButtonText(text: String): Int = when (text) { + "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_ANOTHER_MOBILE_NUMBER" -> TcSdkOptions.FOOTER_TYPE_ANOTHER_MOBILE_NO + "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_ANOTHER_METHOD" -> TcSdkOptions.FOOTER_TYPE_ANOTHER_METHOD + "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_MANUALLY" -> TcSdkOptions.FOOTER_TYPE_MANUALLY + "TRUECALLER_ANDROID_FOOTER_BUTTON_TEXT_LATER" -> TcSdkOptions.FOOTER_TYPE_LATER + else -> TcSdkOptions.FOOTER_TYPE_SKIP + } + + private fun getConsentHeadingText(text: String): Int = when (text) { + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SIGN_UP_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_SIGN_UP_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SIGN_IN_TO" -> TcSdkOptions.SDK_CONSENT_HEADING_SIGN_IN_TO + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_NUMBER_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_NUMBER_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_REGISTER_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_REGISTER_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_STARTED_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_GET_STARTED_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_PROCEED_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_PROCEED_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_PROFILE_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_PROFILE_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_YOUR_PROFILE_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_YOUR_PROFILE_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_PHONE_NO_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_PHONE_NO_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_VERIFY_YOUR_NO_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_VERIFY_YOUR_NO_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CONTINUE_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_CONTINUE_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_COMPLETE_ORDER_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_COMPLETE_ORDER_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_PLACE_ORDER_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_PLACE_ORDER_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_COMPLETE_BOOKING_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_COMPLETE_BOOKING_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CHECKOUT_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_CHECKOUT_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_MANAGE_DETAILS_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_MANAGE_DETAILS_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_MANAGE_YOUR_DETAILS_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_MANAGE_YOUR_DETAILS_WITH + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_LOGIN_TO_WITH_ONE_TAP" -> TcSdkOptions.SDK_CONSENT_HEADING_LOGIN_TO_WITH_ONE_TAP + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_SUBSCRIBE_TO" -> TcSdkOptions.SDK_CONSENT_HEADING_SUBSCRIBE_TO + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_UPDATES_FROM" -> TcSdkOptions.SDK_CONSENT_HEADING_GET_UPDATES_FROM + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_CONTINUE_READING_ON" -> TcSdkOptions.SDK_CONSENT_HEADING_CONTINUE_READING_ON + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_GET_NEW_UPDATES_FROM" -> TcSdkOptions.SDK_CONSENT_HEADING_GET_NEW_UPDATES_FROM + "TRUECALLER_ANDROID_CONSENT_HEADING_TEXT_LOGIN_SIGNUP_WITH" -> TcSdkOptions.SDK_CONSENT_HEADING_LOGIN_SIGNUP_WITH + else -> TcSdkOptions.SDK_CONSENT_HEADING_LOG_IN_TO + } + // endregion + + private val activityEventListener = object : BaseActivityEventListener() { + override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, intent: Intent?) { + if (requestCode == TcSdk.SHARE_PROFILE_REQUEST_CODE) { + TcSdk.getInstance().onActivityResultObtained(activity as FragmentActivity, requestCode, resultCode, intent) + } + } + } + + init { + reactContext.addActivityEventListener(activityEventListener) + } + + private fun sendEvent(eventName: String, @Nullable params: WritableMap?) { + reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java).emit(eventName, params) + } + + private fun sendTruecallerFailureEvent(errorCode: Int, errorMessage: String?) { + val map = Arguments.createMap().apply { + putInt("errorCode", errorCode) + putString("errorMessage", errorMessage) + } + sendEvent("TruecallerAndroidFailure", map) + } +} \ No newline at end of file diff --git a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.java b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.java deleted file mode 100644 index 03a82d0..0000000 --- a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.kartikbhalla.truecaller; - -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class TruecallerAndroidPackage implements ReactPackage { - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - return Collections.emptyList(); - } - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - List nativeModules = new ArrayList<>(); - nativeModules.add(new TruecallerAndroidModule(reactContext)); - return nativeModules; - } -} diff --git a/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.kt b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.kt new file mode 100644 index 0000000..cf5d454 --- /dev/null +++ b/android/src/main/java/com/kartikbhalla/truecaller/TruecallerAndroidPackage.kt @@ -0,0 +1,13 @@ +package com.kartikbhalla.truecaller + +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager + +class TruecallerAndroidPackage : ReactPackage { + override fun createViewManagers(reactContext: ReactApplicationContext): List> = emptyList() + + override fun createNativeModules(reactContext: ReactApplicationContext): List = + listOf(TruecallerAndroidModule(reactContext)) +} \ No newline at end of file