Skip to content

currentActivity Deprecation Issue #154

Description

@arrazop

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:

  1. Line 361 - initialize method
  2. Line 386 - initialize method (overload)
  3. Line 412 - setupUI method
  4. Line 689 - setUserAndSetupUI method
  5. Line 731 - setUser method (with auth)
  6. Line 778 - setUser method (with auth and expiration)
  7. Line 817 - setUser method (with auth and IV)
  8. Line 860 - setUser method (with auth, IV and expiration)
  9. Line 910 - setUser method (with UserAuthParams)
  10. Line 941 - setUser method (with JSON parameters)
  11. Line 955 - showNotice method
  12. 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) {

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions