小奶奶花生米
2026-07-21 2fbefb3208187f2fcd264f45f7f7eeb2b3a06546
feat: add withdrawal flow and optimize related functions

1. add bank selection, withdraw result, apply withdraw and wallet pages
2. add color resource and background drawable
3. update app version to 1.0.1
4. optimize bank info bean and close record bean
5. fix null check issues in select bank activity
6. remove unused isCould variable and related logic
7. add car color options
8. update api base url for test environment
9. optimize mine page account security entry
14个文件已添加
20个文件已修改
5783 ■■■■■ 已修改文件
app/build.gradle 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/assets/banks.json 4010 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/base/MyApplication.kt 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/bean/BankName.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/bean/CloseRecordBean.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfo.kt 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfoBean.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/extension/ContextExtension.kt 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/netUtls/Api.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/MainTabActivity.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/adapter/CloseRecordAdapter.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/main/MainPubFragment.kt 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/AddCarActivity.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/MineActivity.kt 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/SelectBankActivity.kt 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/AllIncomeDetailActivity.kt 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/ApplyWithdrawActivity.kt 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineAwardActivity.kt 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineWalletActivity.kt 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SelectWithdrawBankActivity.kt 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SetWithdrawAccountActivity.kt 329 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/WithdrawResultActivity.kt 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/shape_fd943a_bg_4.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_all_detail_income.xml 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_apply_withdraw.xml 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_mine.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_mine_wallet.xml 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_select_withdraw_bank.xml 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_set_withdraw_account.xml 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_withdraw_result.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_close_record.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap-xxhdpi/icon_upload_bank_photo.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/colors.xml 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle
@@ -25,8 +25,8 @@
        applicationId "com.fangxinxing.xxfxx"
        minSdkVersion 24
        targetSdkVersion 29
        versionCode 1
        versionName "1.0.0"
        versionCode 2
        versionName "1.0.1"
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk {
app/src/main/AndroidManifest.xml
@@ -69,6 +69,21 @@
        tools:remove="android:dataExtractionRules"
        tools:replace="android:allowBackup,android:theme">
        <activity
            android:name=".ui.mine.money_bag.SelectWithdrawBankActivity"
            android:exported="false" />
        <activity
            android:name=".ui.mine.money_bag.WithdrawResultActivity"
            android:exported="false" />
        <activity
            android:name=".ui.mine.money_bag.SetWithdrawAccountActivity"
            android:exported="false" />
        <activity
            android:name=".ui.mine.money_bag.ApplyWithdrawActivity"
            android:exported="false" />
        <activity
            android:name=".ui.mine.money_bag.MineWalletActivity"
            android:exported="false" />
        <activity
            android:name=".ui.main.SearchAddressActivity"
            android:exported="false" />
        <activity
app/src/main/assets/banks.json
New file
Diff too large
app/src/main/java/com/fangxinxing/xxfxx/base/MyApplication.kt
@@ -468,7 +468,6 @@
        protected var mTtsManager: TTSController? = null
        public var isLogin: Boolean = true
        public var isPlayVoice: Boolean = true
        var isCould: Boolean = false
        public var appContext: MyApplication? = null
        fun getInstance(): MyApplication {
app/src/main/java/com/fangxinxing/xxfxx/bean/BankName.kt
@@ -1,12 +1,18 @@
package com.fangxinxing.xxfxx.bean
import android.os.Parcelable
import com.github.promeg.pinyinhelper.Pinyin
import kotlinx.android.parcel.Parcelize
@Parcelize
data class BankName(
    val bankCode: String,
    val bankName: String,
    val drecCode: String,
    val id: Int
){
    fun getInitial():String = if (bankName.startsWith("(")) "#" else if (bankName.startsWith("重庆")) "C" else Pinyin.toPinyin(bankName[0])[0].toString()
    val bankCode: String? = null,
    val bankName: String? = null,
    val drecCode: String? = null,
    val id: Int? = null
) : Parcelable {
    fun getInitial(): String =
        if (bankName?.startsWith("(") == true) "#" else if (bankName?.startsWith("重庆") == true) "C" else Pinyin.toPinyin(
            bankName?.get(0) ?: 'A'
        )[0].toString()
}
app/src/main/java/com/fangxinxing/xxfxx/bean/CloseRecordBean.java
@@ -53,7 +53,7 @@
        private double money;
        private String name;
        private String remark;
        private int state;
        private int state;//提现状态(1=待处理,2=成功,3=失败)
        public int getId() {
            return id;
@@ -102,5 +102,32 @@
        public void setState(int state) {
            this.state = state;
        }
        //是否在提现审核中
        public boolean hadInWithdrawAudit() {
            return state == 1;
        }
        //是否提现审核成功
        public boolean hadWithdrawSuccess() {
            return state == 2;
        }
        //是否提现审核失败
        public boolean hadWithdrawFail() {
            return state == 3;
        }
        //获取显示提现审核状态
        public String getShowWithdrawAuditStatus() {
            switch (state) {
                case 1:
                    return "待审核";
                case 3:
                    return "未通过";
                default:
                    return "";
            }
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfo.kt
@@ -4,34 +4,68 @@
import kotlinx.android.parcel.Parcelize
@Parcelize
data class LastWithdrawInfo(
    val bankName: String? = null,//银行名称
    val code: String? = null,//银行卡号
    var money: String? = null,//提现金额
    val name: String? = null,//银行卡持有人姓名
    val smsCode: String? = null,//验证码
    val type: String? = null,//提现类型(1=活动收入提现,2=业务收入提现)
    val state: String? = null,//提现状态(1=待处理,2=成功,3=失败)
    val remark: String? = null,//备注
    var userWithdrawal: UserBankInfo? = null,
) : Parcelable {
    //是否请求提现过
    fun hadRequestWithdrawHistory(): Boolean {
        return userWithdrawal != null
    }
    //是否在提现审核中
    fun hadInWithdrawAudit(): Boolean {
        return state == "1"
    }
    //是否提现审核成功
    fun hadWithdrawSuccess(): Boolean {
        return state == "2"
    }
    //是否提现审核失败
    fun hadWithdrawFail(): Boolean {
        return state == "3"
    }
}
@Parcelize
data class UserBankInfo(
    val applicationStatus: String? = "",
    val balanceAcctId: String?,
    val bankBranchCode: String?,
    val bankCardCode: String?,
    val bankCode: String?,
    val bankName: String?,
    val bindAcctName: String?,
    val certificateCode: String?,
    val certificateExpireTime: String?,
    val certificateName: String?,
    val createTime: String?,
    val cusApplicationId: String?,
    val cusId: String?,
    val failureMsgsReason: String?,
    val id: String?,
    val idCardFrontPicture: String?,
    val idCardReversePicture: String?,
    val imgUrl: String?,
    val imgUrlOne: String?,
    val licenceIssuingAuthority: String?,
    val openAccountName: String?,
    val outRequestNo: String?,
    val phone: String?,
    val relAcctNo: String?,
    val settleAcctId: String?,
    val status: Boolean,
    val succeededAt: String?,
    val transactionAuthorizationCode: String?,
    val userId: String?
):Parcelable
    val applicationStatus: String? = "",//进件状态
    val balanceAcctId: String? = null,//电子账簿 ID
    val bankBranchCode: String? = null,//开户银行联行号
    val bankCardCode: String? = null,//银行卡号
    val bankCardUrl: String? = null,//银行卡图片
    val bankCode: String? = null,//开户银行编码
    val bankName: String? = null,//银行名称(选择银行)
    val bindAcctName: String? = null,//银行生成的户名
    val certificateCode: String? = null,//证件号码
    val certificateExpireTime: String? = null,//证件有效期
    val certificateName: String? = null,//证件姓名
    val createTime: String? = null,//创建时间
    val cusApplicationId: String? = null,//系统订单号
    val cusId: String? = null,//个人用户id
    val failureMsgsReason: String? = null,//申请失败原因
    val id: String? = null,
    val idCardFrontPicture: String? = null,//法人身份证照片正面
    val idCardReversePicture: String? = null,//法人身份证照片反面
    val imgUrl: String? = null,//正面身份证url
    val imgUrlOne: String? = null,//反面身份证url
    val licenceIssuingAuthority: String? = null,//发证机关
    val openAccountName: String? = null,//开户名称
    val outRequestNo: String? = null,//平台订单号
    val phone: String? = null,//手机号
    val relAcctNo: String? = null,//电子账簿账簿号
    val settleAcctId: String? = null,//绑定账户 ID
    val status: Boolean? = null,//状态
    val succeededAt: String? = null,//申请通过时间
    val transactionAuthorizationCode: String? = null,//交易授权码
    val userId: String? = null//用户-司机-ID
) : Parcelable
app/src/main/java/com/fangxinxing/xxfxx/bean/UserBankInfoBean.java
@@ -3,7 +3,7 @@
public class UserBankInfoBean {
    private int code;
    private String msg;
    private UserBankInfo data;
    private LastWithdrawInfo data;
    public int getCode() {
        return code;
@@ -21,11 +21,12 @@
        this.msg = msg;
    }
    public UserBankInfo getData() {
    public LastWithdrawInfo getData() {
        return data;
    }
    public void setData(UserBankInfo data) {
    public void setData(LastWithdrawInfo data) {
        this.data = data;
    }
}
app/src/main/java/com/fangxinxing/xxfxx/extension/ContextExtension.kt
New file
@@ -0,0 +1,59 @@
package com.fangxinxing.xxfxx.extension
import android.content.Context
import java.io.BufferedReader
import java.io.File
import java.io.IOException
import java.io.InputStreamReader
//扩展函数 读取Assets文件 耗时操作
fun Context.extReadAssetsFile(fileName: String): String? {
    try {
        resources.assets.open(fileName).use { inputStream ->
            InputStreamReader(inputStream).use { inputReader ->
                BufferedReader(inputReader).use { bufReader ->
                    var line: String? = null
                    return StringBuilder().apply {
                        while ((bufReader.readLine().also { line = it }) != null) {
                            append(line)
                        }
                    }.toString()
                }
            }
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
    return null
}
//扩展函数 获取沙盒保存文件夹
fun Context.extGetSaveFileDir(subDir: String? = null): File {
    return getExternalFilesDir("")?.takeIf {
        it.exists() && it.canRead() && it.canWrite()
    }?.let {
        if (!subDir.isNullOrEmpty()) {
            val file = File(it, subDir)
            try {
                file.mkdirs()
            } catch (e: Exception) {
                e.printStackTrace()
            }
            file
        } else {
            it
        }
    } ?: filesDir.let {
        if (!subDir.isNullOrEmpty()) {
            val file = File(it, subDir)
            try {
                file.mkdirs()
            } catch (e: Exception) {
                e.printStackTrace()
            }
            file
        } else {
            it
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/netUtls/Api.java
@@ -10,8 +10,8 @@
public class Api {
    private static final boolean IS_TEST = false;
    //内网可外部访问
    public static final String BASE_URL = IS_TEST ? "http://221.182.45.100:7894/driver/" : "https://ride.cbyzx.com/driver/";
    public static final String SOCKET_SERVER = IS_TEST ? "221.182.45.100" : "115.159.101.223";
    public static final String BASE_URL = IS_TEST ? "http://192.168.110.111:5000/driver/" : "https://ride.cbyzx.com/driver/";
    public static final String SOCKET_SERVER = IS_TEST ? "192.168.110.111" : "115.159.101.223";
    public static final int SOCKET_PORT = 9999;
    public static final String strShare = IS_TEST ? "http://221.182.45.100:8443/share/shareIndex.html" : "https://ride.cbyzx.com/share/shareIndex.html";
@@ -106,6 +106,7 @@
    public static String queryNewData = "api/version/queryNewData"; //api/version/queryNewData 获取最新版本数据
    public static String updatePhone = "api/driver/updatePhone"; //api/driver/updatePhone 修改手机号码
    public static String updatePassword = "api/driver/updatePassword"; //api/driver/updatePassword 修改密码
    public static String queryLastWithdrawal = "api/withdrawal/queryLastWithdrawal"; //api/withdrawal/queryLastWithdrawal 查询上一次提现参数
    public static String withdrawal = "api/withdrawal/withdrawal"; //api/withdrawal/withdrawal 账户余额提现
    public static String queryActivityIncome = "api/driver/queryActivityIncome"; //api/driver/queryActivityIncome 获取收益明细 (我的奖励)
    public static String queryWithdrawal = "api/withdrawal/queryWithdrawal"; //api/withdrawal/queryWithdrawal 获取历史提现数据
app/src/main/java/com/fangxinxing/xxfxx/ui/MainTabActivity.kt
@@ -55,12 +55,6 @@
//        callModule()
    }
    override fun onResume() {
        super.onResume()
        callCould()
    }
    private fun callMine() {
        var map = getMapByAny()
        callNet(false, Api.queryInfo, map) {
@@ -79,18 +73,6 @@
            }
        }
    }
    private fun callCould() {
        var map = getMapByAny()
        callNet(
            false,
            Api.isElectronicLede, map
        ) {
            MyApplication.isCould = gson.fromJson(it, StringBean::class.java).data != "yes"
        }
    }
    override fun setOnclick() {
        tv_main.clickDelay {
app/src/main/java/com/fangxinxing/xxfxx/ui/adapter/CloseRecordAdapter.kt
@@ -1,13 +1,17 @@
package com.fangxinxing.xxfxx.ui.adapter
import android.view.View
import androidx.core.view.isVisible
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.BaseRvAdapter
import com.fangxinxing.xxfxx.base.BaseViewHolder
import com.fangxinxing.xxfxx.bean.CloseRecordBean
import kotlinx.android.synthetic.main.item_close_record.view.*
import com.fangxinxing.xxfxx.extension.extColorIdToValue
import kotlinx.android.synthetic.main.item_close_record.view.tv_money
import kotlinx.android.synthetic.main.item_close_record.view.tv_status
import kotlinx.android.synthetic.main.item_close_record.view.tv_time
class CloseRecordAdapter: BaseRvAdapter<CloseRecordBean.DataBean>() {
class CloseRecordAdapter : BaseRvAdapter<CloseRecordBean.DataBean>() {
    override fun getLayoutResId(viewType: Int): Int {
        return R.layout.item_close_record
@@ -16,9 +20,14 @@
    override fun onBindItem(holder: BaseViewHolder?, view: View?, item: CloseRecordBean.DataBean?) {
        holder?.let {
            it.itemView.tv_time.text = item!!.insertTime
            it.itemView.tv_money.text = "¥"+item!!.money.toString()
            it.itemView.tv_money.text = "¥" + item!!.money.toString()
            it.itemView.tv_status.isVisible = !item!!.hadWithdrawSuccess()
            it.itemView.tv_status.text = item!!.showWithdrawAuditStatus
            it.itemView.tv_status.setTextColor(
                (if (item.hadInWithdrawAudit()) R.color.color_fd943a else R.color.main_yellow_shen).extColorIdToValue(
                    it.itemView.context
                )
            )
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/main/MainPubFragment.kt
@@ -585,17 +585,14 @@
                }
            } else {
                if (requireActivity().checkPermissions("出车")) {
                    if (!MyApplication.isCould)
                        toast("请先填写个人进件")
                    else
                        callNet(Api.queryMyBusiness, getMapByAny()) {
                            var bean = gson.fromJson(it, SelectServerModeBean::class.java).data
                            if (bean.isEmpty()) {
                                toast("请前往个人中心--接单设置进行设置")
                                return@callNet
                            }
                            requireActivity().startActivity<SelectServerModeActivity>()
                    callNet(Api.queryMyBusiness, getMapByAny()) {
                        var bean = gson.fromJson(it, SelectServerModeBean::class.java).data
                        if (bean.isEmpty()) {
                            toast("请前往个人中心--接单设置进行设置")
                            return@callNet
                        }
                        requireActivity().startActivity<SelectServerModeActivity>()
                    }
                }
            }
        }
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/AddCarActivity.kt
@@ -24,7 +24,7 @@
import kotlin.collections.ArrayList
class AddCarActivity : BasePhotoActivity() {
    var arrayColor = arrayListOf("黑色", "银色", "白色", "红色", "黄色", "橙色", "蓝色")
    var arrayColor = arrayListOf("黑色", "银色", "白色", "红色", "黄色", "橙色", "蓝色", "紫色", "紫银色")
    var arrayNumStart = arrayListOf("冀","蒙","吉","沪","皖","鲁","鄂","桂","渝","藏","甘","新","晋"
        ,"辽","黑", "苏", "浙", "闽", "赣", "豫", "湘", "粤", "琼", "川", "黔", "滇", "陕", "青", "宁")
    var letter = arrayListOf("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/MineActivity.kt
@@ -19,7 +19,6 @@
import com.fangxinxing.xxfxx.bean.MerchantInfo
import com.fangxinxing.xxfxx.bean.ModuleBean
import com.fangxinxing.xxfxx.bean.ShareBean
import com.fangxinxing.xxfxx.bean.StringBean
import com.fangxinxing.xxfxx.bean.UserBean
import com.fangxinxing.xxfxx.bean.UserInfoBean
import com.fangxinxing.xxfxx.netUtls.Api
@@ -29,6 +28,8 @@
import com.fangxinxing.xxfxx.netUtls.getMapByAny
import com.fangxinxing.xxfxx.ui.DialogUtil
import com.fangxinxing.xxfxx.ui.main.HistoryOrderActivity
import com.fangxinxing.xxfxx.ui.mine.money_bag.MineIncomeActivity
import com.fangxinxing.xxfxx.ui.mine.money_bag.MineWalletActivity
import com.fangxinxing.xxfxx.ui.mine.setting.SettingActivity
import com.fangxinxing.xxfxx.ui.pub.BecomeDriverActivity
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
@@ -44,7 +45,6 @@
import com.umeng.socialize.bean.SHARE_MEDIA
import com.umeng.socialize.media.UMImage
import com.umeng.socialize.media.UMWeb
import com.zlzf.zl_payaccount.ZlSdkInto
import kotlinx.android.synthetic.main.activity_mine.iv_head
import kotlinx.android.synthetic.main.activity_mine.ll_income_order
import kotlinx.android.synthetic.main.activity_mine.ll_mine_money
@@ -228,19 +228,7 @@
        }
        //账户安全
        rl_acount_safe.setOnClickListener {
            var map = getMapByAny()
            map["ip"] = getDeviceIPAddress()
            map["mac"] = getAndroidID()
            map["type"] = "04"
            callNet(Api.getZLToken, map) {
                val bean = gson.fromJson<StringBean>(it, StringBean::class.java)
                ZlSdkInto.getInstance().goTActivity(requireContext(), bean.data)
                ZlSdkInto.getInstance().setCallback {
                    it.entries.forEach { _it ->
                        Log.e("ZlNoty", "$_it:=======>${it[_it]}")
                    }
                }
            }
            requireActivity().startActivity<MineWalletActivity>()
        }
        //意见反馈
        rl_remark.setOnClickListener {
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/SelectBankActivity.kt
@@ -51,7 +51,7 @@
                if (s.isNullOrEmpty()){
                    showList.addAll(allList)
                }else{
                    showList.addAll(allList.filter { it.bankName.contains(s.toString()) })
                    showList.addAll(allList.filter { it.bankName?.contains(s.toString())==true })
                }
                adapter.notifyDataSetChanged()
            }
@@ -80,7 +80,7 @@
                showList.clear()
                if (it.isNotEmpty()) {
                    index.forEach { index->
                        it.filter { it.bankName.isNotEmpty() }.forEach {
                        it.filter { !it.bankName.isNullOrEmpty() }.forEach {
                            if (index == it.getInitial()){
                                allList.add(it)
                            }
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/AllIncomeDetailActivity.kt
@@ -1,20 +1,21 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyApplication
import com.fangxinxing.xxfxx.utils.clickDelay
import com.fangxinxing.xxfxx.utils.getFormatTwo
import com.fangxinxing.xxfxx.utils.toast
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.bean.UserBean
import com.fangxinxing.xxfxx.netUtls.Api
import com.fangxinxing.xxfxx.netUtls.callNet
import com.fangxinxing.xxfxx.netUtls.getMapByAny
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
import kotlinx.android.synthetic.main.activity_all_detail_income.*
import com.fangxinxing.xxfxx.utils.clickDelay
import com.fangxinxing.xxfxx.utils.getFormatTwo
import kotlinx.android.synthetic.main.activity_all_detail_income.tv_left_title_income
import kotlinx.android.synthetic.main.activity_all_detail_income.tv_money
import kotlinx.android.synthetic.main.activity_all_detail_income.tv_right_commit
import kotlinx.android.synthetic.main.activity_all_detail_income.tv_tixian
import org.jetbrains.anko.startActivity
class AllIncomeDetailActivity: MyBaseActivity() {
class AllIncomeDetailActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_all_detail_income)
    }
@@ -22,7 +23,7 @@
    override fun initView() {
        showTitle(false)
        showHeader(false)
        addFragment(AllIncomeDetailFragment(),R.id.fl_container)
        addFragment(AllIncomeDetailFragment(), R.id.fl_container)
    }
    override fun onResume() {
@@ -31,17 +32,16 @@
    }
    private fun callMine() {
        var map = getMapByAny()
        callNet(Api.queryInfo,map){
            var user = gson.fromJson<UserBean>(it, UserBean::class.java)
        val map = getMapByAny()
        callNet(Api.queryInfo, map) {
            val user = gson.fromJson<UserBean>(it, UserBean::class.java)
            CacheKey.saveUserInfo(user.data)
            showUI()
        }
    }
    private fun showUI() {
        tv_money.text = "¥"+ getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)
        tv_all_money.text = "历史总收益:¥"+ getFormatTwo(CacheKey.getUserInfo().businessMoney)
        tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().businessMoney)
    }
    override fun setOnclick() {
@@ -50,15 +50,11 @@
        }
        tv_tixian.clickDelay {
            if (!MyApplication.isCould)
                toast("请先填写个人进件")
            else
                startActivity<ApplyMoneyActivity>("type" to "2")
            startActivity<ApplyWithdrawActivity>()
        }
        tv_right_commit.clickDelay {
            startActivity<IncomeCommitDetailActivity>()
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/ApplyWithdrawActivity.kt
New file
@@ -0,0 +1,90 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import android.text.InputFilter
import android.text.Spanned
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.bean.LastWithdrawInfo
import com.fangxinxing.xxfxx.bean.UserBankInfoBean
import com.fangxinxing.xxfxx.bean.UserBean
import com.fangxinxing.xxfxx.netUtls.Api
import com.fangxinxing.xxfxx.netUtls.callNet
import com.fangxinxing.xxfxx.netUtls.getMapByAny
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
import com.fangxinxing.xxfxx.utils.clickDelay
import com.fangxinxing.xxfxx.utils.getContent
import com.fangxinxing.xxfxx.utils.getFormatTwo
import kotlinx.android.synthetic.main.activity_apply_withdraw.et_money
import kotlinx.android.synthetic.main.activity_apply_withdraw.tv_withdraw
import org.jetbrains.anko.toast
//申请提现页面
class ApplyWithdrawActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_apply_withdraw)
    }
    override fun initView() {
        setTitleText("申请提现")
        et_money.hint = "${getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)}元可提现"
        et_money.filters = arrayOf<InputFilter>(object : InputFilter {
            override fun filter(
                source: CharSequence,
                start: Int,
                end: Int,
                dest: Spanned,
                dstart: Int,
                dend: Int
            ): CharSequence? {
                if (source == "." && dest.toString().isEmpty()) {
                    return "0."
                }
                if (dest.toString().contains(".")) {
                    val index: Int = dest.toString().indexOf(".")
                    val length: Int = dest.toString().substring(index).length
                    if (length == 3) {
                        return ""
                    }
                }
                return null
            }
        })
        callMine()
    }
    private fun callMine() {
        val map = getMapByAny()
        callNet(Api.queryInfo, map) {
            val user = gson.fromJson<UserBean>(it, UserBean::class.java)
            CacheKey.saveUserInfo(user.data)
            et_money.hint = "${getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)}元可提现"
        }
    }
    override fun setOnclick() {
        tv_withdraw.clickDelay {
            if (et_money.getContent().isEmpty()) {
                toast("请输入提现金额")
                return@clickDelay
            }
            val money = et_money.getContent().toDoubleOrNull() ?: 0.0
            if (money <= 0) {
                toast("提现金额必须大于0")
                return@clickDelay
            }
            val map = getMapByAny()
            callNet(Api.queryLastWithdrawal, map) {
                val userBankInfoBean =
                    gson.fromJson<UserBankInfoBean>(it, UserBankInfoBean::class.java)
                userBankInfoBean.apply {
                    data = (data ?: LastWithdrawInfo()).apply {
                        this.money = money.toString()
                    }
                }
                startActivity(SetWithdrawAccountActivity.getIntent(this, userBankInfoBean.data))
                finish()
            }
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineAwardActivity.kt
@@ -1,16 +1,18 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import com.fangxinxing.xxfxx.utils.getFormatTwo
import com.fangxinxing.xxfxx.utils.toast
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyApplication
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
import kotlinx.android.synthetic.main.activity_mine_award.*
import com.fangxinxing.xxfxx.utils.getFormatTwo
import kotlinx.android.synthetic.main.activity_mine_award.tv_detail
import kotlinx.android.synthetic.main.activity_mine_award.tv_left_title_award
import kotlinx.android.synthetic.main.activity_mine_award.tv_money
import kotlinx.android.synthetic.main.activity_mine_award.tv_record
import kotlinx.android.synthetic.main.activity_mine_award.tv_tixian
import org.jetbrains.anko.startActivity
//我的奖励
class MineAwardActivity : MyBaseActivity(){
class MineAwardActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_mine_award)
    }
@@ -23,7 +25,7 @@
    override fun onResume() {
        super.onResume()
        tv_money.text = "¥"+ getFormatTwo(CacheKey.getUserInfo().balance)
        tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().balance)
    }
    override fun setOnclick() {
@@ -38,10 +40,7 @@
            startActivity<CloseRecordActivity>()
        }
        tv_tixian.setOnClickListener {
            if (!MyApplication.isCould)
                toast("请先填写个人进件")
            else
                startActivity<ApplyMoneyActivity>("type" to "1")
            startActivity<ApplyMoneyActivity>("type" to "1")
        }
    }
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/MineWalletActivity.kt
New file
@@ -0,0 +1,81 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import androidx.core.view.isVisible
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.bean.UserBankInfoBean
import com.fangxinxing.xxfxx.bean.UserBean
import com.fangxinxing.xxfxx.netUtls.Api
import com.fangxinxing.xxfxx.netUtls.callNet
import com.fangxinxing.xxfxx.netUtls.getMapByAny
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
import com.fangxinxing.xxfxx.utils.clickDelay
import com.fangxinxing.xxfxx.utils.getFormatTwo
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_all_income_detail
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_back
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_del_money_detail
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_money
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_record
import kotlinx.android.synthetic.main.activity_mine_wallet.tv_withdraw
import org.jetbrains.anko.startActivity
//我的钱包页面
class MineWalletActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_mine_wallet)
    }
    override fun initView() {
        showTitle(false)
        showHeader(false)
    }
    override fun onResume() {
        super.onResume()
        callMine()
    }
    private fun callMine() {
        val map = getMapByAny()
        callNet(Api.queryInfo, map) {
            val user = gson.fromJson<UserBean>(it, UserBean::class.java)
            CacheKey.saveUserInfo(user.data)
            showUI()
        }
    }
    private fun showUI() {
        tv_money.text = "¥" + getFormatTwo(CacheKey.getUserInfo().laveBusinessMoney)
        tv_withdraw.isVisible = CacheKey.getUserInfo().laveBusinessMoney > 0
    }
    override fun setOnclick() {
        tv_back.clickDelay { finish() }
        //收入明细
        tv_all_income_detail.clickDelay {
            startActivity<AllIncomeDetailActivity>()
        }
        //提现记录
        tv_record.clickDelay {
            startActivity<IncomeCommitDetailActivity>()
        }
        //扣款明细
        tv_del_money_detail.clickDelay {
            startActivity<DelMoneyDetailActivity>()
        }
        //提现
        tv_withdraw.clickDelay {
            val map = getMapByAny()
            callNet(Api.queryLastWithdrawal, map) {
                val userBankInfoBean =
                    gson.fromJson<UserBankInfoBean>(it, UserBankInfoBean::class.java)
                if (userBankInfoBean.data?.hadInWithdrawAudit() == true) {
                    startActivity(WithdrawResultActivity::class.java)
                } else {
                    startActivity<ApplyWithdrawActivity>()
                }
            }
        }
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SelectWithdrawBankActivity.kt
New file
@@ -0,0 +1,107 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import android.app.Activity
import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import androidx.recyclerview.widget.LinearLayoutManager
import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayoutKt
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.bean.BankName
import com.fangxinxing.xxfxx.extension.extReadAssetsFile
import com.fangxinxing.xxfxx.ui.adapter.BankNameAdapter
import com.google.gson.reflect.TypeToken
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_select_bank.et_search
import kotlinx.android.synthetic.main.activity_select_bank.lv_bank
import kotlinx.android.synthetic.main.activity_select_bank.side_bar
import kotlinx.android.synthetic.main.activity_select_bank.tv_cancel
//选择提现银行页
class SelectWithdrawBankActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_select_withdraw_bank)
    }
    private val index = arrayListOf(
        "A", "B", "C", "D", "E", "F", "G", "H", "I",
        "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "#"
    )
    private val allList = arrayListOf<BankName>() //所有数据
    private val showList = arrayListOf<BankName>() //显示数据
    private val adapter = BankNameAdapter(showList)
    override fun initView() {
        setTitleText("选择银行")
        lv_bank.setLayoutManager(LinearLayoutManager(this))
        lv_bank.setMode(SwipeRefreshRecyclerLayoutKt.Mode.None)
        lv_bank.setAdapter(adapter)
        getBankList()
    }
    override fun setOnclick() {
        et_search.addTextChangedListener(object : TextWatcher {
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            }
            override fun afterTextChanged(s: Editable?) {
                showList.clear()
                if (s.isNullOrEmpty()) {
                    showList.addAll(allList)
                } else {
                    showList.addAll(allList.filter { it.bankName?.contains(s.toString())==true })
                }
                adapter.notifyDataSetChanged()
            }
        })
        side_bar.setOnSelectIndexItemListener { index ->
            (0 until showList.size).forEach {
                if (index == showList[it].getInitial()) {
                    val manager = lv_bank.mRecyclerView.layoutManager as LinearLayoutManager
                    manager.scrollToPositionWithOffset(it, 0)
                    return@setOnSelectIndexItemListener
                }
            }
        }
        tv_cancel.setOnClickListener {
            et_search.setText("")
        }
        adapter.setOnItemClickListener { _, position ->
            setResult(Activity.RESULT_OK, Intent().apply {
                putExtra("bank", showList[position])
            })
            finish()
        }
    }
    private fun getBankList() {
        val subscribe = io.reactivex.Observable.just("banks.json")
            .map { json -> extReadAssetsFile(json) }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ banks ->
                val list: List<BankName> =
                    gson.fromJson(banks, object : TypeToken<List<BankName>>() {}.type)
                showList.clear()
                if (list.isNotEmpty()) {
                    index.forEach { index ->
                        list.filter { !it.bankName.isNullOrEmpty() }.forEach {
                            if (index == it.getInitial()) {
                                allList.add(it)
                            }
                        }
                    }
                } else {
                    lv_bank.setLoadMoreText("暂无数据")
                }
                showList.addAll(allList)
                adapter.notifyDataSetChanged()
            }, { t -> t?.printStackTrace() })
        compositeSubscription.add(subscribe)
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/SetWithdrawAccountActivity.kt
New file
@@ -0,0 +1,329 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.os.CountDownTimer
import android.util.Log
import androidx.core.view.isVisible
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.SelectPhotoDialogKt
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.bean.BankName
import com.fangxinxing.xxfxx.bean.LastWithdrawInfo
import com.fangxinxing.xxfxx.extension.extGetSaveFileDir
import com.fangxinxing.xxfxx.extension.ifEmptyOrNull
import com.fangxinxing.xxfxx.netUtls.Api
import com.fangxinxing.xxfxx.netUtls.HttpManager
import com.fangxinxing.xxfxx.netUtls.MyUploadObserver
import com.fangxinxing.xxfxx.netUtls.callNet
import com.fangxinxing.xxfxx.netUtls.getMapByAny
import com.fangxinxing.xxfxx.utils.Cache.CacheKey
import com.fangxinxing.xxfxx.utils.clickDelay
import com.fangxinxing.xxfxx.utils.glide.GlideUtil
import com.fangxinxing.xxfxx.utils.isValidIdCard
import com.fangxinxing.xxfxx.utils.isValidPhone
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_bank_name
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_bank_num
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_code
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_id_card
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_name
import kotlinx.android.synthetic.main.activity_set_withdraw_account.et_phone
import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_back
import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_bank
import kotlinx.android.synthetic.main.activity_set_withdraw_account.iv_front
import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_action
import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_audit
import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_bank
import kotlinx.android.synthetic.main.activity_set_withdraw_account.tv_get_code
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.toast
import org.json.JSONObject
import top.zibin.luban.Luban
import top.zibin.luban.OnCompressListener
import java.io.File
import java.util.Locale
//设置提现账户页面
class SetWithdrawAccountActivity : MyBaseActivity() {
    private var frontImg = "" //正面身份证图片链接
    private var backImg = "" //背面图片链接
    private var bankImg = "" //银行卡图片链接
    private var bankCode = "" //银行编号
    private val timer by lazy {
        object : CountDownTimer(60000, 1000) {
            override fun onFinish() {
                tv_get_code.text = "获取验证码"
                tv_get_code.isEnabled = true
            }
            override fun onTick(millisUntilFinished: Long) {
                tv_get_code.text = "已发送${millisUntilFinished / 1000}s"
            }
        }
    }
    private val data: LastWithdrawInfo? by lazy {
        intent.getParcelableExtra("data")
    }
    companion object {
        fun getIntent(context: Context, info: LastWithdrawInfo? = null): Intent {
            return Intent(context, SetWithdrawAccountActivity::class.java).apply {
                putExtra("data", info)
            }
        }
    }
    override fun setContentView() {
        setContentView(R.layout.activity_set_withdraw_account)
    }
    override fun initView() {
        setTitleText("提现账户")
        data?.userWithdrawal?.also {
            et_name.setText(it.certificateName)
            et_name.isEnabled = false
            et_id_card.setText(it.certificateCode)
            et_id_card.isEnabled = false
            tv_bank.text = it.bankName
            bankCode = it.bankCode ?: ""
            et_bank_num.setText(it.bankCardCode)
            et_bank_name.setText(it.openAccountName)
            et_bank_name.isEnabled = false
            et_phone.setText(it.phone.ifEmptyOrNull { CacheKey.getUserInfo().phone })
            frontImg = it.idCardFrontPicture ?: ""
            GlideUtil.load(this, frontImg, iv_front, 0)
            backImg = it.idCardReversePicture ?: ""
            GlideUtil.load(this, backImg, iv_back, 0)
            bankImg = it.bankCardUrl ?: ""
            GlideUtil.load(this, bankImg, iv_bank, 0)
            tv_action.text = "重新提交"
        }
        tv_audit.isVisible = data?.hadWithdrawFail() == true && !data?.remark.isNullOrEmpty()
        tv_audit.text = "审核失败:${data?.remark}"
    }
    override fun setOnclick() {
        tv_bank.clickDelay {
            startActivityForResult<SelectWithdrawBankActivity>(1)
        }
        tv_get_code.clickDelay {
            val phone = et_phone.text.toString()
            if (!phone.isValidPhone()) {
                toast("请输入正确手机号")
                return@clickDelay
            }
            tv_get_code.isEnabled = false
            val map = getMapByAny()
            map["phone"] = phone
            map["type"] = 5
            callNet(Api.queryCaptcha, map, {
                timer.start()
                toast("发送成功")
            }) {
                tv_get_code.isEnabled = true
            }
        }
        iv_front.clickDelay {
            startActivityForResult<SelectPhotoDialogKt>(2)
        }
        iv_back.clickDelay {
            startActivityForResult<SelectPhotoDialogKt>(3)
        }
        iv_bank.clickDelay {
            startActivityForResult<SelectPhotoDialogKt>(4)
        }
        tv_action.clickDelay {
            commitInfo()
        }
    }
    private fun commitInfo() {
        val name = et_name.text.toString()
        if (name.isEmpty()) {
            toast("请输入证件人姓名")
            return
        }
        val idCard = et_id_card.text.toString()
        if (!idCard.isValidIdCard()) {
            toast("请输入正确的身份证号码")
            return
        }
        val bankName = tv_bank.text.toString()
        if (bankName.isEmpty()) {
            toast("请选择银行")
            return
        }
        val bankNum = et_bank_num.text.toString()
        if (bankNum.isEmpty()) {
            toast("请输入银行卡号")
            return
        }
        val bankCardName = et_bank_name.text.toString()
        if (bankCardName.isEmpty()) {
            toast("请输入开户行")
            return
        }
        val phone = et_phone.text.toString()
        if (phone.isEmpty()) {
            toast("请输入手机号码")
            return
        }
        if (!phone.isValidPhone()) {
            toast("手机号格式有误")
            return
        }
        val code = et_code.text.toString()
        if (code.isEmpty()) {
            toast("请输入验证码")
            return
        }
        if (frontImg.isEmpty()) {
            toast("请上传身份证正面照")
            return
        }
        if (bankImg.isEmpty()) {
            toast("请上传身份证反面照")
            return
        }
        if (bankImg.isEmpty()) {
            toast("请上传银行卡照片")
            return
        }
        tv_action.isEnabled = false
        val param = getMapByAny()
        param["bankName"] = bankName
        param["code"] = bankCode
        param["money"] = data?.money
        param["name"] = name
        param["smsCode"] = code
        param["type"] = 2
        val map = JSONObject()
        map.put("bankCardCode", bankNum)
        map.put("bankCode", bankCode)
        map.put("bankName", bankName)
        map.put("certificateCode", idCard)
        map.put("certificateName", name)
        map.put("certificateType", 1)
        map.put("code", code)
        map.put("idCardFrontPicture", frontImg)
        map.put("idCardReversePicture", backImg)
        map.put("depositBank", bankCardName)
        map.put("phone", phone)
        map.put("userType", 2)
        map.put("bankCardUrl", bankImg)
        param["userWithdrawalStr"] = map.toString()
        callNet(Api.withdrawal, param, {
            startActivity<WithdrawResultActivity>()
            finish()
        }) {
            tv_action.isEnabled = true
        }
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK && data != null) {
            if (requestCode == 1) {
                data.getParcelableExtra<BankName>("bank")?.also {
                    tv_bank.text = it.bankName
                    bankCode = it.bankCode ?: ""
                }
            } else {
                data.getStringExtra("path")?.also {
                    compressImageAndUpload(requestCode, it)
                }
            }
        }
    }
    //压缩图片然后上传
    private fun compressImageAndUpload(requestCode: Int, filePath: String) {
        Luban.with(this)
            .load(File(filePath))
            .ignoreBy(100)
            .setTargetDir(extGetSaveFileDir("img").absolutePath)
            .filter { path ->
                !(path.isEmpty() || path.lowercase(Locale.ROOT).endsWith(".gif"))
            }
            .setCompressListener(object : OnCompressListener {
                override fun onStart() {
                    showDialog()
                }
                override fun onSuccess(file: File) {
                    Log.e("mmp", "压缩完成" + file.name)
                    when (requestCode) {
                        2 -> {
                            frontImg = ""
                        }
                        3 -> {
                            backImg = ""
                        }
                        4 -> {
                            bankImg = ""
                        }
                    }
                    uploadImage(file) { responseString: String ->
                        when (requestCode) {
                            2 -> {
                                frontImg = responseString
                                GlideUtil.load(
                                    this@SetWithdrawAccountActivity,
                                    frontImg,
                                    iv_front,
                                    0
                                )
                            }
                            3 -> {
                                backImg = responseString
                                GlideUtil.load(
                                    this@SetWithdrawAccountActivity,
                                    backImg,
                                    iv_back,
                                    0
                                )
                            }
                            4 -> {
                                bankImg = responseString
                                GlideUtil.load(
                                    this@SetWithdrawAccountActivity,
                                    bankImg,
                                    iv_bank,
                                    0
                                )
                            }
                        }
                    }
                }
                override fun onError(e: Throwable) {
                    e.printStackTrace()
                    dismissDialog()
                }
            }).launch()
    }
    //上传图片
    private fun uploadImage(file: File, block: (responseString: String) -> Unit) {
        HttpManager.getInstance().post(Api.upImage, file,
            object : MyUploadObserver(this@SetWithdrawAccountActivity) {
                override fun success(responseString: String) {
                    block.invoke(responseString)
                }
            })
    }
}
app/src/main/java/com/fangxinxing/xxfxx/ui/mine/money_bag/WithdrawResultActivity.kt
New file
@@ -0,0 +1,22 @@
package com.fangxinxing.xxfxx.ui.mine.money_bag
import com.fangxinxing.xxfxx.R
import com.fangxinxing.xxfxx.base.MyBaseActivity
import com.fangxinxing.xxfxx.utils.clickDelay
import kotlinx.android.synthetic.main.activity_withdraw_result.tv_action
//提现结果页
class WithdrawResultActivity : MyBaseActivity() {
    override fun setContentView() {
        setContentView(R.layout.activity_withdraw_result)
    }
    override fun initView() {
        setTitleText("提现账户")
    }
    override fun setOnclick() {
        tv_action.clickDelay { finish() }
    }
}
app/src/main/res/drawable/shape_fd943a_bg_4.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/color_fd943a" />
    <corners android:radius="4dp" />
</shape>
app/src/main/res/layout/activity_all_detail_income.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:background="#4680EB"
        android:layout_height="180dp">
        android:layout_height="180dp"
        android:background="@color/color_fd943a">
        <RelativeLayout
            android:id="@+id/rl_title"
@@ -47,18 +47,18 @@
                android:id="@+id/tv_right_commit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_alignParentEnd="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="14dp"
                android:drawablePadding="3dp"
                android:maxWidth="280dp"
                android:maxLines="1"
                android:singleLine="true"
                android:visibility="gone"
                android:text="提现记录"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:textStyle="bold" />
                android:textStyle="bold"
                android:visibility="gone" />
        </RelativeLayout>
@@ -67,63 +67,44 @@
            android:id="@+id/tv_view_hint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="当前可提现收益"
            android:layout_marginTop="20dp"
            android:layout_below="@+id/rl_title"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:text="历史总收益"
            android:textColor="#ffffffff"
            android:textSize="14sp"
            />
            android:textSize="14sp" />
        <TextView
            android:id="@+id/tv_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tv_view_hint"
            android:layout_centerHorizontal="true"
            android:layout_height="wrap_content"
            android:text="¥325.00"
            android:text="¥0"
            android:textColor="#ffffffff"
            android:textSize="30sp"
            />
        <TextView
            android:id="@+id/tv_all_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="历史总收益:¥"
            android:layout_alignParentEnd="true"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:layout_marginEnd="10dp"
            android:textColor="@color/white"
            android:textSize="16sp"
            android:textStyle="bold" />
            android:textSize="30sp" />
    </RelativeLayout>
    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp"/>
        android:layout_height="0dp"
        android:layout_weight="1" />
    <TextView
        android:id="@+id/tv_tixian"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="14dp"
        android:layout_marginTop="44dp"
        android:layout_marginEnd="14dp"
        android:layout_marginBottom="14dp"
        android:background="@drawable/bg_login"
        android:gravity="center"
        android:text="提现"
        android:textColor="#ffffffff"
        android:gravity="center"
        android:layout_marginTop="44dp"
        android:layout_marginStart="14dp"
        android:visibility="gone"
        android:layout_marginBottom="14dp"
        android:layout_marginEnd="14dp"
        android:background="@drawable/bg_login"
        android:textSize="14sp"
        android:layout_height="40dp"/>
        android:visibility="gone" />
</LinearLayout>
app/src/main/res/layout/activity_apply_withdraw.xml
New file
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ui.mine.money_bag.ApplyWithdrawActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/white"
        android:gravity="center_vertical"
        android:orientation="horizontal">
        <TextView
            android:layout_width="110dp"
            android:layout_height="wrap_content"
            android:paddingStart="14dp"
            android:text="提现金额"
            android:textColor="#ff333333"
            android:textSize="14sp" />
        <EditText
            android:id="@+id/et_money"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@null"
            android:hint="100元可提现"
            android:inputType="numberDecimal"
            android:maxLength="10"
            android:maxLines="1"
            android:textColor="#ff000000"
            android:textSize="14sp" />
    </LinearLayout>
    <include layout="@layout/include_weight_height" />
    <TextView
        android:id="@+id/tv_withdraw"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="14dp"
        android:layout_marginTop="44dp"
        android:layout_marginEnd="14dp"
        android:layout_marginBottom="14dp"
        android:background="@drawable/car_get_start"
        android:gravity="center"
        android:text="确认提现"
        android:textColor="#ffffffff"
        android:textSize="14sp" />
</LinearLayout>
app/src/main/res/layout/activity_mine.xml
@@ -247,8 +247,7 @@
            <RelativeLayout
                android:id="@+id/rl_acount_safe"
                android:layout_width="match_parent"
                android:layout_height="43dp"
                android:visibility="gone">
                android:layout_height="43dp">
                <TextView
                    android:layout_width="match_parent"
app/src/main/res/layout/activity_mine_wallet.xml
New file
@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_main"
    android:orientation="vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:background="@color/color_fd943a">
        <RelativeLayout
            android:id="@+id/rl_title"
            android:layout_width="match_parent"
            android:layout_height="42dp"
            android:layout_marginTop="22dp">
            <TextView
                android:id="@+id/tv_back"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:background="@drawable/bg_clicker"
                android:drawableStart="@mipmap/back_white"
                android:gravity="center"
                android:paddingStart="@dimen/dp_10"
                android:paddingEnd="@dimen/dp_15"
                android:textColor="#333333"
                android:textSize="16sp" />
            <TextView
                android:id="@+id/tv_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:drawablePadding="3dp"
                android:maxWidth="280dp"
                android:maxLines="1"
                android:singleLine="true"
                android:text="我的钱包"
                android:textColor="@color/white"
                android:textSize="16sp"
                android:textStyle="bold" />
        </RelativeLayout>
        <TextView
            android:id="@+id/tv_money_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/rl_title"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:text="当前可提现金额"
            android:textColor="#ffffffff"
            android:textSize="14sp" />
        <TextView
            android:id="@+id/tv_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tv_money_label"
            android:layout_centerHorizontal="true"
            android:text="¥0"
            android:textColor="#ffffffff"
            android:textSize="30sp" />
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_all_income_detail"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/white"
        android:drawableEnd="@mipmap/more_black"
        android:gravity="center_vertical"
        android:paddingStart="14dp"
        android:paddingEnd="14dp"
        android:text="收入明细"
        android:textColor="#ff333333"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/tv_record"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="1dp"
        android:background="@color/white"
        android:drawableEnd="@mipmap/more_black"
        android:gravity="center_vertical"
        android:paddingStart="14dp"
        android:paddingEnd="14dp"
        android:text="提现记录"
        android:textColor="#ff333333"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/tv_del_money_detail"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="1dp"
        android:background="@color/white"
        android:drawableEnd="@mipmap/more_black"
        android:gravity="center_vertical"
        android:paddingStart="14dp"
        android:paddingEnd="14dp"
        android:text="扣款明细"
        android:textColor="#ff333333"
        android:textSize="14sp" />
    <include layout="@layout/include_weight_height" />
    <TextView
        android:id="@+id/tv_withdraw"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="14dp"
        android:layout_marginTop="44dp"
        android:layout_marginEnd="14dp"
        android:layout_marginBottom="14dp"
        android:background="@drawable/car_get_start"
        android:gravity="center"
        android:text="提现"
        android:textColor="#ffffffff"
        android:textSize="14sp"
        android:visibility="gone"
        tools:visibility="visible" />
</LinearLayout>
app/src/main/res/layout/activity_select_withdraw_bank.xml
New file
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/page_bg">
    <LinearLayout
        android:id="@+id/ll_search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="1px"
        android:focusable="true"
        android:focusableInTouchMode="true"
        app:layout_constraintTop_toTopOf="parent">
        <EditText
            android:id="@+id/et_search"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:layout_weight="1"
            android:background="@drawable/bg_white_4dp"
            android:drawableStart="@mipmap/mer_search"
            android:drawablePadding="7dp"
            android:hint="搜索"
            android:imeOptions="actionSearch"
            android:inputType="text"
            android:paddingVertical="9dp"
            android:paddingStart="16dp"
            android:paddingEnd="9dp"
            android:singleLine="true"
            android:textColor="@color/textColor"
            android:textSize="13sp" />
        <TextView
            android:id="@+id/tv_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:paddingStart="16dp"
            android:paddingTop="5dp"
            android:paddingEnd="16dp"
            android:paddingBottom="5dp"
            android:text="取消"
            android:textColor="@color/main_yellow_shen"
            android:textSize="14sp" />
    </LinearLayout>
    <cn.sinata.xldutils.view.SwipeRefreshRecyclerLayoutKt
        android:id="@+id/lv_bank"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/ll_search" />
    <com.fangxinxing.xxfxx.utils.view.WaveSideBar
        android:id="@+id/side_bar"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        app:layout_constraintBottom_toBottomOf="@id/lv_bank"
        app:layout_constraintTop_toTopOf="@id/lv_bank"
        app:sidebar_text_color="@color/textColor" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_set_withdraw_account.xml
New file
@@ -0,0 +1,375 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_action"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="14dp"
        android:layout_marginEnd="14dp"
        android:layout_marginBottom="14dp"
        android:background="@drawable/car_get_start"
        android:gravity="center"
        android:text="提交"
        android:textColor="#ffffffff"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="parent" />
    <TextView
        android:id="@+id/tv_audit"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/shape_fd943a_bg_4"
        android:paddingHorizontal="15dp"
        android:paddingVertical="10dp"
        android:text="审核结果:审核成功"
        android:textColor="@color/white"
        android:textSize="14sp"
        android:textStyle="bold"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:visibility="visible" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:scrollbars="none"
        app:layout_constraintBottom_toTopOf="@id/tv_action"
        app:layout_constraintTop_toBottomOf="@id/tv_audit">
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingVertical="15dp">
            <EditText
                android:id="@+id/et_name"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:gravity="end"
                android:hint="请输入姓名"
                android:maxLength="10"
                android:singleLine="true"
                app:layout_constraintTop_toTopOf="parent" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="证件人姓名"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_name"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_name" />
            <TextView
                android:id="@+id/tv_1"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:gravity="end"
                android:singleLine="true"
                android:text="身份证"
                app:layout_constraintTop_toBottomOf="@id/et_name" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="证件类型"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/tv_1"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/tv_1" />
            <EditText
                android:id="@+id/et_id_card"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:digits="@string/idCard"
                android:gravity="end"
                android:hint="请输入身份证号码"
                android:inputType="textEmailAddress"
                android:maxLength="18"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/tv_1" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="证件号"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_id_card"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_id_card" />
            <TextView
                android:id="@+id/tv_bank"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:drawableEnd="@mipmap/more_gray"
                android:gravity="end"
                android:hint="请选择银行"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/et_id_card" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="选择银行"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/tv_bank"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/tv_bank" />
            <EditText
                android:id="@+id/et_bank_num"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:gravity="end"
                android:hint="请输入银行卡号"
                android:inputType="number"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/tv_bank" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="银行卡号"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_bank_num"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_bank_num" />
            <EditText
                android:id="@+id/et_bank_name"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:gravity="end"
                android:hint="请输入开户行"
                android:inputType="text"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/et_bank_num" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="开户行"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_bank_name"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_bank_name" />
            <EditText
                android:id="@+id/et_phone"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="90dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:gravity="end"
                android:hint="请填写手机号码"
                android:inputType="number"
                android:maxLength="11"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/et_bank_name" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="手机号码"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_phone"
                app:layout_constraintStart_toStartOf="parent" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_phone" />
            <EditText
                android:id="@+id/et_code"
                style="@style/style_form_text_mine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="140dp"
                android:layout_marginEnd="10dp"
                android:background="@null"
                android:hint="请输入验证码"
                android:inputType="number"
                android:maxLength="6"
                android:singleLine="true"
                app:layout_constraintTop_toBottomOf="@id/et_phone" />
            <TextView
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="验证码"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_code"
                app:layout_constraintStart_toStartOf="parent" />
            <TextView
                android:id="@+id/tv_get_code"
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingVertical="12dp"
                android:text="获取验证码"
                android:textColor="@color/main_yellow_shen"
                android:textStyle="bold"
                app:layout_constraintBaseline_toBaselineOf="@id/et_code"
                app:layout_constraintEnd_toEndOf="@id/et_code" />
            <View
                android:layout_width="match_parent"
                android:layout_height="1px"
                android:layout_marginHorizontal="10dp"
                android:background="@color/dividing_line_color"
                app:layout_constraintTop_toBottomOf="@id/et_code" />
            <TextView
                android:id="@+id/tv_2"
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:paddingVertical="12dp"
                android:text="上传身份证"
                android:textStyle="bold"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/et_code" />
            <ImageView
                android:id="@+id/iv_front"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginStart="16dp"
                android:layout_marginTop="13dp"
                android:src="@mipmap/iv_front"
                app:layout_constraintDimensionRatio="165:110"
                app:layout_constraintEnd_toStartOf="@id/iv_back"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_2" />
            <ImageView
                android:id="@+id/iv_back"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginStart="13dp"
                android:layout_marginEnd="16dp"
                android:src="@mipmap/iv_back"
                app:layout_constraintDimensionRatio="165:110"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/iv_front"
                app:layout_constraintTop_toTopOf="@id/iv_front" />
            <TextView
                android:id="@+id/tv_3"
                style="@style/style_common_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="16dp"
                android:layout_marginTop="12dp"
                android:paddingVertical="12dp"
                android:text="上传银行卡"
                android:textStyle="bold"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/iv_front" />
            <ImageView
                android:id="@+id/iv_bank"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_marginStart="16dp"
                android:layout_marginTop="12dp"
                android:src="@mipmap/icon_upload_bank_photo"
                app:layout_constraintDimensionRatio="165:110"
                app:layout_constraintEnd_toStartOf="@id/iv_back"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_3" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/activity_withdraw_result.xml
New file
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_audit"
        style="@style/style_common_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="120dp"
        android:drawableTop="@mipmap/cheking"
        android:drawablePadding="27dp"
        android:text="提现审核中"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/tv_action"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginStart="14dp"
        android:layout_marginTop="88dp"
        android:layout_marginEnd="14dp"
        android:layout_marginBottom="14dp"
        android:background="@drawable/car_get_start"
        android:gravity="center"
        android:text="确定"
        android:textColor="#ffffffff"
        android:textSize="14sp"
        app:layout_constraintTop_toBottomOf="@id/tv_audit" />
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/item_close_record.xml
@@ -1,34 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:background="@color/white"
    android:layout_height="50dp">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/white">
    <include layout="@layout/include_line_14"/>
    <include layout="@layout/include_line_14" />
    <TextView
        android:id="@+id/tv_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="14dp"
        android:layout_centerVertical="true"
        android:layout_marginStart="14dp"
        android:text="2019-09-21"
        android:textColor="#ff333333"
        android:textSize="14sp"
        />
        android:textSize="14sp" />
    <TextView
        android:id="@+id/tv_money"
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="¥100"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="14dp"
        android:textStyle="bold"
        android:textColor="#ff333333"
        android:textSize="14sp"
        />
        android:gravity="end"
        android:orientation="vertical">
        <TextView
            android:id="@+id/tv_money"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="¥100"
            android:textColor="#ff333333"
            android:textSize="14sp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/tv_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="审核中"
            android:textColor="#ff333333"
            android:textSize="12sp"
            android:visibility="gone"
            tools:visibility="visible" />
    </LinearLayout>
</RelativeLayout>
app/src/main/res/mipmap-xxhdpi/icon_upload_bank_photo.png
app/src/main/res/values/colors.xml
@@ -130,4 +130,5 @@
    <color name="color_f4f5f9">#f4f5f9</color>
    <color name="color_00ffffff">#00ffffff</color>
    <color name="color_ff9f18">#ff9f18</color>
    <color name="color_fd943a">#fd943a</color>
</resources>