Skip to content

Commit b47e1ee

Browse files
committed
setup video editor initial dependencies and modules
1 parent 7c5e9b7 commit b47e1ee

19 files changed

+465
-2
lines changed

app/build.gradle

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
plugins {
22
id 'com.android.application'
33
id 'kotlin-android'
4+
id 'kotlin-android-extensions'
45
}
56

7+
apply from: "../assetsMerger.gradle"
8+
69
android {
710
compileSdkVersion 29
811
buildToolsVersion "29.0.3"
@@ -39,7 +42,30 @@ dependencies {
3942
implementation 'androidx.appcompat:appcompat:1.2.0'
4043
implementation 'com.google.android.material:material:1.2.1'
4144
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
45+
4246
testImplementation 'junit:junit:4.+'
4347
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
4448
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
49+
50+
// loading banuba-effect-player-adapter aar from libs directory
51+
implementation fileTree(dir: "libs", include: ["*.aar"])
52+
53+
def banubaSdkVersion = '1.0.11'
54+
55+
implementation "com.banuba.sdk:camera-sdk:${banubaSdkVersion}"
56+
implementation "com.banuba.sdk:camera-ui-sdk:${banubaSdkVersion}"
57+
implementation "com.banuba.sdk:core-sdk:${banubaSdkVersion}"
58+
implementation "com.banuba.sdk:core-ui-sdk:${banubaSdkVersion}"
59+
implementation "com.banuba.sdk:ve-flow-sdk:${banubaSdkVersion}"
60+
implementation "com.banuba.sdk:ve-timeline-sdk:${banubaSdkVersion}"
61+
implementation "com.banuba.sdk:ve-sdk:${banubaSdkVersion}"
62+
implementation "com.banuba.sdk:ve-ui-sdk:${banubaSdkVersion}"
63+
implementation "com.banuba.sdk:ve-effects-sdk:${banubaSdkVersion}"
64+
65+
implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01'
66+
implementation 'org.koin:koin-androidx-viewmodel:2.1.6'
67+
implementation "androidx.recyclerview:recyclerview-selection:1.1.0-rc03"
68+
implementation "com.airbnb.android:lottie:3.4.0"
69+
implementation "com.github.bumptech.glide:glide:4.11.0"
70+
4571
}
24.2 MB
Binary file not shown.

app/src/main/AndroidManifest.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.banuba.example.integrationapp">
45

56
<application
7+
android:name="com.banuba.example.integrationapp.IntegrationApp"
68
android:allowBackup="true"
79
android:icon="@mipmap/ic_launcher"
810
android:label="@string/app_name"
@@ -16,6 +18,12 @@
1618
<category android:name="android.intent.category.LAUNCHER" />
1719
</intent-filter>
1820
</activity>
21+
<activity
22+
android:name="com.banuba.sdk.ve.flow.VideoCreationActivity"
23+
android:screenOrientation="portrait"
24+
android:theme="@style/VideoCreationTheme"
25+
android:windowSoftInputMode="adjustResize"
26+
tools:replace="android:theme" />
1927
</application>
2028

2129
</manifest>

app/src/main/assets/camera.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"minVideoDuration": 3000,
3+
"maxVideoDuration": 60000,
4+
"takePhotoOnTap": true,
5+
"supportsFlashlight": true,
6+
"supportsMultiRecords": true,
7+
"supportsDurationTimeline": true,
8+
"supportsModeSelection": true,
9+
"supportsSpeedRecording": true,
10+
"supportsExternalMusic": true,
11+
"textOnMaskColorCountOnPage": -1,
12+
"banubaColorEffectsAssetsPath": "luts",
13+
"banubaMasksAssetsPath": "effects",
14+
"banubaMaskBeauty": "Beauty",
15+
"showDebugViews": true,
16+
"supportsMuteMic": true,
17+
"switchFacingOnDoubleTap": true,
18+
"showConfig": true
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"minAudioDurationMs": 100,
3+
"minVoiceRecordingDurationMs": 100,
4+
"musicTimelineCount": 4,
5+
"maxTracks": 10,
6+
"vibrateMusicEffectActionDurationMs": 2
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"objectMaxVisibleTimelineCount": 4,
3+
"objectInitialTimelineCount": 2,
4+
"objectEffectDefaultDurationMs": 2000,
5+
"objectEffectMinDurationMs": 100,
6+
"showObjectEffectsTogether": true,
7+
"vibrateObjectEffectActionDurationMs": 2
8+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"editor": {
3+
"minVideoDuration": 3000,
4+
"maxVideoDuration": 60000,
5+
"supportsTimeEffects": true,
6+
"supportsVisualEffects": true,
7+
"supportsMusicMixer": true,
8+
"supportsCoverImage": true,
9+
"banubaColorEffectsAssetsPath": "luts",
10+
"textOnVideoColorCountOnPage": 6,
11+
"textOnVideoMaxSymbols": -1,
12+
"keepVideoOnExit": true,
13+
"supportsEditorLinkOnVideo": false,
14+
"stickersApiKey": "<-- Paste Giphy key here to load gif images -->",
15+
"showConfig": true,
16+
"interactions": {
17+
"question": true,
18+
"quiz": true,
19+
"interest": true,
20+
"poll": true,
21+
"linkOnVideo": false
22+
}
23+
},
24+
"trimmer": {
25+
"minSourceVideoDuration": 2000,
26+
"supportsMultiChoice": true,
27+
"appearanceThreshold": 0
28+
},
29+
"slideshow": {
30+
"maxSelectedImages": 20,
31+
"animate": true
32+
},
33+
"gallery": {
34+
"supportsMixMediaData": false,
35+
"supportsMultiChoiceByLongTap": false
36+
}
37+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.banuba.example.integrationapp
2+
3+
import android.app.Application
4+
import com.banuba.example.integrationapp.videoeditor.di.VideoeditorKoinModule
5+
import org.koin.android.ext.koin.androidContext
6+
import org.koin.core.context.startKoin
7+
8+
class IntegrationApp : Application() {
9+
10+
override fun onCreate() {
11+
super.onCreate()
12+
startKoin {
13+
androidContext(this@IntegrationApp)
14+
15+
// pass the customized Koin module that implements required dependencies.
16+
modules(VideoeditorKoinModule().module)
17+
}
18+
}
19+
}

app/src/main/java/com/banuba/example/integrationapp/MainActivity.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,36 @@ package com.banuba.example.integrationapp
22

33
import android.os.Bundle
44
import androidx.appcompat.app.AppCompatActivity
5+
import com.banuba.example.integrationapp.videoeditor.IntegrationAppExportVideoContract
6+
import com.banuba.sdk.cameraui.domain.MODE_RECORD_VIDEO
7+
import com.banuba.sdk.ve.flow.VideoCreationActivity
8+
import kotlinx.android.synthetic.main.activity_main.*
59

610
class MainActivity : AppCompatActivity() {
11+
12+
private val createVideoRequest =
13+
registerForActivityResult(IntegrationAppExportVideoContract()) { exportResult ->
14+
exportResult?.let {
15+
//handle ExportResult object
16+
}
17+
}
18+
719
override fun onCreate(savedInstanceState: Bundle?) {
820
super.onCreate(savedInstanceState)
921
setContentView(R.layout.activity_main)
22+
23+
btnVideoEditor.setOnClickListener {
24+
createVideoRequest.launch(
25+
VideoCreationActivity.buildIntent(
26+
context = this,
27+
// setup what kind of action you want to do with VideoCreationActivity
28+
mode = MODE_RECORD_VIDEO,
29+
// setup data that will be acceptable during export flow
30+
additionalExportData = null,
31+
// set TrackData object if you open VideoCreationActivity with preselected music track
32+
audioTrackData = null
33+
)
34+
)
35+
}
1036
}
1137
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.banuba.example.integrationapp.videoeditor
2+
3+
import android.app.Activity
4+
import android.content.Context
5+
import android.content.Intent
6+
import androidx.activity.result.contract.ActivityResultContract
7+
import com.banuba.sdk.veui.ui.EXTRA_EXPORTED_SUCCESS
8+
import com.banuba.sdk.veui.ui.ExportResult
9+
10+
/**
11+
* This class represents parsing result from VideoCreationActivity
12+
*
13+
* ExportResult is an object that holds all necessary data related
14+
* to the video created in VideoCreationActivity
15+
*/
16+
17+
class IntegrationAppExportVideoContract: ActivityResultContract<Intent, ExportResult?>() {
18+
19+
override fun createIntent(context: Context, input: Intent?): Intent {
20+
check(input != null) {
21+
"Can not create Intent to create video"
22+
}
23+
return input
24+
}
25+
26+
override fun parseResult(resultCode: Int, intent: Intent?): ExportResult? {
27+
if (resultCode == Activity.RESULT_OK) {
28+
return intent?.getParcelableExtra(EXTRA_EXPORTED_SUCCESS) as? ExportResult.Success
29+
}
30+
return ExportResult.Inactive
31+
}
32+
33+
}

0 commit comments

Comments
 (0)