diff --git a/android/src/main/java/com/arthenica/flutter/ffmpeg/FlutterFFmpegPlugin.java b/android/src/main/java/com/arthenica/flutter/ffmpeg/FlutterFFmpegPlugin.java
index 96b24bb..843c95e 100644
--- a/android/src/main/java/com/arthenica/flutter/ffmpeg/FlutterFFmpegPlugin.java
+++ b/android/src/main/java/com/arthenica/flutter/ffmpeg/FlutterFFmpegPlugin.java
@@ -43,11 +43,11 @@
import java.util.List;
import java.util.Map;
+import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.EventChannel;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
-import io.flutter.plugin.common.MethodChannel.Result;
/**
*
Flutter FFmpeg Plugin
@@ -55,7 +55,7 @@
* @author Taner Sener
* @since 0.1.0
*/
-public class FlutterFFmpegPlugin implements MethodCallHandler, EventChannel.StreamHandler {
+public class FlutterFFmpegPlugin implements FlutterPlugin, MethodCallHandler, EventChannel.StreamHandler {
public static final String LIBRARY_NAME = "flutter-ffmpeg";
public static final String PLATFORM_NAME = "android";
@@ -89,35 +89,32 @@ public class FlutterFFmpegPlugin implements MethodCallHandler, EventChannel.Stre
public static final String EVENT_EXECUTE = "FlutterFFmpegExecuteCallback";
private EventChannel.EventSink eventSink;
- @SuppressWarnings("deprecation")
- private final io.flutter.plugin.common.PluginRegistry.Registrar registrar;
- private final FlutterFFmpegResultHandler flutterFFmpegResultHandler;
+ private final FlutterFFmpegResultHandler flutterFFmpegResultHandler = new FlutterFFmpegResultHandler();
- /**
- * Registers plugin to registry.
- *
- * @param registrar receiver of plugin registration
- */
- @SuppressWarnings("deprecation")
- public static void registerWith(final io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
- FlutterFFmpegPlugin flutterFFmpegPlugin = new FlutterFFmpegPlugin(registrar);
-
- final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter_ffmpeg");
- channel.setMethodCallHandler(flutterFFmpegPlugin);
-
- final EventChannel eventChannel = new EventChannel(registrar.messenger(), "flutter_ffmpeg_event");
- eventChannel.setStreamHandler(flutterFFmpegPlugin);
- }
-
- @SuppressWarnings("deprecation")
- private FlutterFFmpegPlugin(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
- this.registrar = registrar;
-
- this.flutterFFmpegResultHandler = new FlutterFFmpegResultHandler();
+ private Context context;
+ private MethodChannel channel;
+ private EventChannel eventChannel;
+
+ @Override
+ public void onAttachedToEngine(final FlutterPluginBinding binding) {
+ channel = new MethodChannel(binding.getBinaryMessenger(), "flutter_ffmpeg");
+ channel.setMethodCallHandler(this);
+ eventChannel = new EventChannel(binding.getBinaryMessenger(), "flutter_ffmpeg_event");
+ eventChannel.setStreamHandler(this);
+ context = binding.getApplicationContext();
}
- private Context getActiveContext() {
- return (registrar.activity() != null) ? registrar.activity() : registrar.context();
+ @Override
+ public void onDetachedFromEngine(final FlutterPluginBinding binding) {
+ if (channel != null) {
+ channel.setMethodCallHandler(null);
+ channel = null;
+ }
+
+ if (eventChannel != null) {
+ eventChannel.setStreamHandler(null);
+ eventChannel = null;
+ }
}
/**
@@ -127,185 +124,228 @@ private Context getActiveContext() {
* @param result result callback
*/
@Override
- public void onMethodCall(final MethodCall call, final Result result) {
- if (call.method.equals("getPlatform")) {
+ public void onMethodCall(final MethodCall call, final MethodChannel.Result result) {
+ switch (call.method) {
+ case "getPlatform":
- final String abi = AbiDetect.getAbi();
- flutterFFmpegResultHandler.success(result, toStringMap(KEY_PLATFORM, PLATFORM_NAME + "-" + abi));
+ final String abi = AbiDetect.getAbi();
+ flutterFFmpegResultHandler.success(result, toStringMap(KEY_PLATFORM, PLATFORM_NAME + "-" + abi));
- } else if (call.method.equals("getFFmpegVersion")) {
+ break;
+ case "getFFmpegVersion":
- final String version = Config.getFFmpegVersion();
- flutterFFmpegResultHandler.success(result, toStringMap(KEY_VERSION, version));
+ final String version = Config.getFFmpegVersion();
+ flutterFFmpegResultHandler.success(result, toStringMap(KEY_VERSION, version));
- } else if (call.method.equals("executeFFmpegWithArguments")) {
+ break;
+ case "executeFFmpegWithArguments": {
- List arguments = call.argument("arguments");
+ List arguments = call.argument("arguments");
- final FlutterFFmpegExecuteFFmpegAsyncArgumentsTask asyncTask = new FlutterFFmpegExecuteFFmpegAsyncArgumentsTask(arguments, flutterFFmpegResultHandler, result);
- asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ assert arguments != null;
+ final FlutterFFmpegExecuteFFmpegAsyncArgumentsTask asyncTask = new FlutterFFmpegExecuteFFmpegAsyncArgumentsTask(arguments, flutterFFmpegResultHandler, result);
+ asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- } else if (call.method.equals("executeFFmpegAsyncWithArguments")) {
-
- List arguments = call.argument("arguments");
+ break;
+ }
+ case "executeFFmpegAsyncWithArguments": {
- long executionId = FFmpeg.executeAsync(arguments.toArray(new String[0]), new ExecuteCallback() {
+ List arguments = call.argument("arguments");
- @Override
- public void apply(long executionId, int returnCode) {
- final HashMap executeMap = new HashMap<>();
- executeMap.put("executionId", executionId);
- executeMap.put("returnCode", returnCode);
+ assert arguments != null;
+ long executionId = FFmpeg.executeAsync(arguments.toArray(new String[0]), new ExecuteCallback() {
- final HashMap eventMap = new HashMap<>();
- eventMap.put(EVENT_EXECUTE, executeMap);
+ @Override
+ public void apply(long executionId, int returnCode) {
+ final HashMap executeMap = new HashMap<>();
+ executeMap.put("executionId", executionId);
+ executeMap.put("returnCode", returnCode);
- flutterFFmpegResultHandler.success(eventSink, eventMap);
- }
- });
+ final HashMap eventMap = new HashMap<>();
+ eventMap.put(EVENT_EXECUTE, executeMap);
- flutterFFmpegResultHandler.success(result, FlutterFFmpegPlugin.toLongMap(FlutterFFmpegPlugin.KEY_EXECUTION_ID, executionId));
+ flutterFFmpegResultHandler.success(eventSink, eventMap);
+ }
+ });
- } else if (call.method.equals("executeFFprobeWithArguments")) {
+ flutterFFmpegResultHandler.success(result, FlutterFFmpegPlugin.toLongMap(FlutterFFmpegPlugin.KEY_EXECUTION_ID, executionId));
- List arguments = call.argument("arguments");
+ break;
+ }
+ case "executeFFprobeWithArguments": {
- final FlutterFFmpegExecuteFFprobeAsyncArgumentsTask asyncTask = new FlutterFFmpegExecuteFFprobeAsyncArgumentsTask(arguments, flutterFFmpegResultHandler, result);
- asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ List arguments = call.argument("arguments");
- } else if (call.method.equals("cancel")) {
+ assert arguments != null;
+ final FlutterFFmpegExecuteFFprobeAsyncArgumentsTask asyncTask = new FlutterFFmpegExecuteFFprobeAsyncArgumentsTask(arguments, flutterFFmpegResultHandler, result);
+ asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- Integer executionId = call.argument("executionId");
- if (executionId == null) {
- FFmpeg.cancel();
- } else {
- FFmpeg.cancel(executionId);
+ break;
}
+ case "cancel": {
- } else if (call.method.equals("enableRedirection")) {
+ Integer executionId = call.argument("executionId");
+ if (executionId == null) {
+ FFmpeg.cancel();
+ } else {
+ FFmpeg.cancel(executionId);
+ }
- Config.enableRedirection();
+ break;
+ }
+ case "enableRedirection":
- } else if (call.method.equals("disableRedirection")) {
+ Config.enableRedirection();
- Config.disableRedirection();
+ break;
+ case "disableRedirection":
- } else if (call.method.equals("getLogLevel")) {
+ Config.disableRedirection();
- final Level level = Config.getLogLevel();
- flutterFFmpegResultHandler.success(result, toIntMap(KEY_LOG_LEVEL, levelToInt(level)));
+ break;
+ case "getLogLevel": {
- } else if (call.method.equals("setLogLevel")) {
+ final Level level = Config.getLogLevel();
+ flutterFFmpegResultHandler.success(result, toIntMap(KEY_LOG_LEVEL, levelToInt(level)));
- Integer level = call.argument("level");
- if (level == null) {
- level = Level.AV_LOG_TRACE.getValue();
+ break;
}
- Config.setLogLevel(Level.from(level));
+ case "setLogLevel": {
- } else if (call.method.equals("enableLogs")) {
+ Integer level = call.argument("level");
+ if (level == null) {
+ level = Level.AV_LOG_TRACE.getValue();
+ }
+ Config.setLogLevel(Level.from(level));
- Config.enableLogCallback(new LogCallback() {
+ break;
+ }
+ case "enableLogs":
- @Override
- public void apply(final LogMessage logMessage) {
- emitLogMessage(logMessage);
- }
- });
+ Config.enableLogCallback(new LogCallback() {
- } else if (call.method.equals("disableLogs")) {
+ @Override
+ public void apply(final LogMessage logMessage) {
+ emitLogMessage(logMessage);
+ }
+ });
- Config.enableLogCallback(new LogCallback() {
+ break;
+ case "disableLogs":
- @Override
- public void apply(LogMessage message) {
- // EMPTY LOG CALLBACK
- }
- });
+ Config.enableLogCallback(new LogCallback() {
- } else if (call.method.equals("enableStatistics")) {
+ @Override
+ public void apply(LogMessage message) {
+ // EMPTY LOG CALLBACK
+ }
+ });
- Config.enableStatisticsCallback(new StatisticsCallback() {
+ break;
+ case "enableStatistics":
- @Override
- public void apply(final Statistics statistics) {
- emitStatistics(statistics);
- }
- });
+ Config.enableStatisticsCallback(new StatisticsCallback() {
+
+ @Override
+ public void apply(final Statistics statistics) {
+ emitStatistics(statistics);
+ }
+ });
- } else if (call.method.equals("disableStatistics")) {
+ break;
+ case "disableStatistics":
- Config.enableStatisticsCallback(null);
+ Config.enableStatisticsCallback(null);
- } else if (call.method.equals("getLastReceivedStatistics")) {
+ break;
+ case "getLastReceivedStatistics":
- flutterFFmpegResultHandler.success(result, toMap(Config.getLastReceivedStatistics()));
+ flutterFFmpegResultHandler.success(result, toMap(Config.getLastReceivedStatistics()));
- } else if (call.method.equals("resetStatistics")) {
+ break;
+ case "resetStatistics":
- Config.resetStatistics();
+ Config.resetStatistics();
- } else if (call.method.equals("setFontconfigConfigurationPath")) {
- String path = call.argument("path");
+ break;
+ case "setFontconfigConfigurationPath": {
+ String path = call.argument("path");
- Config.setFontconfigConfigurationPath(path);
+ Config.setFontconfigConfigurationPath(path);
- } else if (call.method.equals("setFontDirectory")) {
+ break;
+ }
+ case "setFontDirectory": {
- String path = call.argument("fontDirectory");
- Map map = call.argument("fontNameMap");
+ String path = call.argument("fontDirectory");
+ Map map = call.argument("fontNameMap");
- Config.setFontDirectory(getActiveContext(), path, map);
+ Config.setFontDirectory(context, path, map);
- } else if (call.method.equals("getPackageName")) {
+ break;
+ }
+ case "getPackageName":
- final String packageName = Config.getPackageName();
- flutterFFmpegResultHandler.success(result, toStringMap(KEY_PACKAGE_NAME, packageName));
+ final String packageName = Config.getPackageName();
+ flutterFFmpegResultHandler.success(result, toStringMap(KEY_PACKAGE_NAME, packageName));
- } else if (call.method.equals("getExternalLibraries")) {
+ break;
+ case "getExternalLibraries":
- final List externalLibraries = Config.getExternalLibraries();
- flutterFFmpegResultHandler.success(result, externalLibraries);
+ final List externalLibraries = Config.getExternalLibraries();
+ flutterFFmpegResultHandler.success(result, externalLibraries);
- } else if (call.method.equals("getLastReturnCode")) {
+ break;
+ case "getLastReturnCode":
- int lastReturnCode = Config.getLastReturnCode();
- flutterFFmpegResultHandler.success(result, toIntMap(KEY_LAST_RC, lastReturnCode));
+ int lastReturnCode = Config.getLastReturnCode();
+ flutterFFmpegResultHandler.success(result, toIntMap(KEY_LAST_RC, lastReturnCode));
- } else if (call.method.equals("getLastCommandOutput")) {
+ break;
+ case "getLastCommandOutput":
- final String lastCommandOutput = Config.getLastCommandOutput();
- flutterFFmpegResultHandler.success(result, toStringMap(KEY_LAST_COMMAND_OUTPUT, lastCommandOutput));
+ final String lastCommandOutput = Config.getLastCommandOutput();
+ flutterFFmpegResultHandler.success(result, toStringMap(KEY_LAST_COMMAND_OUTPUT, lastCommandOutput));
- } else if (call.method.equals("getMediaInformation")) {
- final String path = call.argument("path");
+ break;
+ case "getMediaInformation": {
+ final String path = call.argument("path");
- final FlutterFFmpegGetMediaInformationAsyncTask asyncTask = new FlutterFFmpegGetMediaInformationAsyncTask(path, flutterFFmpegResultHandler, result);
- asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ assert path != null;
+ final FlutterFFmpegGetMediaInformationAsyncTask asyncTask = new FlutterFFmpegGetMediaInformationAsyncTask(path, flutterFFmpegResultHandler, result);
+ asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- } else if (call.method.equals("registerNewFFmpegPipe")) {
+ break;
+ }
+ case "registerNewFFmpegPipe":
- final String pipe = Config.registerNewFFmpegPipe(getActiveContext());
- flutterFFmpegResultHandler.success(result, toStringMap(KEY_PIPE, pipe));
+ final String pipe = Config.registerNewFFmpegPipe(context);
+ flutterFFmpegResultHandler.success(result, toStringMap(KEY_PIPE, pipe));
- } else if (call.method.equals("closeFFmpegPipe")) {
- String ffmpegPipePath = call.argument("ffmpegPipePath");
+ break;
+ case "closeFFmpegPipe":
+ String ffmpegPipePath = call.argument("ffmpegPipePath");
- Config.closeFFmpegPipe(ffmpegPipePath);
+ assert ffmpegPipePath != null;
+ Config.closeFFmpegPipe(ffmpegPipePath);
- } else if (call.method.equals("setEnvironmentVariable")) {
- String variableName = call.argument("variableName");
- String variableValue = call.argument("variableValue");
+ break;
+ case "setEnvironmentVariable":
+ String variableName = call.argument("variableName");
+ String variableValue = call.argument("variableValue");
- Config.setEnvironmentVariable(variableName, variableValue);
+ Config.setEnvironmentVariable(variableName, variableValue);
- } else if (call.method.equals("listExecutions")) {
+ break;
+ case "listExecutions":
- final List