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> executionsList = toExecutionsList(FFmpeg.listExecutions()); - flutterFFmpegResultHandler.success(result, executionsList); + final List> executionsList = toExecutionsList(FFmpeg.listExecutions()); + flutterFFmpegResultHandler.success(result, executionsList); - } else { - flutterFFmpegResultHandler.notImplemented(result); + break; + default: + flutterFFmpegResultHandler.notImplemented(result); + break; } } @@ -450,5 +490,4 @@ public static List toList(final JSONArray array) { return list; } - }