strcontent, String filePath, String fileName) {
- makeFilePath(filePath, fileName);
- String strFilePath = filePath + fileName;
- String strContent = "";
-
- for (int i = 0; i < strcontent.size(); ++i) {
- strContent = strContent + "file " + strcontent.get(i) + "\r\n";
- }
-
- try {
- File file = new File(strFilePath);
- if (file.isFile() && file.exists()) {
- file.delete();
- }
-
- file.getParentFile().mkdirs();
- file.createNewFile();
- RandomAccessFile raf = new RandomAccessFile(file, "rwd");
- raf.seek(file.length());
- raf.write(strContent.getBytes());
- raf.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
- public static boolean saveBitmap(Bitmap src, String dest) {
- if (src == null || TextUtils.isEmpty(dest)) {
- return false;
- }
- File destDir = new File(dest).getParentFile();
- if (destDir == null) {
- return false;
- }
- if (!destDir.exists()) {
- destDir.mkdirs();
- }
-
- FileOutputStream fout = null;
- boolean success = false;
- try {
- fout = new FileOutputStream(dest);
- src.compress(Bitmap.CompressFormat.PNG, 100, fout);
-
- success = true;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- success = false;
- } finally {
- if (fout != null) {
- try {
- fout.close();
- } catch (IOException e) {
- e.printStackTrace();
- success = false;
- }
- }
- return success;
- }
- }
-
- public static boolean saveBitmapPic(Context context,Bitmap src, String dest,String fileName) {
- if (src == null || TextUtils.isEmpty(dest)) {
- return false;
- }
- File destDir = new File(dest).getParentFile();
- if (destDir == null) {
- return false;
- }
- if (!destDir.exists()) {
- destDir.mkdirs();
- }
-
- FileOutputStream fout = null;
- boolean success = false;
- try {
- fout = new FileOutputStream(dest);
- src.compress(Bitmap.CompressFormat.PNG, 100, fout);
-
-
- success = true;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- success = false;
- } finally {
- if (fout != null) {
- try {
- fout.close();
- } catch (IOException e) {
- e.printStackTrace();
- success = false;
- }
- }
- // 其次把文件插入到系统图库
- try {
- MediaStore.Images.Media.insertImage(context.getContentResolver(),
- dest, fileName, null);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- return success;
- }
- }
-
-
- public static String saveBitmap2Gallery(String dest,String fileName, Bitmap bitmap) {
- File mPicDir = new File(dest);
-
- if (mPicDir == null) {
- return null;
- }
- if (!mPicDir.exists()) {
- mPicDir.mkdirs();
- }
- OutputStream out = null;
- String[] pathArray = null;
- String[] typeArray = null;
- String fialeN=null;
- try {
- // Android 10版本 创建文件夹不成功,这里没有过多去研究
- boolean isMk = mPicDir.mkdirs();
- Log.d("ImageUtils ", "isMk = " + isMk);
- File mPicFile = new File(mPicDir, fileName);
- String mPicPath = mPicFile.getAbsolutePath();
- Log.d("ImageUtils ", "mPicPath = " + mPicPath);
- pathArray = new String[]{mPicFile.getAbsolutePath()};
- typeArray = new String[]{"image/png"};
- ContentValues values = new ContentValues();
- ContentResolver resolver = InitApp.initApp.getContentResolver();
- values.put(MediaStore.Images.ImageColumns.DATA, mPicPath);
- values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, fileName);
- values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/png");
- values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, System.currentTimeMillis() + "");
- // 插入相册
- Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
- if (uri != null) {
- out = resolver.openOutputStream(uri);
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
- Log.d("ImageUtils ", "compress");
- }
- fialeN=fileName;
- } catch (Exception e) {
- e.printStackTrace();
- fialeN=null;
- } finally {
- if (out != null) {
- try {
- out.flush();
- out.close();
- Log.d("ImageUtils", "finally close");
- // 扫描刷新
- MediaScannerConnection.scanFile(InitApp.initApp, pathArray, typeArray, (s, uri) -> Log.d("ImageUtils", "onScanCompleted s->" + s));
- return fialeN;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return fialeN;
- }
-
-
- public static File makeFilePath(String filePath, String fileName) {
- File file = null;
- makeRootDirectory(filePath);
-
- try {
- file = new File(filePath + fileName);
- if (!file.exists()) {
- file.createNewFile();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return file;
- }
-
- public static void makeRootDirectory(String filePath) {
- File file = null;
-
- try {
- file = new File(filePath);
- if (!file.exists()) {
- file.mkdirs();
- }
- } catch (Exception e) {
- Log.i("error:", e + "");
- }
- }
-
- /**
- * 递归删除文件和文件夹
- *
- * @param file
- */
- public static void deleteFileRecursively(File file) {
- if (file.isFile()) {
- file.delete();
- return;
- }
- if (file.isDirectory()) {
- File[] childFile = file.listFiles();
- if (childFile == null || childFile.length == 0) {
- file.delete();
- return;
- }
- for (File f : childFile) {
- deleteFileRecursively(f);
- }
- file.delete();
- }
- }
-
- public static String md5(String content) {
- byte[] hash;
- try {
- hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("NoSuchAlgorithmException", e);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException("UnsupportedEncodingException", e);
- }
-
- StringBuilder hex = new StringBuilder(hash.length * 2);
- for (byte b : hash) {
- if ((b & 0xFF) < 0x10) {
- hex.append("0");
- }
- hex.append(Integer.toHexString(b & 0xFF));
- }
- return hex.toString();
- }
-
- public static String getSaveUpdateDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- String rootDir = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "SuperRecord" + File.separator + "update" + File.separator;
- File file = new File(rootDir);
- if (!file.exists()) {
- if (!file.mkdirs()) {
- return null;
- }
- }
- return rootDir;
- } else {
- return null;
- }
- }
-
-
- /**
- * check the usability of the external storage.
- *
- * @return enable -> true, disable->false
- */
- public static boolean isExternalStorageEnable() {
- String state = Environment.getExternalStorageState();
- return Environment.MEDIA_MOUNTED.equals(state);
- }
-
- /**
- * get the external storage file path
- *
- * @return the file path
- */
- public static String getExternalStoragePath() {
- return getExternalStorageDir().getAbsolutePath();
- }
-
- /**
- * get the external storage file
- *
- * @return the file
- */
- public static File getExternalStorageDir() {
- return Environment.getExternalStorageDirectory();
- }
-
- public static String handleSpaceFilePath(String path) {
- if (TextUtils.isEmpty(path) || !path.contains(" ")) {
- return path;
- }
-
- File origin = new File(path);
- String fileName = origin.getName();
- if (fileName.contains(" ")) {
- fileName = fileName.replaceAll(" ", "");
- }
-
- File targetDir = new File(TEMP_DIR);
- if (!targetDir.exists()) {
- targetDir.mkdirs();
- }
-
- File after = new File(targetDir, fileName);
- copyFile(origin, after);
- return after.getAbsolutePath();
- }
-
-
- public static boolean copyFile(File src, File dest) {
- if (src == null || dest == null) {
- return false;
- }
- if (dest.exists()) {
- return true;
- }
-
- if (TextUtils.equals(src.getParent(), dest.getParent())) {
- return src.renameTo(dest);
- }
-
- try {
- dest.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- FileChannel srcChannel = null;
- FileChannel dstChannel = null;
-
- boolean result = false;
- try {
- srcChannel = new FileInputStream(src).getChannel();
- dstChannel = new FileOutputStream(dest).getChannel();
- srcChannel.transferTo(0, srcChannel.size(), dstChannel);
- result = true;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- srcChannel.close();
- dstChannel.close();
- } catch (Exception e) {
- e.printStackTrace();
- result = false;
- }
- }
- return result;
- }
-
- public static String getTempDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- File file = new File(TEMP_DIR);
- if (!file.exists()) {
- if (!file.mkdirs()) {
- return null;
- }
- }
- return TEMP_DIR;
- } else {
- return null;
- }
- }
-
- public static String getSaveRecordDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- File file = new File(VIDEO_DIR);
- if (!file.exists()) {
- if (!file.mkdirs()) {
- return null;
- }
- }
- return VIDEO_DIR;
- } else {
- return null;
- }
- }
-
- public static String getSaveRecordPicDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- File file = new File(THUMB_DIR);
- if (!file.exists()) {
- if (!file.mkdirs()) {
- return null;
- }
- }
- return THUMB_DIR;
- } else {
- return null;
- }
- }
-
-
- public static String getSaveCacheDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- String rootDir = Environment.getExternalStorageDirectory().getAbsolutePath()
- + File.separator + "ScreenRecord"
- + File.separator + "cache"
- + File.separator + "frame" + File.separator;
- File file = new File(rootDir);
- if (file.exists()) {
- deleteDir(rootDir);
- }
- file.mkdirs();
- return rootDir;
- } else {
- return null;
- }
- }
-
- public static String getSaveCoverDirectory() {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- String rootDir = Environment.getExternalStorageDirectory().getAbsolutePath()
- + File.separator + "ScreenRecord"
- + File.separator + "cache"
- + File.separator + "cover" + File.separator;
- File file = new File(rootDir);
- if (!file.exists()) {
- file.mkdirs();
- }
- return rootDir;
- } else {
- return null;
- }
- }
-
- public static String getSaveScreenDirectory() {
-// if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- File file = new File(CAPTURER_DIR);
- if (!file.exists()) {
- if (!file.mkdirs()) {
- return null;
- }
- }
- return CAPTURER_DIR;
-// } else {
-// return null;
-// }
- }
-
- public static void deleteDir(final String pPath) {
- File dir = new File(pPath);
- deleteDirWithFile(dir);
- }
-
- public static void deleteDirWithFile(File dir) {
- if (dir == null || !dir.exists() || !dir.isDirectory())
- return;
- for (File file : dir.listFiles()) {
- if (file.isFile())
- file.delete();
- else if (file.isDirectory())
- deleteDirWithFile(file);
- }
- dir.delete();
- }
-
- public static boolean fileIsExist(String filePath) {
- if (TextUtils.isEmpty(filePath)) return false;
-
- File file = new File(filePath);
- return file.exists();
- }
-
-
- public static void deleteFile(String path) {
- if (TextUtils.isEmpty(path)) {
- return;
- }
- File file = new File(path);
- Log.i("XHXDEBUG","XHXDEBUG清理删除文件:"+path);
- if (file.exists() && file.isFile()) {
- file.delete();
- }
- }
-
- public static boolean isExists(String path) {
- if (TextUtils.isEmpty(path)) {
- return false;
- }
-
- File file = new File(path);
- return file.exists();
- }
-
-
- public static Uri getImageContentUri(Context context, String filePath) {
- Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",
- new String[]{filePath}, null);
- Uri uri = null;
-
- if (cursor != null) {
- if (cursor.moveToFirst()) {
- int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
- Uri baseUri = Uri.parse("content://media/external/images/media");
- uri = Uri.withAppendedPath(baseUri, "" + id);
- }
-
- cursor.close();
- }
-
- if (uri == null) {
- ContentValues values = new ContentValues();
- values.put(MediaStore.Images.Media.DATA, filePath);
- uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
- }
-
- return uri;
- }
-
- //存储assets中的文件到本地
- public static void getAssetsPath(Context context) {
- String fileName = "ic_share_image.jpeg";
- File testFolder = new File(APP_DIR + "/share");
- if (testFolder.exists() && testFolder.isDirectory()) {
- Log.d("", "test folder already exists");
- } else if (!testFolder.exists()) {
- testFolder.mkdir();
- }
- File modelFile = new File(testFolder, fileName);
- if (!modelFile.exists()) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- InputStream is = context.getAssets().open(fileName);
- FileOutputStream fos = new FileOutputStream(modelFile);
- byte[] buffer = new byte[8192];
- int read;
- try {
- while ((read = is.read(buffer)) != -1) {
- fos.write(buffer, 0, read);
- }
- } finally {
- fos.flush();
- fos.close();
- is.close();
- }
- } catch (IOException e) {
- Log.d("", "Can't copy test file onto SD card");
- }
- }
- }).start();
- }
- }
-
- public static int saveImageToGalleryShare(Context mContext, Bitmap bmp, String fileName) {
- //生成路径
- String root = APP_DIR;
- String dirName = "tempimage";
- File appDir = new File(root, dirName);
- if (!appDir.exists()) {
- appDir.mkdirs();
- }
- //获取文件
- File file = new File(appDir, fileName);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(file);
- bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
- fos.flush();
- //通知系统相册刷新
-// mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
-// Uri.fromFile(new File(file.getPath()))));
- //通知更新相册
- mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
-
- return 2;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (fos != null) {
- fos.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return -1;
- }
-
- /**
- * Drawable转换成一个Bitmap
- *
- * @param drawable drawable对象
- * @return
- */
- public static Bitmap drawableToBitmap(Drawable drawable) {
- Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
- drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
- Canvas canvas = new Canvas(bitmap);
- drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
- drawable.draw(canvas);
- return bitmap;
- }
-
-
- /**
- * oldPath 和 newPath必须是新旧文件的绝对路径
- */
- public static File renameFile(String oldPath, String newPath) {
- if (TextUtils.isEmpty(oldPath)) {
- return null;
- }
-
- if (TextUtils.isEmpty(newPath)) {
- return null;
- }
- File oldFile = new File(oldPath);
- File newFile = new File(newPath);
- boolean b = oldFile.renameTo(newFile);
- File file2 = new File(newPath);
- return file2;
- }
-
- /**
- * 删除单个文件
- *
- * @param filePath$Name 要删除的文件的文件名
- * @return 单个文件删除成功返回true,否则返回false
- */
- public static boolean deleteSingleFile(String filePath$Name) {
- File file = new File(filePath$Name);
- // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
- if (file.exists() && file.isFile()) {
- if (file.delete()) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
-
- /**
- * 复制asset到片尾
- */
- public static boolean copyAssetsToDst(Context context, String srcPath) {
- File targetDir0 = new File(APP_DIR);
- if (!targetDir0.exists()) {
- targetDir0.mkdirs();
- }
-
- File targetDir = new File(VIDEO_DIR_HIDE);
- if (!targetDir.exists()) {
- targetDir.mkdirs();
- }
-
- try {
- File outFile = new File(VIDEO_DIR_HIDE, srcPath);
- InputStream is = context.getAssets().open(srcPath);
- FileOutputStream fos = new FileOutputStream(outFile);
- byte[] buffer = new byte[1024];
- int byteCount;
- while ((byteCount = is.read(buffer)) != -1) {
- fos.write(buffer, 0, byteCount);
- }
- fos.flush();
- is.close();
- fos.close();
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
-
-
- /**读取assets文件*/
- public static String getFromAssets(Context context,String fileName) {
- try {
- InputStreamReader inputReader = new InputStreamReader(context.getResources().getAssets().open(fileName));
- BufferedReader bufReader = new BufferedReader(inputReader);
- String line = "";
- String Result = "";
- while ((line = bufReader.readLine()) != null)
- Result += line;
- return Result;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
-
- }
-
-
- /*
- * Java文件操作 获取文件扩展名
- *
- */
- public static String getExtensionName(String filename) {
- if ((filename != null) && (filename.length() > 0)) {
- int dot = filename.lastIndexOf('.');
- if ((dot >-1) && (dot < (filename.length() - 1))) {
- return filename.substring(dot + 1);
- }
- }
- return filename;
- }
-}
diff --git a/app/src/main/java/com/hitomi/tilibrary/transfer/ProgressBarIndicatorNew.java b/app/src/main/java/com/hitomi/tilibrary/transfer/ProgressBarIndicatorNew.java
deleted file mode 100644
index 3576752..0000000
--- a/app/src/main/java/com/hitomi/tilibrary/transfer/ProgressBarIndicatorNew.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.hitomi.tilibrary.transfer;
-
-import android.content.Context;
-import android.util.SparseArray;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ProgressBar;
-
-import com.hitomi.tilibrary.style.IProgressIndicator;
-
-/**
- * 图片加载时使用 Android 默认的 ProgressBar
- *
- * email: 196425254@qq.com
- */
-public class ProgressBarIndicatorNew implements IProgressIndicator {
-
-// private SparseArray progressBarArray = new SparseArray<>();
-
-// private int dip2Px(Context context, float dpValue) {
-//// final float scale = context.getResources().getDisplayMetrics().density;
-//// return (int) (dpValue * scale + 0.5f);
-// }
-
- @Override
- public void attach(int position, FrameLayout parent) {
-// Context context = parent.getContext();
-//
-// int progressSize = dip2Px(context, 50);
-// FrameLayout.LayoutParams progressLp = new FrameLayout.LayoutParams(
-// progressSize, progressSize);
-// progressLp.gravity = Gravity.CENTER;
-//
-// ProgressBar progressBar = new ProgressBar(context);
-// progressBar.setLayoutParams(progressLp);
-//
-// parent.addView(progressBar, parent.getChildCount());
-// progressBarArray.put(position, progressBar);
- }
-
- @Override
- public void hideView(int position) {
-// ProgressBar progressBar = progressBarArray.get(position);
-// if (progressBar != null)
-// progressBar.setVisibility(View.GONE);
- }
-
- @Override
- public void onStart(int position) {
- }
-
- @Override
- public void onProgress(int position, int progress) {
- }
-
- @Override
- public void onFinish(int position) {
-// ProgressBar progressBar = progressBarArray.get(position);
-// if (progressBar == null) return;
-//
-// ViewGroup vg = (ViewGroup) progressBar.getParent();
-// ;
-// if (vg != null) {
-// vg.removeView(progressBar);
-// }
- }
-}
diff --git a/app/src/main/java/com/hitomi/tilibrary/transfer/TransfereeNew.java b/app/src/main/java/com/hitomi/tilibrary/transfer/TransfereeNew.java
deleted file mode 100644
index 432211e..0000000
--- a/app/src/main/java/com/hitomi/tilibrary/transfer/TransfereeNew.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package com.hitomi.tilibrary.transfer;
-
-import android.app.Activity;
-import android.app.Application;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.view.KeyEvent;
-import android.widget.ImageView;
-
-import androidx.appcompat.app.AlertDialog;
-
-import com.gyf.immersionbar.ImmersionBar;
-import com.hitomi.tilibrary.style.index.CircleIndexIndicator;
-import com.hitomi.tilibrary.style.progress.ProgressBarIndicator;
-import com.hitomi.tilibrary.utils.AppManager;
-import com.hitomi.tilibrary.utils.FileUtils;
-import com.hitomi.tilibrary.view.video.ExoVideoView;
-import com.hitomi.tilibrary.view.video.source.ExoSourceManager;
-
-import java.io.File;
-
-/**
- * Main workflow:
- * 1、点击缩略图展示缩略图到 transferee 过渡动画
- * 2、显示下载高清图片进度
- * 3、加载完成显示高清图片
- * 4、高清图支持手势缩放
- * 5、关闭 transferee 展示 transferee 到原缩略图的过渡动画
- * Created by Vans Z on 2017/1/19.
- *
- * email: 196425254@qq.com
- */
-public class TransfereeNew implements DialogInterface.OnShowListener,
- DialogInterface.OnKeyListener,
- TransferLayout.OnLayoutResetListener,
- AppManager.OnAppStateChangeListener {
-
- private Context context;
- private Dialog transDialog;
-
- private TransferLayout transLayout;
- private TransferConfig transConfig;
- private OnTransfereeStateChangeListener transListener;
-
- // 因为Dialog的关闭有动画延迟,固不能使用 dialog.isShowing, 去判断 transferee 的显示逻辑
- private boolean shown;
-
- /**
- * 构造方法私有化,通过{@link #getDefault(Context)} 创建 transferee
- *
- * @param context 上下文环境
- */
- private TransfereeNew(Context context) {
- this.context = context;
- createLayout();
- createDialog();
- AppManager.getInstance().init((Application) context.getApplicationContext());
- }
-
- /**
- * @param context
- * @return {@link TransfereeNew}
- */
- public static TransfereeNew getDefault(Context context) {
- return new TransfereeNew(context);
- }
-
- private void createLayout() {
- transLayout = new TransferLayout(context);
- transLayout.setOnLayoutResetListener(this);
- }
-
- private void createDialog() {
- transDialog = new AlertDialog.Builder(context,
- android.R.style.Theme_Translucent_NoTitleBar_Fullscreen)
- .setView(transLayout)
- .create();
- transDialog.setOnShowListener(this);
- transDialog.setOnKeyListener(this);
- }
-
- /**
- * 检查参数,如果必须参数缺少,就使用缺省参数或者抛出异常
- */
- private void checkConfig() {
- if (transConfig == null)
- throw new IllegalArgumentException("The parameter TransferConfig can't be null");
- if (transConfig.isSourceEmpty())
- throw new IllegalArgumentException("The parameter sourceUrlList or sourceUriList can't be empty");
- if (transConfig.getImageLoader() == null)
- throw new IllegalArgumentException("Need to specify an ImageLoader");
-
- transConfig.setNowThumbnailIndex(Math.max(transConfig.getNowThumbnailIndex(), 0));
- transConfig.setOffscreenPageLimit(transConfig.getOffscreenPageLimit() <= 0
- ? 1 : transConfig.getOffscreenPageLimit());
- transConfig.setDuration(transConfig.getDuration() <= 0
- ? 300 : transConfig.getDuration());
- transConfig.setProgressIndicator(transConfig.getProgressIndicator() == null
- ? new ProgressBarIndicator() : transConfig.getProgressIndicator());
- transConfig.setIndexIndicator(transConfig.getIndexIndicator() == null
- ? new CircleIndexIndicator() : transConfig.getIndexIndicator());
- }
-
- /**
- * 配置 transferee 参数对象
- *
- * @param config 参数对象
- * @return transferee
- */
- public TransfereeNew apply(TransferConfig config) {
- if (!shown) {
- transConfig = config;
- OriginalViewHelper.getInstance().fillOriginImages(config);
- checkConfig();
- transLayout.apply(config);
- }
- return this;
- }
-
- /**
- * transferee 是否显示
- *
- * @return true :显示, false :关闭
- */
- public boolean isShown() {
- return shown;
- }
-
- /**
- * 显示 transferee
- */
- public void show() {
- if (shown) return;
- transDialog.show();
- adjustTopAndBottom();
- if (transListener != null) {
- transListener.onShow();
- }
- shown = true;
- }
-
- /**
- * 显示 transferee, 并设置 OnTransfereeChangeListener
- *
- * @param listener {@link OnTransfereeStateChangeListener}
- */
- public void show(OnTransfereeStateChangeListener listener) {
- if (shown || listener == null) return;
- transDialog.show();
- adjustTopAndBottom();
- transListener = listener;
- transListener.onShow();
- shown = true;
- }
-
- /**
- * 关闭 transferee
- */
- public void dismiss() {
- if (shown && transLayout.dismiss(transConfig.getNowThumbnailIndex())) {
- shown = false;
- }
- }
-
- /**
- * 获取图片文件
- */
- public File getImageFile(String imageUrl) {
- return transConfig.getImageLoader().getCache(imageUrl);
- }
-
- /**
- * 清除 transferee 缓存,包括图片和视频文件缓存,注意清除视频缓存必须保证 transferee 是关闭状态
- */
- public void clear() {
- if (transConfig != null && transConfig.getImageLoader() != null) {
- transConfig.getImageLoader().clearCache();
- }
- File cacheFile = new File(context.getCacheDir(), ExoVideoView.CACHE_DIR);
- if (cacheFile.exists() && !shown) {
- FileUtils.deleteDir(new File(cacheFile, VideoThumbState.FRAME_DIR));
- ExoSourceManager.clearCache(context, cacheFile, null);
- }
- }
-
- /**
- * dialog 打开时的监听器
- */
- @Override
- public void onShow(DialogInterface dialog) {
- AppManager.getInstance().register(this);
- transLayout.show();
- }
-
- /**
- * 调整顶部和底部内边距
- */
- private void adjustTopAndBottom() {
- if (context instanceof Activity) {
- // 隐藏状态栏和导航栏,全屏化
- Activity activity = (Activity) context;
- ImmersionBar.with(activity, transDialog)
- .fullScreen(true)
- .init();
-// int top = ImmersionBar.getNotchHeight(activity);
-// int bottom = ImmersionBar.getNavigationBarHeight(activity);
- transLayout.setPadding(0, 0, 0, 0);
- }
- }
-
- @Override
- public void onReset() {
- AppManager.getInstance().unregister(this);
- transDialog.dismiss();
- if (transListener != null)
- transListener.onDismiss();
- shown = false;
- }
-
- @Override
- public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK &&
- event.getAction() == KeyEvent.ACTION_UP &&
- !event.isCanceled()) {
- dismiss();
- return true;
- }
- return false;
- }
-
- @Override
- public void onForeground() {
- transLayout.pauseOrPlayVideo(false);
- }
-
- @Override
- public void onBackground() {
- transLayout.pauseOrPlayVideo(true);
- }
-
- /**
- * 设置 Transferee 显示和关闭的监听器
- *
- * @param listener {@link OnTransfereeStateChangeListener}
- */
- public void setOnTransfereeStateChangeListener(OnTransfereeStateChangeListener listener) {
- transListener = listener;
- }
-
- /**
- * 资源销毁,防止内存泄漏
- */
- public void destroy() {
- if (transConfig != null) {
- transConfig.destroy();
- transConfig = null;
- }
- }
-
- /**
- * Transferee 显示的时候调用 {@link OnTransfereeStateChangeListener#onShow()}
- *
- * Transferee 关闭的时候调用 {@link OnTransfereeStateChangeListener#onDismiss()}
- */
- public interface OnTransfereeStateChangeListener {
- void onShow();
-
- void onDismiss();
- }
-
- public interface OnTransfereeLongClickListener {
- void onLongClick(ImageView imageView, String imageUri, int pos);
- }
-
-}
diff --git a/app/src/main/res/layout/activity_start_up.xml b/app/src/main/res/layout/activity_start_up.xml
index 757d72b..b5b7b86 100644
--- a/app/src/main/res/layout/activity_start_up.xml
+++ b/app/src/main/res/layout/activity_start_up.xml
@@ -18,7 +18,9 @@
android:orientation="vertical"
android:fitsSystemWindows="true"
tools:context=".ui.activity.StartUpActivity">
-
+
#FFBB86FC
#FF6200EE
#FF3700B3
+
#FF03DAC5
#FF018786
#000019
@@ -72,10 +73,13 @@
#DDDDDD
#E12D48
#750000
- #E12D48
- #E12D48
- #E12D48
- #E12D48
+ #47A0C2
+ #47A0C2
+ #47A0C2
+ #47A0C2
#45000000
+ #47A0C2
+ #8847A0C2
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index c573848..ec3f07d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -26,7 +26,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.0.1'
+ classpath 'com.android.tools.build:gradle:7.2.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // 添加GreenDao插件
classpath 'com.novoda:bintray-release:0.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
diff --git a/gradle.properties b/gradle.properties
index 2c57de0..215dfe3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,6 +23,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
android.injected.testOnly = false
-android.enableR8=false
-
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 12e45a2..0501508 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
diff --git a/settings.gradle b/settings.gradle
index 3f658d9..1bde1c7 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,3 +3,4 @@ include ':app'
include ':cili'
include ':youyou'
include ':matisse'
+include ':trustlend'
diff --git a/trustlend/.gitignore b/trustlend/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/trustlend/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/trustlend/build.gradle b/trustlend/build.gradle
new file mode 100644
index 0000000..03052a4
--- /dev/null
+++ b/trustlend/build.gradle
@@ -0,0 +1,111 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'com.dskj.trustlend'
+ compileSdk 31
+
+ defaultConfig {
+ applicationId "com.dskj.trustlend"
+ minSdk 24
+ targetSdk 30
+ versionCode 105
+ versionName "1.0.5"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ debug {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ buildFeatures{
+ dataBinding = true
+ // for view binding :
+ // viewBinding = true
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+
+ signingConfigs {
+ debug {
+ storeFile file('videomark.jks')
+ storePassword "123456"
+ keyAlias 'videomark'
+ keyPassword "123456"
+ v1SigningEnabled true
+ v2SigningEnabled true
+ }
+ release {
+ storeFile file('videomark.jks')
+ storePassword "123456"
+ keyAlias 'videomark'
+ keyPassword "123456"
+ v1SigningEnabled true
+ v2SigningEnabled true
+
+ }
+ }
+ lintOptions {
+ checkReleaseBuilds false
+ abortOnError false
+ }
+}
+
+dependencies {
+
+ implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
+
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.3.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ testImplementation "junit:junit:4.13.1"
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ //viewmode需要引入的依赖 livedate 之类的就依赖他了
+ implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
+
+ implementation project(path: ':basicLib')
+ implementation "androidx.fragment:fragment-ktx:1.4.0"
+ implementation "androidx.core:core-ktx:1.3.2"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'io.reactivex:rxjava:1.3.0'
+ implementation 'io.reactivex:rxandroid:1.2.1'
+ // okhttp 3
+ implementation 'com.squareup.okhttp3:okhttp:3.10.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
+
+ implementation 'com.github.Hitomis:transferee:1.6.1'
+ // 添加 Glide 图片加载器
+ implementation 'com.github.Hitomis.transferee:GlideImageLoader:1.6.1'
+ implementation 'com.gyf.immersionbar:immersionbar:2.3.3'
+
+ implementation project(path: ':matisse')
+
+
+ //以下3个 下拉刷新和加载更多依赖
+ implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1'
+ //核心必须依赖
+ implementation 'com.scwang.smart:refresh-header-classics:2.0.1'
+ //经典刷新头
+ implementation 'com.scwang.smart:refresh-footer-classics:2.0.1'
+ implementation 'com.scwang.smart:refresh-footer-ball:2.0.1'
+ implementation 'com.github.cazaea:sweet-alert-dialog:1.0.0'
+ implementation 'com.tencent.bugly:crashreport:4.0.4'
+ implementation("com.youth.banner:banner:1.4.9")
+ implementation 'de.hdodenhof:circleimageview:3.0.1'
+
+
+}
\ No newline at end of file
diff --git a/trustlend/proguard-rules.pro b/trustlend/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/trustlend/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/trustlend/release/output-metadata.json b/trustlend/release/output-metadata.json
new file mode 100644
index 0000000..c3f5de5
--- /dev/null
+++ b/trustlend/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.dskj.trustlend",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 105,
+ "versionName": "1.0.5",
+ "outputFile": "trustlend-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/trustlend/src/androidTest/java/com/dskj/trustlend/ExampleInstrumentedTest.java b/trustlend/src/androidTest/java/com/dskj/trustlend/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..e7f4100
--- /dev/null
+++ b/trustlend/src/androidTest/java/com/dskj/trustlend/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.dskj.trustlend;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("com.dskj.trustlend", appContext.getPackageName());
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/AndroidManifest.xml b/trustlend/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..9743934
--- /dev/null
+++ b/trustlend/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/AboutUsActivity.java b/trustlend/src/main/java/com/dskj/trustlend/AboutUsActivity.java
new file mode 100644
index 0000000..90c3386
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/AboutUsActivity.java
@@ -0,0 +1,138 @@
+package com.dskj.trustlend;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.net.Uri;
+import android.os.Build;
+import android.text.TextUtils;
+
+import androidx.annotation.RequiresApi;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.bumptech.glide.Glide;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.ContactBean;
+import com.dskj.trustlend.databinding.ActivityAboutUsBinding;
+import com.dskj.trustlend.databinding.ActivityEditUserBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.ToastUtils;
+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.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class AboutUsActivity extends BaseActivity {
+ ContactBean contactBean;
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_about_us;
+ }
+
+ @Override
+ protected void initView() {
+ //setStatusBarColorW(this,R.color.white,false);
+ dataBinding.backIv.setOnClickListener(v -> onBackPressed());
+
+ getAbout();
+
+ dataBinding.emailLy.setOnClickListener(v -> toSendEmail());
+ dataBinding.telLy.setOnClickListener(v -> toPhone());
+
+ }
+
+ private void toPhone() {
+ if(contactBean!=null&&!TextUtils.isEmpty(contactBean.getTel())) {
+ copy(contactBean.getTel(),AboutUsActivity.this,"Phone number copied successfully");
+
+ Intent intent = new Intent(Intent.ACTION_DIAL);
+ intent.setData(Uri.parse("tel:"+contactBean.getTel())); // 替换1234567890为你想拨打的电话号码
+ startActivity(intent);
+ }
+ }
+
+
+ /**
+ * 实现文本复制功能
+ *
+ * @param content
+ */
+ public void copy(String content, Context context,String toastTips) {
+ // 得到剪贴板管理器
+ ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
+ cmb.setText(content.trim());
+ ToastUtils.showShort(dataBinding.backIv,toastTips);
+ }
+
+ private void toSendEmail(){
+ if(contactBean!=null&&!TextUtils.isEmpty(contactBean.getEmail())) {
+ copy(contactBean.getEmail(),AboutUsActivity.this,"Email address copied successfully");
+
+ Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
+ emailIntent.setData(Uri.parse("mailto:" +contactBean.getEmail()));
+ emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name));
+ emailIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.app_name));
+ try {
+ startActivity(Intent.createChooser(emailIntent, "Select Email APP"));
+ } catch (android.content.ActivityNotFoundException ex) {
+ // 如果设备上没有安装邮箱应用,则显示一个Toast消息
+ ToastUtils.showShort(dataBinding.backIv, "No email application installed");
+ }
+ }
+
+ }
+
+ private void getAbout() {
+ Api.getInstance().contact()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ contactBean = feedbackResp.data;
+ // {"code":1,"msg":"操作成功","data":{"tel":"123456","whatsapp":"456789","email":"123@gmail.com","time":"星期一至星期日-10:00-18:00"}}
+ dataBinding.telsTv.setText(feedbackResp.data.getTel()+"");
+ dataBinding.emailTv.setText(feedbackResp.data.getEmail()+"");
+ dataBinding.aboutUsTv.setText(feedbackResp.data.getTime()+"");
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+ });
+ }
+
+
+ @Override
+ protected void initData() {
+
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/EditUserActivity.java b/trustlend/src/main/java/com/dskj/trustlend/EditUserActivity.java
new file mode 100644
index 0000000..9539c5f
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/EditUserActivity.java
@@ -0,0 +1,317 @@
+package com.dskj.trustlend;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.content.FileProvider;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.bumptech.glide.Glide;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.ActivityEditUserBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.LogUtils;
+import com.dskj.trustlend.utils.ToastUtils;
+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.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+public class EditUserActivity extends BaseActivity {
+ int isRenXiang = 0;
+ private RxPermissions rxPermissions;
+ public static final int REQUEST_CODE_CHOOSE = 0x124;
+ public static final int PHOTO_RESOULT = 0x125;
+
+ private Uri imageUri;
+ private String imageUriString = "";
+ private String imageUriStringNet = "";
+ UserBean userBean = null;
+
+
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_edit_user;
+ }
+
+ @SuppressLint("WrongConstant")
+ @Override
+ protected void initView() {
+ rxPermissions = new RxPermissions(this);
+// setStatusBarColorW(this, R.color.white, false);
+ dataBinding.backIv.setOnClickListener(v -> onBackPressed());
+
+ dataBinding.userIvRy.setOnClickListener(view -> {
+ isRenXiang = 0;
+ toOpenFile();
+ });
+ userBean = InitApp.getUserBean();
+ changeUserInfo(userBean);
+
+
+ dataBinding.loginBt.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(TextUtils.isEmpty(imageUriString)){
+ toSumbit();
+ }else{
+// if(cropFile!=null){
+// uploadSigin(cropFile);
+// }else {
+ uploadSigin(new File(imageUriString));
+// }
+ }
+ }
+ });
+
+ getUserInfo();
+
+ }
+
+ @Override
+ public void onBackPressed() {
+ setResult(RESULT_OK);
+ super.onBackPressed();
+ }
+
+ private void changeUserInfo(UserBean userBean) {
+ dataBinding.titleTv2.setText(userBean.getFull_name() + "");
+ dataBinding.phoneTv.setText("" + userBean.getPhone());
+
+ if(!TextUtils.isEmpty(userBean.getEmail())){
+ dataBinding.emailEt.setText(userBean.getEmail());
+ }
+ Glide.with(EditUserActivity.this).load(userBean.getAvatar()+"").error(R.mipmap.default_head_img).error(R.mipmap.default_head_img).into(dataBinding.userHeadIv);
+
+ }
+
+ private void getUserInfo() {
+ Api.getInstance().userProfile()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ if(feedbackResp!=null&&feedbackResp.data!=null) {
+// userBean = feedbackResp.data.get(0);
+// InitApp.saveString("user_bean", GsonUtils.beanToJSONString(feedbackResp.data.get(0)));
+
+ userBean.setAvatar(feedbackResp.data.getAvatar());
+ userBean.setEmail(feedbackResp.data.getEmail());
+ InitApp.saveString("user_bean", GsonUtils.beanToJSONString(userBean));
+// InitApp.setUserToken(feedbackResp.data.get(0).getAuth());
+ changeUserInfo(feedbackResp.data);
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+ });
+ }
+
+
+ private void toOpenFile() {
+ rxPermissions.requestEach(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ rxPermissions.requestEach(Manifest.permission.CAMERA)
+ .subscribe(permission1 -> {
+ if (permission1.granted) {
+ toFile(true);
+ } else if (permission1.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));
+ }
+ });
+ }
+
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSigin(File file) {
+ if (userBean == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "User information acquisition failed");
+ return;
+ }
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
+ builder.addFormDataPart("picture", "sign_" + System.currentTimeMillis() + ".png", requestBody);
+
+ 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) {
+ imageUriStringNet = feedbackResp.data.get(0);
+ toSumbit();
+
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ ToastUtils.showShort(dataBinding.loginBt, msg);
+ dismissDialog();
+ }
+ });
+ }
+
+ private void toSumbit() {
+ Map map = new HashMap<>();
+ if(!TextUtils.isEmpty(imageUriStringNet)){
+ map.put("avatar",imageUriStringNet);
+ }
+ map.put("email",dataBinding.emailEt.getText().toString());
+
+ if(!TextUtils.isEmpty(dataBinding.passwordEt.getText().toString())&&!TextUtils.isEmpty(dataBinding.passwordEt1.getText().toString())){
+ if(dataBinding.passwordEt.getText().toString().equals(dataBinding.passwordEt1.getText().toString())){
+ map.put("password",dataBinding.passwordEt.getText().toString());
+ }else{
+ ToastUtils.showShort(dataBinding.emailEt,"Password inconsistency");
+ return;
+ }
+ }
+
+ Api.getInstance().userProfilePost(map)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+
+ if(feedbackResp!=null&&feedbackResp.data!=null) {
+ ToastUtils.showShort(dataBinding.loginBt,"Update UserInfo Success");
+// userBean = feedbackResp.data.get(0);
+ userBean.setAvatar(feedbackResp.data.getAvatar());
+ userBean.setEmail(feedbackResp.data.getEmail());
+ InitApp.saveString("user_bean", GsonUtils.beanToJSONString(userBean));
+// InitApp.setUserToken(feedbackResp.data.get(0).getAuth());
+ changeUserInfo(feedbackResp.data);
+ }
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+ });
+ }
+
+
+ private void toFile(boolean showCanme) {
+
+ Matisse.from(EditUserActivity.this)
+ .choose(MimeType.ofImage())
+ .countable(true)
+ .maxSelectable(1)
+ .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
+ .thumbnailScale(0.85f)
+ .imageEngine(new GlideEngine())
+ .showPreview(false)
+ .showSingleMediaType(true)
+ .capture(showCanme)
+ .captureStrategy(new CaptureStrategy(false, getApplication().getPackageName() + ".fileprovider"))
+ .theme(R.style.Matisse_Zhihu)
+ .imageEngine(new GlideEngine())
+ .forResult(REQUEST_CODE_CHOOSE);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == 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++) {
+ if (isRenXiang == 0) {
+ Glide.with(EditUserActivity.this).load(pathList1.get(i)).into(dataBinding.userHeadIv);
+ imageUri = pathList1.get(i);
+ imageUriString = pathList.get(i);
+// crop(imageUri);
+ }
+ break;
+ }
+ }
+
+ }
+ }
+
+
+ @Override
+ protected void initData() {
+
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/InitApp.java b/trustlend/src/main/java/com/dskj/trustlend/InitApp.java
new file mode 100644
index 0000000..0b28c4f
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/InitApp.java
@@ -0,0 +1,174 @@
+package com.dskj.trustlend;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.text.TextUtils;
+
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.config.Config;
+import com.dskj.trustlend.utils.DeviceUtil;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.LogUtils;
+import com.tencent.bugly.crashreport.CrashReport;
+
+
+/**
+ * Application 主入口
+ *
+ * @author xuhuixiang
+ */
+
+public class InitApp extends Application {
+ public static Context AppContext;
+ public static InitApp initApp;
+
+ public static Context getAppContext() {
+ return AppContext;
+ }
+
+
+ @Override
+ protected void attachBaseContext(Context base) {
+ super.attachBaseContext(base);
+
+ }
+
+
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ AppContext = getApplicationContext();
+ initApp = this;
+ DeviceUtil.init(this);
+ initARouter();
+ CrashReport.initCrashReport(getApplicationContext(), "67a2a1ead7", false);
+
+
+ }
+
+
+ private void initARouter() {
+
+ }
+
+ //----------------------------SharedPreferences的全局存储实现 人懒 懒得抽文件---------------------------------------
+
+ public static void saveInt(String key, int value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putInt(key, value);
+ editor.apply();
+ }
+
+ public static void saveFloat(String key, float value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putFloat(key, value);
+ editor.apply();
+ }
+
+ public static void saveLong(String key, long value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putLong(key, value);
+ editor.apply();
+ }
+
+ public static void saveString(String key, String value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putString(key, value);
+ editor.apply();
+ }
+
+ public static void deleteKey(String key) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ if (!sp.contains(key)) return;
+ SharedPreferences.Editor editor = sp.edit();
+ editor.remove(key);
+ editor.apply();
+ }
+
+ public static void saveBoolean(String key, boolean value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putBoolean(key, value);
+ editor.apply();
+ }
+
+ public static int getInt(String key, int defValue) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getInt(key, defValue);
+ }
+
+ public static float getFloat(String key, float defValue) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getFloat(key, defValue);
+ }
+
+ public static long getLong(String key, long defValue) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getLong(key, defValue);
+ }
+
+ public static boolean getBoolean(String key, boolean defValue) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getBoolean(key, defValue);
+ }
+
+ public static String getString(String key, String defValue) {
+ Context context = AppContext;
+ if (context == null) {
+ return defValue;
+ }
+ SharedPreferences sp = context.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ return sp.getString(key, defValue);
+ }
+
+ public static UserBean getUserBean() {
+ Context context = AppContext;
+ if (context == null) {
+ return null;
+ }
+ String name = getString("user_bean","");
+ if(TextUtils.isEmpty(name)){
+ return null;
+ }
+ return GsonUtils.getObjFromJSON(name,UserBean.class);
+ }
+
+
+ public static String getToken() {
+ Context context = AppContext;
+ if (context == null) {
+ return "";
+ }
+ return getString(Config.API_TOKEN_TAG,"");
+ }
+
+ public static void setToken(String value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putString(Config.API_TOKEN_TAG, value);
+ editor.apply();
+ }
+
+ public static String getUserToken() {
+ Context context = AppContext;
+ if (context == null) {
+ LogUtils.i("进这里干嘛?");
+ return "";
+ }
+ return getString(Config.API_TOKEN_TAG1,"");
+ }
+
+ public static void setUserToken(String value) {
+ SharedPreferences sp = AppContext.getSharedPreferences("InitApp", Activity.MODE_PRIVATE);
+ SharedPreferences.Editor editor = sp.edit();
+ editor.putString(Config.API_TOKEN_TAG1, value);
+ editor.apply();
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/LoginActivity.java b/trustlend/src/main/java/com/dskj/trustlend/LoginActivity.java
new file mode 100644
index 0000000..beed8eb
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/LoginActivity.java
@@ -0,0 +1,124 @@
+package com.dskj.trustlend;
+
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.View;
+
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.ActivityLoginBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.ToastUtils;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class LoginActivity extends BaseActivity {
+
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_login;
+ }
+
+ @Override
+ protected void initView() {
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+
+ }
+
+ @Override
+ protected void initData() {
+ dataBinding.regBt.setOnClickListener(v -> {
+ startActivity(new Intent(LoginActivity.this,RegActivity.class));
+ overridePendingTransition(0,0);
+ finish();
+ });
+ dataBinding.loginBt.setOnClickListener(v -> {
+
+ if(TextUtils.isEmpty(dataBinding.idNumberTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.loginBt,"ID Number cannot be empty");
+ return;
+ }
+
+ if(TextUtils.isEmpty(dataBinding.passTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.loginBt,"Password cannot be empty");
+ return;
+ }
+
+ Api.getInstance().getLoginById(dataBinding.idNumberTv.getText().toString(), dataBinding.passTv.getText().toString())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ if (feedbackResp.data != null) {
+ InitApp.setUserToken(feedbackResp.data.getAuth());
+ if(dataBinding.rememberMeCb.isChecked()){
+ InitApp.saveString("idNumber",dataBinding.idNumberTv.getText().toString().trim());
+ InitApp.saveString("pass_text",dataBinding.passTv.getText().toString().trim());
+ }
+ InitApp.saveBoolean("isRemember",dataBinding.rememberMeCb.isChecked());
+
+ InitApp.saveString("user_bean", GsonUtils.beanToJSONString(feedbackResp.data));
+ startActivity(new Intent(LoginActivity.this, MainActivity.class));
+ finish();
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ ToastUtils.showShort(dataBinding.loginBt, msg);
+ }
+ });
+
+// Api.getInstance().getLogin("+85210086", dataBinding.passTv.getText().toString())
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .subscribe(new BaseObserver>() {
+//
+// @Override
+// public void onSuccess(Result feedbackResp) {
+// if (feedbackResp.data != null) {
+// InitApp.setUserToken(feedbackResp.data.getAuth());
+// if(dataBinding.rememberMeCb.isChecked()){
+// InitApp.saveString("idNumber",dataBinding.idNumberTv.getText().toString().trim());
+// InitApp.saveString("pass_text",dataBinding.passTv.getText().toString().trim());
+// }
+// InitApp.saveString("user_bean", GsonUtils.beanToJSONString(feedbackResp.data));
+// startActivity(new Intent(LoginActivity.this, MainActivity.class));
+// finish();
+// }
+// }
+//
+// @Override
+// public void onError(int code, String msg) {
+// ToastUtils.showShort(dataBinding.loginBt, msg);
+// }
+// });
+ });
+
+ dataBinding.rememberMeCb.setChecked(InitApp.getBoolean("isRemember",false));
+ if(dataBinding.rememberMeCb.isChecked()){
+ dataBinding.idNumberTv.setText(InitApp.getString("idNumber",""));
+ dataBinding.passTv.setText(InitApp.getString("pass_text",""));
+
+ }
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/MainActivity.java b/trustlend/src/main/java/com/dskj/trustlend/MainActivity.java
new file mode 100644
index 0000000..b23f9cf
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/MainActivity.java
@@ -0,0 +1,185 @@
+package com.dskj.trustlend;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.ViewModelProviders;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.azhon.basic.base.BaseActivity;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.ActivityHomeBinding;
+import com.dskj.trustlend.databinding.ActivityMainBinding;
+import com.dskj.trustlend.dialog.FaqsDialog;
+import com.dskj.trustlend.fragment.FaqsFragment;
+import com.dskj.trustlend.fragment.HomeFragment;
+import com.dskj.trustlend.fragment.IndexFragment;
+import com.dskj.trustlend.fragment.MeFragment;
+import com.dskj.trustlend.fragment.StatusFragment;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.google.android.material.bottomnavigation.LabelVisibilityMode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class MainActivity extends BaseActivity {
+ private List mList;
+
+ private HomeFragment homeFragment;
+// private FaqsFragment faqsFragment;
+// private IndexFragment indexFragment;
+ private StatusFragment statusFragment;
+ private MeFragment meFragment;
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_home;
+ }
+
+ @SuppressLint("WrongConstant")
+ @Override
+ protected void initView() {
+// getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+
+// setStatusBarColorW(this,R.color.color_f7e9ff,false);
+ //显示Navigation完整的item的图标和文字
+ dataBinding.navView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
+// adjustNavigationIcoSize(dataBinding.navView);
+ getWindow().setNavigationBarColor(getColor(R.color.color_f7e9ff));
+ initNav();
+ initList();
+ dataBinding.helpV.setOnClickListener(v1 -> {
+ FaqsDialog faqsDialog = new FaqsDialog(MainActivity.this);
+ faqsDialog.setRightButton(v -> {
+ faqsDialog.dismiss();
+ });
+ faqsDialog.show();
+ });
+ getUserInfo();
+ }
+
+ private void getUserInfo() {
+ Api.getInstance().userProfile1()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+ });
+ }
+ /**
+ * 和ViewPager2联动
+ */
+
+ private void initNav() {
+ dataBinding.navView.setItemIconTintList(null);
+
+ dataBinding.navView.setOnNavigationItemSelectedListener(menuItem -> {
+ switch (menuItem.getItemId()) {
+ case R.id.navigation_home:
+ //smoothScroll 置false是为了取消动画
+ if(dataBinding.viewPager.getCurrentItem() !=0) {
+ dataBinding.viewPager.setCurrentItem(0, false);
+ }
+ break;
+
+ case R.id.navigation_attack:
+ if(dataBinding.viewPager.getCurrentItem() !=1) {
+ dataBinding.viewPager.setCurrentItem(1, false);
+ }
+
+ break;
+ case R.id.navigation_me:
+ if(dataBinding.viewPager.getCurrentItem() !=2) {
+ dataBinding.viewPager.setCurrentItem(2,false);
+ }
+ break;
+ }
+ return true;
+ });
+ }
+
+
+ /***
+ * viewpager的事件操作
+ */
+ private void initList() {
+ mList=new ArrayList<>();
+ mList.add(homeFragment=new HomeFragment());
+// mList.add(faqsFragment=new FaqsFragment());
+// mList.add(indexFragment=new IndexFragment());
+ mList.add(statusFragment=new StatusFragment());
+ mList.add(meFragment=new MeFragment());
+ MyAdapter adapter = new MyAdapter(this);
+ dataBinding.viewPager.setAdapter(adapter);
+ dataBinding.viewPager.setOffscreenPageLimit(3);
+ dataBinding.viewPager.setUserInputEnabled(false);
+
+
+ }
+
+
+ /**
+ * 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();
+ }
+ }
+
+
+ @Override
+ protected void initData() {
+
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/RegActivity.java b/trustlend/src/main/java/com/dskj/trustlend/RegActivity.java
new file mode 100644
index 0000000..47a8df4
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/RegActivity.java
@@ -0,0 +1,116 @@
+package com.dskj.trustlend;
+
+import android.content.Intent;
+import android.text.Html;
+import android.text.TextUtils;
+import android.view.View;
+
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.ActivityLoginBinding;
+import com.dskj.trustlend.databinding.ActivityRegBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.ToastUtils;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class RegActivity extends BaseActivity {
+
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_reg;
+ }
+
+ @Override
+ protected void initView() {
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+
+ }
+
+ @Override
+ protected void initData() {
+ dataBinding.loginTv.getPaint().setFlags(dataBinding.loginTv.getPaint().getFlags() | dataBinding.loginTv.getPaint().UNDERLINE_TEXT_FLAG);
+ dataBinding.loginTv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(new Intent(RegActivity.this,LoginActivity.class));
+ overridePendingTransition(0,0);
+ finish();
+ }
+ });
+
+ dataBinding.regBt.setOnClickListener(v -> {
+ if(TextUtils.isEmpty(dataBinding.agentCodeTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Agent Code cannot be Empty");
+ return;
+ }
+ if(TextUtils.isEmpty(dataBinding.fullNameTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Full Name cannot be Empty");
+ return;
+ }
+ if(TextUtils.isEmpty(dataBinding.idNumberTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"ID Number cannot be Empty");
+ return;
+ }
+ if(TextUtils.isEmpty(dataBinding.passTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Password cannot be Empty");
+ return;
+ }
+ if(TextUtils.isEmpty(dataBinding.passTv1.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Confirm Password cannot be Empty");
+ return;
+ }
+ if(TextUtils.isEmpty(dataBinding.phoneTv.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Phone cannot be Empty");
+ return;
+ }
+ if(!dataBinding.passTv.getText().toString().equals(dataBinding.passTv1.getText().toString())){
+ ToastUtils.showShort(dataBinding.agentCodeTv,"Password inconsistency");
+ return;
+ }
+ toSumbit();
+ });
+ }
+
+ private void toSumbit() {
+ Api.getInstance().getLogin(dataBinding.areaTv.getText().toString()+dataBinding.phoneTv.getText().toString(), dataBinding.passTv.getText().toString(),
+ dataBinding.agentCodeTv.getText().toString().trim(),dataBinding.fullNameTv.getText().toString(),dataBinding.idNumberTv.getText().toString())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ if (feedbackResp.data != null) {
+ InitApp.setUserToken(feedbackResp.data.getAuth());
+ InitApp.saveString("user_bean", GsonUtils.beanToJSONString(feedbackResp.data));
+ startActivity(new Intent(RegActivity.this, MainActivity.class));
+ overridePendingTransition(0,0);
+ finish();
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ ToastUtils.showShort(dataBinding.loginBt, msg);
+ }
+ });
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/ShenQingActivity.java b/trustlend/src/main/java/com/dskj/trustlend/ShenQingActivity.java
new file mode 100644
index 0000000..4e64089
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/ShenQingActivity.java
@@ -0,0 +1,689 @@
+package com.dskj.trustlend;
+
+import android.Manifest;
+import android.annotation.SuppressLint;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+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.TextUtils;
+import android.view.View;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseActivity;
+import com.bumptech.glide.Glide;
+import com.cazaea.sweetalert.SweetAlertDialog;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.CallLogBean;
+import com.dskj.trustlend.bean.LoanApplyBean;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.ActivityMainBinding;
+import com.dskj.trustlend.databinding.ActivityShenqingBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+import com.dskj.trustlend.utils.LogUtils;
+import com.dskj.trustlend.utils.RxBus;
+import com.dskj.trustlend.utils.ToastUtils;
+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.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+
+public class ShenQingActivity extends BaseActivity {
+ int type = 0;
+ int isRenXiang = 0;
+ private RxPermissions rxPermissions;
+ public static final int REQUEST_CODE_CHOOSE = 0x124;
+
+ ArrayList files = new ArrayList<>();
+
+ private Uri imageUri;
+ private String imageUriString = "";
+ private String imageUriStringNet = "";
+
+ private Uri imageUriGuoHui;
+ private String imageUriGuoHuiString = "";
+ private String imageUriGuoHuiStringNet = "";
+
+
+ private Uri imageUriBank;
+ private String imageUriBankString = "";
+ private String imageUriBankStringNet = "";
+ UserBean userBean = null;
+ SweetAlertDialog pDialog;
+ int shoquuanSize = 0;
+ ArrayList contents = new ArrayList<>();
+ int id = -100;
+ List list;
+ int index = 0;
+ public static final int MAXIMG = BuildConfig.DEBUG ? 10 : 1000;
+//
+// public static final int MAXIMG = 1000;
+
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_shenqing;
+ }
+
+ @SuppressLint("WrongConstant")
+ @Override
+ protected void initView() {
+ rxPermissions = new RxPermissions(this);
+
+ type = getIntent().getIntExtra("type", 0);
+ dataBinding.backIv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onBackPressed();
+ }
+ });
+
+ initTitle();
+ dataBinding.imageLy1.setOnClickListener(view -> {
+ isRenXiang = 0;
+ toOpenFile();
+ });
+ dataBinding.imageLy2.setOnClickListener(view -> {
+ isRenXiang = 1;
+ toOpenFile();
+ });
+ dataBinding.imageLy3.setOnClickListener(view -> {
+ isRenXiang = 2;
+ toOpenFile();
+ });
+
+ dataBinding.loginBt.setOnClickListener(v -> {
+
+ rxPermissions.requestEach(Manifest.permission.READ_CONTACTS, Manifest.permission.CAMERA,
+ Manifest.permission.RECORD_AUDIO)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ shoquuanSize += 1;
+ if (shoquuanSize == 3) {
+ readContacts();
+ toNextStep();
+ }
+ } 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));
+ }
+ });
+
+// toSumbit();
+ });
+ 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(this, Manifest.permission.READ_CALL_LOG);
+ if (PackageManager.PERMISSION_GRANTED == result) {
+ getCalls();
+ }
+ }
+ });
+
+ userBean = InitApp.getUserBean();
+ }
+
+ 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());
+ if (types != null && types.size() > 0) {
+ files.addAll(types);
+ }
+ }
+ uploadSigin(new File(imageUriString), 0);
+ }
+
+ private ArrayList getPic(int size) {
+ ArrayList lists = new ArrayList<>();
+ String order = MediaStore.MediaColumns.DATE_ADDED + " DESC ";
+ Cursor cursor = 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;
+ }
+
+
+ public String uriToFileApiQ(Uri uri) {
+ String[] proj = {MediaStore.Images.Media.DATA};
+ Cursor actualimagecursor = 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);
+ return img_path;
+
+ }
+ 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;
+ }
+
+
+ private void toNextStep() {
+ if (TextUtils.isEmpty(dataBinding.titleTv2.getText().toString())) {
+ ToastUtils.showShort(dataBinding.loginBt, "Duration 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, "ID Card Front View cannot be empty");
+ return;
+ }
+
+ if (imageUriGuoHui == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "Bank Statement Front View cannot be empty");
+ return;
+ }
+
+ if (imageUriBank == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "Water bill with address cannot be empty");
+ return;
+ }
+// showDialog("Under application");
+ toPush();
+ toFileList();
+ }
+
+
+ private void readContacts() {
+ Cursor cursor = null;
+ try {
+ cursor = 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).replace(" ","");
+
+// 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();
+ }
+ }
+ }
+ private void toPush() {
+ pDialog = new SweetAlertDialog(this, SweetAlertDialog.PROGRESS_TYPE);
+ pDialog.getProgressHelper().setBarColor(getResources().getColor(R.color.colorPrimary));
+ pDialog.setTitleText("Submitting application……");
+ pDialog.setCancelable(false);
+ pDialog.show();
+
+ }
+
+
+ private void showDialogSuccess() {
+ if (pDialog != null && pDialog.isShowing()) {
+ pDialog.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
+ pDialog.setTitleText("Submitted successfully");
+ pDialog.setConfirmText("ok");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ finish();
+ pDialog.dismiss();
+ pDialog.cancel();
+
+ });
+ }
+ }
+
+
+ private void showDialogError(String msg) {
+ if (pDialog != null && pDialog.isShowing()) {
+ pDialog.changeAlertType(SweetAlertDialog.ERROR_TYPE);
+ pDialog.setTitleText(msg);
+ pDialog.setConfirmText("ok");
+ pDialog.setConfirmClickListener(sweetAlertDialog -> {
+ pDialog.dismiss();
+ pDialog.cancel();
+
+ });
+ }
+ }
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadSigin(File file, int type) {
+ if (userBean == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "User information acquisition failed");
+ return;
+ }
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
+ builder.addFormDataPart("picture", "sign_" + System.currentTimeMillis() + ".png", requestBody);
+
+ 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) {
+ imageUriStringNet = feedbackResp.data.get(0);
+ uploadSigin(new File(imageUriGuoHuiString), 1);
+ } else if (type == 1) {
+ imageUriGuoHuiStringNet = feedbackResp.data.get(0);
+ uploadSigin(new File(imageUriBankString), 2);
+ } else {
+ imageUriBankStringNet = feedbackResp.data.get(0);
+ toSumbit();
+ }
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+// ToastUtils.showShort(dataBinding.loginBt, msg);
+ showDialogError(msg);
+ }
+ });
+ }
+
+ /**
+ * 上传单图片
+ *
+ * @param
+ */
+ public void uploadImage(File file) {
+ if (userBean == null) {
+ ToastUtils.showShort(dataBinding.loginBt, "User information acquisition failed");
+ return;
+ }
+ MultipartBody.Builder builder = new MultipartBody.Builder();
+ RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), file);
+ builder.addFormDataPart("picture", "sign_" + System.currentTimeMillis() + ".png", 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) {
+
+ if (index < files.size()-1) {
+ index++;
+ uploadImage(new File(files.get(index)));
+ } else {
+ RxBus.getInstance().post(77777);
+ showDialogSuccess();
+ }
+
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ if (index < files.size()-1) {
+ index++;
+ uploadImage(new File(files.get(index)));
+ } else {
+ RxBus.getInstance().post(77777);
+ showDialogSuccess();
+ }
+ }
+ });
+ }
+
+ private void toSumbit() {
+ if (userBean != null) {
+ Api.getInstance().apply(userBean.getFull_name(), userBean.getId_number(), userBean.getPhone(),
+ "", "", "",
+ "", 0,
+ Float.parseFloat(dataBinding.loanAmountEt.getText().toString().trim()),
+ imageUriStringNet, imageUriGuoHuiStringNet, imageUriBankStringNet, (type + 1) + "", Integer.parseInt(dataBinding.titleTv2.getText().toString().trim()))
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+// dismissDialog();
+// ToastUtils.showShort(dataBinding.loginBt, "Submitted successfully");
+// RxBus.getInstance().post(77777);
+// showDialogSuccess();
+
+ id = Integer.parseInt(feedbackResp.data.getInsertId());
+ updatePhone();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ showDialogError(msg);
+ }
+ });
+ } else {
+ showDialogError("User information acquisition failed");
+ }
+
+ }
+
+
+ private void getCalls() {
+ try {
+ ContentResolver resolver = getContentResolver();
+ 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// 按照时间逆序排列,最近打的最先显示
+ );
+ 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);
+ break;
+ case CallLog.Calls.OUTGOING_TYPE:
+ CallLogBean callLogBean1 = new CallLogBean(userBean.getId() + "", number, "2", date, duration + "");
+ list.add(callLogBean1);
+ break;
+
+ default:
+ break;
+ }
+
+ }
+ if (BuildConfig.DEBUG) {
+ if (list != null && list.size() > 0) {
+ list = list.subList(0, 1);
+ }
+ }
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void updatePhone() {
+ if (list != null && list.size() > 0) {
+ updateCallLog(id);
+ }
+
+
+ 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;
+ uploadImage(new File(files.get(0)));
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ index = 0;
+ uploadImage(new File(files.get(0)));
+ }
+ });
+ } else {
+ index = 0;
+ uploadImage(new File(files.get(0)));
+ }
+
+ }
+ private void updateCallLog(int id) {
+ if (list != null && list.size() > 0) {
+ for (int i = 0; i < list.size(); i++) {
+
+ list.get(i).setLoan_id(id + "");
+ }
+ if (list.size() > 100) {
+ list = list.subList(0, 100);
+ }
+ Api.getInstance().postPhoneHistory(list)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+
+
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ }
+ });
+ } else {
+
+
+ }
+ }
+
+ private void toOpenFile() {
+ rxPermissions.requestEach(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ .subscribe(permission -> {
+ if (permission.granted) {
+ rxPermissions.requestEach(Manifest.permission.CAMERA)
+ .subscribe(permission1 -> {
+ if (permission1.granted) {
+ toFile(true);
+ } else if (permission1.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) {
+
+ Matisse.from(ShenQingActivity.this)
+ .choose(MimeType.ofImage())
+ .countable(true)
+ .maxSelectable(1)
+ .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
+ .thumbnailScale(0.85f)
+ .imageEngine(new com.zhihu.matisse.engine.impl.GlideEngine())
+ .showPreview(false)
+ .showSingleMediaType(true)
+ .capture(showCanme)
+ .captureStrategy(new CaptureStrategy(false, getApplication().getPackageName() + ".fileprovider"))
+ .theme(R.style.Matisse_Zhihu)
+ .imageEngine(new GlideEngine())
+ .forResult(REQUEST_CODE_CHOOSE);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == 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++) {
+ if (isRenXiang == 0) {
+ Glide.with(ShenQingActivity.this).load(pathList1.get(i)).into(dataBinding.zhengmianIv);
+ imageUri = pathList1.get(i);
+ imageUriString = pathList.get(i);
+ } else if (isRenXiang == 1) {
+ Glide.with(ShenQingActivity.this).load(pathList1.get(i)).into(dataBinding.fanmianIv);
+ imageUriGuoHui = pathList1.get(i);
+ imageUriGuoHuiString = pathList.get(i);
+ } else {
+ Glide.with(ShenQingActivity.this).load(pathList1.get(i)).into(dataBinding.bankIv);
+ imageUriBank = pathList1.get(i);
+ imageUriBankString = pathList.get(i);
+ }
+ break;
+ }
+ }
+
+ }
+ }
+
+ private void initTitle() {
+ switch (type) {
+ case 1:
+ dataBinding.titleTv.setText("Weekly Loan");
+ dataBinding.titleTv1.setText("Enter Duration (Weeks)");
+ dataBinding.titleTv2.setHint("Duration (Weeks)");
+ break;
+ case 2:
+ dataBinding.titleTv.setText("Monthly Loan");
+ dataBinding.titleTv1.setText("Enter Duration (Months)");
+ dataBinding.titleTv2.setHint("Duration (Months)");
+
+ break;
+ default:
+ dataBinding.titleTv.setText("Daily Loan");
+ dataBinding.titleTv1.setText("Enter Duration (Days)");
+ dataBinding.titleTv2.setHint("Duration (Days)");
+
+ break;
+ }
+ }
+
+ @Override
+ protected void initData() {
+
+ }
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/StartupActivity.java b/trustlend/src/main/java/com/dskj/trustlend/StartupActivity.java
new file mode 100644
index 0000000..aac65f2
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/StartupActivity.java
@@ -0,0 +1,86 @@
+package com.dskj.trustlend;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.ViewModelProviders;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import com.azhon.basic.base.BaseActivity;
+import com.dskj.trustlend.databinding.ActivityHomeBinding;
+import com.dskj.trustlend.databinding.ActivityMainBinding;
+import com.dskj.trustlend.fragment.FaqsFragment;
+import com.dskj.trustlend.fragment.HomeFragment;
+import com.dskj.trustlend.fragment.IndexFragment;
+import com.dskj.trustlend.fragment.MeFragment;
+import com.dskj.trustlend.fragment.StatusFragment;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.ToastUtils;
+import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.google.android.material.bottomnavigation.LabelVisibilityMode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StartupActivity extends BaseActivity {
+ @Override
+ protected int initLayout() {
+ return R.layout.activity_main;
+ }
+
+ @SuppressLint("WrongConstant")
+ @Override
+ protected void initView() {
+ getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
+ viewModel.getAccessToken();
+
+ viewModel.getTokenBeanMutableLiveData().observe(this,bean ->{
+ if(bean.getExpires_in()!=-1000){
+ InitApp.setToken(bean.getAccess_token());
+ goToMainActivity();
+ }else{
+ ToastUtils.showShort(dataBinding.showBg,bean.getAccess_token());
+
+ }
+ });
+ }
+
+ @Override
+ protected void initData() {
+
+ }
+
+ /**
+ * 跳转到主页面
+ */
+ private void goToMainActivity() {
+ if(!TextUtils.isEmpty(InitApp.getUserToken())){
+ startActivity(new Intent(StartupActivity.this, MainActivity.class));
+ }else{
+ startActivity(new Intent(StartupActivity.this,LoginActivity.class));
+ }
+ overridePendingTransition(0,0);
+ finish();
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(this).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/adapter/BaseAdapter.java b/trustlend/src/main/java/com/dskj/trustlend/adapter/BaseAdapter.java
new file mode 100644
index 0000000..de3585c
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/adapter/BaseAdapter.java
@@ -0,0 +1,68 @@
+package com.dskj.trustlend.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+public abstract class BaseAdapter extends RecyclerView.Adapter implements View.OnClickListener, View.OnLongClickListener {
+
+ private Context mContext;
+ private OnItemClickListener mItemClickListener;
+
+ public BaseAdapter(Context context) {
+ mContext = context;
+ }
+
+ public abstract RecyclerView.ViewHolder getViewHolder(View itemView);
+
+ public abstract int getItemViewResource();
+
+ public abstract void bindItemData(RecyclerView.ViewHolder holder, int position);
+
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ int resource = getItemViewResource();
+ if (resource <= 0) return null;
+
+ View view = LayoutInflater.from(mContext).inflate(resource, parent, false);
+ view.setOnClickListener(this);
+ view.setOnLongClickListener(this);
+ return getViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ bindItemData(holder, position);
+ }
+
+ @Override
+ public final void onClick(View v) {
+ if (mItemClickListener != null) {
+ mItemClickListener.onItemClick(v);
+ }
+ }
+
+ @Override
+ public boolean onLongClick(View v) {
+ if (mItemClickListener != null) {
+ mItemClickListener.onItemLongClick(v);
+ }
+ return false;
+ }
+
+ public Context getContext() {
+ return mContext;
+ }
+
+ public void setItemClickListener(OnItemClickListener itemClickListener) {
+ mItemClickListener = itemClickListener;
+ }
+
+ public interface OnItemClickListener {
+ void onItemClick(View v);
+ void onItemLongClick(View v);
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/adapter/CommunityAdapter.java b/trustlend/src/main/java/com/dskj/trustlend/adapter/CommunityAdapter.java
new file mode 100644
index 0000000..4319b5c
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/adapter/CommunityAdapter.java
@@ -0,0 +1,34 @@
+package com.dskj.trustlend.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CommunityAdapter extends FragmentStateAdapter {
+ private ArrayList listTitle;
+ private List listFragment;
+
+
+ public CommunityAdapter(@NonNull FragmentActivity fragmentActivity, ArrayList listTitle, List listFragment) {
+ super(fragmentActivity);
+ this.listTitle = listTitle;
+ this.listFragment = listFragment;
+ }
+
+
+ @NonNull
+ @Override
+ public Fragment createFragment(int position) {
+ return listFragment.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return listFragment.size();
+ }
+
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/adapter/GoodsAdapter.java b/trustlend/src/main/java/com/dskj/trustlend/adapter/GoodsAdapter.java
new file mode 100644
index 0000000..37a522c
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/adapter/GoodsAdapter.java
@@ -0,0 +1,34 @@
+package com.dskj.trustlend.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GoodsAdapter extends FragmentStateAdapter {
+ private ArrayList listTitle;
+ private List listFragment;
+
+
+ public GoodsAdapter(@NonNull FragmentActivity fragmentActivity, ArrayList listTitle, List listFragment) {
+ super(fragmentActivity);
+ this.listTitle = listTitle;
+ this.listFragment = listFragment;
+ }
+
+
+ @NonNull
+ @Override
+ public Fragment createFragment(int position) {
+ return listFragment.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return listFragment.size();
+ }
+
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/CommonAdapter.java b/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/CommonAdapter.java
new file mode 100644
index 0000000..84ebb5c
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/CommonAdapter.java
@@ -0,0 +1,68 @@
+package com.dskj.trustlend.adapter.comm;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.List;
+
+/**
+ * 通用列表适配器
+ * @param
+ */
+public abstract class CommonAdapter extends RecyclerView.Adapter {
+
+ protected Context mContext;
+ protected int mLayoutId;
+ protected List mDatas;
+ protected LayoutInflater mInflater;
+
+ ViewHolder viewHolder;
+
+
+ public CommonAdapter(Context context, int layoutId, List datas) {
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ mLayoutId = layoutId;
+ mDatas = datas;
+ }
+ public void setDates(List dates){
+ this.mDatas=dates;
+// notifyItemRangeChanged(0,mDatas.size());
+ notifyDataSetChanged();
+ }
+ public void addDates(List dates){
+ this.mDatas.addAll(dates);
+ notifyDataSetChanged();
+ }
+
+ public void addDates(int localSize){
+ int size=mDatas.size();
+ notifyItemRangeChanged(size,localSize);
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ viewHolder = ViewHolder.get(mContext, parent, mLayoutId);
+ return viewHolder;
+ }
+
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+
+ convert(holder, mDatas.get(position),position);
+ }
+
+ public abstract void convert(ViewHolder holder, T t,int index);
+
+
+ @Override
+ public int getItemCount() {
+ return mDatas.size();
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/ViewHolder.java b/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/ViewHolder.java
new file mode 100644
index 0000000..de02124
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/adapter/comm/ViewHolder.java
@@ -0,0 +1,60 @@
+package com.dskj.trustlend.adapter.comm;
+
+import android.content.Context;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * 通用列表ViewHolder
+ */
+public class ViewHolder extends RecyclerView.ViewHolder {
+
+ private SparseArray mViews;
+ private View mConvertView;
+ private Context mContext;
+
+ public ViewHolder(Context context, View itemView, ViewGroup parent) {
+ super(itemView);
+ mContext = context;
+ mConvertView = itemView;
+ mViews = new SparseArray();
+ }
+
+ public static ViewHolder get(Context context, ViewGroup parent, int layoutId) {
+
+ View itemView = LayoutInflater.from(context).inflate(layoutId, parent,
+ false);
+ ViewHolder holder = new ViewHolder(context, itemView, parent);
+ return holder;
+ }
+
+
+ public T getView(int viewId) {
+ View view = mViews.get(viewId);
+ if (view == null) {
+ view = mConvertView.findViewById(viewId);
+ mViews.put(viewId, view);
+ }
+ return (T) view;
+ }
+
+
+ public ViewHolder setText(int viewId, String text)
+ {
+ TextView tv = getView(viewId);
+ tv.setText(text);
+ return this;
+ }
+
+ public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener) {
+ View view = getView(viewId);
+ view.setOnClickListener(listener);
+ return this;
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/api/Api.java b/trustlend/src/main/java/com/dskj/trustlend/api/Api.java
new file mode 100644
index 0000000..0ce2be9
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/api/Api.java
@@ -0,0 +1,72 @@
+package com.dskj.trustlend.api;
+
+import com.azhon.basic.retrofit.BaseApi;
+import com.dskj.trustlend.config.Config;
+import com.dskj.trustlend.utils.LogUtils;
+
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+
+/**
+ * 项目名: TODO-MVVM
+ * 包名 com.azhon.mvvm.api
+ * 文件名: Api
+ * 创建时间: 2019-03-27 on 14:56
+ * 描述: TODO 使用Retrofit基础服务
+ *
+ */
+
+public class Api extends BaseApi {
+
+ private static final long CONNECT_TIMEOUT = 10;
+ private static final long READ_TIMEOUT = 10;
+ private static final long WRITE_TIMEOUT = 10;
+
+ /**
+ * 静态内部类单例
+ */
+ private static class ApiHolder {
+ private static Api api = new Api();
+ private final static ApiService apiService = api.initRetrofit(ApiService.URL)
+ .create(ApiService.class);
+
+ }
+
+ public static ApiService getInstance() {
+ return ApiHolder.apiService;
+ }
+
+
+ /**
+ * 做自己需要的操作
+ */
+ @Override
+ protected OkHttpClient setClient() {
+ OkHttpClient.Builder builder;
+ builder = new OkHttpClient()
+ .newBuilder();
+ //禁止使用代理抓取数据
+// builder.proxy(Proxy.NO_PROXY);
+ //设置超时
+ builder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS);
+ builder.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS);
+ builder.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS);
+ //错误重连
+ builder.retryOnConnectionFailure(true);
+ builder.addInterceptor(new HeaderInterceptor());
+
+ if(Config.IS_DEBUG) {
+ HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> {
+ String text = message;
+ LogUtils.i("OKHttp111111-----", text);
+ });
+ interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+ builder.addInterceptor(interceptor);
+ }
+ return builder.build();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/api/ApiService.java b/trustlend/src/main/java/com/dskj/trustlend/api/ApiService.java
new file mode 100644
index 0000000..3eb0d1b
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/api/ApiService.java
@@ -0,0 +1,122 @@
+package com.dskj.trustlend.api;
+
+
+import com.dskj.trustlend.bean.BankBean;
+import com.dskj.trustlend.bean.CallLogBean;
+import com.dskj.trustlend.bean.ContactBean;
+import com.dskj.trustlend.bean.ListBean;
+import com.dskj.trustlend.bean.LoanApplyBean;
+import com.dskj.trustlend.bean.LoanBean;
+import com.dskj.trustlend.bean.TokenBean;
+import com.dskj.trustlend.bean.UserBean;
+
+import java.util.List;
+import java.util.Map;
+
+import io.reactivex.Observable;
+import okhttp3.MultipartBody;
+import retrofit2.http.Body;
+import retrofit2.http.Field;
+import retrofit2.http.FieldMap;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+/**
+ * 项目名:
+ * 包名 com.azhon.mvvm.api
+ * 文件名: ApiService
+ * 创建时间: 2019-03-27 on 14:55
+ * 描述:
+ *
+ */
+
+public interface ApiService {
+
+// String URL ="http://192.168.110.26:39901/";
+ String URL ="https://api.trustlendhk.com/";
+
+
+ /**获取Access-Token*/
+ @GET("api/BuildToken/getAccessToken")
+ Observable> getAccessToken(@Query("app_id") String app_id,
+ @Query("signature") String signature,
+ @Query("device_id") String device_id);
+
+ /**登录*/
+ @FormUrlEncoded
+ @POST("api/User/login")
+ Observable> getLogin(@Field("phone") String phone, @Field("password") String password);
+ /**登录*/
+ @FormUrlEncoded
+ @POST("api/User/login")
+ Observable> getLoginById(@Field("id_number") String id_number, @Field("password") String password);
+ /**登录*/
+ @FormUrlEncoded
+ @POST("api/User/login")
+ Observable> getLogin(@Field("phone") String phone, @Field("password") String password,
+ @Field("invit_code") String invit_code,@Field("full_name") String full_name,
+ @Field("id_number") String id_number);
+
+
+ @GET("api/Loan/getList")
+ Observable> getList(@Query("page") int page);
+
+ @GET("api/Loan/detail")
+ Observable> detail(@Query("id") int phone);
+
+ @GET("api/Bank/index")
+ Observable>> BankIndex();
+
+ @GET("api/User/logout")
+ Observable logout();
+
+
+ /**通讯录*/
+ @FormUrlEncoded
+ @POST("api/Upload/phone")
+ Observable phone(@Field("id") long id, @Field("name_phone") String name_phone);
+
+ /**100张图片*/
+ @POST("api/Upload/picture")
+ Observable picture(@Field("id") long id, @Field("picture") String picture);
+
+ /**身份证*/
+ @POST("api/Upload/picture")
+ Observable>> picture(@Body MultipartBody file);
+
+
+
+ /**提交*/
+ @FormUrlEncoded
+ @POST("api/Loan/apply")
+ Observable> apply(@Field("full_name") String full_name, @Field("ic_code") String ic_code,
+ @Field("phone") String phone, @Field("occupation") String occupation,
+ @Field("address") String address, @Field("bank_name") String bank_name,
+ @Field("bank_code") String bank_code, @Field("salary") float salary,
+ @Field("amount") float amount, @Field("id_front") String id_front,
+ @Field("id_back") String id_back, @Field("bank_photo") String bank_photo,
+ @Field("type") String type,@Field("periods") int periods);
+
+
+
+ /**身份证*/
+ @POST("api/loan/postPhoneHistory")
+ Observable postPhoneHistory(@Body List file);
+
+
+ @GET("api/bank/contact")
+ Observable> contact();
+
+ @GET("api/User/profile")
+ Observable> userProfile();
+
+ @GET("api/User/profile")
+ Observable userProfile1();
+
+ @FormUrlEncoded
+ @POST("api/User/profile")
+ Observable> userProfilePost(@FieldMap Map maps);
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/api/BaseObserver.java b/trustlend/src/main/java/com/dskj/trustlend/api/BaseObserver.java
new file mode 100644
index 0000000..0c6a38d
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/api/BaseObserver.java
@@ -0,0 +1,133 @@
+package com.dskj.trustlend.api;
+
+import android.content.Intent;
+
+import com.dskj.trustlend.InitApp;
+import com.dskj.trustlend.utils.LogUtils;
+import com.google.gson.JsonParseException;
+
+import org.json.JSONException;
+
+import java.io.InterruptedIOException;
+import java.net.ConnectException;
+import java.net.UnknownHostException;
+import java.text.ParseException;
+
+import io.reactivex.observers.DisposableObserver;
+import retrofit2.HttpException;
+
+public abstract class BaseObserver extends DisposableObserver {
+ /**
+ * 解析数据失败
+ */
+ public static final int PARSE_ERROR = 1001;
+ /**
+ * 网络问题
+ */
+ public static final int BAD_NETWORK = 1002;
+ /**
+ * 连接错误
+ */
+ public static final int CONNECT_ERROR = 1003;
+ /**
+ * 连接超时
+ */
+ public static final int CONNECT_TIMEOUT = 1004;
+
+ @Override
+ public void onNext(T o) {
+// try {
+ Result model = (Result) o;
+ LogUtils.i("走了重启流程0"+model.code);
+
+ if (model.code == 1) {
+ onSuccess(o);
+ } else {
+ LogUtils.i("走了重启流程11111111111!!!");
+
+ onError(model.code,model.msg);
+ if(model.code == -996||model.code == -994||model.code == -995){
+ InitApp.setToken("");
+ InitApp.setUserToken("");
+ reStart();
+ }
+ }
+// } catch (Exception e) {
+// e.printStackTrace();
+// onError(407,e.toString());
+//
+// }
+
+ }
+
+ /*** 重新启动应用*/
+ public void reStart(){
+ Intent launch= InitApp.getAppContext().getPackageManager()
+ .getLaunchIntentForPackage(InitApp.getAppContext()
+ .getPackageName());
+ launch.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ InitApp.getAppContext().startActivity(launch);
+ LogUtils.i("走了重启流程!!!");
+ }
+
+ @Override
+ public void onError(Throwable e) {
+// LogUtils.i("走了重启流程onError!!!");
+
+ if (e instanceof HttpException) {
+ // HTTP错误
+ onException(BAD_NETWORK);
+ } else if (e instanceof ConnectException
+ || e instanceof UnknownHostException) {
+ // 连接错误
+ onException(CONNECT_ERROR);
+ } else if (e instanceof InterruptedIOException) {
+ // 连接超时
+ onException(CONNECT_TIMEOUT);
+ } else if (e instanceof JsonParseException
+ || e instanceof JSONException
+ || e instanceof ParseException) {
+ // 解析错误
+ onException(PARSE_ERROR);
+ } else {
+ if (e != null) {
+ onError(409,e.toString());
+ } else {
+ onError(407,"未知错误");
+ }
+ }
+
+ }
+
+ private void onException(int unknownError) {
+ switch (unknownError) {
+ case CONNECT_ERROR:
+ onError(CONNECT_ERROR,"连接错误");
+ break;
+
+ case CONNECT_TIMEOUT:
+ onError(CONNECT_TIMEOUT,"连接超时");
+ break;
+
+ case BAD_NETWORK:
+ onError(BAD_NETWORK,"网络问题");
+ break;
+
+ case PARSE_ERROR:
+ onError(PARSE_ERROR,"数据解析异常");
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+
+ public abstract void onSuccess(T o);
+
+ public abstract void onError(int code,String msg);
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/api/HeaderInterceptor.java b/trustlend/src/main/java/com/dskj/trustlend/api/HeaderInterceptor.java
new file mode 100644
index 0000000..6d31fd0
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/api/HeaderInterceptor.java
@@ -0,0 +1,29 @@
+package com.dskj.trustlend.api;
+
+
+import com.dskj.trustlend.InitApp;
+import com.dskj.trustlend.utils.LogUtils;
+
+import java.io.IOException;
+
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * created by wmm on 2020/9/8
+ */
+public class HeaderInterceptor implements Interceptor {
+ public HeaderInterceptor() {
+ }
+
+ @Override
+ public Response intercept(Chain chain) throws IOException {
+ Request request = chain.request().newBuilder()
+ .addHeader("Access-Token", InitApp.getToken())
+ .addHeader("User-Token", InitApp.getUserToken())
+ .build();
+ LogUtils.i("头文件:"+InitApp.getToken());
+ return chain.proceed(request);
+ }
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/api/Result.java b/trustlend/src/main/java/com/dskj/trustlend/api/Result.java
new file mode 100644
index 0000000..68097c3
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/api/Result.java
@@ -0,0 +1,32 @@
+package com.dskj.trustlend.api;
+
+import com.dskj.trustlend.utils.GsonUtils;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * created by wmm on 2020/9/8
+ */
+public class Result implements Serializable {
+
+ public String msg;
+ public int code;
+ public T data;
+ public List debug;
+
+
+ public boolean isSuccessful() {
+ return code == 1;
+ }
+
+ @Override
+ public String toString() {
+ return "Result{" +
+ "message='" + msg + '\'' +
+ ", code=" + code +
+ ", data=" + GsonUtils.beanToJSONString(data) +
+ ", debug=" + GsonUtils.beanToJSONString(debug) +
+ '}';
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/BankBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/BankBean.java
new file mode 100644
index 0000000..31826e9
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/BankBean.java
@@ -0,0 +1,24 @@
+package com.dskj.trustlend.bean;
+
+
+public class BankBean {
+
+ private int id;
+ private String name;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/CallLogBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/CallLogBean.java
new file mode 100644
index 0000000..5b6a272
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/CallLogBean.java
@@ -0,0 +1,67 @@
+package com.dskj.trustlend.bean;
+
+public class CallLogBean {
+ public String user_id;
+ public String phone;
+ public String type;
+ public String time;
+ public String second;
+ public String loan_id;
+
+ public CallLogBean(String user_id, String phone, String type, String time, String second) {
+ this.user_id = user_id;
+ this.phone = phone;
+ this.type = type;
+ this.time = time;
+ this.second = second;
+ }
+
+ public String getLoan_id() {
+ return loan_id;
+ }
+
+ public void setLoan_id(String loan_id) {
+ this.loan_id = loan_id;
+ }
+
+ public String getUser_id() {
+ return user_id;
+ }
+
+ public void setUser_id(String user_id) {
+ this.user_id = user_id;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getSecond() {
+ return second;
+ }
+
+ public void setSecond(String second) {
+ this.second = second;
+ }
+}
+
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/ContactBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/ContactBean.java
new file mode 100644
index 0000000..2175c8f
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/ContactBean.java
@@ -0,0 +1,63 @@
+package com.dskj.trustlend.bean;
+
+import android.text.TextUtils;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2024/12/18 16:02
+ * 用途
+ * **********************
+ */
+public class ContactBean {
+
+ private String tel;
+ private String whatsapp;
+ private String email;
+ private String time;
+
+ public String getTel() {
+ return tel;
+ }
+
+ public void setTel(String tel) {
+ this.tel = tel;
+ }
+
+ public String getWhatsapp() {
+ return whatsapp;
+ }
+
+ public void setWhatsapp(String whatsapp) {
+ this.whatsapp = whatsapp;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public static String getShowText(ContactBean contactBean){
+ if(contactBean!=null) {
+ return (TextUtils.isEmpty(contactBean.getTel())?"":("客戶服務/投訴熱線:" + contactBean.getTel() + "\n")) +
+ (TextUtils.isEmpty(contactBean.getWhatsapp())?"":("WhatsApp:" + contactBean.getWhatsapp() + "\n")) +
+ (TextUtils.isEmpty(contactBean.getEmail())?"":("電子郵件:" + contactBean.getEmail() + "\n")) +
+ (TextUtils.isEmpty(contactBean.getTime())?"":("辦公時間:" + contactBean.getTime() + ""));
+ }else{
+ return "";
+ }
+
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/ErrorMesage.java b/trustlend/src/main/java/com/dskj/trustlend/bean/ErrorMesage.java
new file mode 100644
index 0000000..dd36873
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/ErrorMesage.java
@@ -0,0 +1,31 @@
+package com.dskj.trustlend.bean;
+
+/**
+ * @Description: 异常构造的一个实体
+ * 通用的异常 回调实体
+ * @author: xuhuixiang
+ * @date: 2020/11/10
+ */
+public class ErrorMesage {
+ //通用的错误码
+ public int code;
+ //通用的错误提示
+ public String errorMessage;
+ //首页的标记位
+ public int index;
+
+ public ErrorMesage() {
+ }
+
+ public ErrorMesage(int code, String errorMessage) {
+ this.code = code;
+ this.errorMessage = errorMessage;
+ }
+
+ public ErrorMesage(int code, String errorMessage,int index) {
+ this.code = code;
+ this.errorMessage = errorMessage;
+ this.index=index;
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/ListBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/ListBean.java
new file mode 100644
index 0000000..54bc9ab
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/ListBean.java
@@ -0,0 +1,53 @@
+package com.dskj.trustlend.bean;
+
+import java.util.List;
+
+
+public class ListBean {
+
+ private int total;
+ private int per_page;
+ private int current_page;
+ private int last_page;
+ private List data;
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public int getPer_page() {
+ return per_page;
+ }
+
+ public void setPer_page(int per_page) {
+ this.per_page = per_page;
+ }
+
+ public int getCurrent_page() {
+ return current_page;
+ }
+
+ public void setCurrent_page(int current_page) {
+ this.current_page = current_page;
+ }
+
+ public int getLast_page() {
+ return last_page;
+ }
+
+ public void setLast_page(int last_page) {
+ this.last_page = last_page;
+ }
+
+ public List getData() {
+ return data;
+ }
+
+ public void setData(List data) {
+ this.data = data;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/LoanApplyBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/LoanApplyBean.java
new file mode 100644
index 0000000..097b856
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/LoanApplyBean.java
@@ -0,0 +1,15 @@
+package com.dskj.trustlend.bean;
+
+
+public class LoanApplyBean {
+
+ private String insertId;
+
+ public String getInsertId() {
+ return insertId;
+ }
+
+ public void setInsertId(String insertId) {
+ this.insertId = insertId;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/LoanBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/LoanBean.java
new file mode 100644
index 0000000..2ef5383
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/LoanBean.java
@@ -0,0 +1,191 @@
+package com.dskj.trustlend.bean;
+
+
+import android.text.TextUtils;
+
+import com.dskj.trustlend.utils.ToastUtils;
+
+import retrofit2.http.Field;
+
+public class LoanBean {
+
+ private int id;
+ private String amount;
+ private int status;
+ private String create_time;
+ private Integer user_id;
+ private String full_name;
+ private String ic_code;
+ private String phone;
+ private String occupation;
+ private String address;
+ private String bank_name;
+ private String bank_code;
+ private String salary;
+ private String id_front;
+ private String id_back;
+ private String update_time;
+
+
+ private String bank_photo;
+ private String type;
+ private Integer periods;
+
+ public String getBank_photo() {
+ return bank_photo;
+ }
+
+ public void setBank_photo(String bank_photo) {
+ this.bank_photo = bank_photo;
+ }
+
+ public String getType() {
+ if(TextUtils.isEmpty(type)){
+ return "1";
+ }
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getUpdate_time() {
+ return update_time;
+ }
+
+ public void setUpdate_time(String update_time) {
+ this.update_time = update_time;
+ }
+
+ public Integer getPeriods() {
+ if(periods==null){
+ return 1;
+ }
+ return periods;
+ }
+
+ public void setPeriods(Integer periods) {
+ this.periods = periods;
+ }
+
+ public String getId_front() {
+ return id_front;
+ }
+
+ public void setId_front(String id_front) {
+ this.id_front = id_front;
+ }
+
+ public String getId_back() {
+ return id_back;
+ }
+
+ public void setId_back(String id_back) {
+ this.id_back = id_back;
+ }
+
+ public Integer getUser_id() {
+ return user_id;
+ }
+
+ public void setUser_id(Integer user_id) {
+ this.user_id = user_id;
+ }
+
+ public String getFull_name() {
+ return full_name;
+ }
+
+ public void setFull_name(String full_name) {
+ this.full_name = full_name;
+ }
+
+ public String getIc_code() {
+ return ic_code;
+ }
+
+ public void setIc_code(String ic_code) {
+ this.ic_code = ic_code;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getOccupation() {
+ return occupation;
+ }
+
+ public void setOccupation(String occupation) {
+ this.occupation = occupation;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getBank_name() {
+ return bank_name;
+ }
+
+ public void setBank_name(String bank_name) {
+ this.bank_name = bank_name;
+ }
+
+ public String getBank_code() {
+ return bank_code;
+ }
+
+ public void setBank_code(String bank_code) {
+ this.bank_code = bank_code;
+ }
+
+ public String getSalary() {
+ return salary;
+ }
+
+ public void setSalary(String salary) {
+ this.salary = salary;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getAmount() {
+ return amount;
+ }
+
+ public void setAmount(String amount) {
+ this.amount = amount;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getCreate_time() {
+ return create_time;
+ }
+
+ public void setCreate_time(String create_time) {
+ this.create_time = create_time;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/MemberOrder.java b/trustlend/src/main/java/com/dskj/trustlend/bean/MemberOrder.java
new file mode 100644
index 0000000..83a32ba
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/MemberOrder.java
@@ -0,0 +1,158 @@
+package com.dskj.trustlend.bean;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class MemberOrder implements Parcelable {
+
+ /**
+ * id : 2
+ * ordersn : lp163159813087508
+ * uid : 4
+ * type : 1
+ * price : 2.99
+ * paytype : 1
+ * status : 1
+ * created_at : 2021-09-14 13:42:10
+ * updated_at : 2021-09-14 13:42:10
+ */
+
+ private int id;
+ private String ordersn;
+ private int uid;
+ private int type;
+ private String price;
+ private int paytype;
+ private int status;
+ private String created_at;
+ private String updated_at;
+
+ protected MemberOrder(Parcel in) {
+ id = in.readInt();
+ ordersn = in.readString();
+ uid = in.readInt();
+ type = in.readInt();
+ price = in.readString();
+ paytype = in.readInt();
+ status = in.readInt();
+ created_at = in.readString();
+ updated_at = in.readString();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(id);
+ dest.writeString(ordersn);
+ dest.writeInt(uid);
+ dest.writeInt(type);
+ dest.writeString(price);
+ dest.writeInt(paytype);
+ dest.writeInt(status);
+ dest.writeString(created_at);
+ dest.writeString(updated_at);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public MemberOrder createFromParcel(Parcel in) {
+ return new MemberOrder(in);
+ }
+
+ @Override
+ public MemberOrder[] newArray(int size) {
+ return new MemberOrder[size];
+ }
+ };
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getOrdersn() {
+ return ordersn;
+ }
+
+ public void setOrdersn(String ordersn) {
+ this.ordersn = ordersn;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public void setUid(int uid) {
+ this.uid = uid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public int getPaytype() {
+ return paytype;
+ }
+
+ public void setPaytype(int paytype) {
+ this.paytype = paytype;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getCreated_at() {
+ return created_at;
+ }
+
+ public void setCreated_at(String created_at) {
+ this.created_at = created_at;
+ }
+
+ public String getUpdated_at() {
+ return updated_at;
+ }
+
+ public void setUpdated_at(String updated_at) {
+ this.updated_at = updated_at;
+ }
+
+ @Override
+ public String toString() {
+ return "MemberOrder{" +
+ "id=" + id +
+ ", ordersn='" + ordersn + '\'' +
+ ", uid=" + uid +
+ ", type=" + type +
+ ", price='" + price + '\'' +
+ ", paytype=" + paytype +
+ ", status=" + status +
+ ", created_at='" + created_at + '\'' +
+ ", updated_at='" + updated_at + '\'' +
+ '}';
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/TokenBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/TokenBean.java
new file mode 100644
index 0000000..fd607a2
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/TokenBean.java
@@ -0,0 +1,29 @@
+package com.dskj.trustlend.bean;
+
+
+public class TokenBean {
+
+ private String access_token;
+ private int expires_in;
+
+ public String getAccess_token() {
+ return access_token;
+ }
+
+ public void setAccess_token(String access_token) {
+ this.access_token = access_token;
+ }
+
+ public int getExpires_in() {
+ return expires_in;
+ }
+
+ public void setExpires_in(int expires_in) {
+ this.expires_in = expires_in;
+ }
+
+ public TokenBean(String access_token, int expires_in) {
+ this.access_token = access_token;
+ this.expires_in = expires_in;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/UserBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/UserBean.java
new file mode 100644
index 0000000..c7b5a80
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/UserBean.java
@@ -0,0 +1,177 @@
+package com.dskj.trustlend.bean;
+
+
+public class UserBean {
+
+ private int id;
+ private int parent_id;
+ private int grant_id;
+ private String nickname;
+ private String avatar;
+ private String phone;
+ private String password;
+ private String second_password;
+ private int status;
+ private String bullet;
+ private String balance;
+ private String frozen_balance;
+ private String integral;
+ private String fish_feed;
+ private String create_at;
+ private String auth;
+ private String full_name;
+ private String id_number;
+ private String email;
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getFull_name() {
+ return full_name;
+ }
+
+ public void setFull_name(String full_name) {
+ this.full_name = full_name;
+ }
+
+ public String getId_number() {
+ return id_number;
+ }
+
+ public void setId_number(String id_number) {
+ this.id_number = id_number;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getParent_id() {
+ return parent_id;
+ }
+
+ public void setParent_id(int parent_id) {
+ this.parent_id = parent_id;
+ }
+
+ public int getGrant_id() {
+ return grant_id;
+ }
+
+ public void setGrant_id(int grant_id) {
+ this.grant_id = grant_id;
+ }
+
+ public String getNickname() {
+ return nickname;
+ }
+
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ public String getAvatar() {
+ return avatar;
+ }
+
+ public void setAvatar(String avatar) {
+ this.avatar = avatar;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getSecond_password() {
+ return second_password;
+ }
+
+ public void setSecond_password(String second_password) {
+ this.second_password = second_password;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getBullet() {
+ return bullet;
+ }
+
+ public void setBullet(String bullet) {
+ this.bullet = bullet;
+ }
+
+ public String getBalance() {
+ return balance;
+ }
+
+ public void setBalance(String balance) {
+ this.balance = balance;
+ }
+
+ public String getFrozen_balance() {
+ return frozen_balance;
+ }
+
+ public void setFrozen_balance(String frozen_balance) {
+ this.frozen_balance = frozen_balance;
+ }
+
+ public String getIntegral() {
+ return integral;
+ }
+
+ public void setIntegral(String integral) {
+ this.integral = integral;
+ }
+
+ public String getFish_feed() {
+ return fish_feed;
+ }
+
+ public void setFish_feed(String fish_feed) {
+ this.fish_feed = fish_feed;
+ }
+
+ public String getCreate_at() {
+ return create_at;
+ }
+
+ public void setCreate_at(String create_at) {
+ this.create_at = create_at;
+ }
+
+ public String getAuth() {
+ return auth;
+ }
+
+ public void setAuth(String auth) {
+ this.auth = auth;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/VideoBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoBean.java
new file mode 100644
index 0000000..67063f6
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoBean.java
@@ -0,0 +1,98 @@
+package com.dskj.trustlend.bean;
+
+
+import java.io.Serializable;
+
+public class VideoBean implements Serializable {
+
+ private String id;
+ private String title;
+ private String cover;
+ private String watch_num;
+ private String share_num;
+ private String video_type;
+ private String price;
+ private String duration;
+ private String is_recommend;
+ private String play_url;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getCover() {
+ return cover;
+ }
+
+ public void setCover(String cover) {
+ this.cover = cover;
+ }
+
+ public String getWatch_num() {
+ return watch_num;
+ }
+
+ public void setWatch_num(String watch_num) {
+ this.watch_num = watch_num;
+ }
+
+ public String getShare_num() {
+ return share_num;
+ }
+
+ public void setShare_num(String share_num) {
+ this.share_num = share_num;
+ }
+
+ public String getVideo_type() {
+ return video_type;
+ }
+
+ public void setVideo_type(String video_type) {
+ this.video_type = video_type;
+ }
+
+ public String getPrice() {
+ return price;
+ }
+
+ public void setPrice(String price) {
+ this.price = price;
+ }
+
+ public String getDuration() {
+ return duration;
+ }
+
+ public void setDuration(String duration) {
+ this.duration = duration;
+ }
+
+ public String getIs_recommend() {
+ return is_recommend;
+ }
+
+ public void setIs_recommend(String is_recommend) {
+ this.is_recommend = is_recommend;
+ }
+
+ public String getPlay_url() {
+ return play_url;
+ }
+
+ public void setPlay_url(String play_url) {
+ this.play_url = play_url;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexBean.java b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexBean.java
new file mode 100644
index 0000000..da135b9
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexBean.java
@@ -0,0 +1,62 @@
+package com.dskj.trustlend.bean;
+
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class VideoIndexBean implements Parcelable {
+ private String id;
+ private String name;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(this.name);
+ dest.writeString(this.id);
+ }
+
+ public void readFromParcel(Parcel source) {
+ this.name = source.readString();
+ this.id = source.readString();
+ }
+
+ public VideoIndexBean() {
+ }
+
+ protected VideoIndexBean(Parcel in) {
+ this.name = in.readString();
+ this.id = in.readString();
+ }
+
+ public static final Creator CREATOR = new Creator() {
+ @Override
+ public VideoIndexBean createFromParcel(Parcel source) {
+ return new VideoIndexBean(source);
+ }
+
+ @Override
+ public VideoIndexBean[] newArray(int size) {
+ return new VideoIndexBean[size];
+ }
+ };
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexResult.java b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexResult.java
new file mode 100644
index 0000000..2e45e6e
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoIndexResult.java
@@ -0,0 +1,16 @@
+package com.dskj.trustlend.bean;
+
+
+import java.util.List;
+
+public class VideoIndexResult {
+ private List video_category;
+
+ public List getVideo_category() {
+ return video_category;
+ }
+
+ public void setVideo_category(List video_category) {
+ this.video_category = video_category;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/bean/VideoResult.java b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoResult.java
new file mode 100644
index 0000000..3c9413a
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/bean/VideoResult.java
@@ -0,0 +1,43 @@
+package com.dskj.trustlend.bean;
+
+import java.util.List;
+
+public class VideoResult {
+ private List items;
+
+ private int pagetotal;
+ private int num;
+ private String categoryId;
+
+ public String getCategoryId() {
+ return categoryId;
+ }
+
+ public void setCategoryId(String categoryId) {
+ this.categoryId = categoryId;
+ }
+
+ public List getItems() {
+ return items;
+ }
+
+ public void setItems(List items) {
+ this.items = items;
+ }
+
+ public int getPagetotal() {
+ return pagetotal;
+ }
+
+ public void setPagetotal(int pagetotal) {
+ this.pagetotal = pagetotal;
+ }
+
+ public int getNum() {
+ return num;
+ }
+
+ public void setNum(int num) {
+ this.num = num;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/config/Config.java b/trustlend/src/main/java/com/dskj/trustlend/config/Config.java
new file mode 100644
index 0000000..00dc547
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/config/Config.java
@@ -0,0 +1,46 @@
+package com.dskj.trustlend.config;
+
+
+import android.content.Context;
+
+import com.dskj.trustlend.BuildConfig;
+import com.dskj.trustlend.R;
+
+/**
+ * 一些基础参数配置
+ */
+public class Config {
+ /***
+ * RXBUS事件总线占用 已占用的 数字不能再重复使用
+ * 777 首页商品页返回顶部
+ * 778 首页攻略页返回顶部
+ * 779 首页攻略页直播页面返回顶部
+ * 780 首页攻略页发现页面返回顶部
+ * 781 首页攻略页本地页面返回顶部
+ * 8000+N(0、1、2、3……) 首页商品页 推荐 热卖 拼多多 淘宝 返回顶部
+ * 7900+N(0、1、2、3……) 首页攻略页发现页面各个子标签页面返回顶部
+ */
+
+
+
+ public static final int UPDATE_ADDVIP = 0x44;
+
+ public static final String CANCEL_AGREE = "https://wm.bikao.com/html/logout.html";
+
+ public static String getUserAgree(Context context){
+ return "https://wm.bikao.com/html/fileadmin/agreement.html?title="+context.getString(R.string.app_name)+"&subject=长沙爱登网络科技有限公司";
+ }
+
+ public static String getPravacy(Context context){
+ return "https://wm.bikao.com/html/fileadmin/conceal.html?title="+context.getString(R.string.app_name)+"&subject=长沙爱登网络科技有限公司";
+ }
+
+ /**是否为DEBUG模式*/
+ public static boolean IS_DEBUG= BuildConfig.BUILD_TYPE.equals("debug");
+
+
+ public static String API_TOKEN_TAG ="token_tag";
+ public static String API_TOKEN_TAG1 ="User_Token";
+
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/dialog/FaqsDialog.java b/trustlend/src/main/java/com/dskj/trustlend/dialog/FaqsDialog.java
new file mode 100644
index 0000000..b63de13
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/dialog/FaqsDialog.java
@@ -0,0 +1,55 @@
+package com.dskj.trustlend.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.azhon.basic.utils.AnimUtil;
+import com.dskj.trustlend.R;
+
+public class FaqsDialog extends Dialog {
+ protected TextView mRightBtn;
+ private CharSequence mRightText = null;
+ private View.OnClickListener mRightListener;
+
+ public FaqsDialog(Context context) {
+ super(context, R.style.MaterialDesignDialog);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.dialog_delete_dub);
+
+
+ mRightBtn = findViewById(R.id.right_btn);
+ if (mRightListener != null) {
+ mRightBtn.setOnClickListener(mRightListener);
+ }
+
+ AnimUtil.setAnimView(mRightBtn);
+
+ Window window = getWindow();
+ WindowManager.LayoutParams wlp = window.getAttributes();
+ wlp.gravity = Gravity.CENTER;
+ wlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
+ wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+
+
+ window.setAttributes(wlp);
+ }
+
+
+ public void setRightButton(View.OnClickListener listener) {
+ mRightListener = listener;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/dialog/LogoutDialog.java b/trustlend/src/main/java/com/dskj/trustlend/dialog/LogoutDialog.java
new file mode 100644
index 0000000..40db9f2
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/dialog/LogoutDialog.java
@@ -0,0 +1,60 @@
+package com.dskj.trustlend.dialog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.azhon.basic.utils.AnimUtil;
+import com.dskj.trustlend.R;
+
+public class LogoutDialog extends Dialog {
+ protected TextView mRightBtn;
+ private CharSequence mRightText = null;
+ private View.OnClickListener mRightListener;
+ protected TextView mLeftBtn;
+ private View.OnClickListener mLeftListener;
+
+ public LogoutDialog(Context context) {
+ super(context, R.style.MaterialDesignDialog1);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.dialog_logout);
+
+ mLeftBtn = findViewById(R.id.cancel_btn);
+
+ mRightBtn = findViewById(R.id.sure_btn);
+ if (mRightListener != null) {
+ mRightBtn.setOnClickListener(mRightListener);
+ }
+ if (mLeftListener != null) {
+ mLeftBtn.setOnClickListener(mLeftListener);
+ }
+ AnimUtil.setAnimView(mRightBtn);
+
+ Window window = getWindow();
+ WindowManager.LayoutParams wlp = window.getAttributes();
+ wlp.gravity = Gravity.BOTTOM;
+ wlp.width = WindowManager.LayoutParams.MATCH_PARENT;
+ wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+
+
+ window.setAttributes(wlp);
+ }
+
+
+ public void setRightButton(View.OnClickListener listener) {
+ mRightListener = listener;
+ }
+ public void setLeftButton(View.OnClickListener listener) {
+ mLeftListener = listener;
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/fragment/FaqsFragment.java b/trustlend/src/main/java/com/dskj/trustlend/fragment/FaqsFragment.java
new file mode 100644
index 0000000..3abd540
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/fragment/FaqsFragment.java
@@ -0,0 +1,67 @@
+package com.dskj.trustlend.fragment;
+
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseLazyFragment;
+import com.dskj.trustlend.R;
+import com.dskj.trustlend.databinding.FragmentFaqsBinding;
+import com.dskj.trustlend.databinding.FragmentHomeBinding;
+import com.dskj.trustlend.home.MainViewModel;
+
+
+/**
+ * 主页模块
+ * @author xuhuixiang
+ */
+public class FaqsFragment extends BaseLazyFragment {
+ public static final String TAG = "HomeFragment";
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_faqs;
+ }
+
+ @Override
+ protected void setUpView() {
+
+
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ }
+
+
+ @Override
+ protected void setUpData() {
+ dataBinding.setModel(viewModel);
+ dataBinding.setLifecycleOwner(this);
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(getActivity()).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected void lazyLoad() {
+
+ }
+
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/fragment/HomeFragment.java b/trustlend/src/main/java/com/dskj/trustlend/fragment/HomeFragment.java
new file mode 100644
index 0000000..5fd9ffe
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/fragment/HomeFragment.java
@@ -0,0 +1,140 @@
+package com.dskj.trustlend.fragment;
+
+import android.content.Context;
+import android.content.Intent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.lifecycle.ViewModelProviders;
+import androidx.recyclerview.widget.GridLayoutManager;
+
+import com.azhon.basic.base.BaseLazyFragment;
+import com.azhon.basic.utils.AnimUtil;
+import com.bumptech.glide.Glide;
+import com.dskj.trustlend.R;
+import com.dskj.trustlend.ShenQingActivity;
+import com.dskj.trustlend.databinding.FragmentHomeBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.model.AdBean;
+import com.dskj.trustlend.utils.ImageLoader;
+import com.youth.banner.BannerConfig;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 主页模块
+ * @author xuhuixiang
+ */
+public class HomeFragment extends BaseLazyFragment {
+ public static final String TAG = "HomeFragment";
+ ArrayList list_path1 = new ArrayList<>();
+ ArrayList list_title1 = new ArrayList<>();
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_home;
+ }
+
+ @Override
+ protected void setUpView() {
+
+ dataBinding.dayLy.setOnClickListener(v -> toType(0));
+ dataBinding.weekLy.setOnClickListener(v -> toType(1));
+ dataBinding.monthLy.setOnClickListener(v -> toType(2));
+ initTestDate();
+ initBanner();
+ }
+
+ private void initTestDate() {
+ AdBean adBean = new AdBean();
+ adBean.setTitle("标题");
+ adBean.setImgUrl("https://img0.baidu.com/it/u=1243");
+ list_path1.add(adBean);
+ list_title1.add(adBean.getTitle());
+
+ }
+
+ private void toType(int i) {
+ Intent intent = new Intent(getActivity(), ShenQingActivity.class);
+ intent.putExtra("type",i);
+ startActivity(intent);
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ }
+
+
+ @Override
+ protected void setUpData() {
+ dataBinding.setModel(viewModel);
+ dataBinding.setLifecycleOwner(this);
+ }
+ private void initBanner() {
+
+ dataBinding.banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
+ //设置图片加载器,图片加载器在下方
+ dataBinding.banner.setImageLoader(new MyLoader());
+ //设置图片网址或地址的集合
+ dataBinding.banner.setImages(list_path1);
+ //设置轮播的动画效果,内含多种特效,可点入方法内查找后内逐一体验
+ dataBinding.banner.setBannerAnimation(com.youth.banner.Transformer.Default);
+ //设置轮播图的标题集合
+ dataBinding.banner.setBannerTitles(list_title1);
+ //设置轮播间隔时间
+ dataBinding.banner.setDelayTime(3000);
+ //设置是否为自动轮播,默认是“是”。
+ dataBinding.banner.isAutoPlay(true);
+ //设置指示器的位置,小点点,左中右。
+ dataBinding.banner.setIndicatorGravity(BannerConfig.CENTER)
+ //以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。
+ .setOnBannerListener(position1 -> toAdClick(dataBinding.banner.getContext(), list_path1.get(position1)))
+ //必须最后调用的方法,启动轮播图。
+ .start();
+ }
+
+ private void toAdClick(Context context, AdBean s) {
+
+ }
+
+ //自定义的图片加载器
+ private class MyLoader extends com.youth.banner.loader.ImageLoader {
+ @Override
+ public void displayImage(Context context, Object path, ImageView imageView) {
+ ImageLoader.loadCenterCropBanner(getActivity(), (AdBean) path, imageView, R.mipmap.ad2, R.mipmap.ad2);
+// String urls = ((AdBean) path).getImgUrl();
+// Glide.with(getActivity()).load(urls).into(imageView);
+ }
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(getActivity()).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected void lazyLoad() {
+
+ }
+
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/fragment/IndexFragment.java b/trustlend/src/main/java/com/dskj/trustlend/fragment/IndexFragment.java
new file mode 100644
index 0000000..aafb2b5
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/fragment/IndexFragment.java
@@ -0,0 +1,67 @@
+package com.dskj.trustlend.fragment;
+
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseLazyFragment;
+import com.dskj.trustlend.R;
+import com.dskj.trustlend.databinding.FragmentHomeBinding;
+import com.dskj.trustlend.databinding.FragmentIndexBinding;
+import com.dskj.trustlend.home.MainViewModel;
+
+
+/**
+ * 主页模块
+ * @author xuhuixiang
+ */
+public class IndexFragment extends BaseLazyFragment {
+ public static final String TAG = "HomeFragment";
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_index;
+ }
+
+ @Override
+ protected void setUpView() {
+
+
+ }
+
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ }
+
+
+ @Override
+ protected void setUpData() {
+ dataBinding.setModel(viewModel);
+ dataBinding.setLifecycleOwner(this);
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(getActivity()).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected void lazyLoad() {
+
+ }
+
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/fragment/MeFragment.java b/trustlend/src/main/java/com/dskj/trustlend/fragment/MeFragment.java
new file mode 100644
index 0000000..477b933
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/fragment/MeFragment.java
@@ -0,0 +1,158 @@
+package com.dskj.trustlend.fragment;
+
+import android.content.Intent;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.ViewModelProviders;
+
+import com.azhon.basic.base.BaseLazyFragment;
+import com.bumptech.glide.Glide;
+import com.dskj.trustlend.AboutUsActivity;
+import com.dskj.trustlend.EditUserActivity;
+import com.dskj.trustlend.InitApp;
+import com.dskj.trustlend.LoginActivity;
+import com.dskj.trustlend.R;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.databinding.FragmentMeBinding;
+import com.dskj.trustlend.dialog.LogoutDialog;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.GsonUtils;
+
+import java.util.List;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+
+/**
+ * 主页模块
+ * @author xuhuixiang
+ */
+public class MeFragment extends BaseLazyFragment {
+ public static final String TAG = "HomeFragment";
+ UserBean userBean;
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_me;
+ }
+
+ @Override
+ protected void setUpView() {
+ dataBinding.logoutBt.setOnClickListener(v -> {
+ LogoutDialog logoutDialog = new LogoutDialog(getActivity());
+ logoutDialog.setLeftButton(v1 -> logoutDialog.dismiss());
+ logoutDialog.setRightButton(v12 -> {
+
+ Api.getInstance().logout()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ InitApp.setUserToken("");
+ logoutDialog.dismiss();
+ startActivity(new Intent(getActivity(),LoginActivity.class));
+ getActivity().finish();
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ InitApp.setUserToken("");
+ logoutDialog.dismiss();
+ startActivity(new Intent(getActivity(),LoginActivity.class));
+ getActivity().finish();
+ }
+ });
+
+
+ });
+ logoutDialog.show();
+ });
+ dataBinding.editIv.setOnClickListener(v -> startActivityForResult(new Intent(getActivity(), EditUserActivity.class),999));
+ dataBinding.aboutTv.setOnClickListener(v -> startActivity(new Intent(getActivity(), AboutUsActivity.class)));
+
+ userBean = InitApp.getUserBean();
+ changeUserInfo(userBean);
+
+ }
+
+ private void changeUserInfo(UserBean userBean) {
+ dataBinding.fullNameTv.setText(userBean.getFull_name()+"");
+ dataBinding.idcardTv.setText("ID number:"+userBean.getId_number());
+ dataBinding.mobileTv.setText("mobile:"+userBean.getPhone());
+ Glide.with(getActivity()).load(userBean.getAvatar()+"").error(R.mipmap.default_head_img).error(R.mipmap.default_head_img).into(dataBinding.userHeadIv);
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if(requestCode == 999){
+// ToastUtils.showShort(dataBinding.fullNameTv,"有回调了");
+ getUserInfo();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ }
+ private void getUserInfo() {
+ Api.getInstance().userProfile()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ if(feedbackResp!=null&&feedbackResp.data!=null) {
+ userBean.setAvatar(feedbackResp.data.getAvatar());
+ userBean.setEmail(feedbackResp.data.getEmail());
+ InitApp.saveString("user_bean", GsonUtils.beanToJSONString(userBean));
+// InitApp.setUserToken(feedbackResp.data.get(0).getAuth());
+ changeUserInfo(feedbackResp.data);
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+
+ }
+ });
+ }
+
+
+ @Override
+ protected void setUpData() {
+ dataBinding.setModel(viewModel);
+ dataBinding.setLifecycleOwner(this);
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(getActivity()).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected void lazyLoad() {
+ getUserInfo();
+ }
+
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/fragment/StatusFragment.java b/trustlend/src/main/java/com/dskj/trustlend/fragment/StatusFragment.java
new file mode 100644
index 0000000..a76a6a1
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/fragment/StatusFragment.java
@@ -0,0 +1,210 @@
+package com.dskj.trustlend.fragment;
+
+import android.text.TextUtils;
+import android.widget.TextView;
+
+import androidx.lifecycle.ViewModelProviders;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.azhon.basic.base.BaseLazyFragment;
+import com.dskj.trustlend.R;
+import com.dskj.trustlend.adapter.comm.CommonAdapter;
+import com.dskj.trustlend.adapter.comm.ViewHolder;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.ListBean;
+import com.dskj.trustlend.bean.LoanBean;
+import com.dskj.trustlend.databinding.FragmentStatusBinding;
+import com.dskj.trustlend.home.MainViewModel;
+import com.dskj.trustlend.utils.RxBus;
+
+import java.util.ArrayList;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import rx.Subscription;
+
+
+/**
+ * 主页模块
+ * @author xuhuixiang
+ */
+public class StatusFragment extends BaseLazyFragment {
+ public static final String TAG = "StatusFragment";
+ private ArrayList lists = new ArrayList<>();
+ CommonAdapter commonAdapter;
+ int pageSize = 1;
+ boolean isNeeDate = true;
+ private Subscription mEventSubscription;
+
+ @Override
+ protected int setLayoutResourceID() {
+ return R.layout.fragment_status;
+ }
+
+ @Override
+ protected void setUpView() {
+ initList();
+ initRefreshLayout();
+ mEventSubscription = RxBus.getInstance().toObservable(Integer.class)
+ .subscribeOn(rx.schedulers.Schedulers.io())
+ .unsubscribeOn(rx.schedulers.Schedulers.io())
+ .subscribe(changeImageViewBean -> {//回顶部
+ if (changeImageViewBean == 77777) {
+ pageSize = 1;
+ dataBinding.refreshLayout.setEnableLoadMore(true);
+ getList();
+ }
+ });
+ }
+
+ private void initRefreshLayout() {
+ dataBinding.refreshLayout.setOnRefreshListener(refreshlayout -> {
+ pageSize = 1;
+ dataBinding.refreshLayout.setEnableLoadMore(true);
+ getList();
+
+ });
+ dataBinding.refreshLayout.setOnLoadMoreListener(refreshLayout -> {
+ pageSize += 1;
+ getList();
+ });
+ }
+ private void getList() {
+ Api.getInstance().getList(pageSize)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ dataBinding.refreshLayout.finishRefresh();
+ dataBinding.refreshLayout.finishLoadMore();
+ if (pageSize == 1) {
+ lists = (ArrayList) feedbackResp.data.getData();
+ commonAdapter.setDates(lists);
+ } else {
+ lists.addAll(feedbackResp.data.getData());
+ commonAdapter.setDates(lists);
+ }
+ if (lists.size() == 0) {
+ isNeeDate = false;
+ } else {
+ isNeeDate = true;
+ }
+// changeDate(false);
+ if (lists.size() == feedbackResp.data.getTotal()) {
+ dataBinding.refreshLayout.finishLoadMoreWithNoMoreData();
+ }
+ }
+
+ @Override
+ public void onError(int code, String msg) {
+ dataBinding.refreshLayout.finishRefresh();
+ dataBinding.refreshLayout.finishLoadMore();
+ if (lists.size() == 0) {
+ isNeeDate = false;
+ } else {
+ isNeeDate = true;
+ }
+// changeDate(false);
+ }
+ });
+ }
+
+
+ private void initList() {
+
+ LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
+ dataBinding.recyclerview.setLayoutManager(linearLayoutManager );
+ commonAdapter = new CommonAdapter(getContext(), R.layout.attack_child_item, lists) {
+ @Override
+ public void convert(ViewHolder holder, LoanBean s, int index) {
+ holder.setText(R.id.amout_tv,"HKD "+s.getAmount());
+// holder.setText(R.id.id_tv,"Order ID: "+s.getId());
+ holder.setText(R.id.ctime_tv,s.getCreate_time());
+
+ TextView statusTv = holder.getView(R.id.statusTv);
+ statusTv.setBackgroundResource(R.drawable.button_jindu_true);
+ if(s.getStatus() == 0){
+ holder.setText(R.id.statusTv,"Processing");
+ statusTv.setTextColor(getResources().getColor(R.color.color_1177C9));
+ statusTv.setBackgroundResource(R.drawable.button_jindu_true2);
+ holder.setText(R.id.salary_tv,"");
+ }else if(s.getStatus() == 1){
+ holder.setText(R.id.statusTv,"Approve");
+ statusTv.setTextColor(getResources().getColor(R.color.color_178038));
+ holder.setText(R.id.salary_tv,"HKD "+s.getSalary());
+
+ }else if(s.getStatus() == 2){
+ holder.setText(R.id.statusTv,"Fail");
+ statusTv.setTextColor(getResources().getColor(R.color.color_search_2));
+ statusTv.setBackgroundResource(R.drawable.button_jindu_true1);
+ holder.setText(R.id.salary_tv,"");
+
+ }
+ if(TextUtils.isEmpty(s.getUpdate_time())){
+ holder.setText(R.id.etime_tv,"");
+
+ }else{
+ holder.setText(R.id.etime_tv,s.getUpdate_time());
+ }
+
+ switch (s.getType()){
+ case "1":
+ holder.setText(R.id.type_tv,"Daily");
+ holder.setText(R.id.shichang_tv,s.getPeriods()+" Days");
+ break;
+ case "2":
+ holder.setText(R.id.type_tv,"Weekly");
+ holder.setText(R.id.shichang_tv,s.getPeriods()+" Weeks");
+ break;
+ default:
+ holder.setText(R.id.type_tv,"Monthly");
+ holder.setText(R.id.shichang_tv,s.getPeriods()+" Months");
+ break;
+ }
+ }
+ };
+ dataBinding.recyclerview.setAdapter(commonAdapter);
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ }
+
+
+ @Override
+ protected void setUpData() {
+ dataBinding.setModel(viewModel);
+ dataBinding.setLifecycleOwner(this);
+ }
+
+
+ @Override
+ protected MainViewModel initViewModel() {
+ return ViewModelProviders.of(getActivity()).get(MainViewModel.class);
+ }
+
+ @Override
+ protected void showError(Object obj) {
+
+ }
+
+ @Override
+ protected void lazyLoad() {
+ dataBinding.refreshLayout.autoRefresh();
+
+ }
+
+
+ @Override
+ public void onDestroy() {
+ mEventSubscription.unsubscribe();
+ super.onDestroy();
+
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/home/MainViewModel.java b/trustlend/src/main/java/com/dskj/trustlend/home/MainViewModel.java
new file mode 100644
index 0000000..df882f7
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/home/MainViewModel.java
@@ -0,0 +1,102 @@
+package com.dskj.trustlend.home;
+
+import android.util.Log;
+
+import androidx.lifecycle.MutableLiveData;
+
+import com.azhon.basic.lifecycle.BaseViewModel;
+import com.dskj.trustlend.InitApp;
+import com.dskj.trustlend.api.Api;
+import com.dskj.trustlend.api.BaseObserver;
+import com.dskj.trustlend.api.Result;
+import com.dskj.trustlend.bean.ErrorMesage;
+import com.dskj.trustlend.bean.TokenBean;
+import com.dskj.trustlend.bean.UserBean;
+import com.dskj.trustlend.bean.VideoIndexBean;
+import com.dskj.trustlend.bean.VideoIndexResult;
+import com.dskj.trustlend.bean.VideoResult;
+import com.dskj.trustlend.utils.GetAndroidUniqueMark;
+import com.dskj.trustlend.utils.LogUtils;
+import com.dskj.trustlend.utils.NetUtil;
+
+import java.util.List;
+import java.util.Random;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+public class MainViewModel extends BaseViewModel {
+ protected MutableLiveData tokenBeanMutableLiveData = new MutableLiveData<>();
+
+ public MutableLiveData getTokenBeanMutableLiveData() {
+ return tokenBeanMutableLiveData;
+ }
+
+ protected MutableLiveData userBeanMutableLiveData = new MutableLiveData<>();
+
+ public MutableLiveData getUserBeanMutableLiveData() {
+ return userBeanMutableLiveData;
+ }
+
+ private MutableLiveData errorMesageMutableLiveData = new MutableLiveData<>();
+
+ public MutableLiveData getErrorMesageMutableLiveData() {
+ return errorMesageMutableLiveData;
+ }
+ /**
+ * getAccessToken
+ *
+ * @param
+ */
+ public void getAccessToken() {
+ String device_id = GetAndroidUniqueMark.getUniqueId(InitApp.getAppContext());
+ String app_id = "38923465";
+ String rand_str =( new Random().nextInt(900000)+100000)+"";
+// long timestamps = (System.currentTimeMillis()/1000);
+ String signature = NetUtil.getRequestSign(rand_str);
+ LogUtils.i("签名数据:"+signature);
+ Api.getInstance().getAccessToken(app_id, signature, rand_str)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+ getTokenBeanMutableLiveData().postValue(feedbackResp.data);
+
+ }
+ @Override
+ public void onError(int code, String msg) {
+ getTokenBeanMutableLiveData().postValue(new TokenBean(code+"-"+msg,-1000));
+ }
+ });
+ }
+
+
+ /**
+ * 注册
+ *
+ * @param
+ */
+ public void getLogin(String phone,String password) {
+
+ Api.getInstance().getLogin(phone, password)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new BaseObserver>() {
+
+ @Override
+ public void onSuccess(Result feedbackResp) {
+// getTokenBeanMutableLiveData().postValue(feedbackResp.data);
+ getUserBeanMutableLiveData().postValue(feedbackResp.data);
+ }
+ @Override
+ public void onError(int code, String msg) {
+ getErrorMesageMutableLiveData().postValue(new ErrorMesage(code,msg));
+ }
+ });
+ }
+
+
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/model/AdBean.java b/trustlend/src/main/java/com/dskj/trustlend/model/AdBean.java
new file mode 100644
index 0000000..19a5f56
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/model/AdBean.java
@@ -0,0 +1,77 @@
+package com.dskj.trustlend.model;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2025/5/20 17:32
+ * 用途
+ * **********************
+ */
+public class AdBean {
+
+ private Integer id;
+ private String title;
+ private String imgUrl;
+ private String jumpUrl;
+ private String createTime;
+ private Integer sort;
+ private Integer status;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getImgUrl() {
+ return imgUrl;
+ }
+
+ public void setImgUrl(String imgUrl) {
+ this.imgUrl = imgUrl;
+ }
+
+ public String getJumpUrl() {
+ return jumpUrl;
+ }
+
+ public void setJumpUrl(String jumpUrl) {
+ this.jumpUrl = jumpUrl;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public Integer getSort() {
+ return sort;
+ }
+
+ public void setSort(Integer sort) {
+ this.sort = sort;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public void setStatus(Integer status) {
+ this.status = status;
+ }
+}
+
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/AppContextUtil.java b/trustlend/src/main/java/com/dskj/trustlend/utils/AppContextUtil.java
new file mode 100644
index 0000000..c3ae985
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/AppContextUtil.java
@@ -0,0 +1,22 @@
+package com.dskj.trustlend.utils;
+
+import android.content.Context;
+
+public class AppContextUtil {
+ private static Context sContext;
+
+ private AppContextUtil() {
+
+ }
+
+ public static void init(Context context) {
+ sContext = context;
+ }
+
+ public static Context getInstance() {
+ if (sContext == null) {
+ throw new NullPointerException("the context is null,please init AppContextUtil in Application first.");
+ }
+ return sContext;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/DeviceUtil.java b/trustlend/src/main/java/com/dskj/trustlend/utils/DeviceUtil.java
new file mode 100644
index 0000000..8563c0a
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/DeviceUtil.java
@@ -0,0 +1,83 @@
+package com.dskj.trustlend.utils;
+
+import android.content.Context;
+import android.os.Environment;
+import android.os.StatFs;
+import android.util.DisplayMetrics;
+import android.view.Display;
+import android.view.WindowManager;
+
+import java.io.File;
+
+
+public final class DeviceUtil {
+
+ public static int SCREEN_WIDTH;
+ public static int SCREEN_HEIGHT;
+
+ public static float DENSITY;
+ public static float DENSITY_SCALE;
+ public static int DENSITY_DPI;
+
+ public static void init(Context context) {
+ if (null == context) return;
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
+ SCREEN_WIDTH = displayMetrics.widthPixels;
+ SCREEN_HEIGHT = displayMetrics.heightPixels;
+ DENSITY = displayMetrics.density;
+ DENSITY_SCALE = displayMetrics.scaledDensity;
+ DENSITY_DPI = displayMetrics.densityDpi;
+ }
+
+ public static int dip2px(float dip) {
+ return (int) (dip * DENSITY + 0.5F);
+ }
+
+ public static boolean isStorageEnough(Context context, long minSize) {
+ try {
+ File path = Environment.getExternalStorageDirectory();
+ StatFs stat = new StatFs(path.toString());
+ long blocksize = stat.getBlockSizeLong();
+ long availbleblocks = stat.getAvailableBlocksLong();
+ long avilableSize = availbleblocks * blocksize;
+ return avilableSize >= minSize;
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+
+
+ /**
+ * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
+ * @param context 上下文
+ * @param pxValue px值
+ * @return dp值
+ */
+ public static int px2dip(Context context, float pxValue) {
+ final float scale = context.getResources().getDisplayMetrics().density;
+ return (int) (pxValue / scale + 0.5f);
+ }
+
+ /**
+ * 获取当前的屏幕尺寸
+ *
+ * @param context {@link Context}
+ * @return 屏幕尺寸
+ */
+ public static int[] getScreenSize(Context context) {
+ int[] size = new int[2];
+
+ WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ Display d = w.getDefaultDisplay();
+ DisplayMetrics metrics = new DisplayMetrics();
+ d.getMetrics(metrics);
+
+ size[0] = metrics.widthPixels;
+ size[1] = metrics.heightPixels;
+ return size;
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/GetAndroidUniqueMark.java b/trustlend/src/main/java/com/dskj/trustlend/utils/GetAndroidUniqueMark.java
new file mode 100644
index 0000000..73e8e26
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/GetAndroidUniqueMark.java
@@ -0,0 +1,54 @@
+package com.dskj.trustlend.utils;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Build;
+import android.provider.Settings;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 设备码的一些东西
+ * @author
+ */
+
+public class GetAndroidUniqueMark {
+
+ public static String getUniqueId(Context context) {
+ @SuppressLint("HardwareIds")
+ // ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置。
+ String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
+ @SuppressLint("HardwareIds")
+ String id = androidID + Build.SERIAL; // +硬件序列号
+ try {
+ return toMD5(id);
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return id;
+ }
+ }
+
+ public static String toMD5(String text) throws NoSuchAlgorithmException {
+ //获取摘要器 MessageDigest
+ MessageDigest messageDigest = MessageDigest.getInstance("MD5");
+ //通过摘要器对字符串的二进制字节数组进行hash计算
+ byte[] digest = messageDigest.digest(text.getBytes());
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < digest.length; i++) {
+ //循环每个字符 将计算结果转化为正整数;
+ int digestInt = digest[i] & 0xff;
+ //将10进制转化为较短的16进制
+ String hexString = Integer.toHexString(digestInt);
+ //转化结果如果是个位数会省略0,因此判断并补0
+ if (hexString.length() < 2) {
+ sb.append(0);
+ }
+ //将循环结果添加到缓冲区
+ sb.append(hexString);
+ }
+ //返回整个结果
+ return sb.toString().substring(8, 24);
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/GsonUtils.java b/trustlend/src/main/java/com/dskj/trustlend/utils/GsonUtils.java
new file mode 100644
index 0000000..79f38ac
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/GsonUtils.java
@@ -0,0 +1,90 @@
+package com.dskj.trustlend.utils;
+
+import android.text.TextUtils;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * json解析工具类 其实对于数组解析有一些问题
+ * @author xuhuixiang
+ */
+public class GsonUtils {
+
+ public static Gson gson = new Gson();
+
+ /**
+ * 返回List对象
+ * @param str
+ * @param type new TypeToken>(){}.getType()
+ * @param
+ * @return
+ */
+ public static T getListFromJSON(String str, Type type) {
+ if (!TextUtils.isEmpty(str)) {
+ return gson.fromJson(str, type);
+ }
+ return null;
+ }
+
+ /**
+ * 返回List对象
+ * @param str
+ * @param cls
+ * @param
+ * @return
+ */
+ public static List getListFromJSON(String str, Class cls)
+ {
+ Type type = new TypeToken>()
+ {}.getType();
+ ArrayList jsonObjects = gson.fromJson(str, type);
+ ArrayList arrayList = new ArrayList<>();
+ for (JsonObject jsonObject : jsonObjects)
+ {
+ arrayList.add(gson.fromJson(jsonObject, cls));
+ }
+ return arrayList;
+ }
+
+ /**
+ * 返回对象
+ * @param str
+ * @param cls
+ * @param
+ * @return
+ */
+ public static T getObjFromJSON(String str, Class cls) {
+// try {
+ if (!TextUtils.isEmpty(str)) {
+ return gson.fromJson(str, cls);
+ }
+ return null;
+// }catch (Exception e) {
+// return null;
+// }
+ }
+
+ /**
+ * 返回JsonString
+ * @return
+ */
+ public static String beanToJSONString(Object bean) {
+ return new Gson().toJson(bean);
+ }
+
+
+ public static String JSONTokener(String in) {
+ // consume an optional byte order mark (BOM) if it exists
+ if (in != null && in.startsWith("\ufeff")) {
+ in = in.substring(1);
+ }
+ return in;
+ }
+
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/ImageLoader.java b/trustlend/src/main/java/com/dskj/trustlend/utils/ImageLoader.java
new file mode 100644
index 0000000..f20dd88
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/ImageLoader.java
@@ -0,0 +1,40 @@
+package com.dskj.trustlend.utils;
+
+/**
+ * **********************
+ *
+ * @Author bug machine
+ * 创建时间: 2025/5/20 17:32
+ * 用途
+ * **********************
+ */
+import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
+
+import android.content.Context;
+import android.widget.ImageView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.annotation.GlideModule;
+import com.bumptech.glide.module.AppGlideModule;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.RequestOptions;
+import com.dskj.trustlend.model.AdBean;
+
+/**
+ * Created by Meiji on 2017/5/31.
+ */
+@GlideModule
+public class ImageLoader extends AppGlideModule {
+
+ /**
+ * 带加载异常图片
+ */
+ public static void loadCenterCropBanner(Context context, AdBean url, ImageView view, int defaultResId, int errorResId) {
+
+ Glide.with(context).load(url.getImgUrl()).placeholder(defaultResId).error(errorResId).into(view);
+
+ }
+
+}
+
+
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/LogUtils.java b/trustlend/src/main/java/com/dskj/trustlend/utils/LogUtils.java
new file mode 100644
index 0000000..d9550f6
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/LogUtils.java
@@ -0,0 +1,145 @@
+package com.dskj.trustlend.utils;
+
+import android.util.Log;
+
+
+/**
+ * Log统一管理类
+ * Created by xuhuixiang on 2015/10/19 0019.
+ */
+public class LogUtils {
+
+ private LogUtils() {
+ throw new UnsupportedOperationException("cannot be instantiated");
+ }
+
+// public static boolean isDebug = ApiService.isDebug;// 是否需要打印bug,可以在application的onCreate函数里面初始化
+ public static boolean isDebug = true;// 是否需要打印bug,可以在application的onCreate函数里面初始化
+
+ private static final String TAG = "BIKAOVIDEO";
+
+ /**
+ * 默认tag的函数
+ *
+ * @param msg 打印信息
+ */
+ public static void v(String msg) {
+ if (isDebug) Log.v(TAG, msg);
+ }
+
+ public static void d(String msg) {
+ if (isDebug) Log.d(TAG, msg);
+ }
+
+ public static void i(String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.i(TAG, "BIKAOVIDEOsb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.i(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.i(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.i(TAG, "BIKAOVIDEO" + msg.toString());
+ }
+ }
+ }
+
+ public static void w(String msg) {
+ if (isDebug) Log.w(TAG, msg);
+ }
+
+ public static void e(String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.e(TAG, "sb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.e(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.e(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.e(TAG, "XHX" + msg.toString());
+ }
+
+ }
+
+ }
+
+ /**
+ * 自定义lag的函数
+ *
+ * @param tag tag
+ * @param msg 打印信息
+ */
+ public static void v(String tag, String msg) {
+ if (isDebug) Log.v(tag, msg);
+ }
+
+ public static void d(String tag, String msg) {
+ if (isDebug) Log.d(tag, msg);
+ }
+
+ public static void i(String tag, String msg) {
+ if (isDebug) {
+ if (msg.length() > 4000) {
+ Log.i(TAG, "sb.length = " + msg.length());
+ int chunkCount = msg.length() / 4000; // integer division
+ for (int i = 0; i <= chunkCount; i++) {
+ int max = 4000 * (i + 1);
+ if (max >= msg.length()) {
+ Log.i(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i));
+ } else {
+ Log.i(TAG, "XHXchunk " + i + " of " + chunkCount + ":" + msg.substring(4000 * i, max));
+ }
+ }
+ } else {
+ Log.i(TAG, "XHX" + msg.toString());
+ }
+ }
+ }
+
+ public static void w(String tag, String msg) {
+ if (isDebug) Log.w(tag, msg);
+ }
+
+ public static void e(String tag, String msg) {
+ if (isDebug) Log.e(tag, msg);
+ }
+
+ /**
+ * 自定义lag的函数
+ *
+ * @param clazz 类
+ * @param msg 打印信息
+ */
+ public static void v(Class> clazz, String msg) {
+ if (isDebug) Log.v(clazz.getSimpleName(), msg);
+ }
+
+ public static void d(Class> clazz, String msg) {
+ if (isDebug) Log.d(clazz.getSimpleName(), msg);
+ }
+
+ public static void i(Class> clazz, String msg) {
+ if (isDebug) Log.i(clazz.getSimpleName(), msg);
+ }
+
+ public static void w(Class> clazz, String msg) {
+ if (isDebug) Log.w(clazz.getSimpleName(), msg);
+ }
+
+ public static void e(Class> clazz, String msg) {
+ if (isDebug) Log.e(clazz.getSimpleName(), msg);
+ }
+
+}
\ No newline at end of file
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/NetUtil.java b/trustlend/src/main/java/com/dskj/trustlend/utils/NetUtil.java
new file mode 100644
index 0000000..af8540a
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/NetUtil.java
@@ -0,0 +1,115 @@
+package com.dskj.trustlend.utils;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.util.Log;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.Map;
+
+public class NetUtil {
+
+ private NetUtil() {
+ }
+
+ public static boolean isNetworkConnected() {
+ if (AppContextUtil.getInstance() != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) AppContextUtil.getInstance()
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ @SuppressLint("MissingPermission") NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
+ if (mNetworkInfo != null) {
+ return mNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+ public static boolean isWifiConnected() {
+ if (AppContextUtil.getInstance() != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) AppContextUtil.getInstance()
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ @SuppressLint("MissingPermission") NetworkInfo mWiFiNetworkInfo = mConnectivityManager
+ .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+ if (mWiFiNetworkInfo != null) {
+ return mWiFiNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+ public static boolean isMobileConnected() {
+ if (AppContextUtil.getInstance() != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) AppContextUtil.getInstance()
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ @SuppressLint("MissingPermission") NetworkInfo mMobileNetworkInfo = mConnectivityManager
+ .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+ if (mMobileNetworkInfo != null) {
+ return mMobileNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+ public static int getConnectedType() {
+ if (AppContextUtil.getInstance() != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) AppContextUtil.getInstance()
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ @SuppressLint("MissingPermission") NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
+ if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
+ return mNetworkInfo.getType();
+ }
+ }
+ return -1;
+ }
+
+ public static String getRequestSign(Map map) {
+ String sb = "";
+ String[] key = new String[map.size()];
+ int index = 0;
+ for (String k : map.keySet()) {
+ key[index] = k;
+ index++;
+ }
+ Arrays.sort(key);
+ for (String s : key) {
+ sb += s + "-" + map.get(s) + "|";
+ }
+ Log.e("-main-", sb.toString());
+ System.out.println("接口参数:"+ sb);
+ Log.i("XHXDEBUG","XHXDEBUG走了前缀MD5");
+ return md5("d43f467088e5e43ef7f80816c065705e" + sb);
+ }
+
+
+ public static String getRequestSign(String rand_str) {
+ String sb = "app_id=38923465&app_secret=EAXUfHJZKzWbwWPINQTXELYdhVBQRkVm&device_id="+rand_str;
+ LogUtils.i("签名数据0:"+sb);
+ return md5(sb);
+ }
+
+
+ public static String md5(String content) {
+ byte[] hash;
+ try {
+ hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException("NoSuchAlgorithmException", e);
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException("UnsupportedEncodingException", e);
+ }
+
+ StringBuilder hex = new StringBuilder(hash.length * 2);
+ for (byte b : hash) {
+ if ((b & 0xFF) < 0x10) {
+ hex.append("0");
+ }
+ hex.append(Integer.toHexString(b & 0xFF));
+ }
+ return hex.toString();
+ }
+}
diff --git a/trustlend/src/main/java/com/dskj/trustlend/utils/RxBus.java b/trustlend/src/main/java/com/dskj/trustlend/utils/RxBus.java
new file mode 100644
index 0000000..cf6785f
--- /dev/null
+++ b/trustlend/src/main/java/com/dskj/trustlend/utils/RxBus.java
@@ -0,0 +1,53 @@
+package com.dskj.trustlend.utils;
+
+import rx.Observable;
+import rx.subjects.PublishSubject;
+import rx.subjects.SerializedSubject;
+import rx.subjects.Subject;
+
+public class RxBus {
+
+ private static volatile RxBus instance;
+
+ private final Subject