diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
deleted file mode 100644
index 4102901..0000000
--- a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class WaterImageFileProvider extends FileProvider {
-}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
deleted file mode 100644
index 4102901..0000000
--- a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class WaterImageFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
new file mode 100644
index 0000000..a0329b5
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class CompressVideoFileProvider extends FileProvider {
+}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
deleted file mode 100644
index 4102901..0000000
--- a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class WaterImageFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
new file mode 100644
index 0000000..a0329b5
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class CompressVideoFileProvider extends FileProvider {
+}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
new file mode 100644
index 0000000..7f2aa50
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class VersionUpgradeFileProvider extends FileProvider {
+}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
deleted file mode 100644
index 4102901..0000000
--- a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class WaterImageFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
new file mode 100644
index 0000000..a0329b5
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class CompressVideoFileProvider extends FileProvider {
+}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
new file mode 100644
index 0000000..7f2aa50
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class VersionUpgradeFileProvider extends FileProvider {
+}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java
new file mode 100644
index 0000000..afa4fe2
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class WaterImageFileProvider extends FileProvider {
+}
diff --git a/app/build.gradle b/app/build.gradle
index b8c1a8b..f5edb66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@
applicationId "com.casic.dcms"
minSdkVersion 21
targetSdkVersion 30
- versionCode 14
- versionName "v1.0.0.6"
+ versionCode 15
+ versionName "v1.0.0.7"
ndk { abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86" }
@@ -90,8 +90,9 @@
//上拉加载下拉刷新
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
//视频压缩
- implementation 'com.iceteck.silicompressorr:silicompressor:2.2.4'
- implementation 'com.googlecode.mp4parser:isoparser:1.1.22'
+ implementation 'com.zolad:videoslimmer:1.0.0'
+ //exo播放内核
+ implementation 'com.google.android.exoplayer:exoplayer:2.13.2'
//问题跟踪
implementation 'com.tencent.bugly:crashreport:3.3.92'
//ZBar扫一扫(综合Java和C++扫码)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02c6eb1..28822e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -72,7 +72,7 @@
-
+
@@ -135,7 +135,7 @@
@@ -144,9 +144,20 @@
android:resource="@xml/file_paths" />
+
+
+
+
+
diff --git a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
index fbee6b8..f37457c 100644
--- a/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/BigImageActivity.java
@@ -75,7 +75,7 @@
});
}
- static class BigImageAdapter extends PagerAdapter {
+ class BigImageAdapter extends PagerAdapter {
private Context context;
private List data;
@@ -103,6 +103,8 @@
Glide.with(context).load(data.get(position)).into(photoView);
photoView.setScaleType(ImageView.ScaleType.FIT_XY);
container.addView(view);
+ //点击大图取消预览
+ photoView.setOnClickListener(v -> BigImageActivity.this.finish());
return view;
}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
index 1d99092..f69c6cf 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckDetailActivity.java
@@ -36,6 +36,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -231,6 +232,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -342,7 +344,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
index a3b11d0..1ab5c16 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseCheckedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -256,7 +257,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
index 339e71f..2be4a4e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseDetailActivity.java
@@ -22,6 +22,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -232,7 +233,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
index 72b2ccf..62413d2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandleDetailActivity.java
@@ -40,6 +40,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -238,7 +239,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -363,6 +364,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
index a5be957..e2bbe6d 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -200,7 +201,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
index ff4eef3..c844e22 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoDetailActivity.java
@@ -29,6 +29,7 @@
import com.casic.dcms.ui.fragment.overtime.CaseTodoFragment;
import com.casic.dcms.utils.Constant;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -230,7 +231,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
index a4dae85..6ac7b43 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseTodoHandledDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -176,7 +177,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
index b1adeb9..75ac52e 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadActivity.java
@@ -1,14 +1,15 @@
package com.casic.dcms.ui;
import android.annotation.SuppressLint;
+import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.AudioManager;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
-import android.os.Handler;
-import android.os.Message;
import android.text.TextUtils;
+import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -18,7 +19,6 @@
import android.widget.PopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -47,12 +47,13 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.TimeOrDateUtil;
import com.casic.dcms.utils.ToastHelper;
import com.casic.dcms.widgets.VoicePlayView;
-import com.iceteck.silicompressorr.SiliCompressor;
+import com.google.gson.Gson;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
@@ -65,10 +66,10 @@
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+import com.zolad.videoslimmer.VideoSlimmer;
import java.io.File;
import java.io.IOException;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@@ -80,7 +81,6 @@
public class CaseUploadActivity extends BaseCaseActivity implements View.OnClickListener, View.OnTouchListener,
ICaseLargeClassView, ICaseSmallClassView, ICaseSubmitCaseView, IUploadFileView {
- private Context context = this;
@BindView(R.id.caseLayout)
LinearLayout caseLayout;
@BindView(R.id.caseClassView)
@@ -116,12 +116,15 @@
@BindView(R.id.submitButton)
QMUIRoundButton submitButton;
+ private static final String TAG = "CaseUploadActivity";
+ private Context context = this;
private CaseLargeClassPresenterImpl caseLargeClassPresenter;
private CaseSmallClassPresenterImpl caseSmallClassPresenter;
private CaseSubmitPresenterImpl caseSubmitPresenter;
private List largeClassBeans;
private List smallClassBeans;
- private QMUITipDialog submitDialog, qmuiTipDialog;
+ private QMUITipDialog submitDialog;
+ private ProgressDialog progressDialog;
private UploadImagePresenterImpl uploadImagePresenter;
private List imageList = new ArrayList<>();//服务器返回的拍照数据集
private ArrayList realPaths = new ArrayList<>();//真是图片路径
@@ -136,7 +139,6 @@
private String audioUrl, videoUrl;
private AudioRecodeHelper audioRecodeHelper;
private PopupWindow popWindow;
- private static WeakReferenceHandler weakReferenceHandler;
private boolean isFirstEnter = true;
@Override
@@ -156,15 +158,18 @@
caseLargeClassPresenter = new CaseLargeClassPresenterImpl(this);
caseSmallClassPresenter = new CaseSmallClassPresenterImpl(this);
caseSubmitPresenter = new CaseSubmitPresenterImpl(this);
+
submitDialog = new QMUITipDialog.Builder(this)
.setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
.setTipWord("提交中,请稍后")
.create();
- qmuiTipDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("视频压缩中,请稍后")
- .create();
- weakReferenceHandler = new WeakReferenceHandler(this);
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setMessage("视频压缩中...");
+ progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ progressDialog.setProgressDrawable(getResources().getDrawable(R.drawable.bg_progress));
+ progressDialog.setCancelable(false);
+ progressDialog.setCanceledOnTouchOutside(false);
+
uploadImagePresenter = new UploadImagePresenterImpl(this);
uploadAudioPresenter = new UploadAudioPresenterImpl(this);
uploadVideoPresenter = new UploadVideoPresenterImpl(this);
@@ -179,7 +184,6 @@
public void initEvent() {
voiceView.setOnTouchListener(this);
submitButton.setChangeAlphaWhenPress(true);
-
//录音相关
View view = View.inflate(this, R.layout.popu_microphone, null);
int popWidth = (int) (QMUIDisplayHelper.getScreenWidth(this) * 0.35);
@@ -340,6 +344,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
@@ -378,29 +383,25 @@
case PictureConfig.PREVIEW_VIDEO_CODE:
LocalMedia media = PictureSelector.obtainMultipleResult(data).get(0);
//"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4"
+ Log.d(TAG, "onActivityResult: " + new Gson().toJson(media));
//需要手动压缩视频
String mediaRealPath = media.getRealPath();
+ if (TextUtils.isEmpty(mediaRealPath)) {
+ //部分手机getRealPath可能为空,需要备用路径
+ mediaRealPath = media.getPath();
+ }
+ if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) {
+ //如果默认和备用路径还是为空,则不压缩上传
+ ToastHelper.showToast("操作失败,无法获取有效的视频文件", ToastHelper.ERROR);
+ return;
+ }
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ retriever.setDataSource(mediaRealPath);
+ String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
+ String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);
- qmuiTipDialog.show();
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- /**
- * 视频压缩
- * 第一个参数:视频源文件路径
- * 第二个参数:压缩后视频保存的路径
- */
- String comPressPath = SiliCompressor.with(context).compressVideo(mediaRealPath, FileUtils.getVideoCompressPath());
- Message message = weakReferenceHandler.obtainMessage();
- message.what = 20210427;
- message.obj = comPressPath;
- weakReferenceHandler.sendMessage(message);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
+ assert defaultRotation != null;
+ compressVideo(mediaRealPath, defaultRotation, defaultBitrate);
break;
case Constant.REQUEST_MAP_CODE:
if (data == null) {
@@ -421,27 +422,46 @@
}
}
- private static class WeakReferenceHandler extends Handler {
- private WeakReference reference;
-
- private WeakReferenceHandler(CaseUploadActivity activity) {
- reference = new WeakReference<>(activity);
+ /**
+ * 6.0以上视频压缩
+ */
+ private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) {
+ Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate);
+ String outputVideoFile = FileUtils.getOutputVideoFile();
+ int width, height, bitrate;
+ if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏
+ width = Constant.DEFAULT_WIDTH / 2;
+ height = Constant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = Constant.DEFAULT_HEIGHT / 2;
+ height = Constant.DEFAULT_WIDTH / 2;
}
-
- @Override
- public void handleMessage(@NonNull Message msg) {
- super.handleMessage(msg);
- CaseUploadActivity caseUploadActivity = reference.get();
- if (msg.what == 20210427) {
- caseUploadActivity.qmuiTipDialog.dismiss();
- String comPressPath = (String) msg.obj;
- if (!TextUtils.isEmpty(comPressPath)) {
- caseUploadActivity.uploadVideoPresenter.onReadyRetrofitRequest(new File(comPressPath));
- } else {
- ToastHelper.showToast("案卷视频上传失败", ToastHelper.ERROR);
- }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = Constant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, Constant.BITRATE, new VideoSlimmer.ProgressListener() {
+ @Override
+ public void onStart() {
+ progressDialog.show();
}
- }
+
+ @Override
+ public void onProgress(float percent) {
+ progressDialog.setProgress((int) percent);
+ }
+
+ @Override
+ public void onFinish(boolean result) {
+ if (result) {
+ uploadVideoPresenter.onReadyRetrofitRequest(new File(outputVideoFile));
+ } else {
+ ToastHelper.showToast("压缩失败", ToastHelper.ERROR);
+ }
+ progressDialog.dismiss();
+ }
+ });
}
/**
@@ -614,7 +634,7 @@
videoPlayerView.setVisibility(View.VISIBLE);
videoUrl = resultBean.getData();
String completeURL = StringHelper.appendCompleteURL(videoUrl);
- videoPlayerView.setUp(completeURL, "");
+ videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(context)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
new file mode 100644
index 0000000..10bfc1b
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadPackageActivity.java
@@ -0,0 +1,332 @@
+package com.casic.dcms.ui;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.casic.dcms.R;
+import com.casic.dcms.adapter.ImageRecycleViewAdapter;
+import com.casic.dcms.base.BaseCaseActivity;
+import com.casic.dcms.bean.ActionResultBean;
+import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
+import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
+import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
+import com.casic.dcms.mvp.view.IUploadFileView;
+import com.casic.dcms.utils.Constant;
+import com.casic.dcms.utils.FileUtils;
+import com.casic.dcms.utils.GlideLoadEngine;
+import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.OtherUtils;
+import com.casic.dcms.utils.StringHelper;
+import com.casic.dcms.utils.ToastHelper;
+import com.luck.picture.lib.PictureSelector;
+import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
+import com.luck.picture.lib.entity.LocalMedia;
+import com.luck.picture.lib.tools.PictureFileUtils;
+import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class CaseUploadPackageActivity extends BaseCaseActivity implements View.OnClickListener,
+ IUploadFileView, ICaseSubmitCaseView {
+
+ private Context context = CaseUploadPackageActivity.this;
+ @BindView(R.id.shopView)
+ TextView shopView;
+ @BindView(R.id.communityView)
+ EditText communityView;
+ @BindView(R.id.longitudeView)
+ TextView longitudeView;
+ @BindView(R.id.latitudeView)
+ TextView latitudeView;
+ @BindView(R.id.shopKeeperView)
+ EditText shopKeeperView;
+ @BindView(R.id.phoneNumberView)
+ EditText phoneNumberView;
+ @BindView(R.id.caseLocationView)
+ EditText caseLocationView;
+ @BindView(R.id.caseDetailEditView)
+ EditText caseDetailEditView;
+ @BindView(R.id.selectedResultView)
+ RecyclerView selectedResultView;
+ @BindView(R.id.addImageView)
+ ImageView addImageView;
+ @BindView(R.id.submitButton)
+ QMUIRoundButton submitButton;
+
+ private UploadImagePresenterImpl uploadImagePresenter;
+ private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
+ private ImageRecycleViewAdapter imageAdapter;
+ private QMUITipDialog submitDialog;
+ private ArrayList realPaths = new ArrayList<>();//真是图片路径
+ private List mediaList = new ArrayList<>();//上传到服务器的数据集
+ private String gridId, shopID;
+
+ @Override
+ public int initLayoutView() {
+ return R.layout.activity_package;
+ }
+
+ @Override
+ protected String setTitleName() {
+ return "三包上报";
+ }
+
+ @Override
+ public void initData() {
+ uploadImagePresenter = new UploadImagePresenterImpl(this);
+ shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
+ submitDialog = new QMUITipDialog.Builder(this)
+ .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+ .setTipWord("提交中,请稍后")
+ .create();
+ imageAdapter = new ImageRecycleViewAdapter(this);
+ selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
+ selectedResultView.addItemDecoration(new ItemDecorationSpace());
+ selectedResultView.setAdapter(imageAdapter);
+ }
+
+ @Override
+ public void initEvent() {
+ submitButton.setChangeAlphaWhenPress(true);
+ }
+
+ @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
+ @Override
+ public void onClick(View v) {
+ switch (v.getId()) {
+ case R.id.shopLayout:
+ Intent intent = new Intent(this, ArcGISMapActivity.class);
+ intent.putExtra("type", "三包上报");
+ startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
+ break;
+ case R.id.addImageView:
+ new QMUIDialog.MenuDialogBuilder(this)
+ .addItem("相册中选取", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //选图
+ selectPicture();
+ }
+ })
+ .addItem("相机拍照", new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ //拍照
+ takePicture();
+ }
+ })
+ .setCanceledOnTouchOutside(false)
+ .create().show();
+ break;
+ case R.id.submitButton:
+ submitCase();
+ break;
+ }
+ }
+
+ private void selectPicture() {
+ PictureSelector.create(this)
+ .openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(2)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.CHOOSE_REQUEST);
+ }
+
+ private void takePicture() {
+ PictureSelector.create(this)
+ .openCamera(PictureMimeType.ofImage())
+ .imageEngine(GlideLoadEngine.createGlideEngine())
+ .maxSelectNum(1)
+ .isCompress(true)
+ .compressQuality(80)
+ .compressSavePath(FileUtils.getImageCompressPath())
+ .forResult(PictureConfig.REQUEST_CAMERA);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == RESULT_OK) {
+ switch (requestCode) {
+ case PictureConfig.CHOOSE_REQUEST:
+ List selectList = PictureSelector.obtainMultipleResult(data);
+ for (LocalMedia media : selectList) {
+ String mediaCompressPath = media.getCompressPath();
+ uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
+ }
+ break;
+ case PictureConfig.REQUEST_CAMERA:
+ LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
+ uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
+ break;
+ case Constant.REQUEST_MAP_CODE:
+ if (data == null) {
+ return;
+ }
+ double longitude = data.getDoubleExtra("longitude", 0);
+ double latitude = data.getDoubleExtra("latitude", 0);
+ gridId = data.getStringExtra("gridId");
+ String community = data.getStringExtra("community");
+ String shopName = data.getStringExtra("shopName");
+ shopID = data.getStringExtra("shopID");
+
+ longitudeView.setText(String.valueOf(longitude));
+ latitudeView.setText(String.valueOf(latitude));
+ communityView.setText(community);
+ shopView.setText(shopName);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * 案卷提交
+ */
+ private void submitCase() {
+ String longitude = longitudeView.getText().toString();
+ String latitude = latitudeView.getText().toString();
+ if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
+ ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
+ return;
+ }
+ String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(shopKeeper)) {
+ ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
+ return;
+ }
+ String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(phoneNumber)) {
+ ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (StringHelper.isPhoneNumber(phoneNumber)) {
+ String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(fieldIntro)) {
+ ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
+ return;
+ }
+ String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
+ if (TextUtils.isEmpty(description)) {
+ ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
+ return;
+ }
+ if (imageAdapter.getItemCount() != 2) {
+ ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
+ return;
+ }
+ shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
+ "2", "1",
+ gridId.substring(0, 6),
+ gridId.substring(0, 9),
+ gridId.substring(0, 12),
+ gridId, description, fieldIntro,
+ StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
+ } else {
+ ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
+ }
+ }
+
+ @Override
+ public void showProgress() {
+ submitDialog.show();
+ }
+
+ @Override
+ public void hideProgress() {
+ submitDialog.dismiss();
+ }
+
+ @Override
+ public void obtainSubmitResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
+ finish();
+ } else {
+ ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
+ }
+ }
+
+ @Override
+ public void obtainDataFail() {
+ ToastHelper.showToast("操作失败", ToastHelper.ERROR);
+ }
+
+ @Override
+ public void obtainUploadAudioResult(ActionResultBean resultBean) {
+
+ }
+
+ @Override
+ public void obtainUploadImageResult(ActionResultBean resultBean) {
+ if (resultBean.isSuccess()) {
+ PictureFileUtils.deleteAllCacheDirFile(this);
+ /**
+ * 系统路径static拼接图片返回路径
+ * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ */
+ //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
+ int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
+ if (sumItemCount <= 2) {
+ String url = resultBean.getData();
+ mediaList.add(url);
+ realPaths.add(StringHelper.appendCompleteURL(url));
+ if (realPaths.size() == 2) {
+ addImageView.setVisibility(View.GONE);
+ }
+ imageAdapter.setMediaList(realPaths);
+ //九宫格点击事件
+ imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ OtherUtils.showBigImage(context, position, realPaths);
+ }
+ });
+ //删除按钮点击事件
+ imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
+ @Override
+ public void onClick(int position) {
+ mediaList.remove(position);
+ realPaths.remove(position);
+ imageAdapter.setMediaList(realPaths);
+ if (realPaths.size() != 2) {
+ addImageView.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ } else {
+ ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
+ }
+ }
+ }
+
+ @Override
+ public void obtainUploadVideoResult(ActionResultBean resultBean) {
+
+ }
+}
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
index 67a0340..7750f8a 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseUploadQuicklyActivity.java
@@ -242,6 +242,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
index e27a310..d364d7c 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifiedDetailActivity.java
@@ -21,6 +21,7 @@
import com.casic.dcms.mvp.presenter.CaseDetailPresenterImpl;
import com.casic.dcms.mvp.view.ICaseDetailView;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -179,7 +180,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
diff --git a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
index f0e437a..d28d4b2 100644
--- a/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
+++ b/app/src/main/java/com/casic/dcms/ui/CaseVerifyDetailActivity.java
@@ -44,6 +44,7 @@
import com.casic.dcms.utils.FileUtils;
import com.casic.dcms.utils.GlideLoadEngine;
import com.casic.dcms.utils.ItemDecorationSpace;
+import com.casic.dcms.utils.JzExoMedia;
import com.casic.dcms.utils.OtherUtils;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -285,7 +286,7 @@
if (!TextUtils.isEmpty(videoFile)) {
videoPlayerView.setVisibility(View.VISIBLE);
String videoUrl = StringHelper.appendCompleteURL(videoFile);
- videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()));
+ videoPlayerView.setUp(videoUrl, StringHelper.filterString(data.getDescription()), Jzvd.SCREEN_NORMAL, JzExoMedia.class);
//设置第一帧为封面
Glide.with(this)
.setDefaultRequestOptions(new RequestOptions().frame(4000000))
@@ -518,6 +519,7 @@
private void selectPicture() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
+ .isWeChatStyle(true)
.imageEngine(GlideLoadEngine.createGlideEngine())
.maxSelectNum(2)
.isCompress(true)
diff --git a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java b/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
deleted file mode 100644
index 1ba1d5b..0000000
--- a/app/src/main/java/com/casic/dcms/ui/ThreePackageUploadActivity.java
+++ /dev/null
@@ -1,331 +0,0 @@
-package com.casic.dcms.ui;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.casic.dcms.R;
-import com.casic.dcms.adapter.ImageRecycleViewAdapter;
-import com.casic.dcms.base.BaseCaseActivity;
-import com.casic.dcms.bean.ActionResultBean;
-import com.casic.dcms.mvp.presenter.ShopCaseSubmitPresenterImpl;
-import com.casic.dcms.mvp.presenter.UploadImagePresenterImpl;
-import com.casic.dcms.mvp.view.ICaseSubmitCaseView;
-import com.casic.dcms.mvp.view.IUploadFileView;
-import com.casic.dcms.utils.Constant;
-import com.casic.dcms.utils.FileUtils;
-import com.casic.dcms.utils.GlideLoadEngine;
-import com.casic.dcms.utils.ItemDecorationSpace;
-import com.casic.dcms.utils.OtherUtils;
-import com.casic.dcms.utils.StringHelper;
-import com.casic.dcms.utils.ToastHelper;
-import com.luck.picture.lib.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
-import com.luck.picture.lib.config.PictureMimeType;
-import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.tools.PictureFileUtils;
-import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
-import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
-import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-public class ThreePackageUploadActivity extends BaseCaseActivity implements View.OnClickListener,
- IUploadFileView, ICaseSubmitCaseView {
-
- private Context context = ThreePackageUploadActivity.this;
- @BindView(R.id.shopView)
- TextView shopView;
- @BindView(R.id.communityView)
- EditText communityView;
- @BindView(R.id.longitudeView)
- TextView longitudeView;
- @BindView(R.id.latitudeView)
- TextView latitudeView;
- @BindView(R.id.shopKeeperView)
- EditText shopKeeperView;
- @BindView(R.id.phoneNumberView)
- EditText phoneNumberView;
- @BindView(R.id.caseLocationView)
- EditText caseLocationView;
- @BindView(R.id.caseDetailEditView)
- EditText caseDetailEditView;
- @BindView(R.id.selectedResultView)
- RecyclerView selectedResultView;
- @BindView(R.id.addImageView)
- ImageView addImageView;
- @BindView(R.id.submitButton)
- QMUIRoundButton submitButton;
-
- private UploadImagePresenterImpl uploadImagePresenter;
- private ShopCaseSubmitPresenterImpl shopCaseSubmitPresenter;
- private ImageRecycleViewAdapter imageAdapter;
- private QMUITipDialog submitDialog;
- private ArrayList realPaths = new ArrayList<>();//真是图片路径
- private List mediaList = new ArrayList<>();//上传到服务器的数据集
- private String gridId, shopID;
-
- @Override
- public int initLayoutView() {
- return R.layout.activity_package;
- }
-
- @Override
- protected String setTitleName() {
- return "三包上报";
- }
-
- @Override
- public void initData() {
- uploadImagePresenter = new UploadImagePresenterImpl(this);
- shopCaseSubmitPresenter = new ShopCaseSubmitPresenterImpl(this);
- submitDialog = new QMUITipDialog.Builder(this)
- .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
- .setTipWord("提交中,请稍后")
- .create();
- imageAdapter = new ImageRecycleViewAdapter(this);
- selectedResultView.setLayoutManager(new GridLayoutManager(this, 2));
- selectedResultView.addItemDecoration(new ItemDecorationSpace());
- selectedResultView.setAdapter(imageAdapter);
- }
-
- @Override
- public void initEvent() {
- submitButton.setChangeAlphaWhenPress(true);
- }
-
- @OnClick({R.id.shopLayout, R.id.addImageView, R.id.submitButton})
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.shopLayout:
- Intent intent = new Intent(this, ArcGISMapActivity.class);
- intent.putExtra("type", "三包上报");
- startActivityForResult(intent, Constant.REQUEST_MAP_CODE);
- break;
- case R.id.addImageView:
- new QMUIDialog.MenuDialogBuilder(this)
- .addItem("相册中选取", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //选图
- selectPicture();
- }
- })
- .addItem("相机拍照", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- //拍照
- takePicture();
- }
- })
- .setCanceledOnTouchOutside(false)
- .create().show();
- break;
- case R.id.submitButton:
- submitCase();
- break;
- }
- }
-
- private void selectPicture() {
- PictureSelector.create(this)
- .openGallery(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(2)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.CHOOSE_REQUEST);
- }
-
- private void takePicture() {
- PictureSelector.create(this)
- .openCamera(PictureMimeType.ofImage())
- .imageEngine(GlideLoadEngine.createGlideEngine())
- .maxSelectNum(1)
- .isCompress(true)
- .compressQuality(80)
- .compressSavePath(FileUtils.getImageCompressPath())
- .forResult(PictureConfig.REQUEST_CAMERA);
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) {
- switch (requestCode) {
- case PictureConfig.CHOOSE_REQUEST:
- List selectList = PictureSelector.obtainMultipleResult(data);
- for (LocalMedia media : selectList) {
- String mediaCompressPath = media.getCompressPath();
- uploadImagePresenter.onReadyRetrofitRequest(new File(mediaCompressPath));
- }
- break;
- case PictureConfig.REQUEST_CAMERA:
- LocalMedia localMedia = PictureSelector.obtainMultipleResult(data).get(0);
- uploadImagePresenter.onReadyRetrofitRequest(new File(localMedia.getCompressPath()));
- break;
- case Constant.REQUEST_MAP_CODE:
- if (data == null) {
- return;
- }
- double longitude = data.getDoubleExtra("longitude", 0);
- double latitude = data.getDoubleExtra("latitude", 0);
- gridId = data.getStringExtra("gridId");
- String community = data.getStringExtra("community");
- String shopName = data.getStringExtra("shopName");
- shopID = data.getStringExtra("shopID");
-
- longitudeView.setText(String.valueOf(longitude));
- latitudeView.setText(String.valueOf(latitude));
- communityView.setText(community);
- shopView.setText(shopName);
- break;
- default:
- break;
- }
- }
- }
-
- /**
- * 案卷提交
- */
- private void submitCase() {
- String longitude = longitudeView.getText().toString();
- String latitude = latitudeView.getText().toString();
- if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) {
- ToastHelper.showToast("经纬度异常,请重新选择位置", ToastHelper.WARING);
- return;
- }
- String shopKeeper = shopKeeperView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(shopKeeper)) {
- ToastHelper.showToast("店主名还未填写", ToastHelper.WARING);
- return;
- }
- String phoneNumber = phoneNumberView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(phoneNumber)) {
- ToastHelper.showToast("电话号码还未填写", ToastHelper.WARING);
- return;
- }
- if (StringHelper.isPhoneNumber(phoneNumber)) {
- String fieldIntro = caseLocationView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(fieldIntro)) {
- ToastHelper.showToast("案卷地点还未填写", ToastHelper.WARING);
- return;
- }
- String description = caseDetailEditView.getText().toString().trim().replace(" ", "");
- if (TextUtils.isEmpty(description)) {
- ToastHelper.showToast("案卷情况还未填写", ToastHelper.WARING);
- return;
- }
- if (imageAdapter.getItemCount() != 2) {
- ToastHelper.showToast("必须选择两张图片", ToastHelper.WARING);
- return;
- }
- shopCaseSubmitPresenter.onReadyRetrofitRequest("0", "0", longitude, latitude,
- "2", "1",
- gridId.substring(0, 6),
- gridId.substring(0, 9),
- gridId.substring(0, 12),
- gridId, description, fieldIntro,
- StringHelper.reformatURL(mediaList), 0, 0, shopID, shopKeeper, phoneNumber);
- } else {
- ToastHelper.showToast("电话号码格式不对", ToastHelper.WARING);
- }
- }
-
- @Override
- public void showProgress() {
- submitDialog.show();
- }
-
- @Override
- public void hideProgress() {
- submitDialog.dismiss();
- }
-
- @Override
- public void obtainSubmitResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- ToastHelper.showToast("提交成功", ToastHelper.SUCCESS);
- finish();
- } else {
- ToastHelper.showToast("提交失败,请重试", ToastHelper.ERROR);
- }
- }
-
- @Override
- public void obtainDataFail() {
- ToastHelper.showToast("操作失败", ToastHelper.ERROR);
- }
-
- @Override
- public void obtainUploadAudioResult(ActionResultBean resultBean) {
-
- }
-
- @Override
- public void obtainUploadImageResult(ActionResultBean resultBean) {
- if (resultBean.isSuccess()) {
- PictureFileUtils.deleteAllCacheDirFile(this);
- /**
- * 系统路径static拼接图片返回路径
- * http://111.198.10.15:11409/static/2021-04/000bcf78345f4c1c86484efa3f9d68a2.jpeg
- */
- //2021-04\\000bcf78345f4c1c86484efa3f9d68a2.jpeg
- int sumItemCount = imageAdapter.getItemCount() + 1;//每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 2) {
- String url = resultBean.getData();
- mediaList.add(url);
- realPaths.add(StringHelper.appendCompleteURL(url));
- if (realPaths.size() == 2) {
- addImageView.setVisibility(View.GONE);
- }
- imageAdapter.setMediaList(realPaths);
- //九宫格点击事件
- imageAdapter.setOnItemClickListener(new ImageRecycleViewAdapter.OnItemClickListener() {
- @Override
- public void onClick(int position) {
- OtherUtils.showBigImage(context, position, realPaths);
- }
- });
- //删除按钮点击事件
- imageAdapter.setOnDeleteClickListener(new ImageRecycleViewAdapter.OnDeleteItemClickListener() {
- @Override
- public void onClick(int position) {
- mediaList.remove(position);
- realPaths.remove(position);
- imageAdapter.setMediaList(realPaths);
- if (realPaths.size() != 2) {
- addImageView.setVisibility(View.VISIBLE);
- }
- }
- });
- } else {
- ToastHelper.showToast("最多只能上传2张图片", ToastHelper.WARING);
- }
- }
- }
-
- @Override
- public void obtainUploadVideoResult(ActionResultBean resultBean) {
-
- }
-}
diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
index 2ae9aa6..5dcf237 100644
--- a/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
+++ b/app/src/main/java/com/casic/dcms/ui/fragment/HomePageFragment.java
@@ -24,13 +24,13 @@
import com.casic.dcms.ui.CaseOnMapActivity;
import com.casic.dcms.ui.CaseSearchActivity;
import com.casic.dcms.ui.CaseUploadActivity;
+import com.casic.dcms.ui.CaseUploadPackageActivity;
import com.casic.dcms.ui.CaseUploadQuicklyActivity;
import com.casic.dcms.ui.CaseVerifyActivity;
import com.casic.dcms.ui.DataAnalysisActivity;
import com.casic.dcms.ui.OvertimeCaseActivity;
import com.casic.dcms.ui.PersonOnlineActivity;
import com.casic.dcms.ui.PublicToiletActivity;
-import com.casic.dcms.ui.ThreePackageUploadActivity;
import com.casic.dcms.ui.UrgentCaseActivity;
import com.casic.dcms.utils.StringHelper;
import com.casic.dcms.utils.ToastHelper;
@@ -119,7 +119,7 @@
intent.setClass(context, CaseUploadQuicklyActivity.class);
break;
case "三包上报":
- intent.setClass(context, ThreePackageUploadActivity.class);
+ intent.setClass(context, CaseUploadPackageActivity.class);
break;
case "案卷核实":
intent.setClass(context, CaseVerifyActivity.class);
diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java
index d948e35..036f762 100644
--- a/app/src/main/java/com/casic/dcms/utils/Constant.java
+++ b/app/src/main/java/com/casic/dcms/utils/Constant.java
@@ -40,6 +40,9 @@
public static final int REQUEST_REFRESH_CODE = 9002;
public static final int PAGE_LIMIT = 15;
+ public static final int BITRATE = 200 * 360 * 30;
+ public static final int DEFAULT_WIDTH = 720;
+ public static final int DEFAULT_HEIGHT = 1280;
public static final int CASE_HANDLE = 0;
public static final int CASE_VERIFY = 1;
diff --git a/app/src/main/java/com/casic/dcms/utils/FileUtils.java b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
index c07978f..315a587 100644
--- a/app/src/main/java/com/casic/dcms/utils/FileUtils.java
+++ b/app/src/main/java/com/casic/dcms/utils/FileUtils.java
@@ -2,7 +2,6 @@
import android.annotation.SuppressLint;
import android.content.Context;
-import android.os.Environment;
import android.util.Log;
import java.io.File;
@@ -19,6 +18,7 @@
private static File imageDir;
private static File waterImageDir;
private static File downloadDir;
+ private static File videoDir;
public static void initFileConfig(Context context) {
FileUtils.context = context;
@@ -57,6 +57,13 @@
Log.d(TAG, "initFileConfig: 创建DownloadFile文件夹");
}
}
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "initFileConfig: 创建CompressVideoFile文件夹");
+ }
+ }
}
static File getOutputAudioFile() {
@@ -160,7 +167,32 @@
return downloadDir.toString();
}
- public static String getVideoCompressPath() {
- return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
+ public static String getOutputVideoFile() {
+ if (videoDir == null) {
+ File parentDir = new File(context.getFilesDir().getAbsolutePath(), "Casic");
+ if (!parentDir.exists()) {
+ boolean mkdir = parentDir.mkdir();
+ if (mkdir) {
+ Log.d(TAG, "getOutputVideoFile: 创建Casic文件夹");
+ }
+ }
+ videoDir = new File(parentDir, "CompressVideoFile");
+ if (!videoDir.exists()) {
+ boolean mkVideoDir = videoDir.mkdir();
+ if (mkVideoDir) {
+ Log.d(TAG, "getOutputVideoFile: 创建CompressVideoFile文件夹");
+ }
+ }
+ }
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA).format(new Date());
+ File videoFile = new File(videoDir + File.separator + "VID_" + timeStamp + ".mp4");
+ if (!videoFile.exists()) {
+ try {
+ videoFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return videoFile.getPath();
}
}
diff --git a/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
new file mode 100644
index 0000000..b82c57d
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/JzExoMedia.java
@@ -0,0 +1,320 @@
+package com.casic.dcms.utils;
+
+import android.content.Context;
+import android.graphics.SurfaceTexture;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+import android.view.Surface;
+
+import com.casic.dcms.R;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.DefaultLoadControl;
+import com.google.android.exoplayer2.DefaultRenderersFactory;
+import com.google.android.exoplayer2.ExoPlaybackException;
+import com.google.android.exoplayer2.LoadControl;
+import com.google.android.exoplayer2.PlaybackParameters;
+import com.google.android.exoplayer2.Player;
+import com.google.android.exoplayer2.RenderersFactory;
+import com.google.android.exoplayer2.SimpleExoPlayer;
+import com.google.android.exoplayer2.Timeline;
+import com.google.android.exoplayer2.source.MediaSource;
+import com.google.android.exoplayer2.source.ProgressiveMediaSource;
+import com.google.android.exoplayer2.source.TrackGroupArray;
+import com.google.android.exoplayer2.source.hls.HlsMediaSource;
+import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
+import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
+import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
+import com.google.android.exoplayer2.trackselection.TrackSelector;
+import com.google.android.exoplayer2.upstream.BandwidthMeter;
+import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
+import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
+import com.google.android.exoplayer2.util.Util;
+import com.google.android.exoplayer2.video.VideoListener;
+
+import org.jetbrains.annotations.NotNull;
+
+import cn.jzvd.JZMediaInterface;
+import cn.jzvd.Jzvd;
+
+public class JzExoMedia extends JZMediaInterface implements Player.EventListener, VideoListener {
+
+ private static final String TAG = "JzExoMedia";
+ private SimpleExoPlayer simpleExoPlayer;
+ private long previousSeek = 0;
+ private Runnable callback;
+
+ public JzExoMedia(Jzvd jzvd) {
+ super(jzvd);
+ }
+
+ @Override
+ public void start() {
+ simpleExoPlayer.setPlayWhenReady(true);
+ }
+
+ @Override
+ public void prepare() {
+ Context context = jzvd.getContext();
+ release();
+ mMediaHandlerThread = new HandlerThread("JZVD");
+ mMediaHandlerThread.start();
+ mMediaHandler = new Handler(context.getMainLooper());//主线程还是非主线程,就在这里
+ handler = new Handler();
+ mMediaHandler.post(() -> {
+ AdaptiveTrackSelection.Factory factory = new AdaptiveTrackSelection.Factory();
+ TrackSelector trackSelector = new DefaultTrackSelector(context, factory);
+
+ LoadControl loadControl = new DefaultLoadControl.Builder()
+ .setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
+ .setBufferDurationsMs(360000, 600000, 1000, 5000)
+ .setPrioritizeTimeOverSizeThresholds(false)
+ .setTargetBufferBytes(C.LENGTH_UNSET)
+ .createDefaultLoadControl();
+
+ BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(context).build();
+ // 2. Create the player
+
+ RenderersFactory renderersFactory = new DefaultRenderersFactory(context);
+ simpleExoPlayer = new SimpleExoPlayer.Builder(context, renderersFactory)
+ .setTrackSelector(trackSelector)
+ .setLoadControl(loadControl)
+ .setBandwidthMeter(bandwidthMeter)
+ .build();
+ // Produces DataSource instances through which media data is loaded.
+ DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
+ Util.getUserAgent(context, context.getResources().getString(R.string.app_name)));
+
+ String currUrl = jzvd.jzDataSource.getCurrentUrl().toString();
+ MediaSource videoSource;
+ if (currUrl.contains(".m3u8")) {
+ videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ //addEventListener 这里只有两个参数都要传入值才可以成功设置
+ // 否者会被断言 Assertions.checkArgument(handler != null && eventListener != null);
+ // 并且报错 IllegalArgumentException() 所以不需要添加监听器时 注释掉
+ // videoSource .addEventListener( handler, null);
+ } else {
+ videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(currUrl));
+ }
+ simpleExoPlayer.addVideoListener(this);
+ Log.e(TAG, "URL Link = " + currUrl);
+
+ simpleExoPlayer.addListener(this);
+ boolean isLoop = jzvd.jzDataSource.looping;
+ if (isLoop) {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
+ } else {
+ simpleExoPlayer.setRepeatMode(Player.REPEAT_MODE_OFF);
+ }
+ simpleExoPlayer.prepare(videoSource);
+ simpleExoPlayer.setPlayWhenReady(true);
+ callback = new onBufferingUpdate();
+ if (jzvd.textureView != null) {
+ SurfaceTexture surfaceTexture = jzvd.textureView.getSurfaceTexture();
+ if (surfaceTexture != null) {
+ simpleExoPlayer.setVideoSurface(new Surface(surfaceTexture));
+ }
+ }
+ });
+ }
+
+ @Override
+ public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
+ handler.post(() -> jzvd.onVideoSizeChanged((int) (width * pixelWidthHeightRatio), height));
+ }
+
+ @Override
+ public void onRenderedFirstFrame() {
+
+ }
+
+ @Override
+ public void pause() {
+ simpleExoPlayer.setPlayWhenReady(false);
+ }
+
+ @Override
+ public boolean isPlaying() {
+ return simpleExoPlayer.getPlayWhenReady();
+ }
+
+ @Override
+ public void seekTo(long time) {
+ if (simpleExoPlayer == null) {
+ return;
+ }
+ if (time != previousSeek) {
+ if (time >= simpleExoPlayer.getBufferedPosition()) {
+ jzvd.onStatePreparingPlaying();
+ }
+ simpleExoPlayer.seekTo(time);
+ previousSeek = time;
+ jzvd.seekToInAdvance = time;
+ }
+ }
+
+ @Override
+ public void release() {
+ if (mMediaHandler != null && mMediaHandlerThread != null && simpleExoPlayer != null) {
+ HandlerThread tmpHandlerThread = mMediaHandlerThread;
+ SimpleExoPlayer tmpMediaPlayer = simpleExoPlayer;
+ JZMediaInterface.SAVED_SURFACE = null;
+ mMediaHandler.post(() -> {
+ tmpMediaPlayer.release();//release就不能放到主线程里,界面会卡顿
+ tmpHandlerThread.quit();
+ });
+ simpleExoPlayer = null;
+ }
+ }
+
+ @Override
+ public long getCurrentPosition() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getCurrentPosition();
+ else return 0;
+ }
+
+ @Override
+ public long getDuration() {
+ if (simpleExoPlayer != null)
+ return simpleExoPlayer.getDuration();
+ else return 0;
+ }
+
+ @Override
+ public void setVolume(float leftVolume, float rightVolume) {
+ simpleExoPlayer.setVolume(leftVolume);
+ simpleExoPlayer.setVolume(rightVolume);
+ }
+
+ @Override
+ public void setSpeed(float speed) {
+ PlaybackParameters playbackParameters = new PlaybackParameters(speed, 1.0F);
+ simpleExoPlayer.setPlaybackParameters(playbackParameters);
+ }
+
+ @Override
+ public void onTimelineChanged(final Timeline timeline, Object manifest, final int reason) {
+
+ }
+
+ @Override
+ public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
+
+ }
+
+ @Override
+ public void onLoadingChanged(boolean isLoading) {
+
+ }
+
+ @Override
+ public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
+ Log.e(TAG, "onPlayerStateChanged" + playbackState + "/ready=" + playWhenReady);
+ handler.post(() -> {
+ switch (playbackState) {
+ case Player.STATE_IDLE: {
+ }
+ break;
+ case Player.STATE_BUFFERING: {
+ jzvd.onStatePreparingPlaying();
+ handler.post(callback);
+ }
+ break;
+ case Player.STATE_READY: {
+ if (playWhenReady) {
+ jzvd.onStatePlaying();
+ }
+ }
+ break;
+ case Player.STATE_ENDED: {
+ jzvd.onCompletion();
+ }
+ break;
+ }
+ });
+ }
+
+ @Override
+ public void onRepeatModeChanged(int repeatMode) {
+
+ }
+
+ @Override
+ public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
+
+ }
+
+ @Override
+ public void onPlayerError(ExoPlaybackException error) {
+ Log.e(TAG, "onPlayerError" + error.toString());
+ handler.post(() -> jzvd.onError(1000, 1000));
+ }
+
+ @Override
+ public void onPositionDiscontinuity(int reason) {
+
+ }
+
+ @Override
+ public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
+
+ }
+
+ @Override
+ public void onSeekProcessed() {
+ handler.post(() -> jzvd.onSeekComplete());
+ }
+
+ @Override
+ public void setSurface(Surface surface) {
+ if (simpleExoPlayer != null) {
+ simpleExoPlayer.setVideoSurface(surface);
+ } else {
+ Log.e("AGVideo", "simpleExoPlayer为空");
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureAvailable(@NotNull SurfaceTexture surface, int width, int height) {
+ if (SAVED_SURFACE == null) {
+ SAVED_SURFACE = surface;
+ prepare();
+ } else {
+ jzvd.textureView.setSurfaceTexture(SAVED_SURFACE);
+ }
+ }
+
+ @Override
+ public void onSurfaceTextureSizeChanged(@NotNull SurfaceTexture surface, int width, int height) {
+
+ }
+
+ @Override
+ public boolean onSurfaceTextureDestroyed(@NotNull SurfaceTexture surface) {
+ return false;
+ }
+
+ @Override
+ public void onSurfaceTextureUpdated(@NotNull SurfaceTexture surface) {
+
+ }
+
+ private class onBufferingUpdate implements Runnable {
+ @Override
+ public void run() {
+ if (simpleExoPlayer != null) {
+ final int percent = simpleExoPlayer.getBufferedPercentage();
+ handler.post(() -> jzvd.setBufferProgress(percent));
+ if (percent < 100) {
+ handler.postDelayed(callback, 300);
+ } else {
+ handler.removeCallbacks(callback);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
deleted file mode 100644
index 4683201..0000000
--- a/app/src/main/java/com/casic/dcms/utils/VersionUpgradeFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class VersionUpgradeFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
deleted file mode 100644
index 4102901..0000000
--- a/app/src/main/java/com/casic/dcms/utils/WaterImageFileProvider.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.casic.dcms.utils;
-
-import androidx.core.content.FileProvider;
-
-public class WaterImageFileProvider extends FileProvider {
-}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
new file mode 100644
index 0000000..a0329b5
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/CompressVideoFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class CompressVideoFileProvider extends FileProvider {
+}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
new file mode 100644
index 0000000..7f2aa50
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/VersionUpgradeFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class VersionUpgradeFileProvider extends FileProvider {
+}
diff --git a/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java
new file mode 100644
index 0000000..afa4fe2
--- /dev/null
+++ b/app/src/main/java/com/casic/dcms/utils/provider/WaterImageFileProvider.java
@@ -0,0 +1,6 @@
+package com.casic.dcms.utils.provider;
+
+import androidx.core.content.FileProvider;
+
+public class WaterImageFileProvider extends FileProvider {
+}
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
index 3fada23..62d2515 100644
--- a/app/src/main/res/xml/file_paths.xml
+++ b/app/src/main/res/xml/file_paths.xml
@@ -8,6 +8,10 @@
name="image"
path="Casic/CompressImageFile" />
+
+