react-native-video-trim 5.0.2 → 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/android/src/main/java/com/videotrim/VideoTrimModule.kt +45 -0
- package/android/src/main/java/com/videotrim/utils/MediaMetadataUtil.java +18 -1
- package/android/src/main/java/com/videotrim/utils/StorageUtil.java +6 -0
- package/android/src/main/java/com/videotrim/widgets/VideoTrimmerView.java +1 -1
- package/lib/module/NativeVideoTrim.js.map +1 -1
- package/lib/typescript/src/NativeVideoTrim.d.ts +5 -0
- package/lib/typescript/src/NativeVideoTrim.d.ts.map +1 -1
- package/package.json +2 -5
- package/src/NativeVideoTrim.ts +5 -0
package/README.md
CHANGED
|
@@ -282,6 +282,7 @@ Main method to show Video Editor UI.
|
|
|
282
282
|
- `alertOnFailCloseText` (`default = "Close"`)
|
|
283
283
|
- `enableRotation` (`default = false`)
|
|
284
284
|
- `rotationAngle` (`default = 0`)
|
|
285
|
+
- `changeStatusBarOnOpen` (`default = false`): Update status bar to black background color when editor is opened (useful in somecases where your theme has titlebar in different color than black)
|
|
285
286
|
|
|
286
287
|
If `saveToPhoto = true`, you must ensure that you have request permission to write to photo/gallery
|
|
287
288
|
- For Android: you need to have `<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />` in AndroidManifest.xml
|
|
@@ -10,12 +10,15 @@ import android.content.DialogInterface
|
|
|
10
10
|
import android.content.Intent
|
|
11
11
|
import android.content.pm.PackageManager
|
|
12
12
|
import android.content.res.ColorStateList
|
|
13
|
+
import android.graphics.Color
|
|
13
14
|
import android.os.Build
|
|
14
15
|
import android.util.Log
|
|
15
16
|
import android.util.TypedValue
|
|
16
17
|
import android.view.Gravity
|
|
17
18
|
import android.view.View
|
|
18
19
|
import android.view.ViewGroup
|
|
20
|
+
import android.view.Window
|
|
21
|
+
import android.view.WindowManager
|
|
19
22
|
import android.widget.Button
|
|
20
23
|
import android.widget.LinearLayout
|
|
21
24
|
import android.widget.ProgressBar
|
|
@@ -58,6 +61,7 @@ class VideoTrimModule(reactContext: ReactApplicationContext) :
|
|
|
58
61
|
private var isVideoType = true
|
|
59
62
|
private var editorConfig: ReadableMap? = null
|
|
60
63
|
private var trimOptions: ReadableMap? = null
|
|
64
|
+
private var originalStatusBarColor: Int = Color.TRANSPARENT
|
|
61
65
|
|
|
62
66
|
init {
|
|
63
67
|
val mActivityEventListener = object : BaseActivityEventListener() {
|
|
@@ -160,6 +164,40 @@ class VideoTrimModule(reactContext: ReactApplicationContext) :
|
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
alertDialog?.show()
|
|
167
|
+
|
|
168
|
+
if (shouldChangeStatusBarOnOpen) {
|
|
169
|
+
changeStatusBarColor()
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private fun changeStatusBarColor() {
|
|
175
|
+
val window = reactApplicationContext.currentActivity?.window
|
|
176
|
+
window?.let {
|
|
177
|
+
// Store the original color
|
|
178
|
+
originalStatusBarColor = it.statusBarColor
|
|
179
|
+
|
|
180
|
+
// 2. Clear flags and set the new color
|
|
181
|
+
it.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
|
182
|
+
|
|
183
|
+
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
|
|
184
|
+
it.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
|
185
|
+
|
|
186
|
+
// finally change the color
|
|
187
|
+
it.statusBarColor = ContextCompat.getColor(reactApplicationContext.currentActivity!!,R.color.black)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private fun restoreStatusBarColor() {
|
|
192
|
+
val window = reactApplicationContext.currentActivity?.window
|
|
193
|
+
window?.let {
|
|
194
|
+
// 1. Restore the color to the previously stored value
|
|
195
|
+
it.statusBarColor = originalStatusBarColor
|
|
196
|
+
|
|
197
|
+
// 2. restore flags to their previous state
|
|
198
|
+
// For most cases, just setting the color is enough.
|
|
199
|
+
it.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
|
200
|
+
it.clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
|
|
163
201
|
}
|
|
164
202
|
}
|
|
165
203
|
|
|
@@ -472,6 +510,10 @@ class VideoTrimModule(reactContext: ReactApplicationContext) :
|
|
|
472
510
|
alertDialog = null
|
|
473
511
|
}
|
|
474
512
|
}
|
|
513
|
+
|
|
514
|
+
if (shouldChangeStatusBarOnOpen) {
|
|
515
|
+
restoreStatusBarColor()
|
|
516
|
+
}
|
|
475
517
|
}
|
|
476
518
|
|
|
477
519
|
// private fun sendEvent(
|
|
@@ -652,6 +694,9 @@ class VideoTrimModule(reactContext: ReactApplicationContext) :
|
|
|
652
694
|
reactApplicationContext.currentActivity?.startActivity(Intent.createChooser(shareIntent, "Share file"))
|
|
653
695
|
}
|
|
654
696
|
|
|
697
|
+
val shouldChangeStatusBarOnOpen: Boolean
|
|
698
|
+
get() = editorConfig?.hasKey("changeStatusBarOnOpen") == true && editorConfig?.getBoolean("changeStatusBarOnOpen") == true
|
|
699
|
+
|
|
655
700
|
companion object {
|
|
656
701
|
const val NAME = "VideoTrim"
|
|
657
702
|
const val TAG = "VideoTrimModule"
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
package com.videotrim.utils;
|
|
2
2
|
|
|
3
3
|
import android.media.MediaMetadataRetriever;
|
|
4
|
+
import android.net.Uri;
|
|
4
5
|
import android.util.Log;
|
|
5
6
|
|
|
7
|
+
import java.io.File;
|
|
6
8
|
import java.io.IOException;
|
|
7
9
|
import java.util.HashMap;
|
|
8
10
|
|
|
@@ -17,7 +19,22 @@ public class MediaMetadataUtil {
|
|
|
17
19
|
if (source.startsWith("http://") || source.startsWith("https://")) {
|
|
18
20
|
retriever.setDataSource(source, new HashMap<>());
|
|
19
21
|
} else {
|
|
20
|
-
|
|
22
|
+
String filePath = source;
|
|
23
|
+
|
|
24
|
+
// if "source" is not a valid file path, try to parse it as a URI
|
|
25
|
+
if (!StorageUtil.isFileExists(filePath)) {
|
|
26
|
+
Log.e(TAG, "File does not exist, trying to parse as URI: " + source);
|
|
27
|
+
|
|
28
|
+
Uri uri = Uri.parse(source);
|
|
29
|
+
filePath = uri.getPath();
|
|
30
|
+
|
|
31
|
+
if (!StorageUtil.isFileExists(filePath)) {
|
|
32
|
+
Log.e(TAG, "File does not exist at path: " + filePath);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
retriever.setDataSource(filePath);
|
|
21
38
|
}
|
|
22
39
|
return retriever;
|
|
23
40
|
} catch (Exception e) {
|
|
@@ -27,6 +27,12 @@ public class StorageUtil {
|
|
|
27
27
|
return file.getAbsolutePath();
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
public static boolean isFileExists(String filePath) {
|
|
31
|
+
if (TextUtils.isEmpty(filePath)) return false;
|
|
32
|
+
File file = new File(filePath);
|
|
33
|
+
return file.exists();
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
public static String[] listFiles(Context context) {
|
|
31
37
|
File filesDir = context.getFilesDir();
|
|
32
38
|
File[] files = filesDir.listFiles((dir, name) -> name.startsWith(VideoTrimmerUtil.FILE_PREFIX));
|
|
@@ -270,7 +270,7 @@ public class VideoTrimmerView extends FrameLayout implements IVideoTrimmerView {
|
|
|
270
270
|
|
|
271
271
|
VideoTrimmerUtil.SCREEN_WIDTH_FULL = this.getScreenWidthInPortraitMode();
|
|
272
272
|
VideoTrimmerUtil.VIDEO_FRAMES_WIDTH = VideoTrimmerUtil.SCREEN_WIDTH_FULL - RECYCLER_VIEW_PADDING * 2;
|
|
273
|
-
VideoTrimmerUtil.MAX_COUNT_RANGE = Math.max((VIDEO_FRAMES_WIDTH / VideoTrimmerUtil.mThumbWidth), VideoTrimmerUtil.MAX_COUNT_RANGE);
|
|
273
|
+
VideoTrimmerUtil.MAX_COUNT_RANGE = VideoTrimmerUtil.mThumbWidth != 0 ? Math.max((VIDEO_FRAMES_WIDTH / VideoTrimmerUtil.mThumbWidth), VideoTrimmerUtil.MAX_COUNT_RANGE) : VideoTrimmerUtil.MAX_COUNT_RANGE;
|
|
274
274
|
|
|
275
275
|
startShootVideoThumbs(mContext, VideoTrimmerUtil.MAX_COUNT_RANGE, 0, mDuration);
|
|
276
276
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVideoTrim.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVideoTrim.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAoHlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
|
|
@@ -50,6 +50,11 @@ export interface EditorConfig extends BaseOptions {
|
|
|
50
50
|
alertOnFailTitle: string;
|
|
51
51
|
alertOnFailMessage: string;
|
|
52
52
|
alertOnFailCloseText: string;
|
|
53
|
+
/**
|
|
54
|
+
* Android only
|
|
55
|
+
* Update status bar to black background color when editor is opened
|
|
56
|
+
*/
|
|
57
|
+
changeStatusBarOnOpen?: boolean;
|
|
53
58
|
}
|
|
54
59
|
export interface TrimOptions extends BaseOptions {
|
|
55
60
|
startTime: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeVideoTrim.d.ts","sourceRoot":"","sources":["../../../src/NativeVideoTrim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,uBAAuB,EAAE,OAAO,CAAC;IACjC,4BAA4B,EAAE,OAAO,CAAC;IACtC,2BAA2B,EAAE,OAAO,CAAC;IACrC,gCAAgC,EAAE,OAAO,CAAC;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,wBAAwB,EAAE,OAAO,CAAC;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,OAAO,CAAC;IACpC,yBAAyB,EAAE,MAAM,CAAC;IAClC,2BAA2B,EAAE,MAAM,CAAC;IACpC,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeVideoTrim.d.ts","sourceRoot":"","sources":["../../../src/NativeVideoTrim.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-video-trim",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "Video trimmer for your React Native app",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -88,10 +88,7 @@
|
|
|
88
88
|
"react": "*",
|
|
89
89
|
"react-native": "*"
|
|
90
90
|
},
|
|
91
|
-
"
|
|
92
|
-
"example"
|
|
93
|
-
],
|
|
94
|
-
"packageManager": "yarn@3.6.1",
|
|
91
|
+
"packageManager": "yarn@1.2.2",
|
|
95
92
|
"jest": {
|
|
96
93
|
"preset": "react-native",
|
|
97
94
|
"modulePathIgnorePatterns": [
|
package/src/NativeVideoTrim.ts
CHANGED
|
@@ -53,6 +53,11 @@ export interface EditorConfig extends BaseOptions {
|
|
|
53
53
|
alertOnFailTitle: string;
|
|
54
54
|
alertOnFailMessage: string;
|
|
55
55
|
alertOnFailCloseText: string;
|
|
56
|
+
/**
|
|
57
|
+
* Android only
|
|
58
|
+
* Update status bar to black background color when editor is opened
|
|
59
|
+
*/
|
|
60
|
+
changeStatusBarOnOpen?: boolean;
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
export interface TrimOptions extends BaseOptions {
|