diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 05f713d..6b57243 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,7 +21,7 @@
diff --git a/app/src/main/assets/bnb-resources/luts/C1.png b/app/src/main/assets/bnb-resources/luts/C1.png
new file mode 100644
index 0000000..2154a9f
Binary files /dev/null and b/app/src/main/assets/bnb-resources/luts/C1.png differ
diff --git a/app/src/main/assets/bnb-resources/luts/C2.png b/app/src/main/assets/bnb-resources/luts/C2.png
new file mode 100644
index 0000000..a8c7b97
Binary files /dev/null and b/app/src/main/assets/bnb-resources/luts/C2.png differ
diff --git a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/CustomRecordingAnimationProvider.kt b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/CustomRecordingAnimationProvider.kt
new file mode 100644
index 0000000..4cea266
--- /dev/null
+++ b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/CustomRecordingAnimationProvider.kt
@@ -0,0 +1,73 @@
+package com.banuba.example.integrationapp.videoeditor.custom
+
+import android.content.Context
+import android.view.ViewGroup
+import com.banuba.example.integrationapp.R
+import com.banuba.example.integrationapp.videoeditor.custom.widget.CustomRecordingButtonView
+import com.banuba.sdk.cameraui.data.CameraRecordingAnimationProvider
+import com.banuba.sdk.core.ui.ext.dimenPx
+
+class CustomRecordingAnimationProvider (context: Context) : CameraRecordingAnimationProvider {
+
+ private val animationView = CustomRecordingButtonView(context).apply {
+ val defaultButtonSize = context.dimenPx(R.dimen.record_button_size)
+ layoutParams = ViewGroup.LayoutParams(defaultButtonSize, defaultButtonSize)
+ isFocusable = true
+ isClickable = true
+ }
+
+ private var onEndTakenPictureAnimationCallback: () -> Unit = {}
+ private var onStartRecordingAnimationCallback: () -> Unit = {}
+ private var onEndRecordingAnimationCallback: () -> Unit = {}
+
+ override fun provideView() = animationView
+
+ override fun setOnStartRecordingAnimationCallback(callback: () -> Unit) {
+ onStartRecordingAnimationCallback = callback
+ }
+
+ override fun setOnEndRecordingAnimationCallback(callback: () -> Unit) {
+ onEndRecordingAnimationCallback = callback
+ }
+
+ override fun setOnEndTakenPictureAnimationCallback(callback: () -> Unit) {
+ onEndTakenPictureAnimationCallback = callback
+ }
+
+ override fun animatePauseRecording() {
+ animationView.pauseAnimation()
+ }
+
+ override fun animateResumeRecording() {
+ animationView.resumeAnimation()
+ }
+
+ override fun setRecordingPhotoState(state: CameraRecordingAnimationProvider.PhotoState) {
+ when (state) {
+ CameraRecordingAnimationProvider.PhotoState.Idle -> animationView.reset()
+ CameraRecordingAnimationProvider.PhotoState.Capture -> animationView.animateTakePhoto {
+ onEndTakenPictureAnimationCallback()
+ }
+ }
+ }
+
+ override fun setRecordingVideoState(state: CameraRecordingAnimationProvider.VideoState) {
+ when (state) {
+ is CameraRecordingAnimationProvider.VideoState.Idle -> animationView.reset()
+ is CameraRecordingAnimationProvider.VideoState.StartRecord -> {
+ if (state.availableDurationMs <= 0) return
+ animationView.animateStartVideoRecord(
+ availableDurationMs = state.availableDurationMs,
+ maxDurationMs = state.maxDurationMs
+ ) {
+ onStartRecordingAnimationCallback()
+ }
+ }
+ is CameraRecordingAnimationProvider.VideoState.StopRecord -> {
+ animationView.animateStopVideoRecord {
+ onEndRecordingAnimationCallback()
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/content/GlideImageLoader.kt b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/GlideImageLoader.kt
similarity index 98%
rename from app/src/main/java/com/banuba/example/integrationapp/videoeditor/content/GlideImageLoader.kt
rename to app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/GlideImageLoader.kt
index 1edfa76..bfab6bd 100644
--- a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/content/GlideImageLoader.kt
+++ b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/GlideImageLoader.kt
@@ -1,4 +1,4 @@
-package com.banuba.example.integrationapp.videoeditor.content
+package com.banuba.example.integrationapp.videoeditor.custom
import android.app.Activity
import android.content.Context
diff --git a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonOuterView.kt b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonOuterView.kt
new file mode 100644
index 0000000..bbd68ad
--- /dev/null
+++ b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonOuterView.kt
@@ -0,0 +1,124 @@
+package com.banuba.example.integrationapp.videoeditor.custom.widget
+
+import android.animation.ValueAnimator
+import android.content.Context
+import android.graphics.*
+import android.util.AttributeSet
+import android.view.View
+import android.view.animation.LinearInterpolator
+import com.banuba.example.integrationapp.R
+import com.banuba.sdk.core.ui.ext.dimen
+
+class CustomRecordingButtonOuterView @JvmOverloads constructor(
+ context: Context,
+ attr: AttributeSet? = null,
+ defStyle: Int = 0
+) : View(context, attr, defStyle) {
+
+ companion object {
+ private const val ANGLE_END = 360F
+ private const val ANGLE_START = 0F
+ private const val INIT_VIEW_ROTATION = -90F
+ }
+
+ private var circleWidth = context.dimen(R.dimen.record_button_circle_idle_width)
+ set(value) {
+ field = value
+ gradientPaint.strokeWidth = value
+ whitePaint.strokeWidth = value
+ isDrawAreaMeasured = false
+ }
+ private val circleColors = context.resources.getIntArray(R.array.progress_gradient_colors)
+ private var circleDrawArea = RectF()
+
+ private var isDrawAreaMeasured = false
+
+ private val gradientPaint by lazy(LazyThreadSafetyMode.NONE) {
+ Paint().apply {
+ isAntiAlias = true
+ style = Paint.Style.STROKE
+ strokeWidth = circleWidth
+ shader = SweepGradient(
+ measuredWidth.toFloat() / 2,
+ measuredHeight.toFloat() / 2,
+ circleColors,
+ null
+ )
+ }
+ }
+ private val whitePaint by lazy(LazyThreadSafetyMode.NONE) {
+ Paint().apply {
+ color = Color.WHITE
+ isAntiAlias = true
+ style = Paint.Style.STROKE
+ strokeWidth = circleWidth
+ }
+ }
+
+ private var gradientSweepAngle = 0F
+
+ private val animator = ValueAnimator().apply {
+ repeatCount = 0
+ setFloatValues(ANGLE_START, ANGLE_END)
+ interpolator = LinearInterpolator()
+ addUpdateListener {
+ gradientSweepAngle = it.animatedValue as Float
+ invalidate()
+ }
+ }
+
+ init {
+ // Because 0 degrees angle correspond to 3 o'clock on a watch
+ rotation = INIT_VIEW_ROTATION
+ }
+
+ override fun onDraw(canvas: Canvas) {
+ if (!isDrawAreaMeasured) {
+ isDrawAreaMeasured = true
+ circleDrawArea = RectF(
+ 0f + circleWidth,
+ 0f + circleWidth,
+ measuredWidth.toFloat() - circleWidth,
+ measuredHeight.toFloat() - circleWidth
+ )
+ }
+ with(canvas) {
+ save()
+ rotate(gradientSweepAngle, measuredWidth.toFloat() / 2, measuredHeight.toFloat() / 2)
+ drawArc(circleDrawArea, ANGLE_START, ANGLE_END, false, gradientPaint)
+ restore()
+ drawArc(
+ circleDrawArea,
+ gradientSweepAngle,
+ ANGLE_END - gradientSweepAngle,
+ false,
+ whitePaint
+ )
+ }
+ }
+
+ fun startAnimation(
+ availableDurationMs: Long,
+ maxDurationMs: Long
+ ) {
+ circleWidth = context.dimen(R.dimen.record_button_circle_progress_width)
+ animator.duration = maxDurationMs
+ animator.cancel()
+ animator.currentPlayTime = maxDurationMs - availableDurationMs
+ }
+
+ fun stopAnimation() {
+ circleWidth = context.dimen(R.dimen.record_button_circle_idle_width)
+ animator.cancel()
+ gradientSweepAngle = 0F
+ invalidate()
+ }
+
+ fun pauseAnimation() {
+ animator.pause()
+ }
+
+ fun resumeAnimation() {
+ animator.start()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonView.kt b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonView.kt
new file mode 100644
index 0000000..73d2f06
--- /dev/null
+++ b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/custom/widget/CustomRecordingButtonView.kt
@@ -0,0 +1,196 @@
+package com.banuba.example.integrationapp.videoeditor.custom.widget
+
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
+import android.animation.PropertyValuesHolder
+import android.animation.ValueAnimator
+import android.content.Context
+import android.util.AttributeSet
+import android.view.Gravity
+import android.view.View
+import android.view.animation.LinearInterpolator
+import android.widget.FrameLayout
+import androidx.core.animation.doOnEnd
+import com.banuba.example.integrationapp.R
+import com.banuba.sdk.core.ui.ext.dimenPx
+import com.banuba.sdk.veui.ui.widget.animator.ReverseInterpolator
+
+class CustomRecordingButtonView @JvmOverloads constructor(
+ context: Context,
+ attributeSet: AttributeSet? = null,
+ defStyleAttrs: Int = 0
+) : FrameLayout(context, attributeSet, defStyleAttrs) {
+
+ companion object {
+
+ private const val DEFAULT_DURATION_MS = 300L
+ private const val FINISH_RECORD_DELAY = 200L
+
+ private const val PHOTO_SHOOT_ANIMATION_SCALE_START = 1F
+ private const val PHOTO_SHOOT_ANIMATION_SCALE_END = 0.875F
+
+ private const val VIDEO_SHOOT_INNER_ANIMATION_SCALE_START = 1F
+ private const val VIDEO_SHOOT_INNER_ANIMATION_SCALE_END = 0F
+
+ private const val VIDEO_SHOOT_INNER_ANIMATION_REPEAT_COUNT = 0
+
+ private const val PHOTO_SHOOT_OUTER_ANIMATION_START = 1F
+ private const val PHOTO_SHOOT_OUTER_ANIMATION_END = 1.5F
+ }
+
+ private val outerPart = CustomRecordingButtonOuterView(context)
+
+ private val innerOvalPart = View(context).apply {
+ setBackgroundResource(R.drawable.bg_record_button_inner_oval)
+ elevation = context.dimenPx(R.dimen.record_button_elevation).toFloat()
+ }
+ private val innerSquarePart = View(context).apply {
+ val size = context.dimenPx(R.dimen.record_button_inner_part_size)
+ layoutParams = LayoutParams(size, size).apply {
+ gravity = Gravity.CENTER
+ }
+ setBackgroundResource(R.drawable.bg_record_button_inner_square)
+ elevation = context.dimenPx(R.dimen.record_button_elevation).toFloat()
+ }
+
+ private val photoShootAnimation = ObjectAnimator.ofPropertyValuesHolder(
+ innerOvalPart,
+ PropertyValuesHolder.ofFloat(
+ "scaleX",
+ PHOTO_SHOOT_ANIMATION_SCALE_START,
+ PHOTO_SHOOT_ANIMATION_SCALE_END
+ ),
+ PropertyValuesHolder.ofFloat(
+ "scaleY",
+ PHOTO_SHOOT_ANIMATION_SCALE_START,
+ PHOTO_SHOOT_ANIMATION_SCALE_END
+ )
+ ).apply {
+ duration = DEFAULT_DURATION_MS
+ repeatCount = 1
+ repeatMode = ValueAnimator.REVERSE
+ }
+
+ private val videoShootInnerAnimation = AnimatorSet().apply {
+ val ovalAnim = ObjectAnimator.ofPropertyValuesHolder(
+ innerOvalPart,
+ PropertyValuesHolder.ofFloat(
+ "scaleX",
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_START,
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_END
+ ),
+ PropertyValuesHolder.ofFloat(
+ "scaleY",
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_START,
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_END
+ )
+ ).apply {
+ duration = DEFAULT_DURATION_MS
+ repeatCount = VIDEO_SHOOT_INNER_ANIMATION_REPEAT_COUNT
+ }
+ val squareAnim = ObjectAnimator.ofPropertyValuesHolder(
+ innerSquarePart,
+ PropertyValuesHolder.ofFloat(
+ "scaleX",
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_END,
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_START
+ ),
+ PropertyValuesHolder.ofFloat(
+ "scaleY",
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_END,
+ VIDEO_SHOOT_INNER_ANIMATION_SCALE_START
+ )
+ ).apply {
+ duration = DEFAULT_DURATION_MS
+ repeatCount = VIDEO_SHOOT_INNER_ANIMATION_REPEAT_COUNT
+ }
+ playTogether(ovalAnim, squareAnim)
+ }
+ private val videoShootOuterAnimation = AnimatorSet().apply {
+ val circleAnim = ObjectAnimator.ofPropertyValuesHolder(
+ outerPart,
+ PropertyValuesHolder.ofFloat(
+ "scaleX",
+ PHOTO_SHOOT_OUTER_ANIMATION_START,
+ PHOTO_SHOOT_OUTER_ANIMATION_END
+ ),
+ PropertyValuesHolder.ofFloat(
+ "scaleY",
+ PHOTO_SHOOT_OUTER_ANIMATION_START,
+ PHOTO_SHOOT_OUTER_ANIMATION_END
+ )
+ ).apply {
+ duration = DEFAULT_DURATION_MS
+ repeatCount = 0
+ }
+ playTogether(circleAnim)
+ }
+
+ init {
+ val outerPartSize = context.dimenPx(R.dimen.record_button_progress_size)
+ addView(outerPart, LayoutParams(outerPartSize, outerPartSize).apply {
+ gravity = Gravity.CENTER
+ })
+ addView(innerSquarePart)
+ addView(innerOvalPart)
+ }
+
+ fun reset() {
+ photoShootAnimation.cancel()
+ videoShootInnerAnimation.cancel()
+ }
+
+ fun animateTakePhoto(onEndCallback: () -> Unit) {
+ with(photoShootAnimation) {
+ doOnEnd { onEndCallback() }
+ start()
+ }
+ }
+
+ fun animateStartVideoRecord(
+ availableDurationMs: Long,
+ maxDurationMs: Long,
+ onEndCallback: () -> Unit
+ ) {
+ outerPart.startAnimation(
+ availableDurationMs = availableDurationMs,
+ maxDurationMs = maxDurationMs
+ )
+ with(videoShootInnerAnimation) {
+ interpolator = LinearInterpolator()
+ removeAllListeners()
+ doOnEnd { onEndCallback() }
+ start()
+ }
+ with(videoShootOuterAnimation) {
+ interpolator = LinearInterpolator()
+ start()
+ }
+ }
+
+ fun animateStopVideoRecord(onEndCallback: () -> Unit) {
+ outerPart.stopAnimation()
+ with(videoShootInnerAnimation) {
+ interpolator = ReverseInterpolator()
+ removeAllListeners()
+ doOnEnd {
+ postDelayed({
+ onEndCallback()
+ }, FINISH_RECORD_DELAY)
+ }
+ start()
+ }
+ with(videoShootOuterAnimation) {
+ interpolator = ReverseInterpolator()
+ start()
+ }
+ }
+
+ fun pauseAnimation() {
+ outerPart.pauseAnimation()
+ }
+
+ fun resumeAnimation() {
+ outerPart.resumeAnimation()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/di/VideoeditorKoinModule.kt b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/di/VideoeditorKoinModule.kt
index d0355ad..2b37822 100644
--- a/app/src/main/java/com/banuba/example/integrationapp/videoeditor/di/VideoeditorKoinModule.kt
+++ b/app/src/main/java/com/banuba/example/integrationapp/videoeditor/di/VideoeditorKoinModule.kt
@@ -6,9 +6,11 @@ import android.view.View
import androidx.fragment.app.Fragment
import com.banuba.android.sdk.camera.BanubaCameraSdkManager
import com.banuba.android.sdk.camera.CameraSdkManager
-import com.banuba.example.integrationapp.videoeditor.content.GlideImageLoader
+import com.banuba.example.integrationapp.videoeditor.custom.CustomRecordingAnimationProvider
+import com.banuba.example.integrationapp.videoeditor.custom.GlideImageLoader
import com.banuba.example.integrationapp.videoeditor.export.IntegrationAppExportFlowManager
import com.banuba.example.integrationapp.videoeditor.export.IntegrationAppExportResultHandler
+import com.banuba.sdk.cameraui.data.CameraRecordingAnimationProvider
import com.banuba.sdk.core.AREffectPlayerProvider
import com.banuba.sdk.core.IUtilityManager
import com.banuba.sdk.core.domain.ImageLoader
@@ -77,4 +79,12 @@ class VideoeditorKoinModule : FlowEditorModule() {
}
}
+ /**
+ * Override it to customize recording button view and setup custom animation to it
+ */
+ override val cameraRecordingAnimationProvider: BeanDefinition =
+ factory(override = true) {
+ CustomRecordingAnimationProvider(context = get())
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_alert_negative_button.xml b/app/src/main/res/drawable/bg_alert_negative_button.xml
new file mode 100644
index 0000000..71bf16e
--- /dev/null
+++ b/app/src/main/res/drawable/bg_alert_negative_button.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_alert_positive_button.xml b/app/src/main/res/drawable/bg_alert_positive_button.xml
new file mode 100644
index 0000000..4b6bb16
--- /dev/null
+++ b/app/src/main/res/drawable/bg_alert_positive_button.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_btn_next.xml b/app/src/main/res/drawable/bg_btn_next.xml
new file mode 100644
index 0000000..7c10310
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_next.xml
@@ -0,0 +1,26 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
-
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_effect_normal.xml b/app/src/main/res/drawable/bg_effect_normal.xml
new file mode 100644
index 0000000..00043ac
--- /dev/null
+++ b/app/src/main/res/drawable/bg_effect_normal.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_gallery_button.xml b/app/src/main/res/drawable/bg_gallery_button.xml
new file mode 100644
index 0000000..e02e414
--- /dev/null
+++ b/app/src/main/res/drawable/bg_gallery_button.xml
@@ -0,0 +1,26 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_progress_view.xml b/app/src/main/res/drawable/bg_progress_view.xml
new file mode 100644
index 0000000..395b6d4
--- /dev/null
+++ b/app/src/main/res/drawable/bg_progress_view.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_record_button_inner_oval.xml b/app/src/main/res/drawable/bg_record_button_inner_oval.xml
new file mode 100644
index 0000000..e9e973e
--- /dev/null
+++ b/app/src/main/res/drawable/bg_record_button_inner_oval.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_record_button_inner_square.xml b/app/src/main/res/drawable/bg_record_button_inner_square.xml
new file mode 100644
index 0000000..5694fe0
--- /dev/null
+++ b/app/src/main/res/drawable/bg_record_button_inner_square.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_speed_option_item.xml b/app/src/main/res/drawable/bg_speed_option_item.xml
new file mode 100644
index 0000000..e6a33a1
--- /dev/null
+++ b/app/src/main/res/drawable/bg_speed_option_item.xml
@@ -0,0 +1,15 @@
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_toast.xml b/app/src/main/res/drawable/bg_toast.xml
new file mode 100644
index 0000000..1a13d15
--- /dev/null
+++ b/app/src/main/res/drawable/bg_toast.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/c1.png b/app/src/main/res/drawable/c1.png
new file mode 100644
index 0000000..5dfc82a
Binary files /dev/null and b/app/src/main/res/drawable/c1.png differ
diff --git a/app/src/main/res/drawable/c2.png b/app/src/main/res/drawable/c2.png
new file mode 100644
index 0000000..f8b0240
Binary files /dev/null and b/app/src/main/res/drawable/c2.png differ
diff --git a/app/src/main/res/drawable/ic_audio.xml b/app/src/main/res/drawable/ic_audio.xml
new file mode 100644
index 0000000..5183e19
--- /dev/null
+++ b/app/src/main/res/drawable/ic_audio.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_audio_on.xml b/app/src/main/res/drawable/ic_audio_on.xml
new file mode 100644
index 0000000..5988b8a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_audio_on.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_beauty.xml b/app/src/main/res/drawable/ic_beauty.xml
new file mode 100644
index 0000000..4085e23
--- /dev/null
+++ b/app/src/main/res/drawable/ic_beauty.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_beauty_on.xml b/app/src/main/res/drawable/ic_beauty_on.xml
new file mode 100644
index 0000000..c22bfaf
--- /dev/null
+++ b/app/src/main/res/drawable/ic_beauty_on.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_cam_back.xml b/app/src/main/res/drawable/ic_cam_back.xml
new file mode 100644
index 0000000..2ade0de
--- /dev/null
+++ b/app/src/main/res/drawable/ic_cam_back.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_cam_front.xml b/app/src/main/res/drawable/ic_cam_front.xml
new file mode 100644
index 0000000..3e6963d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_cam_front.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_delete_videopart.xml b/app/src/main/res/drawable/ic_delete_videopart.xml
new file mode 100644
index 0000000..34de4b4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete_videopart.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_filters.xml b/app/src/main/res/drawable/ic_filters.xml
new file mode 100644
index 0000000..345b2ac
--- /dev/null
+++ b/app/src/main/res/drawable/ic_filters.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_filters_on.xml b/app/src/main/res/drawable/ic_filters_on.xml
new file mode 100644
index 0000000..1650482
--- /dev/null
+++ b/app/src/main/res/drawable/ic_filters_on.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_flash.xml b/app/src/main/res/drawable/ic_flash.xml
new file mode 100644
index 0000000..8e0de77
--- /dev/null
+++ b/app/src/main/res/drawable/ic_flash.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_flash_on.xml b/app/src/main/res/drawable/ic_flash_on.xml
new file mode 100644
index 0000000..64a3233
--- /dev/null
+++ b/app/src/main/res/drawable/ic_flash_on.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_masks.xml b/app/src/main/res/drawable/ic_masks.xml
new file mode 100644
index 0000000..bd984b6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_masks.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_masks_on.xml b/app/src/main/res/drawable/ic_masks_on.xml
new file mode 100644
index 0000000..68722a3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_masks_on.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_mic.xml b/app/src/main/res/drawable/ic_mic.xml
new file mode 100644
index 0000000..39220f4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_mic.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_mic_off.xml b/app/src/main/res/drawable/ic_mic_off.xml
new file mode 100644
index 0000000..8a4bdca
--- /dev/null
+++ b/app/src/main/res/drawable/ic_mic_off.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_nav_back_arrow.xml b/app/src/main/res/drawable/ic_nav_back_arrow.xml
new file mode 100644
index 0000000..8c65f64
--- /dev/null
+++ b/app/src/main/res/drawable/ic_nav_back_arrow.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_nav_close.xml b/app/src/main/res/drawable/ic_nav_close.xml
new file mode 100644
index 0000000..7d0549f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_nav_close.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_speed_0_5x.xml b/app/src/main/res/drawable/ic_speed_0_5x.xml
new file mode 100644
index 0000000..495cfa4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_speed_0_5x.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_speed_1x.xml b/app/src/main/res/drawable/ic_speed_1x.xml
new file mode 100644
index 0000000..f64e029
--- /dev/null
+++ b/app/src/main/res/drawable/ic_speed_1x.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_speed_2x.xml b/app/src/main/res/drawable/ic_speed_2x.xml
new file mode 100644
index 0000000..810d145
--- /dev/null
+++ b/app/src/main/res/drawable/ic_speed_2x.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_speed_3x.xml b/app/src/main/res/drawable/ic_speed_3x.xml
new file mode 100644
index 0000000..bb3e10d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_speed_3x.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_stopwatch_off.xml b/app/src/main/res/drawable/ic_stopwatch_off.xml
new file mode 100644
index 0000000..84b8f8f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_stopwatch_off.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_stopwatch_on.xml b/app/src/main/res/drawable/ic_stopwatch_on.xml
new file mode 100644
index 0000000..2fe3de9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_stopwatch_on.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_dialog_alert.xml b/app/src/main/res/layout/fragment_dialog_alert.xml
new file mode 100644
index 0000000..00345a7
--- /dev/null
+++ b/app/src/main/res/layout/fragment_dialog_alert.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
deleted file mode 100644
index 8ccbad5..0000000
--- a/app/src/main/res/values-night/themes.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f8c6127..18b2f75 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,10 +1,18 @@
- #FFBB86FC
- #FF6200EE
- #FF3700B3
- #FF03DAC5
- #FF018786
#FF000000
#FFFFFFFF
+
+
+ #06BCC1
+ #6606BCC1
+ #12263A
+ #FA3E76
+ #E3E9F1
+
+
+ - @color/egg_blue
+ - @color/white
+ - @color/egg_blue
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..55f160e
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ 96dp
+ 40dp
+ 82dp
+ 3dp
+ 5dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index c70998f..6c8dee3 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,16 +1,250 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file