Summary
The @didomi/react-native package (version 2.15.0) is using the deprecated currentActivity property directly, which causes build failures in newer React Native versions (specifically after Expo SDK 54 upgrade).
Environment
- Package:
@didomi/react-native@2.15.0
- React Native: 0.76.3
- Expo SDK: 54
- Platform: Android
- Build System: Gradle
Problem Description
The DidomiModule.kt file contains multiple references to currentActivity which is deprecated in newer React Native versions. The correct approach is to use reactContext.currentActivity instead.
Error Messages
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:361:31 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:386:31 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:412:46 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:689:58 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:731:24 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:778:24 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:817:24 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:860:24 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:910:28 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:941:92 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:955:49 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:969:58 Unresolved reference 'currentActivity'.
e: file:///path/to/node_modules/@didomi/react-native/android/src/main/java/io/didomi/reactnative/DidomiModule.kt:970:59 Unresolved reference 'currentActivity'.
Root Cause
The issue stems from React Native's deprecation of the currentActivity property in favor of accessing it through the React context. This change was made to improve the architecture and make the API more consistent.
Affected Code Locations
The following methods in DidomiModule.kt are affected:
- Line 361 -
initialize method
- Line 386 -
initialize method (overload)
- Line 412 -
setupUI method
- Line 689 -
setUserAndSetupUI method
- Line 731 -
setUser method (with auth)
- Line 778 -
setUser method (with auth and expiration)
- Line 817 -
setUser method (with auth and IV)
- Line 860 -
setUser method (with auth, IV and expiration)
- Line 910 -
setUser method (with UserAuthParams)
- Line 941 -
setUser method (with JSON parameters)
- Line 955 -
showNotice method
- Line 969-970 -
showPreferences method
Proposed Solution
Replace all instances of currentActivity with reactContext.currentActivity in the DidomiModule.kt file.
Example Fix
Before:
val application = currentActivity?.application ?: throw IllegalStateException("No activity present")
Didomi.getInstance().setupUI(currentActivity as? FragmentActivity)
After:
val application = reactContext.currentActivity?.application ?: throw IllegalStateException("No activity present")
Didomi.getInstance().setupUI(reactContext.currentActivity as? FragmentActivity)
Complete Patch
Here's the complete patch that fixes all instances:
--- a/android/src/main/java/io/didomi/reactnative/DidomiModule.kt
+++ b/android/src/main/java/io/didomi/reactnative/DidomiModule.kt
@@ -358,7 +358,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
false
)
- val application = currentActivity?.application ?: throw IllegalStateException("No activity present")
+ val application = reactContext.currentActivity?.application ?: throw IllegalStateException("No activity present")
Didomi.getInstance().initialize(application, parameters)
promise.resolve(0)
@@ -383,7 +383,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
val parameters = buildDidomiInitializeParameters(jsonParameters)
- val application = currentActivity?.application ?: throw IllegalStateException("No activity present")
+ val application = reactContext.currentActivity?.application ?: throw IllegalStateException("No activity present")
Didomi.getInstance().initialize(application, parameters)
promise.resolve(0)
@@ -409,7 +409,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
fun setupUI(promise: Promise) {
try {
runOnUiThread {
- Didomi.getInstance().setupUI(currentActivity as? FragmentActivity)
+ Didomi.getInstance().setupUI(reactContext.currentActivity as? FragmentActivity)
}
promise.resolve(0)
} catch (e: Exception) {
@@ -686,7 +686,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
@ReactMethod
fun setUserAndSetupUI(organizationUserId: String, promise: Promise) {
- Didomi.getInstance().setUser(organizationUserId, currentActivity as? FragmentActivity)
+ Didomi.getInstance().setUser(organizationUserId, reactContext.currentActivity as? FragmentActivity)
promise.resolve(0)
}
@@ -728,7 +728,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
digest,
salt
),
- activity = currentActivity as? FragmentActivity
+ activity = reactContext.currentActivity as? FragmentActivity
)
promise.resolve(0)
}
@@ -775,7 +775,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
salt,
expiration.toLong()
),
- activity = currentActivity as? FragmentActivity
+ activity = reactContext.currentActivity as? FragmentActivity
)
promise.resolve(0)
}
@@ -814,7 +814,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
secretId,
initializationVector
),
- activity = currentActivity as? FragmentActivity
+ activity = reactContext.currentActivity as? FragmentActivity
)
promise.resolve(0)
}
@@ -857,7 +857,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
initializationVector,
expiration.toLong()
),
- activity = currentActivity as? FragmentActivity
+ activity = reactContext.currentActivity as? FragmentActivity
)
promise.resolve(0)
}
@@ -907,7 +907,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
Didomi.getInstance().setUser(
userAuthParams = userAuthParams,
synchronizedUsers = synchronizedUsers,
- activity = currentActivity as? FragmentActivity,
+ activity = reactContext.currentActivity as? FragmentActivity,
)
promise.resolve(0)
@@ -938,7 +938,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
promise: Promise
) {
try {
- val userParameters = buildDidomiUserParameters(JSONObject(jsonUserParameters), currentActivity as? FragmentActivity)
+ val userParameters = buildDidomiUserParameters(JSONObject(jsonUserParameters), reactContext.currentActivity as? FragmentActivity)
Didomi.getInstance().setUser(userParameters)
promise.resolve(0)
@@ -952,7 +952,7 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
fun showNotice(promise: Promise) {
try {
runOnUiThread {
- Didomi.getInstance().showNotice(currentActivity as? FragmentActivity)
+ Didomi.getInstance().showNotice(reactContext.currentActivity as? FragmentActivity)
}
promise.resolve(0)
} catch (e: Exception) {
@@ -966,8 +966,8 @@ class DidomiModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
try {
runOnUiThread {
view?.also {
- Didomi.getInstance().showPreferences(currentActivity as? FragmentActivity, view)
- } ?: Didomi.getInstance().showPreferences(currentActivity as? FragmentActivity)
+ Didomi.getInstance().showPreferences(reactContext.currentActivity as? FragmentActivity, view)
+ } ?: Didomi.getInstance().showPreferences(reactContext.currentActivity as? FragmentActivity)
}
promise.resolve(0)
} catch (e: Exception) {
Summary
The
@didomi/react-nativepackage (version 2.15.0) is using the deprecatedcurrentActivityproperty directly, which causes build failures in newer React Native versions (specifically after Expo SDK 54 upgrade).Environment
@didomi/react-native@2.15.0Problem Description
The
DidomiModule.ktfile contains multiple references tocurrentActivitywhich is deprecated in newer React Native versions. The correct approach is to usereactContext.currentActivityinstead.Error Messages
Root Cause
The issue stems from React Native's deprecation of the
currentActivityproperty in favor of accessing it through the React context. This change was made to improve the architecture and make the API more consistent.Affected Code Locations
The following methods in
DidomiModule.ktare affected:initializemethodinitializemethod (overload)setupUImethodsetUserAndSetupUImethodsetUsermethod (with auth)setUsermethod (with auth and expiration)setUsermethod (with auth and IV)setUsermethod (with auth, IV and expiration)setUsermethod (with UserAuthParams)setUsermethod (with JSON parameters)showNoticemethodshowPreferencesmethodProposed Solution
Replace all instances of
currentActivitywithreactContext.currentActivityin theDidomiModule.ktfile.Example Fix
Before:
After:
Complete Patch
Here's the complete patch that fixes all instances: