diff --git a/.idea/misc.xml b/.idea/misc.xml
index efa70ac..56a7b97 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -96,6 +96,7 @@
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efa70ac..56a7b97 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -96,6 +96,7 @@
+
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
index b6ec664..7d60cb0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -36,6 +40,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@@ -58,6 +63,15 @@
private String typeCode = "";
private String typeDetailCode = "";//默认值,防止用户不选择直接跳过
private String gridId;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060301) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -118,11 +132,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -279,11 +297,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060301;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -313,6 +345,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efa70ac..56a7b97 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -96,6 +96,7 @@
+
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
index b6ec664..7d60cb0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -36,6 +40,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@@ -58,6 +63,15 @@
private String typeCode = "";
private String typeDetailCode = "";//默认值,防止用户不选择直接跳过
private String gridId;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060301) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -118,11 +132,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -279,11 +297,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060301;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -313,6 +345,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
index 876933a..cef73f8 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -33,6 +37,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import java.io.File;
@@ -48,6 +53,15 @@
private CaseViewModel caseViewModel;
private EditableImageAdapter imageAdapter;
private String gridId, shopID;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060302) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -101,8 +115,12 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class);
uploadViewModel.imageModel.observe(this, new Observer() {
@Override
@@ -147,11 +165,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060302;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -181,6 +213,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efa70ac..56a7b97 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -96,6 +96,7 @@
+
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
index b6ec664..7d60cb0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -36,6 +40,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@@ -58,6 +63,15 @@
private String typeCode = "";
private String typeDetailCode = "";//默认值,防止用户不选择直接跳过
private String gridId;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060301) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -118,11 +132,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -279,11 +297,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060301;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -313,6 +345,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
index 876933a..cef73f8 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -33,6 +37,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import java.io.File;
@@ -48,6 +53,15 @@
private CaseViewModel caseViewModel;
private EditableImageAdapter imageAdapter;
private String gridId, shopID;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060302) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -101,8 +115,12 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class);
uploadViewModel.imageModel.observe(this, new Observer() {
@Override
@@ -147,11 +165,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060302;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -181,6 +213,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
index 92b5e14..55ee5c0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
@@ -6,6 +6,9 @@
import android.content.Context;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
@@ -20,6 +23,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.lifecycle.Observer;
@@ -53,6 +57,7 @@
import com.pengxh.androidx.lite.hub.LongHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow;
import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper;
@@ -89,6 +94,15 @@
private String gridId;
private String audioUrl, videoUrl;
private boolean isFirstEnter = true;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060303) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -149,11 +163,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -253,6 +271,73 @@
viewBinding.addImageRecyclerView.setAdapter(imageAdapter);
}
+ /**
+ * 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 = LocaleConstant.DEFAULT_WIDTH / 2;
+ height = LocaleConstant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = LocaleConstant.DEFAULT_HEIGHT / 2;
+ height = LocaleConstant.DEFAULT_WIDTH / 2;
+ }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = LocaleConstant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.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) {
+ uploadViewModel.uploadVideo(new File(outputVideoFile));
+ } else {
+ StringHub.show(CommonCaseActivity.this, "请先选择案卷类型");
+ }
+ progressDialog.dismiss();
+ }
+ });
+ }
+
+ /**
+ * 首次进入页面显示引导Popup
+ */
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (isFirstEnter) {
+ TextView textView = new TextView(this);
+ int padding = QMUIDisplayHelper.dp2px(this, 10);
+ textView.setPadding(padding, padding, padding, padding);
+ textView.setGravity(Gravity.CENTER);
+ textView.setText("按住即可开始录音");
+ QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150))
+ .preferredDirection(QMUIPopup.DIRECTION_BOTTOM)
+ .view(textView)
+ .shadow(true)
+ .arrow(true)
+ .animStyle(QMUIPopup.ANIM_AUTO)
+ .dimAmount(0.6f)//60%透明度
+ .onDismiss(null)
+ .show(viewBinding.recodeAudioButton);
+ isFirstEnter = false;
+ }
+ }
+
@SuppressLint("ClickableViewAccessibility")
@Override
public void initEvent() {
@@ -470,11 +555,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060303;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -504,71 +603,8 @@
});
}
- /**
- * 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 = LocaleConstant.DEFAULT_WIDTH / 2;
- height = LocaleConstant.DEFAULT_HEIGHT / 2;
- } else {
- width = LocaleConstant.DEFAULT_HEIGHT / 2;
- height = LocaleConstant.DEFAULT_WIDTH / 2;
- }
- if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
- bitrate = LocaleConstant.BITRATE;
- } else {
- bitrate = Integer.parseInt(defaultBitrate) / 2;
- }
- VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.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) {
- uploadViewModel.uploadVideo(new File(outputVideoFile));
- } else {
- StringHub.show(CommonCaseActivity.this, "请先选择案卷类型");
- }
- progressDialog.dismiss();
- }
- });
- }
-
- /**
- * 首次进入页面显示引导Popup
- */
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (isFirstEnter) {
- TextView textView = new TextView(this);
- int padding = QMUIDisplayHelper.dp2px(this, 10);
- textView.setPadding(padding, padding, padding, padding);
- textView.setGravity(Gravity.CENTER);
- textView.setText("按住即可开始录音");
- QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150))
- .preferredDirection(QMUIPopup.DIRECTION_BOTTOM)
- .view(textView)
- .shadow(true)
- .arrow(true)
- .animStyle(QMUIPopup.ANIM_AUTO)
- .dimAmount(0.6f)//60%透明度
- .onDismiss(null)
- .show(viewBinding.recodeAudioButton);
- isFirstEnter = false;
- }
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
}
/**
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efa70ac..56a7b97 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -96,6 +96,7 @@
+
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
index b6ec664..7d60cb0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -36,6 +40,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
@@ -58,6 +63,15 @@
private String typeCode = "";
private String typeDetailCode = "";//默认值,防止用户不选择直接跳过
private String gridId;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060301) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -118,11 +132,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -279,11 +297,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060301;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -313,6 +345,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
index 876933a..cef73f8 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java
@@ -3,6 +3,9 @@
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.view.View;
@@ -10,6 +13,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
@@ -33,6 +37,7 @@
import com.pengxh.androidx.lite.hub.IntHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import java.io.File;
@@ -48,6 +53,15 @@
private CaseViewModel caseViewModel;
private EditableImageAdapter imageAdapter;
private String gridId, shopID;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060302) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -101,8 +115,12 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class);
uploadViewModel.imageModel.observe(this, new Observer() {
@Override
@@ -147,11 +165,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060302;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -181,6 +213,10 @@
});
}
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
+ }
+
/**
* 案卷提交
*/
diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
index 92b5e14..55ee5c0 100644
--- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
+++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java
@@ -6,6 +6,9 @@
import android.content.Context;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
+import android.os.CountDownTimer;
+import android.os.Handler;
+import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
@@ -20,6 +23,7 @@
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.lifecycle.Observer;
@@ -53,6 +57,7 @@
import com.pengxh.androidx.lite.hub.LongHub;
import com.pengxh.androidx.lite.hub.StringHub;
import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager;
+import com.pengxh.androidx.lite.utils.WeakReferenceHandler;
import com.pengxh.androidx.lite.vm.LoadState;
import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow;
import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper;
@@ -89,6 +94,15 @@
private String gridId;
private String audioUrl, videoUrl;
private boolean isFirstEnter = true;
+ private final Handler.Callback callback = new Handler.Callback() {
+ @Override
+ public boolean handleMessage(@NonNull Message msg) {
+ if (msg.what == 2023060303) {
+ handleSelectResult((LocalMedia) msg.obj);
+ }
+ return true;
+ }
+ };
private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
@@ -149,11 +163,15 @@
});
}
+ private WeakReferenceHandler weakReferenceHandler;
+
@Override
public void initData() {
largeTypeBeans = new ArrayList<>();
smallTypeBeans = new ArrayList<>();
+ weakReferenceHandler = new WeakReferenceHandler(callback);
+
caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class);
commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class);
@@ -253,6 +271,73 @@
viewBinding.addImageRecyclerView.setAdapter(imageAdapter);
}
+ /**
+ * 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 = LocaleConstant.DEFAULT_WIDTH / 2;
+ height = LocaleConstant.DEFAULT_HEIGHT / 2;
+ } else {
+ width = LocaleConstant.DEFAULT_HEIGHT / 2;
+ height = LocaleConstant.DEFAULT_WIDTH / 2;
+ }
+ if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
+ bitrate = LocaleConstant.BITRATE;
+ } else {
+ bitrate = Integer.parseInt(defaultBitrate) / 2;
+ }
+ VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.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) {
+ uploadViewModel.uploadVideo(new File(outputVideoFile));
+ } else {
+ StringHub.show(CommonCaseActivity.this, "请先选择案卷类型");
+ }
+ progressDialog.dismiss();
+ }
+ });
+ }
+
+ /**
+ * 首次进入页面显示引导Popup
+ */
+ @Override
+ public void onWindowFocusChanged(boolean hasFocus) {
+ super.onWindowFocusChanged(hasFocus);
+ if (isFirstEnter) {
+ TextView textView = new TextView(this);
+ int padding = QMUIDisplayHelper.dp2px(this, 10);
+ textView.setPadding(padding, padding, padding, padding);
+ textView.setGravity(Gravity.CENTER);
+ textView.setText("按住即可开始录音");
+ QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150))
+ .preferredDirection(QMUIPopup.DIRECTION_BOTTOM)
+ .view(textView)
+ .shadow(true)
+ .arrow(true)
+ .animStyle(QMUIPopup.ANIM_AUTO)
+ .dimAmount(0.6f)//60%透明度
+ .onDismiss(null)
+ .show(viewBinding.recodeAudioButton);
+ isFirstEnter = false;
+ }
+ }
+
@SuppressLint("ClickableViewAccessibility")
@Override
public void initEvent() {
@@ -470,11 +555,25 @@
@Override
public void onSuccess(ArrayList result) {
if (result.size() == 1) {
- uploadViewModel.uploadImage(new File(result.get(0).getRealPath()));
+ handleSelectResult(result.get(0));
} else {
- for (LocalMedia localMedia : result) {
- uploadViewModel.uploadImage(new File(localMedia.getRealPath()));
- }
+ int sum = (result.size() * 500);
+ new CountDownTimer(sum, 500) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+ int i = (int) (millisUntilFinished / 500);
+ Message message = weakReferenceHandler.obtainMessage();
+ message.obj = result.get(i);
+ message.what = 2023060303;
+ weakReferenceHandler.handleMessage(message);
+ }
+
+ @Override
+ public void onFinish() {
+
+ }
+ }.start();
}
}
});
@@ -504,71 +603,8 @@
});
}
- /**
- * 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 = LocaleConstant.DEFAULT_WIDTH / 2;
- height = LocaleConstant.DEFAULT_HEIGHT / 2;
- } else {
- width = LocaleConstant.DEFAULT_HEIGHT / 2;
- height = LocaleConstant.DEFAULT_WIDTH / 2;
- }
- if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) {
- bitrate = LocaleConstant.BITRATE;
- } else {
- bitrate = Integer.parseInt(defaultBitrate) / 2;
- }
- VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.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) {
- uploadViewModel.uploadVideo(new File(outputVideoFile));
- } else {
- StringHub.show(CommonCaseActivity.this, "请先选择案卷类型");
- }
- progressDialog.dismiss();
- }
- });
- }
-
- /**
- * 首次进入页面显示引导Popup
- */
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (isFirstEnter) {
- TextView textView = new TextView(this);
- int padding = QMUIDisplayHelper.dp2px(this, 10);
- textView.setPadding(padding, padding, padding, padding);
- textView.setGravity(Gravity.CENTER);
- textView.setText("按住即可开始录音");
- QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150))
- .preferredDirection(QMUIPopup.DIRECTION_BOTTOM)
- .view(textView)
- .shadow(true)
- .arrow(true)
- .animStyle(QMUIPopup.ANIM_AUTO)
- .dimAmount(0.6f)//60%透明度
- .onDismiss(null)
- .show(viewBinding.recodeAudioButton);
- isFirstEnter = false;
- }
+ private void handleSelectResult(LocalMedia obj) {
+ uploadViewModel.uploadImage(new File(obj.getRealPath()));
}
/**
diff --git a/app/src/main/java/com/casic/dcms/vm/UploadViewModel.java b/app/src/main/java/com/casic/dcms/vm/UploadViewModel.java
index 9734377..73ba9b8 100644
--- a/app/src/main/java/com/casic/dcms/vm/UploadViewModel.java
+++ b/app/src/main/java/com/casic/dcms/vm/UploadViewModel.java
@@ -64,55 +64,51 @@
}
public void uploadImage(File file) {
- loadState.setValue(LoadState.Loading);
//改为上传带水印的图片
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
ImageHelper.drawTextToRightBottom(bitmap, new IWaterMarkAddListener() {
@Override
public void onSuccess(File file) {
- if (file != null) {
- Observable observable = RetrofitServiceManager.uploadImage(file);
- ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() {
- @Override
- public void onCompleted() {
- loadState.setValue(LoadState.Success);
- }
+ loadState.setValue(LoadState.Loading);
+ Observable observable = RetrofitServiceManager.uploadImage(file);
+ ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() {
+ @Override
+ public void onCompleted() {
+ loadState.setValue(LoadState.Success);
+ }
- @Override
- public void onError(Throwable e) {
- loadState.setValue(LoadState.Fail);
+ @Override
+ public void onError(Throwable e) {
+ loadState.setValue(LoadState.Fail);
+ if (e instanceof ConnectException) {
+ StringHub.show(BaseApplication.get(), "连接失败,请检查网络或者服务器");
+ } else {
+ StringHub.show(BaseApplication.get(), "服务器异常,请联系管理员");
}
+ }
- @Override
- public void onNext(ResponseBody responseBody) {
- try {
- String response = responseBody.string();
- int responseCode = StringHelper.separateResponseCode(response);
- if (responseCode == 200) {
- ActionResultBean resultBean = gson.fromJson(response, new TypeToken() {
- }.getType());
- imageModel.setValue(resultBean);
- } else {
- loadState.setValue(LoadState.Fail);
- }
- } catch (IOException e) {
- e.printStackTrace();
+ @Override
+ public void onNext(ResponseBody responseBody) {
+ try {
+ String response = responseBody.string();
+ int responseCode = StringHelper.separateResponseCode(response);
+ if (responseCode == 200) {
+ ActionResultBean resultBean = gson.fromJson(response, new TypeToken() {
+ }.getType());
+ imageModel.setValue(resultBean);
+ } else {
+ loadState.setValue(LoadState.Fail);
}
+ } catch (IOException e) {
+ e.printStackTrace();
}
- });
- } else {
- loadState.setValue(LoadState.Fail);
- }
+ }
+ });
}
@Override
public void onError(Throwable e) {
- loadState.setValue(LoadState.Fail);
- if (e instanceof ConnectException) {
- StringHub.show(BaseApplication.get(), "连接失败,请检查网络或者服务器");
- } else {
- StringHub.show(BaseApplication.get(), "服务器异常,请联系管理员");
- }
+ e.printStackTrace();
}
});
}