From 5f601fbac7050ea8bd761d0f73c8a669b73ec76b Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Fri, 20 May 2022 17:07:09 +0100 Subject: [PATCH] do not listen ActivityEventListener methods on react native, fixes #397 --- .../FFmpegKitReactNativeModule.java | 25 ++++++------------- react-native/ios/FFmpegKitReactNativeModule.m | 6 ++++- react-native/src/index.d.ts | 2 ++ react-native/src/index.js | 9 +++++++ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java b/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java index c978aa3..bccdcee 100644 --- a/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java +++ b/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Taner Sener + * Copyright (c) 2021-2022 Taner Sener * * This file is part of FFmpegKit. * @@ -47,7 +47,6 @@ import com.arthenica.ffmpegkit.Signal; import com.arthenica.ffmpegkit.Statistics; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.BaseActivityEventListener; -import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; @@ -75,7 +74,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; -public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule implements LifecycleEventListener { +public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule { public static final String LIBRARY_NAME = "ffmpeg-kit-react-native"; public static final String PLATFORM_NAME = "android"; @@ -131,7 +130,6 @@ public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule imple this.asyncExecutorService = Executors.newFixedThreadPool(asyncWriteToPipeConcurrencyLimit); if (reactContext != null) { - reactContext.addLifecycleEventListener(this); registerGlobalCallbacks(reactContext); } } @@ -151,19 +149,6 @@ public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule imple return "FFmpegKitReactNativeModule"; } - @Override - public void onHostResume() { - } - - @Override - public void onHostPause() { - } - - @Override - public void onHostDestroy() { - this.asyncExecutorService.shutdown(); - } - protected void registerGlobalCallbacks(final ReactApplicationContext reactContext) { FFmpegKitConfig.enableFFmpegSessionCompleteCallback(session -> { final DeviceEventManagerModule.RCTDeviceEventEmitter jsModule = reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class); @@ -984,6 +969,12 @@ public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule imple promise.resolve(toStringArray(Packages.getExternalLibraries())); } + @ReactMethod + public void uninit(final Promise promise) { + this.asyncExecutorService.shutdown(); + promise.resolve(null); + } + protected void enableLogs() { logsEnabled.compareAndSet(false, true); } diff --git a/react-native/ios/FFmpegKitReactNativeModule.m b/react-native/ios/FFmpegKitReactNativeModule.m index 9f52082..7465cda 100644 --- a/react-native/ios/FFmpegKitReactNativeModule.m +++ b/react-native/ios/FFmpegKitReactNativeModule.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Taner Sener + * Copyright (c) 2021-2022 Taner Sener * * This file is part of FFmpegKit. * @@ -695,6 +695,10 @@ RCT_EXPORT_METHOD(getExternalLibraries:(RCTPromiseResolveBlock)resolve rejecter: resolve([Packages getExternalLibraries]); } +RCT_EXPORT_METHOD(uninit:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + resolve(nil); +} + - (void)enableLogs { logsEnabled = true; } diff --git a/react-native/src/index.d.ts b/react-native/src/index.d.ts index 5836754..8de2b56 100644 --- a/react-native/src/index.d.ts +++ b/react-native/src/index.d.ts @@ -92,6 +92,8 @@ declare module 'ffmpeg-kit-react-native' { static init(): Promise; + static uninit(): Promise; + static enableRedirection(): Promise; static disableRedirection(): Promise; diff --git a/react-native/src/index.js b/react-native/src/index.js index 3a39aa6..e076a54 100644 --- a/react-native/src/index.js +++ b/react-native/src/index.js @@ -812,6 +812,15 @@ export class FFmpegKitConfig { await FFmpegKitInitializer.initialize(); } + /** + * Uninitializes the library. + * + * Calling this method before application termination is recommended but not required. + */ + static async uninit() { + return FFmpegKitReactNativeModule.uninit(); + } + /** *

Enables log and statistics redirection. *