diff --git a/.changeset/tasty-seas-hope.md b/.changeset/tasty-seas-hope.md new file mode 100644 index 00000000..1eb4504c --- /dev/null +++ b/.changeset/tasty-seas-hope.md @@ -0,0 +1,5 @@ +--- +"@react-native-documents/picker": patch +--- + +fix: simplify coroutine cancelation to avoid hanging promises on Android diff --git a/packages/document-picker/android/src/main/java/com/reactnativedocumentpicker/RNDocumentPickerModule.kt b/packages/document-picker/android/src/main/java/com/reactnativedocumentpicker/RNDocumentPickerModule.kt index 75e60748..9d94627c 100644 --- a/packages/document-picker/android/src/main/java/com/reactnativedocumentpicker/RNDocumentPickerModule.kt +++ b/packages/document-picker/android/src/main/java/com/reactnativedocumentpicker/RNDocumentPickerModule.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.cancel import kotlinx.coroutines.launch class RNDocumentPickerModule(reactContext: ReactApplicationContext) : - NativeDocumentPickerSpec(reactContext), LifecycleEventListener { + NativeDocumentPickerSpec(reactContext) { private var currentPickOptions: PickOptions? = null private var currentUriOfFileBeingExported: Uri? = null private val promiseWrapper = PromiseWrapper(NAME) @@ -70,15 +70,12 @@ class RNDocumentPickerModule(reactContext: ReactApplicationContext) : } init { - reactContext.addActivityEventListener(activityEventListener) - reactContext.addLifecycleEventListener(this) + reactApplicationContext.addActivityEventListener(activityEventListener) } override fun invalidate() { fileCopyingCoroutine.cancel("module invalidated") reactApplicationContext.removeActivityEventListener(activityEventListener) - // TODO verify this should be done (and order) - // reactApplicationContext.removeLifecycleEventListener(this) super.invalidate() } @@ -330,12 +327,4 @@ class RNDocumentPickerModule(reactContext: ReactApplicationContext) : private const val E_OTHER_PRESENTING_ERROR = "OTHER_PRESENTING_ERROR" private const val E_INVALID_DATA_RETURNED = "INVALID_DATA_RETURNED" } - - override fun onHostResume() {} - - override fun onHostPause() {} - - override fun onHostDestroy() { - fileCopyingCoroutine.cancel("host destroyed") - } }