diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index efe7ad6..4607ed5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -172,6 +172,17 @@ android:configChanges="keyboardHidden|orientation|locale" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" /> + + + () { + override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: ProBean?) { + holder.run { + setText(R.id.tvProTitle, item?.problemName) + setText(R.id.tvContent, item?.problemDesc) + setText(R.id.tvNum, """${position + 1}""") + } + } + + override fun onCreateViewHolder( + context: Context, + parent: ViewGroup, + viewType: Int + ) = QuickViewHolder(R.layout.item_com_pro, parent) +} \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/bean/OcrBean.kt b/app/src/main/java/com/dhsd/glowner/bean/OcrBean.kt new file mode 100644 index 0000000..e680079 --- /dev/null +++ b/app/src/main/java/com/dhsd/glowner/bean/OcrBean.kt @@ -0,0 +1,134 @@ +package com.dhsd.glowner.bean + +/** + * @ClassName OcrBean + * @Author john + * @Date 2024/2/27 09:58 + * @Description TODO + */ +data class OcrPersonBean( + val algo_version: String, + val `data`: Data, + val height: Int, + val orgHeight: Int, + val orgWidth: Int, + val width: Int +) + +data class Data( + val face: Face, + val back: Back, + val info: List, + + //银行卡 + val bankName: String, + val cardNumber: String, + + //营业执照 + val creditCode: String,//信用代码 + val companyName: String,//名称 + val companyType: String,//类型 + val businessAddress: String, + val legalPerson: String, + val businessScope: String, + val registeredCapital: String,//注册资本 + val RegistrationDate: String,//成立日期2014年01月07日 + val validFromDate: String,//20140107 + val validToDate: String, + val issueDate: String + + +) + + +data class Back( + val `data`: DataX +) + +data class Face( + val algo_version: String, + val angle: Int, + val `data`: DataX, + val ftype: Int, + val height: Int, + val orgHeight: Int, + val orgWidth: Int, + val prism_keyValueInfo: List, + val sliceRect: SliceRect, + val width: Int, + + + ) + +data class CarInfo( + val key: String, + val key_loc: String, + val key_prob: String, + val value: String, + val value_loc: String, + val value_prob: String +) + +data class DataX( + var address: String = "", + val birthDate: String = "", + val ethnicity: String = "", + val idNumber: String = "", + val engineNumber: String = "", + val name: String = "", + val sex: String = "", + val issueAuthority: String = "",//哈尔滨市公安局呼兰分局 + val validPeriod: String = "",//2012.07.17-2032.07.17 + + //驾驶证 + val licenseNumber: String = "", + val nationality: String = "", + val initialIssueDate: String = "", + val approvedType: String = "", + val validFromDate: String = "", + + //行驶证 + val model: String = "", + val owner: String = "", + val licensePlateNumber: String = "", + val registrationDate: String = "", + val useNature: String = "",//使用性质 + val vehicleType: String = "", + val vinCode: String = "", + val recordNumber: String = "",//档案编号 + val passengerCapacity: String = "", + val curbWeight: String = "",//整备质量 + val totalWeight: String = "",//总质量 + val permittedWeight: String = "",//核定载质量 + val tractionWeight: String = "",//准牵引总质量 + var overallDimension: String = "",//6915×2550×3960mm + val plateColorCode: String = "",//车牌颜色 + val inspectionRecord: String = "",//检验有效期至2023年06月吉J 有效期 + val issueDate: String = "",//发证日期 + val energySign: String = "",//能源类型 + val barcodeNumber: String = "",//条码编号 +) + +data class PrismKeyValueInfo( + val key: String, + val keyProb: Int, + val value: String, + val valuePos: List, + val valueProb: Int +) + +data class SliceRect( + val x0: Int, + val x1: Int, + val x2: Int, + val x3: Int, + val y0: Int, + val y1: Int, + val y2: Int, + val y3: Int +) + +data class ValuePo( + val x: Int, + val y: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/bean/TabBean.kt b/app/src/main/java/com/dhsd/glowner/bean/TabBean.kt index b9952bc..b86bd45 100644 --- a/app/src/main/java/com/dhsd/glowner/bean/TabBean.kt +++ b/app/src/main/java/com/dhsd/glowner/bean/TabBean.kt @@ -24,3 +24,62 @@ data class TabBean(var title:String, return unSelectedIcon } } + +/** + * 常见问题bean + * @property isRecommend String + * @property isTop String + * @property problemDesc String + * @property problemId Int + * @property problemName String + * @property problemUrl String + * @property sortValue String + * @property status String + * @constructor + */ +data class ProBean( + val isRecommend: String, + val isTop: String, + val problemDesc: String, + val problemId: String, + val problemName: String, + val problemUrl: String, + val sortValue: String, + val status: String, + val contentData: String +) + + +/** + * 提交党员认证资料 + * @property address String + * @property area String + * @property areaCode String + * @property city String + * @property cityCode String + * @property materialList List + * @property partyMembershipTime String + * @property province String + * @property provinceCityArea String + * @property provinceCode String + * @constructor + */ +data class UpPart( + var address: String = "", + var area: String = "", + var areaCode: String = "", + var city: String = "", + var cityCode: String = "", + var materialList: MutableList = mutableListOf(), + var partyMembershipTime: String = "", + var province: String = "", + var provinceCityArea: String = "", + var provinceCode: String = "" +) + +data class Material( + var isDel: String="", + var materialId: String="", + var materialUrl: String="", + var sortValue: String="" +) diff --git a/app/src/main/java/com/dhsd/glowner/bean/UserBean.kt b/app/src/main/java/com/dhsd/glowner/bean/UserBean.kt index 57ee81b..c81947a 100644 --- a/app/src/main/java/com/dhsd/glowner/bean/UserBean.kt +++ b/app/src/main/java/com/dhsd/glowner/bean/UserBean.kt @@ -31,4 +31,19 @@ data class CodeBean( val uuid:String ) +data class AppVersion( + val content: String, + val createTime: String, + val delete: String, + val downloadUrl: String, + val examine: String, + val force: String, + val qrocdeUrl: String, + val source: String, + val type: String, + val versionCode: Int, + val versionName: String, + val versionId: String +) + diff --git a/app/src/main/java/com/dhsd/glowner/callback/OnOcrPicResultListener.kt b/app/src/main/java/com/dhsd/glowner/callback/OnOcrPicResultListener.kt new file mode 100644 index 0000000..7240116 --- /dev/null +++ b/app/src/main/java/com/dhsd/glowner/callback/OnOcrPicResultListener.kt @@ -0,0 +1,23 @@ +package com.dhsd.glowner.callback + +import com.dhsd.glowner.bean.OcrPersonBean + + +/** + * @ClassName OnOcrPicResultListener + * @Author john + * @Date 2024/2/28 17:18 + * @Description TODO + */ +fun interface OnOcrPicResultListener { + fun onSuccResult(picPath: PicPath, result: OcrPersonBean?) +} + + +fun interface OnOcrCarNumListener { + fun onSuccResult(carNum: String) +} + +data class PicPath( + var locPic: String, var picPath: String +) \ No newline at end of file diff --git a/app/src/main/java/com/dhsd/glowner/net/Api.kt b/app/src/main/java/com/dhsd/glowner/net/Api.kt index b48333a..764bc1d 100644 --- a/app/src/main/java/com/dhsd/glowner/net/Api.kt +++ b/app/src/main/java/com/dhsd/glowner/net/Api.kt @@ -1,3 +1,5 @@ +import com.dahe.gldriver.bean.ProBean +import com.dahe.gldriver.bean.UpPart import com.dahe.glex.bean.* import com.dahe.mylibrary.net.CommonResponseBean import com.dhsd.glowner.BuildConfig @@ -175,4 +177,44 @@ interface Api { */ @GET(BASE_URL + "devApi/business/ft/common/dict/goodsCategor") fun getGoodsCategor(): Observable>> + + + + /** + * 常见问题详情 + * @param problemId String + * @return Observable>> + */ + @GET(BASE_URL + "driver/app/info/commonProblemDetail") + fun commonProblemDetail(@Query("problemId") problemId: String): Observable> + + /** + * 常见问题列表 + * @return Observable>> + */ + @GET(BASE_URL + "driver/app/info/commonProblemList") + fun commonProblemList(): Observable>> + + /** + * 查询党员认证资料 + * @param upPart UpPart + * @return Observable> + */ + @GET(BASE_URL + "driver/driver/getCpcAuthenticationInfo") + fun getCpcAuthenticationInfo(): Observable> + + /** + * 提交党员认证资料 + * @param upPart UpPart + * @return Observable> + */ + @POST(BASE_URL + "driver/driver/submitToCpcAuthentication") + fun submitToCpcAuthentication(@Body upPart: UpPart): Observable> + + /** + * 获取APP最新版本信息 + * @return Observable> + */ + @GET(BASE_URL + "driver/app/info/getLastAppVersion") + fun getLastAppVersion(): Observable> } \ 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 + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_com_pro.xml b/app/src/main/res/layout/activity_com_pro.xml new file mode 100644 index 0000000..8200001 --- /dev/null +++ b/app/src/main/res/layout/activity_com_pro.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_com_pro_detail.xml b/app/src/main/res/layout/activity_com_pro_detail.xml new file mode 100644 index 0000000..7ed0c0d --- /dev/null +++ b/app/src/main/res/layout/activity_com_pro_detail.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_rules.xml b/app/src/main/res/layout/activity_rules.xml new file mode 100644 index 0000000..1184797 --- /dev/null +++ b/app/src/main/res/layout/activity_rules.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/alert_up_app.xml b/app/src/main/res/layout/alert_up_app.xml new file mode 100644 index 0000000..35f04e9 --- /dev/null +++ b/app/src/main/res/layout/alert_up_app.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + +