diff --git a/verification/src/main/AndroidManifest.xml b/verification/src/main/AndroidManifest.xml
index c172cdd..521cb90 100644
--- a/verification/src/main/AndroidManifest.xml
+++ b/verification/src/main/AndroidManifest.xml
@@ -70,6 +70,12 @@
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:exported="true">
+
+
{
+ private List mList;
+
+ private ShenQingFragment homeFragment;
+ private QingZhangFragment imageFragment;
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_home;
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ protected void initView() {
+ initNav();
+ initList();
+ }
+
+
+ private long lastTouchTime = 0;
+
+ /**
+ * 和ViewPager2联动
+ */
+ private void initNav() {
+// dataBinding.navView.setItemIconTintList(null);
+
+ dataBinding.navView.setOnNavigationItemSelectedListener(menuItem -> {
+ switch (menuItem.getItemId()) {
+ case R.id.navigation_home:
+ //smoothScroll 置false是为了取消动画
+ dataBinding.viewPager.setCurrentItem(0, true);
+ break;
+ case R.id.navigation_goods:
+ // 切换页面
+ if(dataBinding.viewPager.getCurrentItem() !=1) {
+ dataBinding.viewPager.setCurrentItem(1, true);
+ }
+ break;
+
+ }
+ return true;
+ });
+
+
+ //重点 实现viewpager2滑动的时候 联动 bottomNavigationView的selectedItem
+ dataBinding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageSelected(int position) {
+ super.onPageSelected(position);
+ switch (position){
+ case 0:
+ dataBinding.navView.setSelectedItemId(R.id.navigation_home);
+ break;
+ case 1:
+ dataBinding.navView.setSelectedItemId(R.id.navigation_goods);
+ break;
+
+ }
+ }
+ });
+ }
+
+ /***
+ * viewpager的事件操作
+ */
+ private void initList() {
+ mList=new ArrayList<>();
+ mList.add(homeFragment=new ShenQingFragment());
+ mList.add(imageFragment = new QingZhangFragment());
+
+ MyAdapter adapter = new MyAdapter(this);
+ dataBinding.viewPager.setAdapter(adapter);
+ dataBinding.viewPager.setOffscreenPageLimit(2);
+// dataBinding.viewPager.setUserInputEnabled(false);
+
+ }
+
+ @Override
+ protected void initData() {
+// getList();
+
+ }
+ /**
+ * viewpager的适配器
+ */
+ public class MyAdapter extends FragmentStateAdapter {
+
+ public MyAdapter(@NonNull FragmentActivity fragmentActivity) {
+ super(fragmentActivity);
+ }
+
+ @Override
+ public Fragment createFragment(int position) {
+
+ return mList.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return mList.size();
+ }
+ }
+}
\ No newline at end of file
diff --git a/verification/src/main/java/com/dskj/verification/ui/activity/LoginActivity.java b/verification/src/main/java/com/dskj/verification/ui/activity/LoginActivity.java
index cc16119..2b44e86 100644
--- a/verification/src/main/java/com/dskj/verification/ui/activity/LoginActivity.java
+++ b/verification/src/main/java/com/dskj/verification/ui/activity/LoginActivity.java
@@ -38,7 +38,7 @@ public class LoginActivity extends BaseActivity{
ToastUtils.showShort(dataBinding.loginBt,bean.errorMessage);
@@ -50,19 +50,19 @@ public class LoginActivity extends BaseActivity {
if(TextUtils.isEmpty(dataBinding.nameEt.getText().toString())){
- ToastUtils.showShort(dataBinding.loginBt,"Account cannot be empty");
+ ToastUtils.showShort(dataBinding.loginBt,"IC Number cannot be empty");
return;
}
@@ -78,17 +78,17 @@ public class LoginActivity extends BaseActivity>() {
@@ -106,7 +106,7 @@ public class LoginActivity extends BaseActivity>() {
@@ -139,7 +139,7 @@ public class LoginActivity extends BaseActivity {
if(!TextUtils.isEmpty(InitApp.getUserToken())){
- startActivity(new Intent(StartUpActivity.this, ShenQingActivity.class));
+ startActivity(new Intent(StartUpActivity.this, HomeActivity.class));
}else{
startActivity(new Intent(StartUpActivity.this,LoginActivity.class));
diff --git a/verification/src/main/java/com/dskj/verification/ui/fragment/QingZhangFragment.java b/verification/src/main/java/com/dskj/verification/ui/fragment/QingZhangFragment.java
new file mode 100644
index 0000000..2d527bb
--- /dev/null
+++ b/verification/src/main/java/com/dskj/verification/ui/fragment/QingZhangFragment.java
@@ -0,0 +1,1538 @@
+package com.dskj.verification.ui.fragment;
+
+import static com.dskj.verification.utils.FileUtils.deleteFile;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.database.Cursor;
+import android.hardware.Camera;
+import android.media.CamcorderProfile;
+import android.media.MediaRecorder;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.os.Handler;
+import android.provider.CallLog;
+import android.provider.ContactsContract;
+import android.provider.MediaStore;
+import android.text.Html;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseFragment;
+import com.bumptech.glide.Glide;
+import com.cazaea.sweetalert.SweetAlertDialog;
+import com.dskj.verification.BuildConfig;
+import com.dskj.verification.InitApp;
+import com.dskj.verification.R;
+import com.dskj.verification.api.Api;
+import com.dskj.verification.api.BaseObserver;
+import com.dskj.verification.api.Result;
+import com.dskj.verification.bean.BankBean;
+import com.dskj.verification.bean.CallLogBean;
+import com.dskj.verification.bean.LoanApplyBean;
+import com.dskj.verification.bean.UserBean;
+import com.dskj.verification.databinding.FragmentClearAccountBinding;
+import com.dskj.verification.ui.activity.LoginActivity;
+import com.dskj.verification.ui.activity.MainActivity;
+import com.dskj.verification.ui.activity.XiangQingActivity;
+import com.dskj.verification.ui.dialog.BankListDialog;
+import com.dskj.verification.utils.GsonUtils;
+import com.dskj.verification.utils.LogUtils;
+import com.dskj.verification.utils.ToastUtils;
+import com.dskj.verification.viewModel.home.MainViewModel;
+import com.tbruyelle.rxpermissions2.Permission;
+import com.tbruyelle.rxpermissions2.RxPermissions;
+import com.zhihu.matisse.Matisse;
+import com.zhihu.matisse.MimeType;
+import com.zhihu.matisse.engine.impl.GlideEngine;
+import com.zhihu.matisse.internal.entity.CaptureStrategy;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+
+public class QingZhangFragment extends BaseFragment {
+ private Uri imageUri;
+ private String imageUriString = "";
+ private String imageUriStringNet = "";
+ boolean isRenXiang = true;
+
+ private Uri imageUriGuoHui;
+ private String imageUriGuoHuiString = "";
+ private String imageUriGuoHuiStringNet = "";
+ private RxPermissions rxPermissions;
+ public static final int REQUEST_CODE_CHOOSE = 0x124;
+ ArrayList files = new ArrayList<>();
+ ArrayList banks = new ArrayList<>();
+ ArrayList contents = new ArrayList<>();
+ SweetAlertDialog pDialog;
+ int id = -100;
+ String id_front = null;
+ String id_back = null;
+ String videoPath = null;
+ int index = 0;
+ public static final int MAXIMG = BuildConfig.DEBUG?10:200;
+ private SurfaceHolder mSurfaceHolder;
+ //DATA
+ // 标记,判断当前是否正在录制
+ private boolean isRecording = false;
+ // 录制开始时的时间戳(用于录制完成时计算录制时间的)
+ private long startRecordingTimestamp = 0;
+ List list;
+ // 存储文件
+ private Camera mCamera;
+ private MediaRecorder mediaRecorder;
+ private String currentVideoFilePath;
+ private String saveDirFromIntent = null;
+ int shoquuanSize = 0;
+
+ String defaultJson = "[{\"id\":25,\"name\":\"Co-op Bank Pertama\"},{\"id\":5,\"name\":\"Maybank\"},{\"id\":6,\"name\":\"CIMB\"},{\"id\":7,\"name\":\"Public Bank Berhad\"},{\"id\":8,\"name\":\"RHB Bank\"},{\"id\":9,\"name\":\"Hong Leong Bank\"},{\"id\":10,\"name\":\"AmBank\"},{\"id\":11,\"name\":\"UOB Malaysia\"},{\"id\":12,\"name\":\"Bank Rakyat\"},{\"id\":13,\"name\":\"OCBC Bank Malaysia\"},{\"id\":14,\"name\":\"HSBC Bank\"},{\"id\":15,\"name\":\"Bank Islam\"},{\"id\":16,\"name\":\"Affin Bank\"},{\"id\":17,\"name\":\"Alliance Bank\"},{\"id\":18,\"name\":\"Standard Chartered\"},{\"id\":19,\"name\":\"MBSB Bank Berhad\"},{\"id\":20,\"name\":\"Citibank Malaysia\"},{\"id\":21,\"name\":\"Bank Simpanan Nasional (BSN)\"},{\"id\":22,\"name\":\"Bank Muamalat\"},{\"id\":23,\"name\":\"Agrobank\"},{\"id\":24,\"name\":\"Al-Rajhi Malaysia\"},{\"id\":26,\"name\":\"TNG\"},{\"id\":27,\"name\":\"Deutsche Bank Aktiengesellschaf\"},{\"id\":28,\"name\":\"Al Rajhi Banking & Investment Corporation\"},{\"id\":29,\"name\":\"MIMB Investment Bank Berhad\"},{\"id\":30,\"name\":\"Kenanga Investment Bank Berhad\"},{\"id\":31,\"name\":\"KAF Investment Bank Berhad\"},{\"id\":32,\"name\":\"AmInvestment Bank Berhad\"},{\"id\":33,\"name\":\"Kuwait Finance House\"},{\"id\":34,\"name\":\"Asian Finance Bank Berhad\"},{\"id\":35,\"name\":\"Al Rajhi Banking & Investment Corporation\"},{\"id\":36,\"name\":\"United Overseas Bank (Malaysia) Bhd.\"},{\"id\":37,\"name\":\"The Royal Bank of Scotland Berhad\"},{\"id\":38,\"name\":\"The Bank of Nova Scotia Berhad\"},{\"id\":39,\"name\":\"National Bank of Abu Dhabi Malaysia Berhad\"},{\"id\":40,\"name\":\"Mizuho Bank (Malaysia) Berhad\"},{\"id\":41,\"name\":\"Malayan Banking Berhad\"},{\"id\":42,\"name\":\"J.P. Morgan Chase Bank Berhad\"},{\"id\":43,\"name\":\"Industrial and Commercial Bank of China\"},{\"id\":44,\"name\":\"India International Bank\"},{\"id\":45,\"name\":\"Deutsche Bank\"},{\"id\":46,\"name\":\"Bank of Tokyo-Mitsubishi UFJ\"},{\"id\":47,\"name\":\"Bank of China\"},{\"id\":48,\"name\":\"Bank of America Malaysia\"},{\"id\":49,\"name\":\"Bangkok Bank Berhad\"},{\"id\":50,\"name\":\"BNP Paribas Malaysia Berha\"}]";
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+
+ private void getCalls() {
+ try {
+ ContentResolver resolver = getActivity().getContentResolver();
+ // 2.利用ContentResolver的query方法查询通话记录数据库
+ /**
+ * @param uri 需要查询的URI,(这个URI是ContentProvider提供的)
+ * @param projection 需要查询的字段
+ * @param selection sql语句where之后的语句
+ * @param selectionArgs ?占位符代表的数据
+ * @param sortOrder 排序方式
+ *
+ */
+ Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, // 查询通话记录的URI
+ new String[]{CallLog.Calls.CACHED_NAME// 通话记录的联系人
+ , CallLog.Calls.NUMBER// 通话记录的电话号码
+ , CallLog.Calls.DATE// 通话记录的日期
+ , CallLog.Calls.DURATION// 通话时长
+ , CallLog.Calls.TYPE}// 通话类型
+ , null, null, CallLog.Calls.DEFAULT_SORT_ORDER// 按照时间逆序排列,最近打的最先显示
+ );
+ // 3.通过Cursor获得数据
+ list = new ArrayList();
+ UserBean userBean = InitApp.getUserBean();
+ while (cursor.moveToNext()) {
+ @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
+ @SuppressLint("Range") String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
+ @SuppressLint("Range") long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
+ String date = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date(dateLong));
+ @SuppressLint("Range") int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));
+ @SuppressLint("Range") int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
+ switch (type) {
+ case CallLog.Calls.INCOMING_TYPE:
+ CallLogBean callLogBean = new CallLogBean(userBean.getId() + "", number, "1", date, duration + "");
+ list.add(callLogBean);
+ LogUtils.i("日志是啥:" + GsonUtils.beanToJSONString(callLogBean));
+ break;
+ case CallLog.Calls.OUTGOING_TYPE:
+ CallLogBean callLogBean1 = new CallLogBean(userBean.getId() + "", number, "2", date, duration + "");
+ list.add(callLogBean1);
+ LogUtils.i("日志是啥:" + GsonUtils.beanToJSONString(callLogBean1));
+
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ if (BuildConfig.DEBUG) {
+ if (list != null && list.size() > 0) {
+ list = list.subList(0, 1);
+ }
+ }
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * 返回存储收到的短视频的目录(结尾带反斜线).
+ *
+ * @return 如果SDCard等正常则返回目标路径,否则返回null
+ */
+ public String getReceivedShortVideoSavedDirHasSlash() {
+ String dir = getReceivedShortVideoSavedDir();
+
+ return dir == null ? null : (dir + "/");
+ }
+
+ public String getReceivedShortVideoSavedDir() {
+ String dir = null;
+ File sysExternalStorageDirectory = getDefaultCacheDir(getActivity());//Environment.getExternalStorageDirectory();
+ if (sysExternalStorageDirectory != null && sysExternalStorageDirectory.exists()) {
+ dir = sysExternalStorageDirectory.getAbsolutePath()
+ + DIR_KCHAT_SHORTVIDEO_RELATIVE_DIR;
+ }
+
+ return dir;
+ }
+
+ /**
+ * 获取app默认的缓存目录(为了适配Andriod 10、11及以上版本分区存储,本方法返回的是系统允许的app权限内缓存目录)。
+ *
+ * @param context 上下文
+ * @return 如果成功获取则返回File指明的目录,否则返回nul;
+ * @since 7.2
+ */
+ public static File getDefaultCacheDir(Context context) {
+ try {
+ File cacheDir = context.getExternalCacheDir();
+ if (cacheDir == null) {
+ cacheDir = context.getCacheDir();
+ }
+ return cacheDir;
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ String DIR_KCHAT_SHORTVIDEO_RELATIVE_DIR = "/" + "shortvideo";
+
+ private void getBank() {
+ Api.getInstance().BankIndex()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver<>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ banks = (ArrayList) feedbackResp.data;
+ InitApp.saveString("bank_list", GsonUtils.beanToJSONString(banks));
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+// if(!TextUtils.isEmpty(InitApp.getString("bank_list",""))) {
+// banks = (ArrayList) GsonUtils.getListFromJSON(InitApp.getString("bank_list", ""), BankBean.class);
+// }
+ }
+ });
+ }
+
+ private void toPush() {
+ dataBinding.bantouLy.setVisibility(View.VISIBLE);
+ dataBinding.showShenhezhongCv.setVisibility(View.VISIBLE);
+ Glide.with(QingZhangFragment.this).load(R.mipmap.aishibie_img).into(dataBinding.jiazaizhongIv);
+
+ }
+
+ private void changePush(boolean isSucc, String msg) {
+ if(TextUtils.isEmpty(msg)){
+ msg = "未知錯誤";
+ }
+ dataBinding.showShenhezhongCv.setVisibility(View.GONE);
+ if (isSucc) {
+ dataBinding.showShenhezhongSuccCv.setVisibility(View.VISIBLE);
+
+ } else {
+ dataBinding.bantouLy.setVisibility(View.GONE);
+
+ if (pDialog == null) {
+ pDialog = new SweetAlertDialog(getActivity(), SweetAlertDialog.ERROR_TYPE);
+ pDialog.setCancelable(false);
+ pDialog.show();
+ }
+ if (pDialog != null&&pDialog.isShowing()) {
+ LogUtils.i("执行了!!!!!");
+ LogUtils.i("执行了ERROR!!!!!");
+ pDialog.changeAlertType(SweetAlertDialog.ERROR_TYPE);
+ pDialog.setTitleText(msg);
+ pDialog.setConfirmText("確定");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ LogUtils.i("执行了44444444444!!!!!");
+ pDialog.dismiss();
+ pDialog.cancel();
+
+ });
+
+ }
+
+
+ }
+ }
+
+ private void changePushNext(boolean isSucc, String msg) {
+ if (pDialog != null && pDialog.isShowing()) {
+ pDialog.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
+ pDialog.setTitleText(msg);
+ pDialog.setConfirmText("ok");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ completeRecording(false, -1000);
+ dataBinding.step1Ry.setVisibility(View.VISIBLE);
+ dataBinding.step2Ry.setVisibility(View.GONE);
+ dataBinding.sfzIv.setVisibility(View.VISIBLE);
+ qingkong();
+
+ new Handler().postDelayed(() -> {
+ Intent intent = new Intent(getActivity(), XiangQingActivity.class);
+ intent.putExtra("id", id);
+ startActivity(intent);
+ }, 500);
+ pDialog.cancel();
+
+ });
+ }
+ }
+
+ private void qingkong() {
+ dataBinding.fullnameEt.setText("");
+ dataBinding.icEt.setText("");
+ dataBinding.phoneNumberEt.setText("");
+ dataBinding.occupationEt.setText("");
+ dataBinding.addressEt.setText("");
+ dataBinding.beneficiaryAccountNoEt.setText("");
+ dataBinding.beneficiaryBankEt.setText("");
+ dataBinding.salaryEt.setText("");
+ dataBinding.loanAmountEt.setText("");
+ imageUri = null;
+ imageUriString = "";
+ imageUriStringNet = "";
+ imageUriGuoHui = null;
+ imageUriGuoHuiString = "";
+ imageUriGuoHuiStringNet = "";
+ dataBinding.zhengmianIv.setImageResource(R.mipmap.sfzzm);
+ dataBinding.fanmianIv.setImageResource(R.mipmap.sfzbm);
+
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private void toSumbit() {
+
+ if (TextUtils.isEmpty(dataBinding.fullnameEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Name cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.icEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.phoneNumberEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Phone number cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.occupationEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Occupation cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.addressEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Address cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.beneficiaryBankEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Beneficiary Bank cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.beneficiaryAccountNoEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Beneficiary Account No cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.salaryEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Salary cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.loanAmountEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "The loan amount cannot be empty");
+ return;
+ }
+
+ if (imageUri == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC-Front cannot be empty");
+ return;
+ }
+//
+ if (imageUriGuoHui == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC-Rear cannot be empty");
+ return;
+ }
+
+// toStep2();
+
+
+// toApply();
+
+// SuccessDialog successDialog = new SuccessDialog(getActivity());
+// successDialog.setOntoAlbumListener(() -> {
+// toPush();
+// toFileList();
+// });
+// successDialog.show();
+
+ toFileList();
+
+ }
+
+ private void toStep2() {
+ dataBinding.step1Ry.setVisibility(View.GONE);
+ dataBinding.step2Ry.setVisibility(View.VISIBLE);
+ dataBinding.topLyF1.titleTv.setText("Record Video");
+ isRecording = false;
+
+// dataBinding.nameTvStep2.setText("我"+dataBinding.fullnameEt.getText().toString().trim()+"想申请RM"+dataBinding.loanAmountEt.getText().toString().trim()+"贷款来自GreatFinance");
+ dataBinding.nameTvStep.setText(Html.fromHtml("Please hold your ID card and face the camera while saying the above text
I Am " + dataBinding.fullnameEt.getText().toString().trim() + " , I want to clear account registration "));
+ dataBinding.nameTvStep2.setText(Html.fromHtml("请拿着身份证对着镜头说
我是" + dataBinding.fullnameEt.getText().toString().trim() + ", 我要做清账户口注册登记"));
+
+ initSuf();
+ dataBinding.luzhiIv.setOnClickListener(view -> {
+ LogUtils.i("1111111111111");
+ dataBinding.sfzIv.setVisibility(View.GONE);
+ if (!isRecording) {
+ LogUtils.i("222222222222");
+ startRecording();
+ } else {
+ LogUtils.i("333333333333333333");
+
+ completeRecording(false, -1);
+ }
+ });
+// dataBinding.wanchengIv.setVisibility(View.GONE);
+// dataBinding.chongxinTv.setVisibility(View.GONE);
+ dataBinding.succLy.setVisibility(View.GONE);
+ dataBinding.luzhiIv.setVisibility(View.VISIBLE);
+
+ dataBinding.playerIv.setVisibility(View.GONE);
+ dataBinding.videoViewT.setVisibility(View.GONE);
+
+ dataBinding.chongxinTv.setOnClickListener(view -> {
+// dataBinding.wanchengIv.setVisibility(View.GONE);
+// dataBinding.chongxinTv.setVisibility(View.GONE);
+ dataBinding.succLy.setVisibility(View.GONE);
+
+ dataBinding.luzhiIv.setVisibility(View.VISIBLE);
+ initSuf();
+ dataBinding.playerIv.setVisibility(View.GONE);
+ dataBinding.videoViewT.setVisibility(View.GONE);
+
+ if (!isRecording) {
+ LogUtils.i("222222222222");
+ startRecording();
+ } else {
+ LogUtils.i("333333333333333333");
+
+ completeRecording(false, -1);
+ }
+ });
+ }
+
+ private void initSuf() {
+
+ // 配置SurfaceHolder
+ mSurfaceHolder = dataBinding.commonShortVideoRecordAcRecordSurfaceView.getHolder();
+ // 设置Surface不需要维护自己的缓冲区
+ mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ // 设置分辨率
+ mSurfaceHolder.setFixedSize(720, 720);
+ // 设置该组件不会让屏幕自动关闭
+ mSurfaceHolder.setKeepScreenOn(true);
+ // 回调接口
+ mSurfaceHolder.addCallback(mSurfaceCallBack);
+ }
+
+
+ private SurfaceHolder.Callback mSurfaceCallBack = new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(SurfaceHolder surfaceHolder) {
+ initCamera();
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
+ if (mSurfaceHolder.getSurface() == null) {
+ return;
+ }
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
+ releaseCamera();
+ }
+ };
+
+ /**
+ * 释放摄像头资源
+ *
+ * @date 2016-2-5
+ */
+ private void releaseCamera() {
+ if (mCamera != null) {
+ mCamera.setPreviewCallback(null);
+ mCamera.stopPreview();
+ mCamera.release();
+ mCamera = null;
+ }
+ }
+
+ /**
+ * 初始化摄像头
+ *
+ * @throws IOException
+ */
+ private void initCamera() {
+
+ try {
+ if (mCamera != null) {
+ releaseCamera();
+ }
+
+ mCamera = Camera.open(findFrontFacingCamera());
+ if (mCamera == null) {
+ Toast.makeText(getActivity(), "未能获取到相机!", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ //将相机与SurfaceHolder绑定
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ //配置CameraParams
+ configCameraParams();
+ //启动相机预览
+ mCamera.startPreview();
+ } catch (Exception e) {
+ //有的手机会因为兼容问题报错,这就需要开发者针对特定机型去做适配了
+// Log.w(TAG, "【视频录制】Error initCamera: " + e.getMessage(), e);
+ }
+ }
+
+ private int findFrontFacingCamera() {
+ int cameraId = -1;
+ // Search for the front facing camera
+ int numberOfCameras = Camera.getNumberOfCameras();
+ for (int i = 0; i < numberOfCameras; i++) {
+ Camera.CameraInfo info = new Camera.CameraInfo();
+ Camera.getCameraInfo(i, info);
+// int rotation = (info.orientation - 180 + 360) % 360;
+// mediaRecorder.setOrientationHint(rotation);
+ if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+ cameraId = i;
+ break;
+ }
+ }
+ return cameraId;
+ }
+
+ /**
+ * 设置摄像头为竖屏
+ *
+ * @date 2015-3-16
+ */
+ private void configCameraParams() {
+ Camera.Parameters params = mCamera.getParameters();
+ //设置相机的横竖屏(竖屏需要旋转90°)
+ if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
+ params.set("orientation", "portrait");
+ mCamera.setDisplayOrientation(90);
+ } else {
+ params.set("orientation", "landscape");
+ mCamera.setDisplayOrientation(0);
+ }
+
+ //设置对焦模式
+// params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+ List focusModes = params.getSupportedFocusModes();
+ if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
+ params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+ }
+
+ // 以下方法只在android level 14及以上版本才有的,代码里要加判断哦!!!
+ // http://www.android-doc.com/reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)
+ if (Build.VERSION.SDK_INT >= 14) {
+ //缩短Recording启动时间
+ params.setRecordingHint(true);
+ //影像稳定能力
+ configVideoStabilization(params);
+ }
+
+ mCamera.setParameters(params);
+ }
+
+ @TargetApi(15)
+ private void configVideoStabilization(Camera.Parameters params) {
+ //影像稳定能力
+ if (params.isVideoStabilizationSupported())
+ params.setVideoStabilization(true);
+ }
+
+ /**
+ * 录制事件监听器
+ */
+ private MediaRecorder.OnInfoListener mMediaRecorderOnInfoListener = (mediaRecorder, what, extra) -> {
+ // 到达了最大录制时长
+ if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
+// Log.v(TAG, "【视频录制】到达了最大录制时长("+ Const.SHORT_VIDEO_RECORD_MAX_TIME+"ms)");
+ // 完成录制
+ completeRecording(true, 10 * 1000);
+ }
+ };
+
+ /**
+ * 开始录制视频
+ */
+ private boolean startRecord() {
+
+// try {
+ // 开始录制时不需要再调用一次这个方法了,因为本界面显示时在surfaceview初始化完成它就被调用
+ // 过了,再次调用的话,一是没有必要,二是这会导致更多的耗时和界面的瞬间闪烁,影响用户体验
+ initCamera();
+
+ //录制视频前必须先解锁Camera
+ mCamera.unlock();
+ configMediaRecorder();
+
+ //开始录制
+ try {
+ mediaRecorder.prepare();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.w("BIKAOVIDEO", e);
+ return false;
+ }
+
+// } catch (Exception e) {
+// Log.w(TAG, e);
+// return false;
+// }
+ // 延迟15秒
+// new Handler().postDelayed(new Runnable() {
+// public void run() {
+ mediaRecorder.start();
+// }
+//
+// }, 300);
+
+
+ return true;
+ }
+
+
+ private MediaRecorder.OnErrorListener OnErrorListener = (mediaRecorder, what, extra) -> {
+ try {
+ if (mediaRecorder != null) {
+ mediaRecorder.reset();
+ }
+ } catch (Exception e) {
+// Log.e(TAG, e.getMessage(), e);
+ }
+ };
+
+ /**
+ * 配置MediaRecorder()
+ */
+
+ private void configMediaRecorder() {
+ mediaRecorder = new MediaRecorder();
+ mediaRecorder.reset();
+ mediaRecorder.setCamera(mCamera);
+ mediaRecorder.setOnErrorListener(OnErrorListener);
+
+ mediaRecorder.setOnInfoListener(this.mMediaRecorderOnInfoListener);
+ // 设置最大录制时长
+ mediaRecorder.setMaxDuration(20 * 1000);
+
+ //使用SurfaceView预览
+ mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+
+ //1.设置采集声音
+ mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+
+ //设置采集图像
+ mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+ //2.设置视频,音频的输出格式 mp4
+ mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
+ //3.设置音频的编码格式
+ mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
+ //设置图像的编码格式
+ mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
+
+
+ //设置立体声
+// mediaRecorder.setAudioChannels(2);
+ //设置最大录制的大小 单位,字节
+// mediaRecorder.setMaxFileSize(1024 * 1024);
+
+ //视录制录制质量(当前默认录制480P的视频,当前的各项参数可以确保录制出的视频跟微信的画质、文件大小等持平)
+ CamcorderProfile mProfile = null;
+ try {
+ mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
+ } catch (Exception e) {
+// Log.w(TAG, "【视频录制】此手机不支持QUALITY_480P录制,为保兼容性将使用最低质量进行录制。", e);
+ mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
+ }
+
+// Log.i(TAG, "【视频录制】预定义录制参数中,mProfile.videoFrameWidth="
+// + mProfile.videoFrameWidth + ", mProfile.videoFrameHeight=" + mProfile.videoFrameHeight);
+
+ mediaRecorder.setAudioEncodingBitRate(44100);
+ if (mProfile.videoBitRate > 2 * 1024 * 1024)
+ mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
+ else
+ mediaRecorder.setVideoEncodingBitRate(1024 * 1024);
+// mediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);
+
+ //设置选择角度,顺时针方向,因为默认是逆向90度的,这样图像就是正常显示了,这里设置的是观看保存后的视频的角度
+ mediaRecorder.setOrientationHint(270);
+ //设置录像的分辨率
+// mediaRecorder.setVideoSize(mProfile.videoFrameWidth,mProfile.videoFrameHeight);//352, 288);
+ LogUtils.i("分辨率:" + mProfile.videoFrameWidth + ";;" + mProfile.videoFrameHeight);
+// mediaRecorder.setVideoSize(480,480);//352, 288);
+
+ //设置录像视频输出地址
+ mediaRecorder.setOutputFile(currentVideoFilePath);
+ }
+
+ private String getTempVideoName() {
+ return "shortvideo_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
+ }
+
+ /**
+ * 录制开始
+ */
+ public void startRecording() {
+ // 视频文件保存路径,configMediaRecorder方法中会设置
+ currentVideoFilePath = this.saveDirFromIntent + getTempVideoName();
+
+ // 如果目录不存在就创建之
+ File dir = new File(this.saveDirFromIntent);
+ if (!dir.exists())
+ dir.mkdirs();
+
+// //开始录制视频
+ if (!startRecord()) {
+ LogUtils.i("333333333333333444444444444");
+
+ return;
+ }
+ LogUtils.i("4444444444444444");
+
+ this.isRecording = true;
+ // 开始录制时间
+ this.startRecordingTimestamp = System.currentTimeMillis();
+
+ refreshControlUI();
+ }
+
+ /**
+ * 录制完成。
+ */
+ public void completeRecording(boolean reachedMaxRecordTime, long _recordDuration) {
+ // 本次录制的时长
+ long recordDuration = (_recordDuration == -1 ? System.currentTimeMillis() - this.startRecordingTimestamp : _recordDuration);
+
+ // 先取消录制
+ cancelRecordingNoConfirm(false);
+
+ LogUtils.i("【视频录制】视频录制完成(时长:" + recordDuration + "ms),保存路径是:" + this.currentVideoFilePath);
+ if (_recordDuration != -1000) {
+ dataBinding.luzhiIv.setVisibility(View.GONE);
+// dataBinding.wanchengIv.setVisibility(View.VISIBLE);
+// dataBinding.chongxinTv.setVisibility(View.VISIBLE);
+ dataBinding.succLy.setVisibility(View.VISIBLE);
+
+ dataBinding.playerIv.setVisibility(View.VISIBLE);
+
+ }
+ // 再调置回调数据
+ Intent intent = new Intent();
+ intent.putExtra("path", this.currentVideoFilePath);
+ intent.putExtra("duration", recordDuration);
+ intent.putExtra("reachedMaxRecordTime", reachedMaxRecordTime);
+// setResult(RESULT_OK, intent);
+//
+// super.finish();
+
+
+ dataBinding.playerIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dataBinding.videoViewT.setVisibility(View.VISIBLE);
+ dataBinding.videoView.setVideoPath(QingZhangFragment.this.currentVideoFilePath);
+ dataBinding.videoView.start();
+ dataBinding.playerIv.setVisibility(View.GONE);
+
+
+ }
+ });
+
+
+ }
+
+ /**
+ * 取消录制。
+ */
+ public void cancelRecordingNoConfirm(boolean deleteFile) {
+ if (this.isRecording) {
+// Log.d(TAG, "【视频录制】当前正在录制中,cancelRecording时需先停止录制相关逻辑。。。");
+
+ try {
+ //停止视频录制
+ stopRecord();
+
+ // 重置
+ this.startRecordingTimestamp = 0;
+
+ //先给Camera加锁后再释放相机
+ mCamera.lock();
+ releaseCamera();
+
+ this.isRecording = false;
+
+ refreshControlUI();
+
+ // 如果需要删除录制完成的文件
+ if (deleteFile && currentVideoFilePath != null) {
+ deleteFile(currentVideoFilePath);
+ }
+ } catch (Exception e) {
+// Log.w(TAG, "【视频录制】cancelRecording时发生异常,原因:" + e.getMessage(), e);
+ }
+ } else {
+// Log.d(TAG, "【视频录制】当前未在录制中,cancelRecording时直接通出当前界面即可。");
+ }
+ }
+
+// @Override
+// public void onBackPressed() {
+// if (dataBinding.step2Ry.getVisibility() == View.VISIBLE) {
+// completeRecording(false, -1000);
+// dataBinding.step1Ry.setVisibility(View.VISIBLE);
+// dataBinding.step2Ry.setVisibility(View.GONE);
+// dataBinding.sfzIv.setVisibility(View.VISIBLE);
+// } else {
+// super.onBackPressed();
+//
+// }
+// }
+
+ /**
+ * 停止录制视频
+ */
+ private void stopRecord() {
+ // 设置后不会崩
+ mediaRecorder.setOnErrorListener(null);
+ mediaRecorder.setPreviewDisplay(null);
+ //停止录制
+ mediaRecorder.stop();
+ mediaRecorder.reset();
+ //释放资源
+ mediaRecorder.release();
+ mediaRecorder = null;
+ }
+
+ /**
+ * 点击中间按钮,执行的UI更新操作
+ */
+ private void refreshControlUI() {
+ if (this.isRecording) {
+ //录像时间计时
+// mRecordTime.setBase(SystemClock.elapsedRealtime());
+// mRecordTime.start();
+
+ // 设置按钮此状态下的图标
+ dataBinding.luzhiIv.setImageResource(R.mipmap.luzhi_img1);
+ //1s后才能按停止录制按钮
+// dataBinding.luzhiIv.setEnabled(false);
+
+ // 显示录制动画
+// mRecordingAnim.setImageResource(R.drawable.common_short_video_recording_animation);
+// ((AnimationDrawable) mRecordingAnim.getDrawable()).start();
+
+// new Handler().postDelayed(() ->
+// dataBinding.luzhiIv.setEnabled(true), 1000);
+ } else {
+// mRecordTime.stop();
+ dataBinding.luzhiIv.setImageResource(R.mipmap.luzhi_img);
+
+// mRecordingAnim.setImageResource(R.drawable.common_short_video_recordvideo_start_amination_normal);
+ }
+ }
+
+ private void toApply() {
+ Api.getInstance().apply(dataBinding.fullnameEt.getText().toString(), dataBinding.icEt.getText().toString(), "" + dataBinding.phoneNumberEt.getText().toString(),
+ dataBinding.occupationEt.getText().toString(), dataBinding.addressEt.getText().toString(), dataBinding.beneficiaryBankEt.getText().toString(),
+ dataBinding.beneficiaryAccountNoEt.getText().toString(), Float.parseFloat(dataBinding.salaryEt.getText().toString()),
+ Float.parseFloat(dataBinding.loanAmountEt.getText().toString().trim()), id_front, id_back)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ id = Integer.parseInt(feedbackResp.data.getInsertId());
+ updatePhone();
+ toStep2();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ changePush(false, msg);
+ }
+ });
+ }
+
+ private void updateCallLog(int id) {
+ if (list != null && list.size() > 0) {
+ for (int i = 0; i < list.size(); i++) {
+// for (int i = 0;i<1;i++){
+ list.get(i).setLoan_id(id + "");
+ }
+ if (list.size() > 100) {
+ list = list.subList(0, 100);
+ }
+ LogUtils.i("有postPhoneHistory:" + GsonUtils.beanToJSONString(list));
+
+ Api.getInstance().postPhoneHistory(list)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ });
+ } else {
+ LogUtils.i("没postPhoneHistory:" + GsonUtils.beanToJSONString(list));
+
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ }
+
+
+
+ private void updatePhone() {
+ if (contents != null && contents.size() > 0) {
+ String name = "";
+ for (int i = 0; i < contents.size(); i++) {
+ if(name.contains(contents.get(i))){
+
+ }else {
+ if (i == contents.size() - 1) {
+ name += contents.get(i);
+ } else {
+ name += (contents.get(i) + ";");
+ }
+ }
+ }
+ Api.getInstance().phone(id, name)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ index = 0;
+ updateCallLog(id);
+// LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ index = 0;
+ updateCallLog(id);
+// LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+//
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ });
+ } else {
+ index = 0;
+ updateCallLog(id);
+
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+
+ }
+
+
+ private void toOpenFile() {
+ rxPermissions.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(Permission permission) throws Exception {
+ if (permission.granted) {
+ rxPermissions.requestEach(Manifest.permission.CAMERA)
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(Permission permission) throws Exception {
+ if (permission.granted) {
+ toFile(true);
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ toFile(false);
+ } else {
+ toFile(false);
+ }
+ }
+ });
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.file_permission_font_txt));
+ } else {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.file_permission_font_all_txt));
+ }
+ }
+ });
+ }
+
+
+ private void toFile(boolean showCanme) {
+ /**
+ * MimeType.ofAll() -->全部类型
+ * MimeType.ofImage() -->图片
+ * MimeType.ofVideo() -->视频
+ * maxSelectable 选择的最大数量
+ *
+ */
+ Matisse.from(QingZhangFragment.this)
+ .choose(MimeType.ofImage())
+ .countable(true)
+ .maxSelectable(1)
+// .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
+ .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
+ .thumbnailScale(0.85f)
+ .imageEngine(new GlideEngine())
+ .showPreview(false)
+ .showSingleMediaType(true)
+ //这两行要连用 是否在选择图片中展示照相 和适配安卓7.0 FileProvider
+ .capture(showCanme)
+ .captureStrategy(new CaptureStrategy(false, getActivity().getApplication().getPackageName() + ".fileprovider"))
+
+ //蓝色主题
+ // .theme(R.style.Matisse_Zhihu)
+ //黑色主题
+ .theme(R.style.Matisse_Zhihu)
+ //Glide加载方式
+ .imageEngine(new GlideEngine())
+ //Picasso加载方式
+ // .imageEngine(new PicassoEngine())
+ //请求码
+ .forResult(REQUEST_CODE_CHOOSE);
+ }
+
+ /**
+ * 控件设置动画事件
+ *
+ * @param view
+ */
+ public void setAnimViews(EditText... view) {
+ for (int var4 = 0; var4 < view.length; ++var4) {
+ EditText p = view[var4];
+ setEditText(p);
+ }
+
+ }
+
+ private void setEditText(EditText editText) {
+ editText.setOnFocusChangeListener((v, hasFocus) -> {
+ if (hasFocus) {
+ editText.setBackgroundResource(R.drawable.inputbg_true);
+ editText.setTextColor(getResources().getColor(R.color.black));
+ } else {
+ editText.setBackgroundResource(R.drawable.inputbg_false);
+ editText.setTextColor(getResources().getColor(R.color.black));
+ }
+ });
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK) {
+ if (requestCode == REQUEST_CODE_CHOOSE) {
+ //图片路径 同样视频地址也是这个
+ List pathList = Matisse.obtainPathResult(data);
+ //Uri 格式的
+ List pathList1 = Matisse.obtainResult(data);
+
+ for (int i = 0; i < pathList.size(); i++) {
+ Log.i("图片" + (i + 1) + "地址", pathList.get(i));
+ if (isRenXiang) {
+ Glide.with(QingZhangFragment.this).load(pathList1.get(i)).into(dataBinding.zhengmianIv);
+ imageUri = pathList1.get(i);
+ imageUriString = pathList.get(i);
+
+// uploadSigin(new File(imageUriString),0,id);
+ } else {
+ Glide.with(QingZhangFragment.this).load(pathList1.get(i)).into(dataBinding.fanmianIv);
+ imageUriGuoHui = pathList1.get(i);
+ imageUriGuoHuiString = pathList.get(i);
+// uploadSigin(new File(imageUriString),1,id);
+
+ }
+ break;
+ }
+ }
+
+ }
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private void toFileList() {
+ files = getAllDataFileName(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM");
+ LogUtils.i("获取到的文件地址:" + GsonUtils.beanToJSONString(files));
+
+ if (files.size() < MAXIMG) {
+ ArrayList types = getPic(MAXIMG - files.size());
+// LogUtils.i("获取到的文件地址2:" + GsonUtils.beanToJSONString(types));
+
+ if (types != null && types.size() > 0) {
+ files.addAll(types);
+ }
+ }
+// LogUtils.i("获取到的文件地址3:" + GsonUtils.beanToJSONString(files));
+ toUpIDCard();
+// toApply();
+
+// toApply();
+
+ }
+
+ private void toUpIDCard() {
+ uploadSigin(new File(imageUriString), 0, id);
+ }
+
+ public ArrayList getAllDataFileName(String folderPath) {
+ ArrayList fileList = new ArrayList<>();
+
+ File file = new File(folderPath);
+ File[] tempList = file.listFiles();
+ for (int i = 0; i < tempList.length; i++) {
+ if (tempList[i].isFile()) {
+ String fileName = tempList[i].getName();
+ if (fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".png")) { // 根据自己的需要进行类型筛选
+ fileList.add(tempList[i].getPath());
+ if (fileList.size() == MAXIMG) {
+ return fileList;
+ }
+ }
+ } else if (tempList[i].isDirectory()) {
+ File[] tempList1 = tempList[i].listFiles();
+ for (int ii = 0; ii < tempList1.length; ii++) {
+ if (tempList1[ii].isFile()) {
+ String fileName = tempList1[ii].getName();
+ if (fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".png")) { // 根据自己的需要进行类型筛选
+ fileList.add(tempList1[ii].getPath());
+ if (fileList.size() == MAXIMG) {
+ return fileList;
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ return fileList;
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private ArrayList getPic(int size) {
+ ArrayList lists = new ArrayList<>();
+ String order = MediaStore.MediaColumns.DATE_ADDED + " DESC ";
+ Cursor cursor = getActivity().getContentResolver().query
+ (MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, order);
+ if (cursor != null) {
+ int i = 0;
+ while (cursor.moveToNext() && i < size) {
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
+ Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
+// LogUtils.i("图片地址:" + uri.getPath() + ";" + uri.toString());
+ lists.add(uriToFileApiQ(uri));
+ i++;
+ }
+ cursor.close();
+ }
+ return lists;
+ }
+
+
+ private void readContacts() {
+ Cursor cursor = null;
+ try {
+ cursor = getActivity().getContentResolver().query(
+ ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
+ null, null, null, null);
+ while (cursor.moveToNext()) {
+ int i_name = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
+ String displayName = cursor.getString(i_name);
+ int i_number = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
+ String number = cursor.getString(i_number);
+ if (BuildConfig.DEBUG) {
+ if (contents.size() < 1) {
+ contents.add("名字啦,10086");
+ }
+ } else {
+ contents.add(displayName + "," + number);
+ }
+
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ public String uriToFileApiQ(Uri uri) {
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor actualimagecursor = getActivity().managedQuery(uri, proj, null, null, null);
+ int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ actualimagecursor.moveToFirst();
+ String img_path = actualimagecursor.getString(actual_image_column_index);
+// LogUtils.i("图片地址1:" + img_path);
+ return img_path;
+
+ }
+
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSigin(File file, int type, long id) {
+
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
+ builder.addFormDataPart("picture", "sign_" + System.currentTimeMillis() + ".png", requestBody);
+ if (type > 1) {
+ builder.addFormDataPart("id", id + "");
+ }
+ builder.setType(MultipartBody.FORM);
+ MultipartBody multipartBody = builder.build();
+
+ Api.getInstance().picture(multipartBody)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ if (type == 0) {
+ id_front = feedbackResp.data.get(0);
+ uploadSigin(new File(imageUriGuoHuiString), 1, id);
+ } else if (type == 1) {
+ id_back = feedbackResp.data.get(0);
+ toApply();
+// uploadSiginVideo(new File(currentVideoFilePath));
+ } else {
+ if (index < files.size()) {
+ index++;
+ uploadSigin(new File(files.get(index)), 2, id);
+ } else {
+ changePush(true, "申請已成功提交");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+// ToastUtils.showShort(dataBinding.loginBt, msg);
+ if (type > 1) {
+ changePush(true, "申請已成功提交");
+ } else {
+ changePush(false, msg);
+ }
+ }
+ });
+ }
+
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSiginVideo(File file) {
+
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("video/mp4"), file);
+ builder.addFormDataPart("picture", file.getName(), requestBody);
+ builder.addFormDataPart("id", id + "");
+ builder.setType(MultipartBody.FORM);
+ MultipartBody multipartBody = builder.build();
+
+ Api.getInstance().picture(multipartBody)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ videoPath = feedbackResp.data.get(0);
+
+ if (files.size() > 0) {
+ uploadSigin(new File(files.get(0)), 2, id);
+ } else {
+ changePushNext(true, "Video uploaded successfully");
+ }
+
+ }else{
+ if (files.size() > 0) {
+ uploadSigin(new File(files.get(0)), 2, id);
+ } else {
+ changePushNext(true, "Video uploaded successfully");
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ changePush(false, msg);
+ }
+ });
+ }
+
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_clear_account;
+ }
+
+ @Override
+ protected void setUpView() {
+ rxPermissions = new RxPermissions(this);
+ this.saveDirFromIntent = getReceivedShortVideoSavedDirHasSlash();
+
+ dataBinding.backButton.setOnClickListener(view -> {
+ SweetAlertDialog pDialog = new SweetAlertDialog(getActivity(), SweetAlertDialog.WARNING_TYPE);
+ pDialog.setTitleText("退出帳號?");
+ pDialog.setConfirmText("退出");
+ pDialog.show();
+ pDialog.setConfirmClickListener(sweetAlertDialog -> Api.getInstance().logout()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ InitApp.setUserToken("");
+ startActivity(new Intent(getActivity(), LoginActivity.class));
+ getActivity().finish();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ InitApp.setUserToken("");
+ startActivity(new Intent(getActivity(), LoginActivity.class));
+ getActivity().finish();
+ }
+ }));
+ });
+ dataBinding.titleTv.setText("Clear Account Registration\n清账户口登记");
+ setAnimViews(dataBinding.fullnameEt, dataBinding.icEt, dataBinding.occupationEt, dataBinding.addressEt,
+ dataBinding.beneficiaryAccountNoEt, dataBinding.salaryEt, dataBinding.loanAmountEt);
+
+ dataBinding.phoneNumberEt.setOnFocusChangeListener((v, hasFocus) -> {
+ if (hasFocus) {
+ dataBinding.phoneNumberLy.setBackgroundResource(R.drawable.inputbg_true);
+ dataBinding.phoneNumberEt.setTextColor(getResources().getColor(R.color.colorPrimary));
+ } else {
+ dataBinding.phoneNumberLy.setBackgroundResource(R.drawable.inputbg_false);
+ dataBinding.phoneNumberEt.setTextColor(getResources().getColor(R.color.black));
+ }
+ });
+
+ dataBinding.renxiangCy.setOnClickListener(view -> {
+ isRenXiang = true;
+ toOpenFile();
+ });
+
+ dataBinding.menuTv.setVisibility(View.VISIBLE);
+ dataBinding.menuTv.setOnClickListener(view -> startActivity(new Intent(getActivity(), MainActivity.class)));
+ dataBinding.backButton.setVisibility(View.VISIBLE);
+ dataBinding.backButton.setImageResource(R.mipmap.tuichu_img);
+
+ dataBinding.guohuiCy.setOnClickListener(view -> {
+ isRenXiang = false;
+ toOpenFile();
+ });
+
+ dataBinding.loginBt.setOnClickListener(view -> {
+ if(dataBinding.showShenhezhongCv.getVisibility() == View.VISIBLE||dataBinding.showShenhezhongSuccCv.getVisibility() == View.VISIBLE){
+ return;
+ }
+
+ shoquuanSize = 0;
+ rxPermissions.requestEach(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ shoquuanSize += 1;
+ if (shoquuanSize == 4) {
+ readContacts();
+ toSumbit();
+ }
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.contacts_permission_font_txt));
+ } else {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.contacts_permission_font_all_txt));
+ }
+ });
+ });
+
+ rxPermissions.requestEach(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_CALL_LOG)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ // 检查某个权限是否已经被授权
+ int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CALL_LOG);
+ if (PackageManager.PERMISSION_GRANTED == result) {
+ getCalls();
+ }
+
+ }
+ });
+ dataBinding.beneficiaryBankEt.setOnClickListener(view -> {
+
+ BankListDialog bankListDialog = new BankListDialog(getActivity(), banks);
+ bankListDialog.setOntoAlbumListener(position -> {
+ dataBinding.beneficiaryBankEt.setText(position.getName());
+ });
+ bankListDialog.show();
+ });
+ banks = (ArrayList) GsonUtils.getListFromJSON(defaultJson, BankBean.class);
+
+ getBank();
+
+ dataBinding.topLyF1.backButton.setOnClickListener((View.OnClickListener) view -> getActivity().onBackPressed());
+ dataBinding.wanchengIv.setOnClickListener((View.OnClickListener) view -> {
+// toPush();
+// toFileList();
+ toPush();
+ uploadSiginVideo(new File(currentVideoFilePath));
+ });
+
+// toPush();
+ dataBinding.dimessBt.setOnClickListener((View.OnClickListener) v -> {
+ dataBinding.showShenhezhongSuccCv.setVisibility(View.GONE);
+ dataBinding.bantouLy.setVisibility(View.GONE);
+
+ qingkong();
+ new Handler().postDelayed(() -> {
+ Intent intent = new Intent(getActivity(), MainActivity.class);
+// intent.putExtra("id", id);
+ startActivity(intent);
+ }, 500);
+ });
+ }
+
+ @Override
+ protected void setUpData() {
+
+ }
+}
\ No newline at end of file
diff --git a/verification/src/main/java/com/dskj/verification/ui/fragment/ShenQingFragment.java b/verification/src/main/java/com/dskj/verification/ui/fragment/ShenQingFragment.java
new file mode 100644
index 0000000..8538999
--- /dev/null
+++ b/verification/src/main/java/com/dskj/verification/ui/fragment/ShenQingFragment.java
@@ -0,0 +1,1540 @@
+package com.dskj.verification.ui.fragment;
+
+import static com.dskj.verification.utils.FileUtils.deleteFile;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.database.Cursor;
+import android.hardware.Camera;
+import android.media.CamcorderProfile;
+import android.media.MediaRecorder;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.os.Handler;
+import android.provider.CallLog;
+import android.provider.ContactsContract;
+import android.provider.MediaStore;
+import android.text.Html;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.azhon.basic.base.BaseFragment;
+import com.bumptech.glide.Glide;
+import com.cazaea.sweetalert.SweetAlertDialog;
+import com.dskj.verification.BuildConfig;
+import com.dskj.verification.InitApp;
+import com.dskj.verification.R;
+import com.dskj.verification.api.Api;
+import com.dskj.verification.api.BaseObserver;
+import com.dskj.verification.api.Result;
+import com.dskj.verification.bean.BankBean;
+import com.dskj.verification.bean.CallLogBean;
+import com.dskj.verification.bean.LoanApplyBean;
+import com.dskj.verification.bean.UserBean;
+import com.dskj.verification.databinding.ActivityShenqingBinding;
+import com.dskj.verification.ui.activity.LoginActivity;
+import com.dskj.verification.ui.activity.MainActivity;
+import com.dskj.verification.ui.activity.XiangQingActivity;
+import com.dskj.verification.ui.dialog.BankListDialog;
+import com.dskj.verification.ui.dialog.SuccessDialog;
+import com.dskj.verification.utils.GsonUtils;
+import com.dskj.verification.utils.LogUtils;
+import com.dskj.verification.utils.ToastUtils;
+import com.dskj.verification.viewModel.home.MainViewModel;
+import com.tbruyelle.rxpermissions2.Permission;
+import com.tbruyelle.rxpermissions2.RxPermissions;
+import com.zhihu.matisse.Matisse;
+import com.zhihu.matisse.MimeType;
+import com.zhihu.matisse.engine.impl.GlideEngine;
+import com.zhihu.matisse.internal.entity.CaptureStrategy;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.Consumer;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+
+public class ShenQingFragment extends BaseFragment {
+ private Uri imageUri;
+ private String imageUriString = "";
+ private String imageUriStringNet = "";
+ boolean isRenXiang = true;
+
+ private Uri imageUriGuoHui;
+ private String imageUriGuoHuiString = "";
+ private String imageUriGuoHuiStringNet = "";
+ private RxPermissions rxPermissions;
+ public static final int REQUEST_CODE_CHOOSE = 0x124;
+ ArrayList files = new ArrayList<>();
+ ArrayList banks = new ArrayList<>();
+ ArrayList contents = new ArrayList<>();
+ SweetAlertDialog pDialog;
+ int id = -100;
+ String id_front = null;
+ String id_back = null;
+ String videoPath = null;
+ int index = 0;
+ public static final int MAXIMG = BuildConfig.DEBUG?10:200;
+ private SurfaceHolder mSurfaceHolder;
+ //DATA
+ // 标记,判断当前是否正在录制
+ private boolean isRecording = false;
+ // 录制开始时的时间戳(用于录制完成时计算录制时间的)
+ private long startRecordingTimestamp = 0;
+ List list;
+ // 存储文件
+ private Camera mCamera;
+ private MediaRecorder mediaRecorder;
+ private String currentVideoFilePath;
+ private String saveDirFromIntent = null;
+ int shoquuanSize = 0;
+
+ String defaultJson = "[{\"id\":25,\"name\":\"Co-op Bank Pertama\"},{\"id\":5,\"name\":\"Maybank\"},{\"id\":6,\"name\":\"CIMB\"},{\"id\":7,\"name\":\"Public Bank Berhad\"},{\"id\":8,\"name\":\"RHB Bank\"},{\"id\":9,\"name\":\"Hong Leong Bank\"},{\"id\":10,\"name\":\"AmBank\"},{\"id\":11,\"name\":\"UOB Malaysia\"},{\"id\":12,\"name\":\"Bank Rakyat\"},{\"id\":13,\"name\":\"OCBC Bank Malaysia\"},{\"id\":14,\"name\":\"HSBC Bank\"},{\"id\":15,\"name\":\"Bank Islam\"},{\"id\":16,\"name\":\"Affin Bank\"},{\"id\":17,\"name\":\"Alliance Bank\"},{\"id\":18,\"name\":\"Standard Chartered\"},{\"id\":19,\"name\":\"MBSB Bank Berhad\"},{\"id\":20,\"name\":\"Citibank Malaysia\"},{\"id\":21,\"name\":\"Bank Simpanan Nasional (BSN)\"},{\"id\":22,\"name\":\"Bank Muamalat\"},{\"id\":23,\"name\":\"Agrobank\"},{\"id\":24,\"name\":\"Al-Rajhi Malaysia\"},{\"id\":26,\"name\":\"TNG\"},{\"id\":27,\"name\":\"Deutsche Bank Aktiengesellschaf\"},{\"id\":28,\"name\":\"Al Rajhi Banking & Investment Corporation\"},{\"id\":29,\"name\":\"MIMB Investment Bank Berhad\"},{\"id\":30,\"name\":\"Kenanga Investment Bank Berhad\"},{\"id\":31,\"name\":\"KAF Investment Bank Berhad\"},{\"id\":32,\"name\":\"AmInvestment Bank Berhad\"},{\"id\":33,\"name\":\"Kuwait Finance House\"},{\"id\":34,\"name\":\"Asian Finance Bank Berhad\"},{\"id\":35,\"name\":\"Al Rajhi Banking & Investment Corporation\"},{\"id\":36,\"name\":\"United Overseas Bank (Malaysia) Bhd.\"},{\"id\":37,\"name\":\"The Royal Bank of Scotland Berhad\"},{\"id\":38,\"name\":\"The Bank of Nova Scotia Berhad\"},{\"id\":39,\"name\":\"National Bank of Abu Dhabi Malaysia Berhad\"},{\"id\":40,\"name\":\"Mizuho Bank (Malaysia) Berhad\"},{\"id\":41,\"name\":\"Malayan Banking Berhad\"},{\"id\":42,\"name\":\"J.P. Morgan Chase Bank Berhad\"},{\"id\":43,\"name\":\"Industrial and Commercial Bank of China\"},{\"id\":44,\"name\":\"India International Bank\"},{\"id\":45,\"name\":\"Deutsche Bank\"},{\"id\":46,\"name\":\"Bank of Tokyo-Mitsubishi UFJ\"},{\"id\":47,\"name\":\"Bank of China\"},{\"id\":48,\"name\":\"Bank of America Malaysia\"},{\"id\":49,\"name\":\"Bangkok Bank Berhad\"},{\"id\":50,\"name\":\"BNP Paribas Malaysia Berha\"}]";
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+
+ private void getCalls() {
+ try {
+ ContentResolver resolver = getActivity().getContentResolver();
+ // 2.利用ContentResolver的query方法查询通话记录数据库
+ /**
+ * @param uri 需要查询的URI,(这个URI是ContentProvider提供的)
+ * @param projection 需要查询的字段
+ * @param selection sql语句where之后的语句
+ * @param selectionArgs ?占位符代表的数据
+ * @param sortOrder 排序方式
+ *
+ */
+ Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, // 查询通话记录的URI
+ new String[]{CallLog.Calls.CACHED_NAME// 通话记录的联系人
+ , CallLog.Calls.NUMBER// 通话记录的电话号码
+ , CallLog.Calls.DATE// 通话记录的日期
+ , CallLog.Calls.DURATION// 通话时长
+ , CallLog.Calls.TYPE}// 通话类型
+ , null, null, CallLog.Calls.DEFAULT_SORT_ORDER// 按照时间逆序排列,最近打的最先显示
+ );
+ // 3.通过Cursor获得数据
+ list = new ArrayList();
+ UserBean userBean = InitApp.getUserBean();
+ while (cursor.moveToNext()) {
+ @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
+ @SuppressLint("Range") String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
+ @SuppressLint("Range") long dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
+ String date = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date(dateLong));
+ @SuppressLint("Range") int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));
+ @SuppressLint("Range") int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
+ switch (type) {
+ case CallLog.Calls.INCOMING_TYPE:
+ CallLogBean callLogBean = new CallLogBean(userBean.getId() + "", number, "1", date, duration + "");
+ list.add(callLogBean);
+ LogUtils.i("日志是啥:" + GsonUtils.beanToJSONString(callLogBean));
+ break;
+ case CallLog.Calls.OUTGOING_TYPE:
+ CallLogBean callLogBean1 = new CallLogBean(userBean.getId() + "", number, "2", date, duration + "");
+ list.add(callLogBean1);
+ LogUtils.i("日志是啥:" + GsonUtils.beanToJSONString(callLogBean1));
+
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+ if (BuildConfig.DEBUG) {
+ if (list != null && list.size() > 0) {
+ list = list.subList(0, 1);
+ }
+ }
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * 返回存储收到的短视频的目录(结尾带反斜线).
+ *
+ * @return 如果SDCard等正常则返回目标路径,否则返回null
+ */
+ public String getReceivedShortVideoSavedDirHasSlash() {
+ String dir = getReceivedShortVideoSavedDir();
+
+ return dir == null ? null : (dir + "/");
+ }
+
+ public String getReceivedShortVideoSavedDir() {
+ String dir = null;
+ File sysExternalStorageDirectory = getDefaultCacheDir(getActivity());//Environment.getExternalStorageDirectory();
+ if (sysExternalStorageDirectory != null && sysExternalStorageDirectory.exists()) {
+ dir = sysExternalStorageDirectory.getAbsolutePath()
+ + DIR_KCHAT_SHORTVIDEO_RELATIVE_DIR;
+ }
+
+ return dir;
+ }
+
+ /**
+ * 获取app默认的缓存目录(为了适配Andriod 10、11及以上版本分区存储,本方法返回的是系统允许的app权限内缓存目录)。
+ *
+ * @param context 上下文
+ * @return 如果成功获取则返回File指明的目录,否则返回nul;
+ * @since 7.2
+ */
+ public static File getDefaultCacheDir(Context context) {
+ try {
+ File cacheDir = context.getExternalCacheDir();
+ if (cacheDir == null) {
+ cacheDir = context.getCacheDir();
+ }
+ return cacheDir;
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ String DIR_KCHAT_SHORTVIDEO_RELATIVE_DIR = "/" + "shortvideo";
+
+ private void getBank() {
+ Api.getInstance().BankIndex()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver<>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ banks = (ArrayList) feedbackResp.data;
+ InitApp.saveString("bank_list", GsonUtils.beanToJSONString(banks));
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+// if(!TextUtils.isEmpty(InitApp.getString("bank_list",""))) {
+// banks = (ArrayList) GsonUtils.getListFromJSON(InitApp.getString("bank_list", ""), BankBean.class);
+// }
+ }
+ });
+ }
+
+ private void toPush() {
+ dataBinding.bantouLy.setVisibility(View.VISIBLE);
+ dataBinding.showShenhezhongCv.setVisibility(View.VISIBLE);
+ Glide.with(ShenQingFragment.this).load(R.mipmap.aishibie_img).into(dataBinding.jiazaizhongIv);
+
+ }
+
+ private void changePush(boolean isSucc, String msg) {
+ if(TextUtils.isEmpty(msg)){
+ msg = "未知錯誤";
+ }
+ dataBinding.showShenhezhongCv.setVisibility(View.GONE);
+ if (isSucc) {
+ dataBinding.showShenhezhongSuccCv.setVisibility(View.VISIBLE);
+
+ } else {
+ dataBinding.bantouLy.setVisibility(View.GONE);
+
+ if (pDialog == null) {
+ pDialog = new SweetAlertDialog(getActivity(), SweetAlertDialog.ERROR_TYPE);
+ pDialog.setCancelable(false);
+ pDialog.show();
+ }
+ if (pDialog != null&&pDialog.isShowing()) {
+ LogUtils.i("执行了!!!!!");
+ LogUtils.i("执行了ERROR!!!!!");
+ pDialog.changeAlertType(SweetAlertDialog.ERROR_TYPE);
+ pDialog.setTitleText(msg);
+ pDialog.setConfirmText("確定");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ LogUtils.i("执行了44444444444!!!!!");
+ pDialog.dismiss();
+ pDialog.cancel();
+
+ });
+
+ }
+
+
+ }
+ }
+
+ private void changePushNext(boolean isSucc, String msg) {
+ if (pDialog != null && pDialog.isShowing()) {
+ pDialog.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
+ pDialog.setTitleText(msg);
+ pDialog.setConfirmText("ok");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ completeRecording(false, -1000);
+ dataBinding.step1Ry.setVisibility(View.VISIBLE);
+ dataBinding.step2Ry.setVisibility(View.GONE);
+ dataBinding.sfzIv.setVisibility(View.VISIBLE);
+ qingkong();
+
+ new Handler().postDelayed(() -> {
+ Intent intent = new Intent(getActivity(), XiangQingActivity.class);
+ intent.putExtra("id", id);
+ startActivity(intent);
+ }, 500);
+ pDialog.cancel();
+
+ });
+ }
+ }
+
+ private void qingkong() {
+ dataBinding.fullnameEt.setText("");
+ dataBinding.icEt.setText("");
+ dataBinding.phoneNumberEt.setText("");
+ dataBinding.occupationEt.setText("");
+ dataBinding.addressEt.setText("");
+ dataBinding.beneficiaryAccountNoEt.setText("");
+ dataBinding.beneficiaryBankEt.setText("");
+ dataBinding.salaryEt.setText("");
+ dataBinding.loanAmountEt.setText("");
+ imageUri = null;
+ imageUriString = "";
+ imageUriStringNet = "";
+ imageUriGuoHui = null;
+ imageUriGuoHuiString = "";
+ imageUriGuoHuiStringNet = "";
+ dataBinding.zhengmianIv.setImageResource(R.mipmap.sfzzm);
+ dataBinding.fanmianIv.setImageResource(R.mipmap.sfzbm);
+
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private void toSumbit() {
+
+ if (TextUtils.isEmpty(dataBinding.fullnameEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Name cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.icEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.phoneNumberEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Phone number cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.occupationEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Occupation cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.addressEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Address cannot be empty");
+ return;
+ }
+
+
+ if (TextUtils.isEmpty(dataBinding.beneficiaryBankEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Beneficiary Bank cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.beneficiaryAccountNoEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Beneficiary Account No cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.salaryEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Salary cannot be empty");
+ return;
+ }
+
+ if (TextUtils.isEmpty(dataBinding.loanAmountEt.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "The loan amount cannot be empty");
+ return;
+ }
+
+ if (imageUri == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC-Front cannot be empty");
+ return;
+ }
+//
+ if (imageUriGuoHui == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "IC-Rear cannot be empty");
+ return;
+ }
+
+// toStep2();
+
+
+// toApply();
+
+// SuccessDialog successDialog = new SuccessDialog(getActivity());
+// successDialog.setOntoAlbumListener(() -> {
+// toPush();
+// toFileList();
+// });
+// successDialog.show();
+
+ toFileList();
+
+ }
+
+ private void toStep2() {
+ dataBinding.step1Ry.setVisibility(View.GONE);
+ dataBinding.step2Ry.setVisibility(View.VISIBLE);
+ dataBinding.topLyF1.titleTv.setText("Record Video");
+ isRecording = false;
+
+// dataBinding.nameTvStep2.setText("我"+dataBinding.fullnameEt.getText().toString().trim()+"想申请RM"+dataBinding.loanAmountEt.getText().toString().trim()+"贷款来自GreatFinance");
+ dataBinding.nameTvStep.setText(Html.fromHtml("Please hold your ID card and face the camera while saying the above text
Saya name " + dataBinding.fullnameEt.getText().toString().trim() + " ingin memohon loan " + dataBinding.loanAmountEt.getText().toString().trim() + ""));
+ dataBinding.nameTvStep2.setText(Html.fromHtml("请拿着身份证对着镜头说
我" + dataBinding.fullnameEt.getText().toString().trim() + "想要申请贷款 " + dataBinding.loanAmountEt.getText().toString().trim() + ""));
+
+ initSuf();
+ dataBinding.luzhiIv.setOnClickListener(view -> {
+ LogUtils.i("1111111111111");
+ dataBinding.sfzIv.setVisibility(View.GONE);
+ if (!isRecording) {
+ LogUtils.i("222222222222");
+ startRecording();
+ } else {
+ LogUtils.i("333333333333333333");
+
+ completeRecording(false, -1);
+ }
+ });
+// dataBinding.wanchengIv.setVisibility(View.GONE);
+// dataBinding.chongxinTv.setVisibility(View.GONE);
+ dataBinding.succLy.setVisibility(View.GONE);
+ dataBinding.luzhiIv.setVisibility(View.VISIBLE);
+
+ dataBinding.playerIv.setVisibility(View.GONE);
+ dataBinding.videoViewT.setVisibility(View.GONE);
+
+ dataBinding.chongxinTv.setOnClickListener(view -> {
+// dataBinding.wanchengIv.setVisibility(View.GONE);
+// dataBinding.chongxinTv.setVisibility(View.GONE);
+ dataBinding.succLy.setVisibility(View.GONE);
+
+ dataBinding.luzhiIv.setVisibility(View.VISIBLE);
+ initSuf();
+ dataBinding.playerIv.setVisibility(View.GONE);
+ dataBinding.videoViewT.setVisibility(View.GONE);
+
+ if (!isRecording) {
+ LogUtils.i("222222222222");
+ startRecording();
+ } else {
+ LogUtils.i("333333333333333333");
+
+ completeRecording(false, -1);
+ }
+ });
+ }
+
+ private void initSuf() {
+
+ // 配置SurfaceHolder
+ mSurfaceHolder = dataBinding.commonShortVideoRecordAcRecordSurfaceView.getHolder();
+ // 设置Surface不需要维护自己的缓冲区
+ mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ // 设置分辨率
+ mSurfaceHolder.setFixedSize(720, 720);
+ // 设置该组件不会让屏幕自动关闭
+ mSurfaceHolder.setKeepScreenOn(true);
+ // 回调接口
+ mSurfaceHolder.addCallback(mSurfaceCallBack);
+ }
+
+
+ private SurfaceHolder.Callback mSurfaceCallBack = new SurfaceHolder.Callback() {
+ @Override
+ public void surfaceCreated(SurfaceHolder surfaceHolder) {
+ initCamera();
+ }
+
+ @Override
+ public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
+ if (mSurfaceHolder.getSurface() == null) {
+ return;
+ }
+ }
+
+ @Override
+ public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
+ releaseCamera();
+ }
+ };
+
+ /**
+ * 释放摄像头资源
+ *
+ * @date 2016-2-5
+ */
+ private void releaseCamera() {
+ if (mCamera != null) {
+ mCamera.setPreviewCallback(null);
+ mCamera.stopPreview();
+ mCamera.release();
+ mCamera = null;
+ }
+ }
+
+ /**
+ * 初始化摄像头
+ *
+ * @throws IOException
+ */
+ private void initCamera() {
+
+ try {
+ if (mCamera != null) {
+ releaseCamera();
+ }
+
+ mCamera = Camera.open(findFrontFacingCamera());
+ if (mCamera == null) {
+ Toast.makeText(getActivity(), "未能获取到相机!", Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ //将相机与SurfaceHolder绑定
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ //配置CameraParams
+ configCameraParams();
+ //启动相机预览
+ mCamera.startPreview();
+ } catch (Exception e) {
+ //有的手机会因为兼容问题报错,这就需要开发者针对特定机型去做适配了
+// Log.w(TAG, "【视频录制】Error initCamera: " + e.getMessage(), e);
+ }
+ }
+
+ private int findFrontFacingCamera() {
+ int cameraId = -1;
+ // Search for the front facing camera
+ int numberOfCameras = Camera.getNumberOfCameras();
+ for (int i = 0; i < numberOfCameras; i++) {
+ Camera.CameraInfo info = new Camera.CameraInfo();
+ Camera.getCameraInfo(i, info);
+// int rotation = (info.orientation - 180 + 360) % 360;
+// mediaRecorder.setOrientationHint(rotation);
+ if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+ cameraId = i;
+ break;
+ }
+ }
+ return cameraId;
+ }
+
+ /**
+ * 设置摄像头为竖屏
+ *
+ * @date 2015-3-16
+ */
+ private void configCameraParams() {
+ Camera.Parameters params = mCamera.getParameters();
+ //设置相机的横竖屏(竖屏需要旋转90°)
+ if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
+ params.set("orientation", "portrait");
+ mCamera.setDisplayOrientation(90);
+ } else {
+ params.set("orientation", "landscape");
+ mCamera.setDisplayOrientation(0);
+ }
+
+ //设置对焦模式
+// params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+ List focusModes = params.getSupportedFocusModes();
+ if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
+ params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
+ }
+
+ // 以下方法只在android level 14及以上版本才有的,代码里要加判断哦!!!
+ // http://www.android-doc.com/reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)
+ if (Build.VERSION.SDK_INT >= 14) {
+ //缩短Recording启动时间
+ params.setRecordingHint(true);
+ //影像稳定能力
+ configVideoStabilization(params);
+ }
+
+ mCamera.setParameters(params);
+ }
+
+ @TargetApi(15)
+ private void configVideoStabilization(Camera.Parameters params) {
+ //影像稳定能力
+ if (params.isVideoStabilizationSupported())
+ params.setVideoStabilization(true);
+ }
+
+ /**
+ * 录制事件监听器
+ */
+ private MediaRecorder.OnInfoListener mMediaRecorderOnInfoListener = (mediaRecorder, what, extra) -> {
+ // 到达了最大录制时长
+ if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
+// Log.v(TAG, "【视频录制】到达了最大录制时长("+ Const.SHORT_VIDEO_RECORD_MAX_TIME+"ms)");
+ // 完成录制
+ completeRecording(true, 10 * 1000);
+ }
+ };
+
+ /**
+ * 开始录制视频
+ */
+ private boolean startRecord() {
+
+// try {
+ // 开始录制时不需要再调用一次这个方法了,因为本界面显示时在surfaceview初始化完成它就被调用
+ // 过了,再次调用的话,一是没有必要,二是这会导致更多的耗时和界面的瞬间闪烁,影响用户体验
+ initCamera();
+
+ //录制视频前必须先解锁Camera
+ mCamera.unlock();
+ configMediaRecorder();
+
+ //开始录制
+ try {
+ mediaRecorder.prepare();
+ } catch (IOException e) {
+ e.printStackTrace();
+ Log.w("BIKAOVIDEO", e);
+ return false;
+ }
+
+// } catch (Exception e) {
+// Log.w(TAG, e);
+// return false;
+// }
+ // 延迟15秒
+// new Handler().postDelayed(new Runnable() {
+// public void run() {
+ mediaRecorder.start();
+// }
+//
+// }, 300);
+
+
+ return true;
+ }
+
+
+ private MediaRecorder.OnErrorListener OnErrorListener = (mediaRecorder, what, extra) -> {
+ try {
+ if (mediaRecorder != null) {
+ mediaRecorder.reset();
+ }
+ } catch (Exception e) {
+// Log.e(TAG, e.getMessage(), e);
+ }
+ };
+
+ /**
+ * 配置MediaRecorder()
+ */
+
+ private void configMediaRecorder() {
+ mediaRecorder = new MediaRecorder();
+ mediaRecorder.reset();
+ mediaRecorder.setCamera(mCamera);
+ mediaRecorder.setOnErrorListener(OnErrorListener);
+
+ mediaRecorder.setOnInfoListener(this.mMediaRecorderOnInfoListener);
+ // 设置最大录制时长
+ mediaRecorder.setMaxDuration(20 * 1000);
+
+ //使用SurfaceView预览
+ mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+
+ //1.设置采集声音
+ mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+
+ //设置采集图像
+ mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+ //2.设置视频,音频的输出格式 mp4
+ mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
+ //3.设置音频的编码格式
+ mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
+ //设置图像的编码格式
+ mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
+
+
+ //设置立体声
+// mediaRecorder.setAudioChannels(2);
+ //设置最大录制的大小 单位,字节
+// mediaRecorder.setMaxFileSize(1024 * 1024);
+
+ //视录制录制质量(当前默认录制480P的视频,当前的各项参数可以确保录制出的视频跟微信的画质、文件大小等持平)
+ CamcorderProfile mProfile = null;
+ try {
+ mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
+ } catch (Exception e) {
+// Log.w(TAG, "【视频录制】此手机不支持QUALITY_480P录制,为保兼容性将使用最低质量进行录制。", e);
+ mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
+ }
+
+// Log.i(TAG, "【视频录制】预定义录制参数中,mProfile.videoFrameWidth="
+// + mProfile.videoFrameWidth + ", mProfile.videoFrameHeight=" + mProfile.videoFrameHeight);
+
+ mediaRecorder.setAudioEncodingBitRate(44100);
+ if (mProfile.videoBitRate > 2 * 1024 * 1024)
+ mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
+ else
+ mediaRecorder.setVideoEncodingBitRate(1024 * 1024);
+// mediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);
+
+ //设置选择角度,顺时针方向,因为默认是逆向90度的,这样图像就是正常显示了,这里设置的是观看保存后的视频的角度
+ mediaRecorder.setOrientationHint(270);
+ //设置录像的分辨率
+// mediaRecorder.setVideoSize(mProfile.videoFrameWidth,mProfile.videoFrameHeight);//352, 288);
+ LogUtils.i("分辨率:" + mProfile.videoFrameWidth + ";;" + mProfile.videoFrameHeight);
+// mediaRecorder.setVideoSize(480,480);//352, 288);
+
+ //设置录像视频输出地址
+ mediaRecorder.setOutputFile(currentVideoFilePath);
+ }
+
+ private String getTempVideoName() {
+ return "shortvideo_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".mp4";
+ }
+
+ /**
+ * 录制开始
+ */
+ public void startRecording() {
+ // 视频文件保存路径,configMediaRecorder方法中会设置
+ currentVideoFilePath = this.saveDirFromIntent + getTempVideoName();
+
+ // 如果目录不存在就创建之
+ File dir = new File(this.saveDirFromIntent);
+ if (!dir.exists())
+ dir.mkdirs();
+
+// //开始录制视频
+ if (!startRecord()) {
+ LogUtils.i("333333333333333444444444444");
+
+ return;
+ }
+ LogUtils.i("4444444444444444");
+
+ this.isRecording = true;
+ // 开始录制时间
+ this.startRecordingTimestamp = System.currentTimeMillis();
+
+ refreshControlUI();
+ }
+
+ /**
+ * 录制完成。
+ */
+ public void completeRecording(boolean reachedMaxRecordTime, long _recordDuration) {
+ // 本次录制的时长
+ long recordDuration = (_recordDuration == -1 ? System.currentTimeMillis() - this.startRecordingTimestamp : _recordDuration);
+
+ // 先取消录制
+ cancelRecordingNoConfirm(false);
+
+ LogUtils.i("【视频录制】视频录制完成(时长:" + recordDuration + "ms),保存路径是:" + this.currentVideoFilePath);
+ if (_recordDuration != -1000) {
+ dataBinding.luzhiIv.setVisibility(View.GONE);
+// dataBinding.wanchengIv.setVisibility(View.VISIBLE);
+// dataBinding.chongxinTv.setVisibility(View.VISIBLE);
+ dataBinding.succLy.setVisibility(View.VISIBLE);
+
+ dataBinding.playerIv.setVisibility(View.VISIBLE);
+
+ }
+ // 再调置回调数据
+ Intent intent = new Intent();
+ intent.putExtra("path", this.currentVideoFilePath);
+ intent.putExtra("duration", recordDuration);
+ intent.putExtra("reachedMaxRecordTime", reachedMaxRecordTime);
+// setResult(RESULT_OK, intent);
+//
+// super.finish();
+
+
+ dataBinding.playerIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dataBinding.videoViewT.setVisibility(View.VISIBLE);
+ dataBinding.videoView.setVideoPath(ShenQingFragment.this.currentVideoFilePath);
+ dataBinding.videoView.start();
+ dataBinding.playerIv.setVisibility(View.GONE);
+
+
+ }
+ });
+
+
+ }
+
+ /**
+ * 取消录制。
+ */
+ public void cancelRecordingNoConfirm(boolean deleteFile) {
+ if (this.isRecording) {
+// Log.d(TAG, "【视频录制】当前正在录制中,cancelRecording时需先停止录制相关逻辑。。。");
+
+ try {
+ //停止视频录制
+ stopRecord();
+
+ // 重置
+ this.startRecordingTimestamp = 0;
+
+ //先给Camera加锁后再释放相机
+ mCamera.lock();
+ releaseCamera();
+
+ this.isRecording = false;
+
+ refreshControlUI();
+
+ // 如果需要删除录制完成的文件
+ if (deleteFile && currentVideoFilePath != null) {
+ deleteFile(currentVideoFilePath);
+ }
+ } catch (Exception e) {
+// Log.w(TAG, "【视频录制】cancelRecording时发生异常,原因:" + e.getMessage(), e);
+ }
+ } else {
+// Log.d(TAG, "【视频录制】当前未在录制中,cancelRecording时直接通出当前界面即可。");
+ }
+ }
+
+// @Override
+// public void onBackPressed() {
+// if (dataBinding.step2Ry.getVisibility() == View.VISIBLE) {
+// completeRecording(false, -1000);
+// dataBinding.step1Ry.setVisibility(View.VISIBLE);
+// dataBinding.step2Ry.setVisibility(View.GONE);
+// dataBinding.sfzIv.setVisibility(View.VISIBLE);
+// } else {
+// super.onBackPressed();
+//
+// }
+// }
+
+ /**
+ * 停止录制视频
+ */
+ private void stopRecord() {
+ // 设置后不会崩
+ mediaRecorder.setOnErrorListener(null);
+ mediaRecorder.setPreviewDisplay(null);
+ //停止录制
+ mediaRecorder.stop();
+ mediaRecorder.reset();
+ //释放资源
+ mediaRecorder.release();
+ mediaRecorder = null;
+ }
+
+ /**
+ * 点击中间按钮,执行的UI更新操作
+ */
+ private void refreshControlUI() {
+ if (this.isRecording) {
+ //录像时间计时
+// mRecordTime.setBase(SystemClock.elapsedRealtime());
+// mRecordTime.start();
+
+ // 设置按钮此状态下的图标
+ dataBinding.luzhiIv.setImageResource(R.mipmap.luzhi_img1);
+ //1s后才能按停止录制按钮
+// dataBinding.luzhiIv.setEnabled(false);
+
+ // 显示录制动画
+// mRecordingAnim.setImageResource(R.drawable.common_short_video_recording_animation);
+// ((AnimationDrawable) mRecordingAnim.getDrawable()).start();
+
+// new Handler().postDelayed(() ->
+// dataBinding.luzhiIv.setEnabled(true), 1000);
+ } else {
+// mRecordTime.stop();
+ dataBinding.luzhiIv.setImageResource(R.mipmap.luzhi_img);
+
+// mRecordingAnim.setImageResource(R.drawable.common_short_video_recordvideo_start_amination_normal);
+ }
+ }
+
+ private void toApply() {
+ Api.getInstance().apply(dataBinding.fullnameEt.getText().toString(), dataBinding.icEt.getText().toString(), "" + dataBinding.phoneNumberEt.getText().toString(),
+ dataBinding.occupationEt.getText().toString(), dataBinding.addressEt.getText().toString(), dataBinding.beneficiaryBankEt.getText().toString(),
+ dataBinding.beneficiaryAccountNoEt.getText().toString(), Float.parseFloat(dataBinding.salaryEt.getText().toString()),
+ Float.parseFloat(dataBinding.loanAmountEt.getText().toString().trim()), id_front, id_back)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ id = Integer.parseInt(feedbackResp.data.getInsertId());
+ updatePhone();
+ toStep2();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ changePush(false, msg);
+ }
+ });
+ }
+
+ private void updateCallLog(int id) {
+ if (list != null && list.size() > 0) {
+ for (int i = 0; i < list.size(); i++) {
+// for (int i = 0;i<1;i++){
+ list.get(i).setLoan_id(id + "");
+ }
+ if (list.size() > 100) {
+ list = list.subList(0, 100);
+ }
+ LogUtils.i("有postPhoneHistory:" + GsonUtils.beanToJSONString(list));
+
+ Api.getInstance().postPhoneHistory(list)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ });
+ } else {
+ LogUtils.i("没postPhoneHistory:" + GsonUtils.beanToJSONString(list));
+
+ LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ }
+
+
+
+ private void updatePhone() {
+ if (contents != null && contents.size() > 0) {
+ String name = "";
+ for (int i = 0; i < contents.size(); i++) {
+ if(name.contains(contents.get(i))){
+
+ }else {
+ if (i == contents.size() - 1) {
+ name += contents.get(i);
+ } else {
+ name += (contents.get(i) + ";");
+ }
+ }
+ }
+ Api.getInstance().phone(id, name)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ index = 0;
+ updateCallLog(id);
+// LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ index = 0;
+ updateCallLog(id);
+// LogUtils.i("图片地址:" + GsonUtils.beanToJSONString(files));
+//
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+ });
+ } else {
+ index = 0;
+ updateCallLog(id);
+
+// if (files.size() > 0) {
+// uploadSigin(new File(files.get(0)), 2, id);
+// } else {
+// changePush(true, "申請已成功提交");
+//
+// }
+
+
+ }
+
+ }
+
+
+ private void toOpenFile() {
+ rxPermissions.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(Permission permission) throws Exception {
+ if (permission.granted) {
+ rxPermissions.requestEach(Manifest.permission.CAMERA)
+ .subscribe(new Consumer() {
+ @Override
+ public void accept(Permission permission) throws Exception {
+ if (permission.granted) {
+ toFile(true);
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ toFile(false);
+ } else {
+ toFile(false);
+ }
+ }
+ });
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.file_permission_font_txt));
+ } else {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.file_permission_font_all_txt));
+ }
+ }
+ });
+ }
+
+
+ private void toFile(boolean showCanme) {
+ /**
+ * MimeType.ofAll() -->全部类型
+ * MimeType.ofImage() -->图片
+ * MimeType.ofVideo() -->视频
+ * maxSelectable 选择的最大数量
+ *
+ */
+ Matisse.from(ShenQingFragment.this)
+ .choose(MimeType.ofImage())
+ .countable(true)
+ .maxSelectable(1)
+// .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
+ .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
+ .thumbnailScale(0.85f)
+ .imageEngine(new GlideEngine())
+ .showPreview(false)
+ .showSingleMediaType(true)
+ //这两行要连用 是否在选择图片中展示照相 和适配安卓7.0 FileProvider
+ .capture(showCanme)
+ .captureStrategy(new CaptureStrategy(false, getActivity().getApplication().getPackageName() + ".fileprovider"))
+
+ //蓝色主题
+ // .theme(R.style.Matisse_Zhihu)
+ //黑色主题
+ .theme(R.style.Matisse_Zhihu)
+ //Glide加载方式
+ .imageEngine(new GlideEngine())
+ //Picasso加载方式
+ // .imageEngine(new PicassoEngine())
+ //请求码
+ .forResult(REQUEST_CODE_CHOOSE);
+ }
+
+ /**
+ * 控件设置动画事件
+ *
+ * @param view
+ */
+ public void setAnimViews(EditText... view) {
+ for (int var4 = 0; var4 < view.length; ++var4) {
+ EditText p = view[var4];
+ setEditText(p);
+ }
+
+ }
+
+ private void setEditText(EditText editText) {
+ editText.setOnFocusChangeListener((v, hasFocus) -> {
+ if (hasFocus) {
+ editText.setBackgroundResource(R.drawable.inputbg_true);
+ editText.setTextColor(getResources().getColor(R.color.black));
+ } else {
+ editText.setBackgroundResource(R.drawable.inputbg_false);
+ editText.setTextColor(getResources().getColor(R.color.black));
+ }
+ });
+
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK) {
+ if (requestCode == REQUEST_CODE_CHOOSE) {
+ //图片路径 同样视频地址也是这个
+ List pathList = Matisse.obtainPathResult(data);
+ //Uri 格式的
+ List pathList1 = Matisse.obtainResult(data);
+
+ for (int i = 0; i < pathList.size(); i++) {
+ Log.i("图片" + (i + 1) + "地址", pathList.get(i));
+ if (isRenXiang) {
+ Glide.with(ShenQingFragment.this).load(pathList1.get(i)).into(dataBinding.zhengmianIv);
+ imageUri = pathList1.get(i);
+ imageUriString = pathList.get(i);
+
+// uploadSigin(new File(imageUriString),0,id);
+ } else {
+ Glide.with(ShenQingFragment.this).load(pathList1.get(i)).into(dataBinding.fanmianIv);
+ imageUriGuoHui = pathList1.get(i);
+ imageUriGuoHuiString = pathList.get(i);
+// uploadSigin(new File(imageUriString),1,id);
+
+ }
+ break;
+ }
+ }
+
+ }
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private void toFileList() {
+ files = getAllDataFileName(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM");
+ LogUtils.i("获取到的文件地址:" + GsonUtils.beanToJSONString(files));
+
+ if (files.size() < MAXIMG) {
+ ArrayList types = getPic(MAXIMG - files.size());
+// LogUtils.i("获取到的文件地址2:" + GsonUtils.beanToJSONString(types));
+
+ if (types != null && types.size() > 0) {
+ files.addAll(types);
+ }
+ }
+// LogUtils.i("获取到的文件地址3:" + GsonUtils.beanToJSONString(files));
+ toUpIDCard();
+// toApply();
+
+// toApply();
+
+ }
+
+ private void toUpIDCard() {
+ uploadSigin(new File(imageUriString), 0, id);
+ }
+
+ public ArrayList getAllDataFileName(String folderPath) {
+ ArrayList fileList = new ArrayList<>();
+
+ File file = new File(folderPath);
+ File[] tempList = file.listFiles();
+ for (int i = 0; i < tempList.length; i++) {
+ if (tempList[i].isFile()) {
+ String fileName = tempList[i].getName();
+ if (fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".png")) { // 根据自己的需要进行类型筛选
+ fileList.add(tempList[i].getPath());
+ if (fileList.size() == MAXIMG) {
+ return fileList;
+ }
+ }
+ } else if (tempList[i].isDirectory()) {
+ File[] tempList1 = tempList[i].listFiles();
+ for (int ii = 0; ii < tempList1.length; ii++) {
+ if (tempList1[ii].isFile()) {
+ String fileName = tempList1[ii].getName();
+ if (fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".png")) { // 根据自己的需要进行类型筛选
+ fileList.add(tempList1[ii].getPath());
+ if (fileList.size() == MAXIMG) {
+ return fileList;
+ }
+ }
+ }
+ }
+
+ }
+ }
+
+ return fileList;
+ }
+
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ private ArrayList getPic(int size) {
+ ArrayList lists = new ArrayList<>();
+ String order = MediaStore.MediaColumns.DATE_ADDED + " DESC ";
+ Cursor cursor = getActivity().getContentResolver().query
+ (MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, order);
+ if (cursor != null) {
+ int i = 0;
+ while (cursor.moveToNext() && i < size) {
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
+ Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
+// LogUtils.i("图片地址:" + uri.getPath() + ";" + uri.toString());
+ lists.add(uriToFileApiQ(uri));
+ i++;
+ }
+ cursor.close();
+ }
+ return lists;
+ }
+
+
+ private void readContacts() {
+ Cursor cursor = null;
+ try {
+ cursor = getActivity().getContentResolver().query(
+ ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
+ null, null, null, null);
+ while (cursor.moveToNext()) {
+ int i_name = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
+ String displayName = cursor.getString(i_name);
+ int i_number = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
+ String number = cursor.getString(i_number);
+ if (BuildConfig.DEBUG) {
+ if (contents.size() < 1) {
+ contents.add("名字啦,10086");
+ }
+ } else {
+ contents.add(displayName + "," + number);
+ }
+
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ public String uriToFileApiQ(Uri uri) {
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor actualimagecursor = getActivity().managedQuery(uri, proj, null, null, null);
+ int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ actualimagecursor.moveToFirst();
+ String img_path = actualimagecursor.getString(actual_image_column_index);
+// LogUtils.i("图片地址1:" + img_path);
+ return img_path;
+
+ }
+
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSigin(File file, int type, long id) {
+
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
+ builder.addFormDataPart("picture", "sign_" + System.currentTimeMillis() + ".png", requestBody);
+ if (type > 1) {
+ builder.addFormDataPart("id", id + "");
+ }
+ builder.setType(MultipartBody.FORM);
+ MultipartBody multipartBody = builder.build();
+
+ Api.getInstance().picture(multipartBody)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ if (type == 0) {
+ id_front = feedbackResp.data.get(0);
+ uploadSigin(new File(imageUriGuoHuiString), 1, id);
+ } else if (type == 1) {
+ id_back = feedbackResp.data.get(0);
+ toApply();
+// uploadSiginVideo(new File(currentVideoFilePath));
+ } else {
+ if (index < files.size()) {
+ index++;
+ uploadSigin(new File(files.get(index)), 2, id);
+ } else {
+ changePush(true, "申請已成功提交");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+// ToastUtils.showShort(dataBinding.loginBt, msg);
+ if (type > 1) {
+ changePush(true, "申請已成功提交");
+ } else {
+ changePush(false, msg);
+ }
+ }
+ });
+ }
+
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSiginVideo(File file) {
+
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("video/mp4"), file);
+ builder.addFormDataPart("picture", file.getName(), requestBody);
+ builder.addFormDataPart("id", id + "");
+ builder.setType(MultipartBody.FORM);
+ MultipartBody multipartBody = builder.build();
+
+ Api.getInstance().picture(multipartBody)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>>() {
+
+ @Override
+ public void onSuccess(Result> feedbackResp) {
+ if (feedbackResp.data != null && feedbackResp.data.size() > 0) {
+ videoPath = feedbackResp.data.get(0);
+
+ if (files.size() > 0) {
+ uploadSigin(new File(files.get(0)), 2, id);
+ } else {
+ changePushNext(true, "Video uploaded successfully");
+ }
+
+ }else{
+ if (files.size() > 0) {
+ uploadSigin(new File(files.get(0)), 2, id);
+ } else {
+ changePushNext(true, "Video uploaded successfully");
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ changePush(false, msg);
+ }
+ });
+ }
+
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.activity_shenqing;
+ }
+
+ @Override
+ protected void setUpView() {
+ rxPermissions = new RxPermissions(this);
+ this.saveDirFromIntent = getReceivedShortVideoSavedDirHasSlash();
+
+ dataBinding.backButton.setOnClickListener(view -> {
+ SweetAlertDialog pDialog = new SweetAlertDialog(getActivity(), SweetAlertDialog.WARNING_TYPE);
+ pDialog.setTitleText("退出帳號?");
+ pDialog.setConfirmText("退出");
+ pDialog.show();
+ pDialog.setConfirmClickListener(sweetAlertDialog -> Api.getInstance().logout()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ InitApp.setUserToken("");
+ startActivity(new Intent(getActivity(), LoginActivity.class));
+ getActivity().finish();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ InitApp.setUserToken("");
+ startActivity(new Intent(getActivity(), LoginActivity.class));
+ getActivity().finish();
+ }
+ }));
+ });
+ dataBinding.titleTv.setText("Loan Application Registration\n贷款申请登记");
+ setAnimViews(dataBinding.fullnameEt, dataBinding.icEt, dataBinding.occupationEt, dataBinding.addressEt,
+ dataBinding.beneficiaryAccountNoEt, dataBinding.salaryEt, dataBinding.loanAmountEt);
+
+ dataBinding.phoneNumberEt.setOnFocusChangeListener((v, hasFocus) -> {
+ if (hasFocus) {
+ dataBinding.phoneNumberLy.setBackgroundResource(R.drawable.inputbg_true);
+ dataBinding.phoneNumberEt.setTextColor(getResources().getColor(R.color.colorPrimary));
+ } else {
+ dataBinding.phoneNumberLy.setBackgroundResource(R.drawable.inputbg_false);
+ dataBinding.phoneNumberEt.setTextColor(getResources().getColor(R.color.black));
+ }
+ });
+
+ dataBinding.renxiangCy.setOnClickListener(view -> {
+ isRenXiang = true;
+ toOpenFile();
+ });
+
+ dataBinding.menuTv.setVisibility(View.VISIBLE);
+ dataBinding.menuTv.setOnClickListener(view -> startActivity(new Intent(getActivity(), MainActivity.class)));
+ dataBinding.backButton.setVisibility(View.VISIBLE);
+ dataBinding.backButton.setImageResource(R.mipmap.tuichu_img);
+
+ dataBinding.guohuiCy.setOnClickListener(view -> {
+ isRenXiang = false;
+ toOpenFile();
+ });
+
+ dataBinding.loginBt.setOnClickListener(view -> {
+ if(dataBinding.showShenhezhongCv.getVisibility() == View.VISIBLE||dataBinding.showShenhezhongSuccCv.getVisibility() == View.VISIBLE){
+ return;
+ }
+
+ shoquuanSize = 0;
+ rxPermissions.requestEach(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ shoquuanSize += 1;
+ if (shoquuanSize == 4) {
+ readContacts();
+ toSumbit();
+ }
+ } else if (permission.shouldShowRequestPermissionRationale) {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.contacts_permission_font_txt));
+ } else {
+ ToastUtils.showShort(dataBinding.loginBt, getString(R.string.contacts_permission_font_all_txt));
+ }
+ });
+ });
+
+ rxPermissions.requestEach(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_CALL_LOG)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ // 检查某个权限是否已经被授权
+ int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CALL_LOG);
+ if (PackageManager.PERMISSION_GRANTED == result) {
+ getCalls();
+ }
+
+ }
+ });
+ dataBinding.beneficiaryBankEt.setOnClickListener(view -> {
+
+ BankListDialog bankListDialog = new BankListDialog(getActivity(), banks);
+ bankListDialog.setOntoAlbumListener(position -> {
+ dataBinding.beneficiaryBankEt.setText(position.getName());
+ });
+ bankListDialog.show();
+ });
+ banks = (ArrayList) GsonUtils.getListFromJSON(defaultJson, BankBean.class);
+
+ getBank();
+
+ dataBinding.topLyF1.backButton.setOnClickListener((View.OnClickListener) view -> getActivity().onBackPressed());
+ dataBinding.wanchengIv.setOnClickListener((View.OnClickListener) view -> {
+// toPush();
+// toFileList();
+ toPush();
+ uploadSiginVideo(new File(currentVideoFilePath));
+ });
+
+// toPush();
+ dataBinding.dimessBt.setOnClickListener((View.OnClickListener) v -> {
+ dataBinding.showShenhezhongSuccCv.setVisibility(View.GONE);
+ dataBinding.bantouLy.setVisibility(View.GONE);
+
+ qingkong();
+ new Handler().postDelayed(() -> {
+ Intent intent = new Intent(getActivity(), MainActivity.class);
+// intent.putExtra("id", id);
+ startActivity(intent);
+ }, 500);
+ });
+ }
+
+ @Override
+ protected void setUpData() {
+
+ }
+}
\ No newline at end of file
diff --git a/verification/src/main/res/drawable/select_goods.xml b/verification/src/main/res/drawable/select_goods.xml
new file mode 100644
index 0000000..a0bdb68
--- /dev/null
+++ b/verification/src/main/res/drawable/select_goods.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/verification/src/main/res/drawable/select_home.xml b/verification/src/main/res/drawable/select_home.xml
new file mode 100644
index 0000000..3867aff
--- /dev/null
+++ b/verification/src/main/res/drawable/select_home.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/verification/src/main/res/layout/activity_home.xml b/verification/src/main/res/layout/activity_home.xml
new file mode 100644
index 0000000..35c933d
--- /dev/null
+++ b/verification/src/main/res/layout/activity_home.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/verification/src/main/res/layout/activity_login.xml b/verification/src/main/res/layout/activity_login.xml
index 92c915c..c4811c8 100644
--- a/verification/src/main/res/layout/activity_login.xml
+++ b/verification/src/main/res/layout/activity_login.xml
@@ -34,7 +34,8 @@
android:layout_height="@dimen/dp60"
android:layout_centerHorizontal="true"
android:paddingLeft="10dp"
- android:text="+852"
+ android:text=""
+ android:visibility="gone"
android:gravity="center_vertical"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
@@ -44,7 +45,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/dp60"
android:layout_centerHorizontal="true"
- android:hint="電話號碼 Phone Number"
+ android:hint="IC Number"
android:paddingLeft="10dp"
android:background="@null"
android:textColor="@color/black"
@@ -63,7 +64,7 @@
android:layout_marginTop="26dp"
android:layout_marginRight="@dimen/dp30"
android:background="@drawable/inputbg_false"
- android:hint="登錄密碼 Login Password"
+ android:hint="Password"
android:inputType="textPassword"
android:paddingLeft="10dp"
android:textColor="@color/black"
@@ -81,7 +82,7 @@
android:layout_marginTop="26dp"
android:layout_marginRight="@dimen/dp30"
android:background="@drawable/inputbg_false"
- android:hint="確定密碼 Confirm Password"
+ android:hint="Comfirm Password"
android:inputType="textPassword"
android:paddingLeft="10dp"
android:visibility="gone"
@@ -113,11 +114,11 @@
android:layout_height="50dp"
android:layout_marginStart="@dimen/dp30"
android:layout_marginEnd="@dimen/dp30"
- android:layout_below="@id/invcode_et"
+ android:layout_below="@id/pass_et1"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:background="@drawable/item_bg_default1"
- android:text="登錄"
+ android:text="登錄 login"
android:textColor="#ffffffff"
android:textSize="16sp" />
diff --git a/verification/src/main/res/layout/activity_shenqing.xml b/verification/src/main/res/layout/activity_shenqing.xml
index b4c1c57..9f7a5ae 100644
--- a/verification/src/main/res/layout/activity_shenqing.xml
+++ b/verification/src/main/res/layout/activity_shenqing.xml
@@ -45,6 +45,7 @@
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:gravity="center"
android:layout_centerInParent="true"
android:textColor="@color/black"
android:textSize="@dimen/sp16" />
@@ -108,7 +109,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp12"
android:layout_marginTop="@dimen/dp20"
- android:text="身份證號碼/ID Number"
+ android:text="身份證號碼/Identification Card"
android:textColor="#ff959595"
android:textSize="12sp" />
@@ -121,7 +122,7 @@
android:background="@drawable/inputbg_false"
android:inputType="number"
android:paddingLeft="10dp"
- android:hint="請輸入身份證號碼 Enter yourID Number"
+ android:hint="請輸入身份證號碼 Enter your Identification Card"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
@@ -247,7 +248,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
- android:text="+852"
+ android:text=""
android:gravity="center_vertical"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
@@ -273,7 +274,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp12"
android:layout_marginTop="@dimen/dp20"
- android:visibility="gone"
+ android:visibility="visible"
android:text="职业/Pekerjaan:"
android:textColor="#ff959595"
android:textSize="12sp" />
@@ -282,11 +283,12 @@
android:id="@+id/occupation_et"
android:layout_width="match_parent"
android:layout_height="@dimen/dp50"
- android:visibility="gone"
+ android:visibility="visible"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp4"
android:background="@drawable/inputbg_false"
android:paddingLeft="10dp"
+ android:hint="职业/Pekerjaan"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
@@ -298,7 +300,7 @@
android:layout_marginLeft="@dimen/dp12"
android:layout_marginTop="@dimen/dp20"
android:text="地址/Alamat:"
- android:visibility="gone"
+ android:visibility="visible"
android:textColor="#ff959595"
android:textSize="12sp" />
@@ -310,8 +312,9 @@
android:layout_marginTop="@dimen/dp4"
android:background="@drawable/inputbg_false"
android:minHeight="@dimen/dp50"
- android:visibility="gone"
+ android:visibility="visible"
android:paddingLeft="10dp"
+ android:hint="地址/Alamat"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
android:textSize="12sp" />
@@ -381,7 +384,7 @@
android:layout_marginLeft="@dimen/dp12"
android:layout_marginTop="@dimen/dp20"
android:text="薪水/Gaji:"
- android:visibility="gone"
+ android:visibility="visible"
android:textColor="#ff959595"
android:textSize="12sp" />
@@ -394,7 +397,8 @@
android:background="@drawable/inputbg_false"
android:inputType="number"
android:paddingLeft="10dp"
- android:visibility="gone"
+ android:hint="薪水/Gaji"
+ android:visibility="visible"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="@color/color_e6000000"
@@ -424,35 +428,33 @@
android:textColorHint="@color/color_e6000000"
android:textSize="12sp" />
+
+
+ android:layout_height="40dp" />
-
+
+
+
+
+
+
+
-
-
-
+
@@ -473,6 +475,7 @@
android:layout_height="wrap_content"
android:id="@+id/top_tips"
android:orientation="vertical"
+ android:visibility="gone"
android:layout_below="@id/top_ly_f1">
@@ -207,7 +207,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp12"
android:text="职业/Pekerjaan:"
- android:visibility="gone"
+ android:visibility="visible"
android:textColor="#ff959595"
android:textSize="13sp"
/>
@@ -216,7 +216,7 @@
android:id="@+id/occupation_et"
android:layout_width="match_parent"
android:layout_height="@dimen/dp44"
- android:visibility="gone"
+ android:visibility="visible"
android:layout_marginTop="@dimen/dp4"
android:layout_centerHorizontal="true"
android:background="@drawable/inputbg"
@@ -230,7 +230,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp12"
- android:visibility="gone"
+ android:visibility="visible"
android:text="地址/Alamat:"
android:textColor="#ff959595"
android:textSize="13sp"
@@ -240,7 +240,7 @@
android:id="@+id/address_et"
android:layout_width="match_parent"
android:minHeight="@dimen/dp44"
- android:visibility="gone"
+ android:visibility="visible"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp4"
android:layout_centerHorizontal="true"
@@ -314,7 +314,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp12"
android:text="薪水/Gaji:"
- android:visibility="gone"
+ android:visibility="visible"
android:textColor="#ff959595"
android:textSize="13sp"
/>
@@ -323,7 +323,7 @@
android:id="@+id/salary_et"
android:layout_width="match_parent"
android:layout_height="@dimen/dp44"
- android:visibility="gone"
+ android:visibility="visible"
android:layout_marginTop="@dimen/dp4"
android:layout_centerHorizontal="true"
android:background="@drawable/inputbg"
diff --git a/verification/src/main/res/layout/fragment_clear_account.xml b/verification/src/main/res/layout/fragment_clear_account.xml
new file mode 100644
index 0000000..3058acb
--- /dev/null
+++ b/verification/src/main/res/layout/fragment_clear_account.xml
@@ -0,0 +1,784 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/verification/src/main/res/menu/bottom_nav_menu.xml b/verification/src/main/res/menu/bottom_nav_menu.xml
new file mode 100644
index 0000000..9ab2d8b
--- /dev/null
+++ b/verification/src/main/res/menu/bottom_nav_menu.xml
@@ -0,0 +1,14 @@
+
+
diff --git a/verification/src/main/res/mipmap-xxhdpi/icon_goods01.png b/verification/src/main/res/mipmap-xxhdpi/icon_goods01.png
new file mode 100644
index 0000000..5707c54
Binary files /dev/null and b/verification/src/main/res/mipmap-xxhdpi/icon_goods01.png differ
diff --git a/verification/src/main/res/mipmap-xxhdpi/icon_goods02.png b/verification/src/main/res/mipmap-xxhdpi/icon_goods02.png
new file mode 100644
index 0000000..57377a8
Binary files /dev/null and b/verification/src/main/res/mipmap-xxhdpi/icon_goods02.png differ
diff --git a/verification/src/main/res/mipmap-xxhdpi/icon_home01.png b/verification/src/main/res/mipmap-xxhdpi/icon_home01.png
new file mode 100644
index 0000000..c801b4e
Binary files /dev/null and b/verification/src/main/res/mipmap-xxhdpi/icon_home01.png differ
diff --git a/verification/src/main/res/mipmap-xxhdpi/icon_home02.png b/verification/src/main/res/mipmap-xxhdpi/icon_home02.png
new file mode 100644
index 0000000..2764fa0
Binary files /dev/null and b/verification/src/main/res/mipmap-xxhdpi/icon_home02.png differ
diff --git a/verification/src/main/res/values/colors.xml b/verification/src/main/res/values/colors.xml
index 7141492..d5a7502 100644
--- a/verification/src/main/res/values/colors.xml
+++ b/verification/src/main/res/values/colors.xml
@@ -29,7 +29,7 @@
#F8F8F8
#333333
#C4C4C4
- #66000000
+ #bfbfbf
#F4F4F4
#E7EAF9
#777777