Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pass params to customize VE #73

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ class MainActivity : FlutterActivity() {

when (call.method) {
METHOD_INIT_VIDEO_EDITOR -> {
val licenseToken = call.arguments as String
val params = call.arguments as HashMap<String, Any>
val licenseToken = params["banubaToken"] as String
editorSDK = BanubaVideoEditor.initialize(licenseToken)

if (editorSDK == null) {
Expand All @@ -79,7 +80,8 @@ class MainActivity : FlutterActivity() {
if (videoEditorModule == null) {
// Initialize video editor sdk dependencies
videoEditorModule = VideoEditorModule().apply {
initialize(application)
// Pass params to initializer
initialize(application, params)
}
}
result.success(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.banuba.sdk.arcloud.data.source.ArEffectsRepositoryProvider
import com.banuba.sdk.arcloud.di.ArCloudKoinModule
import com.banuba.sdk.audiobrowser.di.AudioBrowserKoinModule
import com.banuba.sdk.audiobrowser.domain.AudioBrowserMusicProvider
import com.banuba.sdk.cameraui.data.CameraConfig
import com.banuba.sdk.core.data.TrackData
import com.banuba.sdk.core.ui.ContentFeatureProvider
import com.banuba.sdk.effectplayer.adapter.BanubaEffectPlayerKoinModule
Expand All @@ -22,7 +23,10 @@ import org.koin.dsl.module

class VideoEditorModule {

fun initialize(application: Application) {
fun initialize(
application: Application,
params: HashMap<String, Any>
) {
startKoin {
androidContext(application)
allowOverride(true)
Expand All @@ -45,7 +49,7 @@ class VideoEditorModule {
GalleryKoinModule().module,

// Sample integration module
SampleIntegrationVeKoinModule().module,
SampleIntegrationVeKoinModule(params).module,
)
}
}
Expand All @@ -57,7 +61,7 @@ class VideoEditorModule {
* Some dependencies has no default implementations. It means that
* these classes fully depends on your requirements
*/
private class SampleIntegrationVeKoinModule {
private class SampleIntegrationVeKoinModule(private val params: HashMap<String, Any>) {

val module = module {
single<ArEffectsRepositoryProvider>(createdAtStart = true) {
Expand All @@ -79,5 +83,25 @@ private class SampleIntegrationVeKoinModule {
AudioBrowserMusicProvider()
}
}

single {
val durations = (params["cameraVideoDurations"] as? List<Any>)?.mapNotNull {
if (it is Number) {
it.toLong()
} else {
null
}
}

if (durations == null) {
val defaultConfig = CameraConfig()
defaultConfig
} else {
CameraConfig(
videoDurations = durations,
maxRecordedTotalVideoDurationMs = durations[0]
)
}
}
}
}
18 changes: 13 additions & 5 deletions ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,19 @@ import BanubaPhotoEditorSDK
let call = methodCall.method
switch call {
case AppDelegate.methodInitVideoEditor:
let token = methodCall.arguments as? String
videoEditor.initVideoEditor(
token: token,
flutterResult: result
)
if let parameters = methodCall.arguments as? [String: Any],
let token = parameters["banubaToken"] as? String,
let durations = parameters["cameraVideoDurations"] as? [Double] {
videoEditor.initVideoEditor(
token: token,
// Convert milliseconds to seconds
videoDurations: durations.map { $0 / 1000 },
flutterResult: result
)
} else {
print("Cannot start video editor: missing token or video durations")
result(FlutterError(code: AppDelegate.errEditorNotInitialized, message: "", details: nil))
}
case AppDelegate.methodStartVideoEditor:
videoEditor.openVideoEditorDefault(
fromViewController: controller,
Expand Down
38 changes: 34 additions & 4 deletions ios/Runner/VideoEditorModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,48 @@ class VideoEditorModule: VideoEditor {
private let restoreLastVideoEditingSession: Bool = false

func initVideoEditor(
token: String?,
token: String,
videoDurations: [TimeInterval],
flutterResult: @escaping FlutterResult
) {
guard videoEditorSDK == nil else {
flutterResult(nil)
return
var config = VideoEditorConfig()
config.videoDurationConfiguration.videoDurations = videoDurations
if let maxDuration = videoDurations.first {
config.videoDurationConfiguration.maximumVideoDuration = maxDuration
}

initVideoEditor(
token: token,
config: config,
flutterResult: flutterResult
)
}

func initVideoEditor(
token: String?,
flutterResult: @escaping FlutterResult
) {
let config = VideoEditorConfig()

// Make customization here

initVideoEditor(
token: token,
config: config,
flutterResult: flutterResult
)
}

func initVideoEditor(
token: String?,
config: VideoEditorConfig,
flutterResult: @escaping FlutterResult
) {
guard videoEditorSDK == nil else {
flutterResult(nil)
return
}

videoEditorSDK = BanubaVideoEditor(
token: token ?? "",
configuration: config,
Expand Down
11 changes: 10 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
Expand Down Expand Up @@ -77,7 +79,14 @@ class _MyHomePageState extends State<MyHomePage> {
}

Future<void> _initVideoEditor() async {
await platformChannel.invokeMethod(methodInitVideoEditor, LICENSE_TOKEN);
// Create params
final params = <String, dynamic>{
'banubaToken': LICENSE_TOKEN,
'cameraVideoDurations': [30000, 20000, 10000, 5000], // 30, 20, 10, 5 seconds
};

// Pass params to platforms
await platformChannel.invokeMethod(methodInitVideoEditor, params);
}

Future<void> _startVideoEditorDefault() async {
Expand Down