>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/oss/OssConfigBean.java b/app/src/main/java/com/dhsd/glowner/oss/OssConfigBean.java
new file mode 100644
index 0000000..cd563d6
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/oss/OssConfigBean.java
@@ -0,0 +1,25 @@
+package com.dhsd.glowner.oss;
+
+/**
+ * @ClassName OssConfigBean
+ * @Author 用户
+ * @Date 2021/9/30 9:11
+ * @Description TODO
+ */
+public class OssConfigBean {
+
+// public static final String endpoint = "oss-cn-beijing.aliyuncs.com";
+ public static final String endpoint = "https://oss-cn-beijing.aliyuncs.com";
+ public static final String region = "oss-cn-beijing";
+ public static final String accessKeyId = "LTAI5tSR2Ketbc32wuokWZgF";
+ public static final String accessKeySecret = "TuumKEyXiZ3Rdfudcir7qJZenK2wCE";
+ public static final String bucket = "dh-tms";
+ public static final String BUCKET_OBJECT = "tms/user-cert/";
+ public static final String BUCKET_OBJECT_TEXT = "tms/tms-test/user-cert/";
+ public static final String BUCKET_BASE_URL = "https://dh-tms.oss-cn-beijing.aliyuncs.com/";
+ public static final String BUCKET_BASE_URL_UP = "https://dahehuodongbao.com/";
+ public static final String ARN = "acs:ram::1864711654174879:role/aliyunactiontraildefaultrole";
+ //callback 测试地址
+ public static final String OSS_CALLBACK_URL = "http://oss-demo.aliyuncs.com:23450";
+// public static final String OSS_CALLBACK_URL = "http://tms.api.test.dahehuodongbao.com:8081/sts/getsts";
+}
diff --git a/app/src/main/java/com/dhsd/glowner/oss/OssServiceUtil.java b/app/src/main/java/com/dhsd/glowner/oss/OssServiceUtil.java
new file mode 100644
index 0000000..033552d
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/oss/OssServiceUtil.java
@@ -0,0 +1,417 @@
+package com.dhsd.glowner.oss;
+
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.provider.MediaStore;
+import android.util.Log;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import com.alibaba.sdk.android.oss.ClientConfiguration;
+import com.alibaba.sdk.android.oss.ClientException;
+import com.alibaba.sdk.android.oss.OSS;
+import com.alibaba.sdk.android.oss.OSSClient;
+import com.alibaba.sdk.android.oss.ServiceException;
+import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
+import com.alibaba.sdk.android.oss.callback.OSSProgressCallback;
+import com.alibaba.sdk.android.oss.common.auth.OSSAuthCredentialsProvider;
+import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
+import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
+import com.alibaba.sdk.android.oss.model.OSSRequest;
+import com.alibaba.sdk.android.oss.model.PutObjectRequest;
+import com.alibaba.sdk.android.oss.model.PutObjectResult;
+import com.dahe.mylibrary.utils.LoadingUtils;
+import com.dhsd.glowner.base.App;
+import com.lxj.xpopup.impl.LoadingPopupView;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.functions.Consumer;
+
+/**
+ * @ClassName OssServiceUtil
+ * @Author 用户
+ * @Date 2021/9/29 17:53
+ * @Description TODO
+ */
+public class OssServiceUtil {
+
+ private static OSS oss;
+ private static OSSCredentialProvider credentialProvider;
+ private static ClientConfiguration conf;
+ private String bucket;
+ private picResultCallback callback;//回调接口
+ private String path = "tms/user-cert/";
+ private LoadingPopupView dialog;
+
+ private OssServiceUtil() {
+ }
+
+ private static volatile OssServiceUtil ossUtils;
+
+ public static OssServiceUtil getInstance() {
+ if (ossUtils == null) {
+ synchronized (OssServiceUtil.class) {
+ if (ossUtils == null) {
+ ossUtils = new OssServiceUtil();
+ }
+ }
+ }
+ return ossUtils;
+ }
+
+ private void initDialog(AppCompatActivity activity) {
+ dialog = LoadingUtils.Companion.getInstance().init(activity, "网络请求中......");
+ }
+
+ //初始化使用参数
+ public void init() {
+ bucket = OssConfigBean.bucket;
+ String stsServer = "http://platform.test.v2.dahehuoyun.com/devApi/file/aliyun/oss/getToken";
+ credentialProvider = new OSSAuthCredentialsProvider(stsServer);
+ conf = new ClientConfiguration();
+ conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
+ conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
+ conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
+ conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
+
+ oss = new OSSClient(App.Companion.getApp(), OssConfigBean.endpoint, credentialProvider, conf);
+ }
+
+ public void setResultCallBack(picResultCallback callback) {
+ this.callback = callback;
+ }
+
+ /**
+ * 图片以路径的方式上传
+ *
+ * // * @param 图片的上传地址(更后台要)
+ * // * @param 图片本地地址
+ * // * @param 进度条
+ */
+ public void asyncPutImage(final String localFile, final AppCompatActivity activity) {
+// if (object.equals("")) {
+// return;
+// }
+ if (activity != null) {
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ initDialog(activity);
+ }
+ });
+ }
+
+
+ File file = new File(localFile);
+
+
+ if (!file.exists()) {
+ return;
+ }
+
+
+ Calendar instance = Calendar.getInstance();
+ String year = String.valueOf(instance.get(Calendar.YEAR));
+ String month = String.valueOf(instance.get(Calendar.MONTH) + 1);
+ String day = String.valueOf(instance.get(Calendar.DAY_OF_MONTH));
+ String name = file.getName();
+ // 构造上传请求
+// PutObjectRequest put = new PutObjectRequest(OssConfigBean.bucket, year + "/" + month + "/" + day + name, localFile);
+ PutObjectRequest put = new PutObjectRequest(OssConfigBean.bucket, OssConfigBean.BUCKET_OBJECT + name, localFile);
+
+ put.setCRC64(OSSRequest.CRC64Config.YES);
+ String mCallbackAddress = OssConfigBean.OSS_CALLBACK_URL;
+// if (mCallbackAddress != null) {
+// // 传入对应的上传回调参数,这里默认使用OSS提供的公共测试回调服务器地址
+// put.setCallbackParam(new HashMap() {
+// {
+// put("callbackUrl", mCallbackAddress);
+// //callbackBody可以自定义传入的信息
+// put("callbackBody", "filename=${object}");
+// }
+// });
+// }
+
+ //上传后回调通知
+ // 异步上传时可以设置进度回调
+ put.setProgressCallback(new OSSProgressCallback() {
+ @Override
+ public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
+// int progress = (int) (100 * currentSize / totalSize);
+// if (mProgress != null) {
+// mProgress.setProgress(progress);
+// }
+ if (activity != null) {
+ activity.runOnUiThread(() -> {
+ if (dialog != null && !dialog.isShow()) {
+ dialog.show();
+ }
+ });
+
+ }
+
+ }
+ });
+
+ OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() {
+ @Override
+ public void onSuccess(PutObjectRequest request, final PutObjectResult result) {
+ if (activity != null) {
+ activity.runOnUiThread(() -> {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ });
+ }
+
+ String serverCallbackReturnBody = result.getServerCallbackReturnBody();
+ callback.getPicData(result, OssConfigBean.BUCKET_BASE_URL + OssConfigBean.BUCKET_OBJECT + name);
+ }
+
+ @Override
+ public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
+ if (activity != null) {
+ activity.runOnUiThread(() -> {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ });
+
+ }
+ String info = "";
+ // 请求异常
+ if (clientExcepion != null) {
+ // 本地异常如网络异常等
+ clientExcepion.printStackTrace();
+ info = clientExcepion.toString();
+ }
+ if (serviceException != null) {
+ // 服务异常
+ Log.e("ErrorCode", serviceException.getErrorCode());
+ Log.e("RequestId", serviceException.getRequestId());
+ Log.e("HostId", serviceException.getHostId());
+ Log.e("RawMessage", serviceException.getRawMessage());
+ info = serviceException.toString();
+ }
+// task.cancel();
+ }
+ });
+ }
+
+
+ /**
+ * 上传次数
+ */
+ int number;
+ /**
+ * 成功上传(本地文件名作为key,阿里云地址为value)
+ */
+ List success = new ArrayList<>();
+ /**
+ * 失败上传(返回失败文件的本地地址)
+ */
+ List failure = new ArrayList<>();
+
+ /**
+ * 批量上传图片
+ *
+ * @param localFiles
+ */
+ public void asyncPutImages(final List localFiles, final AppCompatActivity activity, PicsResultCallback callback) {
+
+ if (activity != null) {
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ initDialog(activity);
+ if (dialog != null) {
+ dialog.show();
+ }
+ }
+ });
+ }
+
+ //初始化
+ number = 0;
+ success.clear();
+ failure.clear();
+ for (int i = 0; i < localFiles.size(); i++) {
+ File file = new File(localFiles.get(i));
+ if (!file.exists()) {
+ return;
+ }
+ String name = file.getName();
+ // 构造上传请求
+ PutObjectRequest put = new PutObjectRequest(OssConfigBean.bucket, OssConfigBean.BUCKET_OBJECT + name, localFiles.get(i));
+
+ put.setCRC64(OSSRequest.CRC64Config.YES);
+
+ oss.asyncPutObject(put, new OSSCompletedCallback() {
+ @Override
+ public void onSuccess(PutObjectRequest request, final PutObjectResult result) {
+ number++;
+ String aliPath = OssConfigBean.BUCKET_BASE_URL + OssConfigBean.BUCKET_OBJECT + name;
+ success.add(aliPath);
+ if (number == localFiles.size()) {
+ if (activity != null) {
+ activity.runOnUiThread(() -> {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ });
+
+ }
+ //返回 上传路径,以及失败的路径
+ callback.onOssSuccess(success, failure);
+ }
+
+ }
+
+ @Override
+ public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
+ number++;
+ String aliPath = OssConfigBean.BUCKET_BASE_URL + OssConfigBean.BUCKET_OBJECT + name;
+ failure.add(aliPath);
+ if (number == localFiles.size()) {
+ if (activity != null) {
+ activity.runOnUiThread(() -> {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ });
+
+ }
+ callback.onOssSuccess(success, failure);
+ }
+ }
+ });
+ }
+
+ }
+
+ /**
+ * 图片以bitmap的形式上传
+ *
+ * @param object
+ * @param localFile
+ * @param mProgress
+ * @param img
+ * @param type
+ */
+ public void asyncPutImage(String object, final Bitmap localFile, final ProgressBar mProgress, final ImageView img, String type) {
+ if (object.equals("")) {
+ Log.w("AsyncPutImage", "ObjectNull");
+ return;
+ }
+ if (localFile == null) {
+ Log.w("AsyncPutImage", "bitmapNull");
+ return;
+ }
+
+ // 构造上传请求
+ PutObjectRequest put = new PutObjectRequest(bucket, object, getBitmapByte(localFile));
+ //上传后回调通知
+ // 客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。
+ put.setCallbackParam(new HashMap() {
+ {
+ put("callbackUrl", path);
+ put("callbackBody",
+//参数跟后台商议
+ "filename=${object}&size=${size}&action=${x:action}}");
+ }
+ });
+ HashMap hashMap = new HashMap<>();
+ hashMap.put("x:action", type);
+ put.setCallbackVars(hashMap);
+ OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() {
+ @Override
+ public void onSuccess(PutObjectRequest request, final PutObjectResult result) {
+
+ Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer() {
+ @Override
+ public void accept(PutObjectResult putObjectResult) throws Throwable {
+ callback.getPicData(result, "");
+ }
+ });
+// Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(putObjectResult -> callback.getPicData(result, ""));
+ }
+
+ @Override
+ public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
+ String info = "";
+ // 请求异常
+ if (clientExcepion != null) {
+ // 本地异常如网络异常等
+ clientExcepion.printStackTrace();
+ info = clientExcepion.toString();
+ }
+ if (serviceException != null) {
+ // 服务异常
+ Log.e("ErrorCode", serviceException.getErrorCode());
+ Log.e("RequestId", serviceException.getRequestId());
+ Log.e("HostId", serviceException.getHostId());
+ Log.e("RawMessage", serviceException.getRawMessage());
+ info = serviceException.toString();
+ }
+ }
+ });
+ }
+
+ public byte[] getBitmapByte(Bitmap bitmap) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
+ try {
+ out.flush();
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return out.toByteArray();
+ }
+
+ public interface picResultCallback {
+ void getPicData(PutObjectResult data, String netPath);
+ }
+
+ public interface PicsResultCallback {
+ void onOssSuccess(List success, List failure);
+ }
+
+
+
+ /**
+ * Gets the corresponding path to a file from the given content:// URI
+ * @param selectedVideoUri The content:// URI to find the file path from
+ * @param contentResolver The content resolver to use to perform the query.
+ * @return the file path as a string
+ */
+ public String getFilePathFromContentUri(Uri selectedVideoUri,
+ ContentResolver contentResolver) {
+ String filePath;
+ String[] filePathColumn = {MediaStore.MediaColumns.DATA};
+
+ Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);
+// 也可用下面的方法拿到cursor
+// Cursor cursor = this.context.managedQuery(selectedVideoUri, filePathColumn, null, null, null);
+
+ cursor.moveToFirst();
+
+ int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
+ filePath = cursor.getString(columnIndex);
+ cursor.close();
+ return filePath;
+ }
+}
diff --git a/app/src/main/java/com/dhsd/glowner/ui/mine/MineFragment.kt b/app/src/main/java/com/dhsd/glowner/ui/mine/MineFragment.kt
index 1beeeff..2c33819 100644
--- a/app/src/main/java/com/dhsd/glowner/ui/mine/MineFragment.kt
+++ b/app/src/main/java/com/dhsd/glowner/ui/mine/MineFragment.kt
@@ -5,6 +5,7 @@ import DataManager
import RxHttpCallBack
import android.os.Bundle
import android.view.View
+import androidx.appcompat.app.AppCompatActivity
import com.dahe.gldriver.bean.GridBean
import com.dahe.glex.bean.UserBean
import com.dahe.glex.bean.UserParent
@@ -12,20 +13,26 @@ import com.dahe.mylibrary.base.BaseFragment
import com.dahe.mylibrary.callback.RefreshCallBack
import com.dahe.mylibrary.net.CommonResponseBean
import com.dahe.mylibrary.utils.ActivityUtils
+import com.dahe.mylibrary.utils.BaseUtils
import com.dahe.mylibrary.utils.ImageLoader
import com.dahe.mylibrary.utils.ToastUtils
import com.dhsd.glowner.R
import com.dhsd.glowner.adapter.GridItemAdapter
import com.dhsd.glowner.databinding.FragmentMineBinding
+import com.dhsd.glowner.ui.WebActivity
+import com.dhsd.glowner.ui.mine.activity.AuthPartyActivity
+import com.dhsd.glowner.ui.mine.activity.ComProActivity
+import com.dhsd.glowner.ui.mine.activity.RulesActivity
import com.dhsd.glowner.ui.mine.activity.SettingActivity
+import com.dhsd.glowner.utils.AppVersionUtils
import com.tencent.bugly.crashreport.CrashReport
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
class MineFragment : BaseFragment(), View.OnClickListener, RefreshCallBack {
private val tools = mutableListOf(
- GridBean("车队管理", R.drawable.car_team),
- GridBean("车辆管理", R.drawable.car_manage),
+ GridBean("常用地址", R.drawable.car_team),
+ GridBean("熟车管理", R.drawable.car_manage),
GridBean("司机课堂", R.drawable.mine_class),
GridBean("评价管理", R.drawable.rate)
)
@@ -130,31 +137,38 @@ class MineFragment : BaseFragment(), View.OnClickListener,
private fun goPlats(pos: Int) {
when (pos) {
0 -> {
-// ActivityUtils.startActivity(mContext, RulesActivity::class.java)
+ ActivityUtils.startActivity(mContext, RulesActivity::class.java)
}
1 -> {
-// ActivityUtils.startActivity(mContext, CarsManActivity::class.java)
+ ActivityUtils.startActivity(mContext, ComProActivity::class.java)
}
2 -> {
- ToastUtils.showToast(mContext, tools[pos].title)
+ BaseUtils.callPhone(activity as AppCompatActivity?, "13783631930")
+// ToastUtils.showToast(mContext, plats[pos].title)
}
3 -> {
- ToastUtils.showToast(mContext, tools[pos].title)
+ ActivityUtils.startActivity(mContext, WebActivity::class.java, Bundle().apply {
+ putString("title", "意见反馈")
+ putString("url", "https://support.qq.com/products/335639")
+ })
}
4 -> {
-// ActivityUtils.startActivity(mContext, AuthPartyActivity::class.java)
+ ActivityUtils.startActivity(mContext, AuthPartyActivity::class.java)
}
5 -> {
-
+ AppVersionUtils.getInstance().checkVersion(mContext)
}
6 -> {
-
+ ActivityUtils.startActivity(mContext, WebActivity::class.java, Bundle().apply {
+ putString("title", "关于我们")
+ putString("url", "http://www.dahehuoyun.com/index.html")
+ })
}
7 -> {
diff --git a/app/src/main/java/com/dhsd/glowner/ui/mine/activity/AuthPartyActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/AuthPartyActivity.kt
new file mode 100644
index 0000000..e2712d5
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/AuthPartyActivity.kt
@@ -0,0 +1,108 @@
+package com.dhsd.glowner.ui.mine.activity
+
+import BaseObserver
+import RxHttpCallBack
+import android.os.Bundle
+import com.dahe.gldriver.bean.Material
+import com.dahe.gldriver.bean.UpPart
+import com.dahe.mylibrary.base.BaseActivity
+import com.dahe.mylibrary.net.CommonResponseBean
+import com.dahe.mylibrary.utils.ImageLoader
+import com.dahe.mylibrary.utils.PickerUtils
+import com.dhsd.glowner.R
+import com.dhsd.glowner.databinding.ActivityAuthPartyBinding
+import com.dhsd.glowner.utils.OcrUtils
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.schedulers.Schedulers
+
+/**
+ * @ClassName AuthPartyActivity
+ * @Author john
+ * @Date 2024/2/1 11:20
+ * @Description 党员认证
+ */
+class AuthPartyActivity : BaseActivity() {
+
+ var upPart = UpPart()
+ override fun initView(savedInstanceState: Bundle?) {
+ setStatusBarColor(R.color.white)
+ setTitleBar("党员认证", true)
+ binding.run {
+ tvData.setOnClickListener {
+ PickerUtils.getInstance().showDate(this@AuthPartyActivity) {
+ upPart.partyMembershipTime = it
+ tvData.text = it
+ }
+ }
+ tvAddress.setOnClickListener {
+ PickerUtils.getInstance()
+ .showAddress(this@AuthPartyActivity) { province, city, county ->
+ upPart.run {
+ this.province = province.name
+ this.city = city.name
+ this.area = county.name
+ this.provinceCode = county.code
+ this.cityCode = city.code
+ this.areaCode = county.code
+ this.provinceCityArea =
+ """${province.name}-${city.name}-${county.name}"""
+ }
+ tvAddress.text = """${province.name}-${city.name}-${county.name}"""
+ }
+ }
+ ivUp.setOnClickListener {
+ OcrUtils.getInstance().noOcrUpPic(mContext, this@AuthPartyActivity) { picPath, _ ->
+ upPart.materialList.add(0, Material(materialUrl = picPath.picPath))
+ ImageLoader.getInstance()
+ .loadRoundImage(mContext, picPath.locPic, 12, ivUp)
+ }
+ }
+ btnOk.setOnClickListener {
+ subMit()
+ }
+ }
+ }
+
+ override fun initDate() {
+
+ DataManager.getInstance().getCpcAuthenticationInfo()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(BaseObserver(mContext,object :RxHttpCallBack(){
+ override fun onSuccess(t: CommonResponseBean) {
+ super.onSuccess(t)
+ t.data?.let {
+ upPart = it
+ binding.run {
+ tvData.text = it.partyMembershipTime
+ tvAddress.text = it.provinceCityArea
+ etAddress.setText(it.address)
+ ImageLoader.getInstance().loadRoundImage(mContext,it.materialList[0].materialUrl,12,ivUp)
+ }
+ }
+ }
+ }))
+
+ }
+
+ private fun subMit() {
+ if (binding.tvData.text.isNullOrEmpty() ||
+ binding.tvAddress.text.isNullOrEmpty() ||
+ binding.etAddress.text.isNullOrEmpty()||
+ upPart.materialList.size==0
+ ) {
+ showToast("请完善信息")
+ return
+ }
+ upPart.address = binding.etAddress.text.toString()
+ DataManager.getInstance().submitToCpcAuthentication(upPart)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(BaseObserver(mContext, object : RxHttpCallBack() {
+ override fun onSuccess(t: CommonResponseBean) {
+ super.onSuccess(t)
+ finish()
+ }
+ }))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProActivity.kt
new file mode 100644
index 0000000..7af6933
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProActivity.kt
@@ -0,0 +1,73 @@
+package com.dhsd.glowner.ui.mine.activity
+
+import BaseObserver
+import RxHttpCallBack
+import android.graphics.Color
+import android.os.Bundle
+import android.widget.LinearLayout
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.dahe.gldriver.base.AppConfig
+import com.dahe.gldriver.bean.ProBean
+import com.dahe.mylibrary.base.BaseActivity
+import com.dahe.mylibrary.net.CommonResponseBean
+import com.dahe.mylibrary.recycleviewswipe.RecycleViewDivider
+import com.dahe.mylibrary.utils.ActivityUtils
+import com.dahe.mylibrary.utils.ConvertUtils
+import com.dhsd.glowner.R
+import com.dhsd.glowner.adapter.ComProAdatper
+import com.dhsd.glowner.databinding.ActivityComProBinding
+
+import com.google.gson.Gson
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.schedulers.Schedulers
+
+/**
+ * @ClassName ComProActivity
+ * @Author john
+ * @Date 2024/3/25 16:42
+ * @Description 常见问题
+ */
+class ComProActivity : BaseActivity() {
+
+ lateinit var adapter: ComProAdatper
+ override fun initView(savedInstanceState: Bundle?) {
+ setStatusBarColor(R.color.white)
+ setTitleBar("常见问题", true)
+ binding.run {
+ adapter = recycler.run {
+ layoutManager = LinearLayoutManager(mContext, RecyclerView.VERTICAL, false)
+ addItemDecoration(
+ RecycleViewDivider(
+ LinearLayout.VERTICAL,
+ ConvertUtils.dp2px(10.0f),
+ Color.TRANSPARENT
+ )
+ )
+ adapter = ComProAdatper()
+ adapter as ComProAdatper
+ }.apply {
+ setOnItemClickListener { _, _, position ->
+ ActivityUtils.startActivity(
+ mContext,
+ ComProDetailActivity::class.java,
+ Bundle().apply {
+ putString(AppConfig.BEAN, Gson().toJson(items[position]))
+ })
+ }
+ }
+ }
+ }
+
+ override fun initDate() {
+ DataManager.getInstance().commonProblemList()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(BaseObserver(mContext, object : RxHttpCallBack>() {
+ override fun onSuccess(t: CommonResponseBean>) {
+ super.onSuccess(t)
+ adapter.submitList(t.data)
+ }
+ }))
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProDetailActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProDetailActivity.kt
new file mode 100644
index 0000000..536519c
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/ComProDetailActivity.kt
@@ -0,0 +1,85 @@
+package com.dhsd.glowner.ui.mine.activity
+
+import BaseObserver
+import RxHttpCallBack
+import android.graphics.Bitmap
+import android.os.Bundle
+import android.text.Html
+import android.webkit.WebSettings
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import android.widget.FrameLayout
+import com.dahe.gldriver.base.AppConfig
+import com.dahe.gldriver.bean.ProBean
+import com.dahe.mylibrary.base.BaseActivity
+import com.dahe.mylibrary.net.CommonResponseBean
+import com.dhsd.glowner.R
+import com.dhsd.glowner.databinding.ActivityComProDetailBinding
+import com.google.gson.Gson
+import com.just.agentweb.AgentWeb
+import com.just.agentweb.AgentWebUIControllerImplBase
+import com.just.agentweb.WebChromeClient
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.schedulers.Schedulers
+
+
+/**
+ * @ClassName ComProActivity
+ * @Author john
+ * @Date 2024/3/25 16:42
+ * @Description 问题详情
+ */
+class ComProDetailActivity : BaseActivity() {
+ private var mAgentWeb: AgentWeb? = null
+ override fun initView(savedInstanceState: Bundle?) {
+ setStatusBarColor(R.color.white)
+ setTitleBar("常见问题", true)
+
+
+ mAgentWeb = AgentWeb.with(this)
+ .setAgentWebParent(binding.WebViewLayout, FrameLayout.LayoutParams(-1, -1))
+ .useDefaultIndicator()
+ .setWebChromeClient(mWebChromeClient)
+ .setSecurityType(AgentWeb.SecurityType.DEFAULT_CHECK)
+ .setAgentWebUIController(AgentWebUIControllerImplBase())
+ .createAgentWeb()
+ .ready()
+ .go("")
+
+ }
+
+ override fun initDate() {
+ var proBean = Gson().fromJson(intent.extras?.getString(AppConfig.BEAN), ProBean::class.java)
+
+ binding.run {
+ tvTitle.text = proBean.problemName
+ }
+
+ DataManager.getInstance().commonProblemDetail(proBean.problemId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(BaseObserver(mContext, object : RxHttpCallBack() {
+ override fun onSuccess(t: CommonResponseBean) {
+ super.onSuccess(t)
+ binding.run {
+ mAgentWeb?.webCreator?.webView?.loadDataWithBaseURL(null,t.data.contentData,"text/html" , "utf-8", null)
+// mAgentWeb?.webCreator?.webView?.postUrl(mUrl, postData.toByteArray())
+ }
+ }
+ }))
+ }
+
+ private val mWebChromeClient: WebChromeClient = object : WebChromeClient() {
+ override fun onProgressChanged(view: WebView, newProgress: Int) {
+ super.onProgressChanged(view, newProgress)
+ }
+
+ override fun onReceivedTitle(view: WebView, title: String) {
+ super.onReceivedTitle(view, title)
+// setTitleBar(
+// if (TextUtils.isEmpty(mTitle)) title else mTitle
+// ) { if (!mAgentWeb!!.back()) finish() }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/ui/mine/activity/RulesActivity.kt b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/RulesActivity.kt
new file mode 100644
index 0000000..8624ee7
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/ui/mine/activity/RulesActivity.kt
@@ -0,0 +1,45 @@
+package com.dhsd.glowner.ui.mine.activity
+
+import android.content.Intent
+import android.os.Bundle
+import com.dahe.mylibrary.base.BaseActivity
+import com.dahe.mylibrary.utils.ActivityUtils
+import com.dhsd.glowner.R
+import com.dhsd.glowner.databinding.ActivityRulesBinding
+import com.dhsd.glowner.ui.WebActivity
+
+
+/**
+ * @ClassName RulesActivity
+ * @Author john
+ * @Date 2024/2/1 11:06
+ * @Description 平台规则
+ */
+class RulesActivity : BaseActivity() {
+ override fun initView(savedInstanceState: Bundle?) {
+ setStatusBarColor(R.color.white)
+ setTitleBar("平台规则",true)
+ binding.run {
+ rlOne.setOnClickListener {
+ ActivityUtils.startActivity(mContext, WebActivity::class.java,Bundle().apply {
+ putString("url","http://agreement.dahehuoyun.com/#/user")
+ putString("title","用户服务协议")
+ })
+ }
+ rlTwo.setOnClickListener {
+ ActivityUtils.startActivity(mContext,WebActivity::class.java,Bundle().apply {
+ putString("title","隐私协议")
+ putString("url","http://agreement.dahehuoyun.com/huawei/#/private")
+ })
+ }
+ rlThree.setOnClickListener {
+ ActivityUtils.startActivity(mContext,WebActivity::class.java,Bundle().apply {
+ putString("url","www.baidu.com")
+ })
+ }
+ }
+ }
+
+ override fun initDate() {
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/utils/AppVersionUtils.kt b/app/src/main/java/com/dhsd/glowner/utils/AppVersionUtils.kt
index c26aa45..23ef1d7 100644
--- a/app/src/main/java/com/dhsd/glowner/utils/AppVersionUtils.kt
+++ b/app/src/main/java/com/dhsd/glowner/utils/AppVersionUtils.kt
@@ -3,8 +3,11 @@ package com.dhsd.glowner.utils
import BaseObserver
import RxHttpCallBack
import android.content.Context
+import com.dahe.glex.bean.AppVersion
import com.dahe.mylibrary.base.SingletonNoPHolder
import com.dahe.mylibrary.net.CommonResponseBean
+import com.dahe.mylibrary.utils.AppUtils
+import com.dahe.mylibrary.utils.ToastUtils
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
@@ -18,18 +21,18 @@ class AppVersionUtils private constructor() {
companion object : SingletonNoPHolder(::AppVersionUtils)
fun checkVersion(context: Context) {
-// DataManager.getInstance().getLastAppVersion()
-// .subscribeOn(Schedulers.io())
-// .observeOn(AndroidSchedulers.mainThread())
-// .subscribe(BaseObserver(context, object : RxHttpCallBack() {
-// override fun onSuccess(t: CommonResponseBean) {
-// super.onSuccess(t)
-// if (t.data.versionCode> AppUtils.getAppVersionCode()) {
-// CommonPopUtils.getInstance().showUpApp(context,t.data)
-// } else {
-// ToastUtils.showToast(context, "已是最新版本")
-// }
-// }
-// }))
+ DataManager.getInstance().getLastAppVersion()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(BaseObserver(context, object : RxHttpCallBack() {
+ override fun onSuccess(t: CommonResponseBean) {
+ super.onSuccess(t)
+ if (t.data.versionCode> AppUtils.getAppVersionCode()) {
+ CommonPopUtils.getInstance().showUpApp(context,t.data)
+ } else {
+ ToastUtils.showToast(context, "已是最新版本")
+ }
+ }
+ }))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/utils/CommonPopUtils.kt b/app/src/main/java/com/dhsd/glowner/utils/CommonPopUtils.kt
index c7b6b84..523a58a 100644
--- a/app/src/main/java/com/dhsd/glowner/utils/CommonPopUtils.kt
+++ b/app/src/main/java/com/dhsd/glowner/utils/CommonPopUtils.kt
@@ -4,7 +4,11 @@ import android.content.Context
import android.graphics.Color
import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
+import com.arpa.hndahesudintocctmsdriver.weight.pop.UpAppPop
+import com.dahe.glex.bean.AppVersion
import com.dahe.mylibrary.base.SingletonNoPHolder
+import com.dahe.mylibrary.callback.OnPicResultListener
+import com.dahe.mylibrary.pop.PopNorBottomPic
import com.dhsd.glowner.bean.PopBean
import com.dhsd.glowner.cuspop.OnCarSelectListener
import com.dhsd.glowner.cuspop.PopBottomCar
@@ -62,4 +66,38 @@ class CommonPopUtils private constructor() {
.show()
}
+
+ /**
+ * 选择照片 拍照或者相机
+ *
+ * @param ctx
+ * @param listenter
+ */
+ fun showSimSelPic(ctx: Context, listenter: OnPicResultListener){
+
+ XPopup.Builder(ctx)
+ .dismissOnTouchOutside(true)
+ .asCustom(PopNorBottomPic(ctx, "", listenter))
+ .show()
+ }
+
+
+ /**
+ * app版本检查
+ * @param context Context
+ * @param appVersion AppVersion
+ */
+ fun showUpApp(context: Context, appVersion: AppVersion) {
+ XPopup.Builder(context)
+ .dismissOnBackPressed(false)
+ .dismissOnTouchOutside(false)
+ .asCustom(
+ UpAppPop(
+ context,
+ appVersion
+ )
+ )
+ .show()
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/utils/OcrUtils.kt b/app/src/main/java/com/dhsd/glowner/utils/OcrUtils.kt
new file mode 100644
index 0000000..a7a64fb
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/utils/OcrUtils.kt
@@ -0,0 +1,482 @@
+package com.dhsd.glowner.utils
+
+import android.content.Context
+import androidx.appcompat.app.AppCompatActivity
+import com.dahe.mylibrary.base.SingletonNoPHolder
+import com.dhsd.glowner.callback.OnOcrPicResultListener
+import com.dhsd.glowner.callback.PicPath
+import com.dhsd.glowner.oss.OssServiceUtil
+import com.luck.picture.lib.config.PictureMimeType
+import com.luck.picture.lib.utils.DateUtils
+import com.lxj.xpopup.XPopup
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.schedulers.Schedulers
+import top.zibin.luban.Luban
+import top.zibin.luban.OnNewCompressListener
+import java.io.File
+
+/**
+ * @ClassName OcrUtils
+ * @Author john
+ * @Date 2024/2/28 17:11
+ * @Description TODO
+ */
+class OcrUtils private constructor() {
+
+ companion object : SingletonNoPHolder(::OcrUtils)
+
+
+// /**
+// * 身份证识别
+// * */
+// fun ocrPerson(context: Context,picUrl: String = "", activity: AppCompatActivity, listener: OnOcrPicResultListener) {
+// PopsUtils.getInstance().showSimSelPic2(context,picUrl) { result ->
+// LoadingUtils.instance.showLoading(activity)
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].realPath, null)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeIdcard(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(BaseObserver(context, object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// LoadingUtils.instance.dissLoading()
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(result[0].realPath, oldPath), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(mContext, "图片识别失败,请重新上传")
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// }))
+// }
+// }
+// }
+// }
+//
+//
+//
+// /**
+// * 身份证识别
+// * */
+// fun ocrPerson(context: Context, activity: AppCompatActivity, listener: OnOcrPicResultListener) {
+// PopsUtils.getInstance().showSimSelPic(context) { result ->
+// LoadingUtils.instance.showLoading(activity)
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].availablePath, null)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeIdcard(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(BaseObserver(context, object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// LoadingUtils.instance.dissLoading()
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(result[0].realPath, oldPath), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(mContext, "图片识别失败,请重新上传")
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// }))
+// }
+// }
+// }
+// }
+//
+//
+// /**
+// * 上传oss并ocr识别
+// * @param context Context
+// * @param picPath String
+// * @param activity AppCompatActivity
+// * @param listener OnOcrPicResultListener
+// */
+// fun onlyOcrPerson(context: Context,picPath: String, activity: AppCompatActivity, listener: OnOcrPicResultListener){
+// //上传oss得到图片地址
+// LoadingUtils.instance.showLoading(activity)
+//
+// //压缩
+// Luban.with(context).load(picPath).ignoreBy(30).setRenameListener { filePath ->
+// val indexOf = filePath.lastIndexOf(".")
+// val postfix = if (indexOf != -1) filePath.substring(indexOf) else ".jpg"
+// DateUtils.getCreateFileName("CMP_") + postfix
+// }.filter { path ->
+// if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
+// true
+// } else !PictureMimeType.isUrlHasGif(path)
+// }.setCompressListener(object : OnNewCompressListener {
+// override fun onStart() {}
+// override fun onSuccess(source: String, compressFile: File) {
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(compressFile.absolutePath, null)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeIdcard(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(BaseObserver(context, object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// LoadingUtils.instance.dissLoading()
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(picPath, oldPath), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(mContext, "图片识别失败,请重新上传")
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// }))
+// }
+// }
+//
+// }
+//
+// override fun onError(source: String, e: Throwable) {
+// LoadingUtils.instance.dissLoading()
+//// call?.onCallback(source, null)
+// }
+// }).launch()
+//
+//
+//
+//
+// }
+//
+//
+// /**
+// * 驾驶证ocr识别
+// * */
+// fun ocrDriver(context: Context, activity: AppCompatActivity, listener: OnOcrPicResultListener) {
+// PopsUtils.getInstance().showSimSelPic(context) { result ->
+// LoadingUtils.instance.showLoading(activity)
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].availablePath, null)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeDrivingLicense(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(
+// BaseObserver(
+// context,
+// object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// LoadingUtils.instance.dissLoading()
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(
+// result[0].realPath,
+// oldPath
+// ), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(
+// mContext,
+// "图片识别失败,请重新上传"
+// )
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// })
+// )
+// }
+// }
+// }
+// }
+//
+//
+// /**
+// * 行驶证ocr识别
+// * */
+// fun ocrDriveing(
+// context: Context,
+// activity: AppCompatActivity,
+// listener: OnOcrPicResultListener
+// ) {
+// PopsUtils.getInstance().showSimSelPic(context) { result ->
+// LoadingUtils.instance.showLoading(activity)
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].availablePath, null)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeVehicleLicense(oldPath)//行驶证识别
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(
+// BaseObserver(
+// context,
+// object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// LoadingUtils.instance.dissLoading()
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(
+// result[0].realPath,
+// oldPath
+// ), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(
+// mContext,
+// "图片识别失败,请重新上传"
+// )
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// })
+// )
+// }
+// }
+// }
+// }
+//
+//
+// /**
+// * 银行卡ocr识别
+// * */
+// fun ocrBankCard(
+// context: Context,
+// activity: AppCompatActivity,
+// listener: OnOcrPicResultListener
+// ) {
+// PopsUtils.getInstance().showSimSelPic(context) { result ->
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].availablePath, activity)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeBankCard(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(
+// BaseObserver(
+// context,
+// object : RxHttpCallBack(activity) {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(
+// result[0].realPath,
+// oldPath
+// ), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(
+// mContext,
+// "图片识别失败,请重新上传"
+// )
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// })
+// )
+// }
+// }
+// }
+// }
+//
+//
+// /**
+// * 营业执照ocr识别
+// * */
+// fun ocrBusinessCard(
+// context: Context,
+// activity: AppCompatActivity,
+// listener: OnOcrPicResultListener
+// ) {
+// PopsUtils.getInstance().showSimSelPic(context) { result ->
+// //上传oss得到图片地址
+// OssServiceUtil.getInstance().run {
+// asyncPutImage(result[0].availablePath, activity)
+// setResultCallBack { data, oldPath ->
+// DataManager.getInstance().recognizeBusinessLicense(oldPath)
+// .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+// .subscribe(
+// BaseObserver(
+// context,
+// object : RxHttpCallBack(activity) {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// t.data?.let {
+// listener.onSuccResult(
+// PicPath(
+// result[0].realPath,
+// oldPath
+// ), it
+// )
+// }
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+//// if (t.msg.contains("code: 400, The image type does not match the API operation")) {
+// ToastUtils.showToast(
+// mContext,
+// "图片识别失败,请重新上传"
+// )
+//// } else {
+//// ToastUtils.showToast(mContext, t.msg)
+//// }
+// }
+// }
+// })
+// )
+// }
+// }
+// }
+// }
+//
+// /**
+// * 车牌号码ocr识别
+// * */
+// fun ocrCarNumber(
+// context: Context,
+// picPath: String,
+// activity: AppCompatActivity,
+// listener: OnOcrCarNumListener
+// ) {
+// DataManager.getInstance().recognizeCarNumber(picPath)
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .subscribe(
+// BaseObserver(activity,
+// object : RxHttpCallBack() {
+// override fun onSuccess(t: CommonResponseBean) {
+// super.onSuccess(t)
+// if (t.data.data.info != null && t.data.data.info.isNotEmpty() && RegexpUtils.isPlateNumber(
+// t.data.data.info[0].value
+// )
+// ) {
+// listener.onSuccResult(t.data.data.info[0].value)
+// } else {
+// ToastUtils.showToast(
+// activity,
+// "未识别出车牌号码,请重新拍摄"
+// )
+// }
+//
+// }
+//
+// override fun onCodeError(
+// mContext: Context?,
+// t: CommonResponseBean
+// ) {
+//// super.onCodeError(mContext, t)
+// LoadingUtils.instance.dissLoading()
+// if (t.code == 500) {
+// ToastUtils.showToast(
+// mContext,
+// "未识别出车牌号码,请重新拍摄"
+// )
+// }
+// }
+// })
+// )
+// }
+
+
+ fun noOcrUpPic(
+ context: Context,
+ activity: AppCompatActivity,
+ listener: OnOcrPicResultListener
+ ) {
+
+ CommonPopUtils.getInstance().showSimSelPic(context) {
+ var data = it[0]
+ OssServiceUtil.getInstance().run {
+ asyncPutImage(data.availablePath, activity)
+ setResultCallBack { data, oldPath ->
+ activity.runOnUiThread {
+ listener.onSuccResult(
+ PicPath(it[0].realPath, oldPath), null
+ )
+ }
+
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dhsd/glowner/weight/pop/UpAppPop.kt b/app/src/main/java/com/dhsd/glowner/weight/pop/UpAppPop.kt
new file mode 100644
index 0000000..55db9e2
--- /dev/null
+++ b/app/src/main/java/com/dhsd/glowner/weight/pop/UpAppPop.kt
@@ -0,0 +1,118 @@
+package com.arpa.hndahesudintocctmsdriver.weight.pop
+
+import android.content.Context
+import android.util.Log
+import android.view.View
+import android.view.View.OnClickListener
+import android.widget.Button
+import android.widget.ImageButton
+import android.widget.LinearLayout
+import android.widget.ProgressBar
+import android.widget.TextView
+import com.dahe.glex.bean.AppVersion
+import com.dhsd.glowner.R
+import com.king.app.updater.AppUpdater
+import com.king.app.updater.callback.AppUpdateCallback
+import com.king.app.updater.constant.Constants
+import com.lxj.xpopup.core.CenterPopupView
+import java.io.File
+
+/**
+ * @author hlh
+ * @version 1.0.0
+ * @date 2021/9/6 17:23
+ * @description:
+ */
+class UpAppPop : CenterPopupView {
+ private var content: TextView? = null
+ private var vs: TextView? = null
+ private var tvContent: TextView? = null
+ private var tv_cancel: Button? = null
+ private var tv_confirm: Button? = null
+ private var tvOk: Button? = null
+ private var up_div: LinearLayout? = null
+
+ private var con: Context? = null
+ private var progress_view: ProgressBar? = null
+
+ private var force_box: LinearLayout? = null
+ private var force_btn: ImageButton? = null
+ private var appVersion : AppVersion? = null
+
+ constructor(
+ context: Context,
+ appVersion: AppVersion
+ ) : super(context) {
+ con = context
+ this.appVersion = appVersion
+ }
+
+ override fun getImplLayoutId(): Int {
+ return R.layout.alert_up_app
+ }
+
+ constructor(context: Context) : super(context)
+
+ override fun onCreate() {
+ super.onCreate()
+ content = findViewById(R.id.tv_content)
+ tv_cancel = findViewById(R.id.tv_cancel)
+ tv_confirm = findViewById(R.id.tv_confirm)
+ tvContent = findViewById(R.id.tvContent)
+ tvOk = findViewById