Commit ec813f69 authored by shiyl's avatar shiyl

Merge branch 'dev' into dev_7.2

parents 64941f42 684d0bbf
...@@ -37,7 +37,7 @@ android { ...@@ -37,7 +37,7 @@ android {
buildConfigField "boolean", "ENV_DEBUG", "true" buildConfigField "boolean", "ENV_DEBUG", "true"
buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"') buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"')
manifestPlaceholders = [ manifestPlaceholders = [
app_name : "B端测试", app_name : "商家版测试",
file_provider: rootProject.ext.android.applicationId + ".debug.fileprovider", file_provider: rootProject.ext.android.applicationId + ".debug.fileprovider",
] ]
} }
...@@ -45,7 +45,7 @@ android { ...@@ -45,7 +45,7 @@ android {
buildConfigField "boolean", "ENV_DEBUG", "false" buildConfigField "boolean", "ENV_DEBUG", "false"
buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".fileprovider" + '\"') buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".fileprovider" + '\"')
manifestPlaceholders = [ manifestPlaceholders = [
app_name : "B端", app_name : "生活圈商家版",
file_provider: rootProject.ext.android.applicationId + ".fileprovider", file_provider: rootProject.ext.android.applicationId + ".fileprovider",
] ]
} }
......
...@@ -5,5 +5,5 @@ package com.yidian.common.constant ...@@ -5,5 +5,5 @@ package com.yidian.common.constant
*/ */
object ResultCode { object ResultCode {
const val SUCCESS = 0 // 成功 const val SUCCESS = 0 // 成功
const val INVALID = 104000 // token失效 const val INVALID = 1104000 // token失效
} }
...@@ -6,27 +6,49 @@ package com.yidian.shenghuoquan.newscontent.bean ...@@ -6,27 +6,49 @@ package com.yidian.shenghuoquan.newscontent.bean
* description: 生活号企业认证数据集 * description: 生活号企业认证数据集
*/ */
class LifeAccountMerchantAuthData { class LifeAccountMerchantAuthData {
var merchantType: Int = 0 var merchantType: Int = 0
var isBusinessLicenseUpload: Boolean = false var isBusinessLicenseUpload: Boolean = false
var businessLicenseObjectKey: String? = null var businessLicenseObjectKey: String? = null
var registrationName: String? = null var registrationName: String? = null
var registrationCode: String? = null var registrationCode: String? = null
var authRecordId: Long? = null var authRecordId: Long = -1
var lifeAccountId: Long? = null var isAuthInfoModify: Boolean = false // 认证信息是否修改
var isRecoverAuthProcess: Boolean = false // 是否为恢复认证流程
// 营业执照相关信息 // 营业执照相关信息
var type: String? = null var type: String? = null
var addr: String? = null var addr: String? = null
var pers: String? = null var pers: String? = null
var scope: String? = null var scope: String? = null
var time: String? = null var time: String? = null
var regi: String? = null var regi: String? = null
var organizer: String? = null var organizer: String? = null
var date: String? = null var date: String? = null
var comp: String? = null var comp: String? = null
var num: String? = null var num: String? = null
var form: String? = null var form: String? = null
var funding: String? = null var funding: String? = null
var date_issue: String? = null var dateIssue: String? = null
}
\ No newline at end of file fun clearData() {
merchantType = 0
isBusinessLicenseUpload = false
businessLicenseObjectKey = null
registrationName = null
registrationCode = null
authRecordId = -1
isAuthInfoModify = false
type = null
addr = null
pers = null
scope = null
time = null
regi = null
organizer = null
date = null
comp = null
num = null
form = null
funding = null
dateIssue = null
}
}
...@@ -6,28 +6,55 @@ package com.yidian.shenghuoquan.newscontent.bean ...@@ -6,28 +6,55 @@ package com.yidian.shenghuoquan.newscontent.bean
* description: 生活号个人认证数据集 * description: 生活号个人认证数据集
*/ */
class LifeAccountPersonalAuthData { class LifeAccountPersonalAuthData {
var realName: String? = null var realName: String? = null
var idCardNum: String? = null var idCardNum: String? = null
var phoneNum: String? = null // 法人手机号 var phoneNum: String? = null // 法人手机号
var occupation: String? = null var occupation: String? = null
var idCardPortraitFaceObjectKey: String? = null var idCardPortraitFaceObjectKey: String? = null
var idCardNationalEmblemFaceObjectKey: String? = null var idCardNationalEmblemFaceObjectKey: String? = null
var idCardPortraitFaceBucket: String? = null var idCardPortraitFaceBucket: String? = null
var idCardNationalEmblemFaceBucket: String? = null var idCardNationalEmblemFaceBucket: String? = null
var isIDCardPortraitFaceUpload: Boolean = false var isIDCardPortraitFaceUpload: Boolean = false
var isIDCardNationalEmblemFaceUpload: Boolean = false var isIDCardNationalEmblemFaceUpload: Boolean = false
var idCardPortraitFaceCompleteness: Int = -1 var idCardPortraitFaceCompleteness: Int = -1
var idCardNationalEmblemFaceCompleteness: Int = -1 var idCardNationalEmblemFaceCompleteness: Int = -1
var liveDetectBizToken: String? = null var liveDetectBizToken: String? = null
var liveDetectObjectKey: String? = null var liveDetectObjectKey: String? = null
var liveDetectBucket: String? = null var liveDetectBucket: String? = null
var isFaceAuthPass: Boolean = false var isFaceAuthPass: Boolean = false
var isAgreePrivacyAgreement: Boolean = false // 是否同意用户协议和隐私政策
// 身份证相关信息 // 身份证相关信息
var gender: String? = null var gender: String? = null
var address: String? = null var address: String? = null
var nationality: String? = null var nationality: String? = null
var validDateStart: String? = null var validDateStart: String? = null
var validDateEnd: String? = null var validDateEnd: String? = null
var issuedBy: String? = null var issuedBy: String? = null
fun clearData() {
realName = null
idCardNum = null
phoneNum = null
occupation = null
idCardPortraitFaceObjectKey = null
idCardNationalEmblemFaceObjectKey = null
idCardPortraitFaceBucket = null
idCardNationalEmblemFaceBucket = null
isIDCardPortraitFaceUpload = false
isIDCardNationalEmblemFaceUpload = false
idCardPortraitFaceCompleteness = -1
idCardNationalEmblemFaceCompleteness = -1
liveDetectBizToken = null
liveDetectObjectKey = null
liveDetectBucket = null
isFaceAuthPass = false
isAgreePrivacyAgreement = false
gender = null
address = null
nationality = null
validDateStart = null
validDateEnd = null
issuedBy = null
}
} }
...@@ -35,6 +35,7 @@ object Constant { ...@@ -35,6 +35,7 @@ object Constant {
const val TYPE_LIFE_ACCOUNT_ENTERPRISE = 2 // 企业生活号 const val TYPE_LIFE_ACCOUNT_ENTERPRISE = 2 // 企业生活号
// 生活号Tag // 生活号Tag
const val LIFE_ACCOUNT_TAG_ENTERPRISE_AUTH = 0 // 企业认证
const val LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH = 1 // 普通企业认证 const val LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH = 1 // 普通企业认证
const val LIFE_ACCOUNT_TAG_INDIVIDUAL_BUSINESS_AUTH = 2 // 个体工商户认证 const val LIFE_ACCOUNT_TAG_INDIVIDUAL_BUSINESS_AUTH = 2 // 个体工商户认证
const val LIFE_ACCOUNT_TAG_PERSONAL_AUTH = 3 // 个人认证 const val LIFE_ACCOUNT_TAG_PERSONAL_AUTH = 3 // 个人认证
...@@ -94,4 +95,7 @@ object Constant { ...@@ -94,4 +95,7 @@ object Constant {
// 各输入场景最大长度显示 // 各输入场景最大长度显示
const val MAX_LENGTH_LIFE_ACCOUNT_NAME = 24 // 生活号名称 const val MAX_LENGTH_LIFE_ACCOUNT_NAME = 24 // 生活号名称
// 服务端返回的业务错误码
const val ERROR_CODE_PERSONAL_AUTH_INFO_DUPLICATE = 2103010 // 身份证号已认证并且认证手机号不是当前手机号
} }
...@@ -124,7 +124,7 @@ class ApiService { ...@@ -124,7 +124,7 @@ class ApiService {
} }
override fun onFailer(result: HttpResult<Any>?) { override fun onFailer(result: HttpResult<Any>?) {
apiCallback.authPersonCheckFailure(result?.reason) apiCallback.authPersonCheckFailure(result?.code, result?.reason)
} }
}) })
} }
......
...@@ -6,6 +6,6 @@ package com.yidian.shenghuoquan.newscontent.http.callback ...@@ -6,6 +6,6 @@ package com.yidian.shenghuoquan.newscontent.http.callback
* description: API /merchant/auth/personal_check * description: API /merchant/auth/personal_check
*/ */
interface IAuthPersonalCheckCallback { interface IAuthPersonalCheckCallback {
fun authPersonCheckSuccess() fun authPersonCheckSuccess()
fun authPersonCheckFailure(message: String?) fun authPersonCheckFailure(code: Int?, message: String?)
} }
\ No newline at end of file
...@@ -13,7 +13,8 @@ class LifeAccountItemBean(var response: Response) { ...@@ -13,7 +13,8 @@ class LifeAccountItemBean(var response: Response) {
val life_account_status: Int, val life_account_status: Int,
val life_account_type: Int, val life_account_type: Int,
val role_type: Int, val role_type: Int,
val tag: Tag val tag: Tag,
val enterprise_auth_record_id: Int
) : Serializable ) : Serializable
data class Tag( data class Tag(
......
...@@ -69,27 +69,25 @@ class FlashActivity : BaseActivity<ActivityFlashBinding>(), IGetLifeAccountListC ...@@ -69,27 +69,25 @@ class FlashActivity : BaseActivity<ActivityFlashBinding>(), IGetLifeAccountListC
} }
else -> { else -> {
// 关联多个生活号 // 关联多个生活号
StorageUtil.getLifeAccountId().apply { StorageUtil.getLifeAccountId()?.apply {
if (isNotEmpty()) { // 如果本地有上次操作的生活号则遍历生活号列表进入对应生活号的管理中心
// 如果本地有上次操作的生活号则遍历生活号列表进入对应生活号的管理中心 result?.forEach {
result?.forEach { if (it.life_account_id == this) {
if (it.life_account_id == this) { XPageManager.push(
XPageManager.push( XRouterPathConstants.MERCHANT_CENTER,
XRouterPathConstants.MERCHANT_CENTER, hashMapOf(
hashMapOf( Pair(MerchantCenterActivity.EXTRA_LIFE_ACCOUNT_INFO, it),
Pair(MerchantCenterActivity.EXTRA_LIFE_ACCOUNT_INFO, it), Pair(MerchantCenterActivity.EXTRA_IS_MULTI, result.size > 1)
Pair(MerchantCenterActivity.EXTRA_IS_MULTI, result.size > 1)
)
) )
} )
} }
} else {
// 进入生活号选择页面
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_IDENTITY,
hashMapOf(Pair(LifeAccountIdentityActivity.EXTRA_LIFE_ACCOUNT_LIST, result))
)
} }
} ?: let {
// 进入生活号选择页面
XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_IDENTITY,
hashMapOf(Pair(LifeAccountIdentityActivity.EXTRA_LIFE_ACCOUNT_LIST, result))
)
} }
} }
} }
......
...@@ -18,6 +18,7 @@ import com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountListCall ...@@ -18,6 +18,7 @@ import com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountListCall
import com.yidian.shenghuoquan.newscontent.http.httpbean.IMobileLoginCallback import com.yidian.shenghuoquan.newscontent.http.httpbean.IMobileLoginCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean import com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.MobileLoginBean import com.yidian.shenghuoquan.newscontent.http.httpbean.MobileLoginBean
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountAuthDataManager
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountIdentityActivity import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountIdentityActivity
import com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity import com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity
import com.yidian.shenghuoquan.newscontent.utils.CountDownTimerUtils import com.yidian.shenghuoquan.newscontent.utils.CountDownTimerUtils
...@@ -158,7 +159,10 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc ...@@ -158,7 +159,10 @@ class LoginLifeCircleActivity : BaseActivity<ActivityLoginBinding>(), IGetLifeAc
// 登录状态 // 登录状态
Hawk.put(HawkConfig.LoginStatus, false) Hawk.put(HawkConfig.LoginStatus, false)
// 生活号id // 生活号id
Hawk.delete(HawkConfig.LifeAccountId) StorageUtil.deleteLifeAccountId()
// 清除内存中的认证数据
LifeAccountAuthDataManager.personalAuthData.clearData()
LifeAccountAuthDataManager.merchantAuthData.clearData()
} }
override fun onDestroy() { override fun onDestroy() {
......
package com.yidian.shenghuoquan.newscontent.ui.auth package com.yidian.shenghuoquan.newscontent.ui.auth
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.View import android.view.View
import androidx.core.view.isVisible
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountAuthBinding import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthAuthenticationCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthAuthenticationCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthMerchantCheckCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthMerchantCheckCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IUserLogoutCallBack
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthAuthenticationBean import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthAuthenticationBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthMerchantCheckBean import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthMerchantCheckBean
import com.yidian.xpage.XPageManager import com.yidian.xpage.XPageManager
...@@ -20,8 +20,8 @@ import com.yidian.xpage.XPageManager ...@@ -20,8 +20,8 @@ import com.yidian.xpage.XPageManager
* date: 5/20/21 6:26 PM * date: 5/20/21 6:26 PM
* description: 生活号认证 * description: 生活号认证
*/ */
class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), View.OnClickListener, IAuthAuthenticationCallback,
View.OnClickListener, IAuthAuthenticationCallback, IAuthMerchantCheckCallback { IAuthMerchantCheckCallback, IUserLogoutCallBack {
companion object { companion object {
// 从哪个页面跳转 // 从哪个页面跳转
...@@ -64,6 +64,8 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), ...@@ -64,6 +64,8 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(),
if (fromTag == FROM_AUTH) { if (fromTag == FROM_AUTH) {
// 如果由商户基本信息跳转至此页面 则此页面可返回 // 如果由商户基本信息跳转至此页面 则此页面可返回
viewBind.bvTopBar.setBackVisibility(true) viewBind.bvTopBar.setBackVisibility(true)
// 退出登录按钮隐藏
viewBind.btnLogout.isVisible = false
} }
} }
} }
...@@ -72,6 +74,7 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), ...@@ -72,6 +74,7 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(),
viewBind.tvJoinStrategy.setOnClickListener(this) viewBind.tvJoinStrategy.setOnClickListener(this)
viewBind.viewPersonalAuth.setOnClickListener(this) viewBind.viewPersonalAuth.setOnClickListener(this)
viewBind.viewEnterpriseAuth.setOnClickListener(this) viewBind.viewEnterpriseAuth.setOnClickListener(this)
viewBind.btnLogout.setOnClickListener(this)
} }
override fun onClick(v: View?) { override fun onClick(v: View?) {
...@@ -87,6 +90,10 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), ...@@ -87,6 +90,10 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(),
// 请求企业认证信息 用于回显已填入的信息 // 请求企业认证信息 用于回显已填入的信息
ApiService.authMerchantCheck(this, hashMapOf()) ApiService.authMerchantCheck(this, hashMapOf())
} }
R.id.btn_logout -> {
// 退出登录
ApiService.userLogout(this)
}
} }
} }
...@@ -117,4 +124,9 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(), ...@@ -117,4 +124,9 @@ class LifeAccountAuthActivity : BaseActivity<ActivityLifeAccountAuthBinding>(),
override fun authMerchantCheckFailure(message: String?) { override fun authMerchantCheckFailure(message: String?) {
} }
override fun userLogoutSuccess() {
// 退出登录成功 跳转登录页面
XPageManager.push(XRouterPathConstants.LOGIN_LIFE_CIRCLE, null)
}
} }
...@@ -105,7 +105,7 @@ object LifeAccountAuthDataManager { ...@@ -105,7 +105,7 @@ object LifeAccountAuthDataManager {
merchantAuthData.num = data.num merchantAuthData.num = data.num
merchantAuthData.form = data.form merchantAuthData.form = data.form
merchantAuthData.funding = data.funding merchantAuthData.funding = data.funding
merchantAuthData.date_issue = data.date_issue merchantAuthData.dateIssue = data.date_issue
} }
/** /**
...@@ -129,7 +129,7 @@ object LifeAccountAuthDataManager { ...@@ -129,7 +129,7 @@ object LifeAccountAuthDataManager {
merchantAuthData.num = data.num merchantAuthData.num = data.num
merchantAuthData.form = data.form merchantAuthData.form = data.form
merchantAuthData.funding = data.funding merchantAuthData.funding = data.funding
merchantAuthData.date_issue = data.issue_date merchantAuthData.dateIssue = data.issue_date
merchantAuthData.businessLicenseObjectKey = data.entterprise_image merchantAuthData.businessLicenseObjectKey = data.entterprise_image
merchantAuthData.pers = data.pers merchantAuthData.pers = data.pers
personalAuthData.realName = data.legal_person personalAuthData.realName = data.legal_person
...@@ -153,7 +153,7 @@ object LifeAccountAuthDataManager { ...@@ -153,7 +153,7 @@ object LifeAccountAuthDataManager {
* 生成营业执照上传接口请求体 * 生成营业执照上传接口请求体
*/ */
fun generateAuthBusinessLicenseCommitRequest( fun generateAuthBusinessLicenseCommitRequest(
lifeAccountId: String? lifeAccountId: String?, recordId: Long?
): HashMap<String, String?> { ): HashMap<String, String?> {
val requestMap = HashMap<String, String?>() val requestMap = HashMap<String, String?>()
requestMap["code"] = merchantAuthData.registrationCode requestMap["code"] = merchantAuthData.registrationCode
...@@ -170,13 +170,12 @@ object LifeAccountAuthDataManager { ...@@ -170,13 +170,12 @@ object LifeAccountAuthDataManager {
requestMap["num"] = merchantAuthData.num requestMap["num"] = merchantAuthData.num
requestMap["form"] = merchantAuthData.form requestMap["form"] = merchantAuthData.form
requestMap["funding"] = merchantAuthData.funding requestMap["funding"] = merchantAuthData.funding
requestMap["issue_date"] = merchantAuthData.date_issue requestMap["issue_date"] = merchantAuthData.dateIssue
requestMap["entterprise_image"] = merchantAuthData.businessLicenseObjectKey requestMap["entterprise_image"] = merchantAuthData.businessLicenseObjectKey
requestMap["data_from"] = Constant.DATA_FROM_B.toString() requestMap["data_from"] = Constant.DATA_FROM_B.toString()
requestMap["data_type"] = merchantAuthData.merchantType.toString() requestMap["data_type"] = merchantAuthData.merchantType.toString()
lifeAccountId?.let { lifeAccountId?.let { requestMap["life_account_id"] = it }
requestMap["life_account_id"] = it recordId?.let { requestMap["enterprise_auth_record_id"] = it.toString() }
}
return requestMap return requestMap
} }
......
...@@ -12,6 +12,7 @@ import android.util.Log ...@@ -12,6 +12,7 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
...@@ -254,6 +255,7 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -254,6 +255,7 @@ class LifeAccountBusinessLicenseAuthFragment :
viewBinding.ivBusinessLicense.setImageDrawable(null) viewBinding.ivBusinessLicense.setImageDrawable(null)
// 清除错误提示 // 清除错误提示
viewBinding.tvUploadErrorTips.isVisible = false viewBinding.tvUploadErrorTips.isVisible = false
activity?.let { viewBinding.viewBusinessLicenseUploadDivider.setBackgroundColor(ContextCompat.getColor(it, R.color.color_FFF2F2F2)) }
viewBinding.ivClear.isVisible = false viewBinding.ivClear.isVisible = false
// 清除OCR或用户输入内容 // 清除OCR或用户输入内容
viewBinding.evRegistrationName.clearEditContent() viewBinding.evRegistrationName.clearEditContent()
...@@ -261,9 +263,10 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -261,9 +263,10 @@ class LifeAccountBusinessLicenseAuthFragment :
// 设置上传区域可点击 // 设置上传区域可点击
viewBinding.clBusinessLicenseUpload.isEnabled = true viewBinding.clBusinessLicenseUpload.isEnabled = true
LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload = false LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload = false
LifeAccountAuthDataManager.merchantAuthData.registrationName = "" LifeAccountAuthDataManager.merchantAuthData.registrationName = null
LifeAccountAuthDataManager.merchantAuthData.registrationCode = "" LifeAccountAuthDataManager.merchantAuthData.registrationCode = null
// 标识修改
LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify = true
} }
override fun onTaskStart() { override fun onTaskStart() {
...@@ -301,7 +304,7 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -301,7 +304,7 @@ class LifeAccountBusinessLicenseAuthFragment :
// 此时营业执照已上传并OCR识别完成 删除本地临时存储文件 // 此时营业执照已上传并OCR识别完成 删除本地临时存储文件
File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE).delete() File(commonPath + Constant.FILE_PATH_BUSINESS_LICENSE).delete()
// 检查下一步条件 // 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountEnterpriseAuthActivity).checkNextCondition() }
} }
override fun businessLicenseOCRFailure(message: String?) { override fun businessLicenseOCRFailure(message: String?) {
...@@ -309,9 +312,12 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -309,9 +312,12 @@ class LifeAccountBusinessLicenseAuthFragment :
viewBinding.tvUploadErrorTips.isVisible = true viewBinding.tvUploadErrorTips.isVisible = true
viewBinding.tvUploadErrorTips.text = viewBinding.tvUploadErrorTips.text =
resources.getString(R.string.check_business_license_distinct) resources.getString(R.string.check_business_license_distinct)
activity?.let { viewBinding.viewBusinessLicenseUploadDivider.setBackgroundColor(ContextCompat.getColor(it, R.color.color_FFFF3A3A)) }
} }
override fun onTextClear(from: LifeAccountAuthBusinessInfoEditView) { override fun onTextClear(from: LifeAccountAuthBusinessInfoEditView) {
// 标识修改
LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify = true
if (from == viewBinding.evRegistrationName) { if (from == viewBinding.evRegistrationName) {
LifeAccountAuthDataManager.merchantAuthData.registrationName = "" LifeAccountAuthDataManager.merchantAuthData.registrationName = ""
} else { } else {
...@@ -323,8 +329,15 @@ class LifeAccountBusinessLicenseAuthFragment : ...@@ -323,8 +329,15 @@ class LifeAccountBusinessLicenseAuthFragment :
override fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String) { override fun onTextChange(from: LifeAccountAuthBusinessInfoEditView, text: String) {
if (from == viewBinding.evRegistrationName) { if (from == viewBinding.evRegistrationName) {
// 标识修改
if (text != LifeAccountAuthDataManager.merchantAuthData.registrationName) {
LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify = true
}
LifeAccountAuthDataManager.merchantAuthData.registrationName = text LifeAccountAuthDataManager.merchantAuthData.registrationName = text
} else { } else {
if (text != LifeAccountAuthDataManager.merchantAuthData.registrationCode) {
LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify = true
}
LifeAccountAuthDataManager.merchantAuthData.registrationCode = text LifeAccountAuthDataManager.merchantAuthData.registrationCode = text
} }
// 检查下一步条件 // 检查下一步条件
......
...@@ -70,8 +70,9 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding> ...@@ -70,8 +70,9 @@ class LifeAccountCreateActivity : BaseActivity<ActivityLifeAccountCreateBinding>
checkAccount(s.toString()) checkAccount(s.toString())
} }
}) })
// 设置输入过滤规则 // 生活号名称长度限制24个字符 禁止输入Emoji
viewBind.etAccount.filters = arrayOf(InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this)) viewBind.etAccount.filters =
arrayOf(InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this), InputFilterUtil.getEmojiFilter())
viewBind.btnCreateAccount.setOnClickListener { viewBind.btnCreateAccount.setOnClickListener {
createLifeAccount() createLifeAccount()
} }
......
...@@ -3,8 +3,6 @@ package com.yidian.shenghuoquan.newscontent.ui.auth ...@@ -3,8 +3,6 @@ package com.yidian.shenghuoquan.newscontent.ui.auth
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.orhanobut.hawk.Hawk
import com.yidian.common.HawkConfig
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
...@@ -61,13 +59,13 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -61,13 +59,13 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
private var curFragment: Fragment? = null private var curFragment: Fragment? = null
/** /**
* 个人生活号id 企业升级 * 生活号id 个人认证升级企业认证、企业认证审核驳回修改
*/ */
private val personalLifeAccountId by lazy { private val lifeAccountId by lazy {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let {
(it as HashMap<*, *>)[EXTRA_LIFE_ACCOUNT_ID]?.let { id -> (it as HashMap<*, *>)[EXTRA_LIFE_ACCOUNT_ID]?.let { id ->
id as String id as String
} ?: Hawk.get(HawkConfig.LifeAccountId, null) }
} }
} }
...@@ -136,12 +134,14 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -136,12 +134,14 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
viewBind.btnNext.alpha = 1f viewBind.btnNext.alpha = 1f
viewBind.btnNext.isEnabled = true viewBind.btnNext.isEnabled = true
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER } else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER
&& LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement
&& LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS && LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS
&& LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass && LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass
) { ) {
viewBind.btnNext.alpha = 1f viewBind.btnNext.alpha = 1f
viewBind.btnNext.isEnabled = true viewBind.btnNext.isEnabled = true
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER } else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER
&& LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement
&& LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE && LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE
&& LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload && LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload
&& LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload && LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload
...@@ -212,6 +212,25 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -212,6 +212,25 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
curFragment = targetFragment curFragment = targetFragment
} }
/**
* 清理认证数据
* 避免在修改认证时出现数据异常
*/
private fun clearLifeAccountAuthData() {
LifeAccountAuthDataManager.merchantAuthData.merchantType = 0
LifeAccountAuthDataManager.merchantAuthData.authRecordId = -1
LifeAccountAuthDataManager.merchantAuthData.isBusinessLicenseUpload = false
LifeAccountAuthDataManager.merchantAuthData.registrationName = null
LifeAccountAuthDataManager.merchantAuthData.registrationCode = null
LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement = false
LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass = false
LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload = false
LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload = false
LifeAccountAuthDataManager.personalAuthData.realName = null
LifeAccountAuthDataManager.personalAuthData.idCardNum = null
LifeAccountAuthDataManager.personalAuthData.phoneNum = null
}
override fun onClick(v: View?) { override fun onClick(v: View?) {
when (v?.id) { when (v?.id) {
R.id.sv_merchant_type -> { R.id.sv_merchant_type -> {
...@@ -229,25 +248,29 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -229,25 +248,29 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_QUALIFICATION) { if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_QUALIFICATION) {
// personalLifeAccountId不为null则是由个人生活号升级为企业生活号情况 // personalLifeAccountId不为null则是由个人生活号升级为企业生活号情况
// personalLifeAccountId为null则是直接进行企业认证情况 // personalLifeAccountId为null则是直接进行企业认证情况
// 402接口 直接企业认证生活号id和审核id均不传 个人认证升级只传生活号id 认证修改只传审核id
ApiService.authBusinessLicenseCommit( ApiService.authBusinessLicenseCommit(
this, this,
LifeAccountAuthDataManager.generateAuthBusinessLicenseCommitRequest( LifeAccountAuthDataManager.generateAuthBusinessLicenseCommitRequest(
personalLifeAccountId if (isAuthModify) null else lifeAccountId,
LifeAccountAuthDataManager.merchantAuthData.authRecordId
) )
) )
} else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER) { } else if (viewBind.pvAuthProcess.curProcess == LifeAccountAuthProcessView.PROCESS_ENTERPRISE_MANAGER) {
// 406接口 直接企业认证和认证修改不传生活号id 个人认证升级传生活号id
if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS) { if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_INDIVIDUAL_BUSINESS) {
ApiService.authIndividualBusinessComplete( ApiService.authIndividualBusinessComplete(
this, this,
LifeAccountAuthDataManager.generateAuthIndividualBusinessCompleteRequest( LifeAccountAuthDataManager.generateAuthIndividualBusinessCompleteRequest(
personalLifeAccountId if (isAuthModify) null else lifeAccountId
) )
) )
} else if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE) { } else if (LifeAccountAuthDataManager.merchantAuthData.merchantType == Constant.TYPE_COMMON_ENTERPRISE) {
// 403接口 直接企业认证和认证修改不传生活号id 个人认证升级传生活号id
ApiService.authEnterpriseLegalIdentityCommit( ApiService.authEnterpriseLegalIdentityCommit(
this, this,
LifeAccountAuthDataManager.generateAuthEnterpriseLegalIdentityCommitRequest( LifeAccountAuthDataManager.generateAuthEnterpriseLegalIdentityCommitRequest(
personalLifeAccountId if (isAuthModify) null else lifeAccountId
) )
) )
} }
...@@ -279,19 +302,41 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -279,19 +302,41 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
override fun authBusinessLicenseCommitSuccess(result: AuthBusinessLicenseCommitBean.Response?) { override fun authBusinessLicenseCommitSuccess(result: AuthBusinessLicenseCommitBean.Response?) {
// 营业执照提交成功 // 营业执照提交成功
LifeAccountAuthDataManager.merchantAuthData.authRecordId = result?.enterprise_auth_record_id result?.enterprise_auth_record_id?.let { LifeAccountAuthDataManager.merchantAuthData.authRecordId = it }
viewBind.pvAuthProcess.setProcess(++viewBind.pvAuthProcess.curProcess) viewBind.pvAuthProcess.setProcess(++viewBind.pvAuthProcess.curProcess)
viewBind.svMerchantType.enableSelect(false) viewBind.svMerchantType.enableSelect(false)
// 向身份信息fragment传参 if (LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify) {
val fragment = fragmentList[viewBind.pvAuthProcess.curProcess] // 认证信息修改 清空第二步回显数据
val bundle = Bundle() LifeAccountAuthDataManager.merchantAuthData.isAuthInfoModify = false
bundle.putInt( LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload = false
Constant.TYPE_AUTH, LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload = false
LifeAccountAuthDataManager.merchantAuthData.merchantType LifeAccountAuthDataManager.personalAuthData.realName = null
) LifeAccountAuthDataManager.personalAuthData.idCardNum = null
bundle.putSerializable(LifeAccountIDCardAuthFragment.EXTRA_AUTH_DATA, authData) LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass = false
fragment.arguments = bundle LifeAccountAuthDataManager.personalAuthData.phoneNum = null
switchFragment(fragment) fragmentList.removeAt(viewBind.pvAuthProcess.curProcess)
val fragment = LifeAccountIDCardAuthFragment()
fragmentList.add(viewBind.pvAuthProcess.curProcess, fragment)
val bundle = Bundle()
bundle.putInt(
Constant.TYPE_AUTH,
LifeAccountAuthDataManager.merchantAuthData.merchantType
)
fragment.arguments = bundle
} else {
// 向身份信息fragment传参用于回显
val fragment = fragmentList[viewBind.pvAuthProcess.curProcess]
val bundle = Bundle()
bundle.putInt(
Constant.TYPE_AUTH,
LifeAccountAuthDataManager.merchantAuthData.merchantType
)
bundle.putSerializable(LifeAccountIDCardAuthFragment.EXTRA_AUTH_DATA, authData)
fragment.arguments = bundle
}
switchFragment(fragmentList[viewBind.pvAuthProcess.curProcess])
// 检查下一步条件
checkNextCondition()
} }
override fun authBusinessLicenseCommitFailure(message: String?) { override fun authBusinessLicenseCommitFailure(message: String?) {
...@@ -301,6 +346,8 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -301,6 +346,8 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
override fun authEnterpriseLegalIdentityCommitSuccess(result: AuthEnterpriseLegalIdentityCommitBean.Response?) { override fun authEnterpriseLegalIdentityCommitSuccess(result: AuthEnterpriseLegalIdentityCommitBean.Response?) {
// 本地保存生活号id // 本地保存生活号id
StorageUtil.putLifeAccountId(result?.life_account_id) StorageUtil.putLifeAccountId(result?.life_account_id)
// 清空认证数据
clearLifeAccountAuthData()
// 普通企业法人身份信息提交成功 // 普通企业法人身份信息提交成功
XPageManager.push( XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE, XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE,
...@@ -323,6 +370,8 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp ...@@ -323,6 +370,8 @@ class LifeAccountEnterpriseAuthActivity : BaseActivity<ActivityLifeAccountEnterp
override fun authIndividualBusinessCompleteSuccess(result: AuthIndividualBusinessCompleteBean.Response?) { override fun authIndividualBusinessCompleteSuccess(result: AuthIndividualBusinessCompleteBean.Response?) {
// 本地保存生活号id // 本地保存生活号id
StorageUtil.putLifeAccountId(result?.life_account_id) StorageUtil.putLifeAccountId(result?.life_account_id)
// 清空认证数据
clearLifeAccountAuthData()
// 个体工商户认证完成 // 个体工商户认证完成
XPageManager.push( XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE, XRouterPathConstants.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE,
......
...@@ -6,7 +6,10 @@ import com.yidian.common.XRouterPathConstants ...@@ -6,7 +6,10 @@ import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountEnterpriseAuthCompleteBinding import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountEnterpriseAuthCompleteBinding
import com.yidian.shenghuoquan.newscontent.utils.SensitiveInfoUtil import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountListCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.LifeAccountItemBean
import com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity
import com.yidian.xpage.XPageManager import com.yidian.xpage.XPageManager
/** /**
...@@ -15,7 +18,7 @@ import com.yidian.xpage.XPageManager ...@@ -15,7 +18,7 @@ import com.yidian.xpage.XPageManager
* description: 生活号企业认证提交成功页面 * description: 生活号企业认证提交成功页面
*/ */
class LifeAccountEnterpriseAuthCompleteActivity : class LifeAccountEnterpriseAuthCompleteActivity :
BaseActivity<ActivityLifeAccountEnterpriseAuthCompleteBinding>(), View.OnClickListener { BaseActivity<ActivityLifeAccountEnterpriseAuthCompleteBinding>(), View.OnClickListener, IGetLifeAccountListCallback {
companion object { companion object {
const val REGISTRATION_NAME = "registrationName" const val REGISTRATION_NAME = "registrationName"
...@@ -55,6 +58,10 @@ class LifeAccountEnterpriseAuthCompleteActivity : ...@@ -55,6 +58,10 @@ class LifeAccountEnterpriseAuthCompleteActivity :
private fun initView() { private fun initView() {
// 此页面不可返回 // 此页面不可返回
viewBind.bvTopBar.setBackVisibility(false) viewBind.bvTopBar.setBackVisibility(false)
// 认证修改和正常认证显示不同入口文案
viewBind.tvCreateLifeAccount.text = if (params?.get(EXTRA_IS_AUTH_MODIFY)
?.let { it as Boolean } == true
) resources.getText(R.string.enter_life_account) else resources.getText(R.string.create_life_account)
} }
private fun initListener() { private fun initListener() {
...@@ -74,7 +81,12 @@ class LifeAccountEnterpriseAuthCompleteActivity : ...@@ -74,7 +81,12 @@ class LifeAccountEnterpriseAuthCompleteActivity :
override fun onClick(v: View?) { override fun onClick(v: View?) {
if (v?.id == R.id.tv_create_life_account) { if (v?.id == R.id.tv_create_life_account) {
// 跳转创建生活号页面 if (params?.get(EXTRA_IS_AUTH_MODIFY)?.let { it as Boolean } == true) {
// 认证修改 请求生活号列表 跳转商户管理中心
ApiService.getLifeAccountList(this)
return
}
// 正常认证 跳转创建生活号页面
XPageManager.push( XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_CREATE, XRouterPathConstants.LIFE_ACCOUNT_CREATE,
hashMapOf( hashMapOf(
...@@ -90,4 +102,25 @@ class LifeAccountEnterpriseAuthCompleteActivity : ...@@ -90,4 +102,25 @@ class LifeAccountEnterpriseAuthCompleteActivity :
override fun onBackPressed() { override fun onBackPressed() {
// 禁止back event // 禁止back event
} }
override fun getLifeAccountListSuccess(result: ArrayList<LifeAccountItemBean.Response>?) {
// 生活号列表请求成功
val curLifeAccountId = params?.get(EXTRA_LIFE_ACCOUNT_ID)
result?.forEach {
if (it.life_account_id == curLifeAccountId) {
XPageManager.push(
XRouterPathConstants.MERCHANT_CENTER,
hashMapOf(
Pair(MerchantCenterActivity.EXTRA_IS_MULTI, result.size > 1),
Pair(MerchantCenterActivity.EXTRA_LIFE_ACCOUNT_INFO, it)
)
)
XPageManager.pop(null)
}
}
}
override fun getLifeAccountListFailure(message: String?) {
}
} }
...@@ -11,6 +11,7 @@ import android.util.Log ...@@ -11,6 +11,7 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.megvii.demo.activity.IDCardDetectActivity import com.megvii.demo.activity.IDCardDetectActivity
import com.megvii.demo.utils.Configuration import com.megvii.demo.utils.Configuration
...@@ -25,6 +26,7 @@ import com.yidian.common.http.HttpResult ...@@ -25,6 +26,7 @@ import com.yidian.common.http.HttpResult
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter import com.yidian.shenghuoquan.newscontent.adapter.BottomSelectAdapter
import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean import com.yidian.shenghuoquan.newscontent.bean.BottomSelectBean
import com.yidian.shenghuoquan.newscontent.bean.HintOptionBean
import com.yidian.shenghuoquan.newscontent.constant.Constant import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.FragmentLifeAccountIdCardAuthBinding import com.yidian.shenghuoquan.newscontent.databinding.FragmentLifeAccountIdCardAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
...@@ -34,6 +36,7 @@ import com.yidian.shenghuoquan.newscontent.http.callback.IAuthLiveIdentityCallba ...@@ -34,6 +36,7 @@ import com.yidian.shenghuoquan.newscontent.http.callback.IAuthLiveIdentityCallba
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCheckCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCheckCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.* import com.yidian.shenghuoquan.newscontent.http.httpbean.*
import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog import com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog
import com.yidian.shenghuoquan.newscontent.ui.dialog.HintDialog
import com.yidian.shenghuoquan.newscontent.utils.BitmapUtil import com.yidian.shenghuoquan.newscontent.utils.BitmapUtil
import com.yidian.shenghuoquan.newscontent.utils.FileUtil import com.yidian.shenghuoquan.newscontent.utils.FileUtil
import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil
...@@ -41,6 +44,7 @@ import com.yidian.shenghuoquan.newscontent.utils.KS3Core ...@@ -41,6 +44,7 @@ import com.yidian.shenghuoquan.newscontent.utils.KS3Core
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthIdentityInfoEditView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthIdentityInfoEditView
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthImageView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthImageView
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountFaceAuthView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountFaceAuthView
import com.yidian.shenghuoquan.newscontent.widget.PrivacyAgreementView
import com.yidian.utils.ToastUtil import com.yidian.utils.ToastUtil
import java.io.File import java.io.File
...@@ -55,7 +59,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -55,7 +59,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
IAuthLiveIdentityCallback, LifeAccountAuthImageView.OnLifeAccountAuthImageViewCallback, IAuthLiveIdentityCallback, LifeAccountAuthImageView.OnLifeAccountAuthImageViewCallback,
LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback, LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback,
IAuthIndividualBusinessIdentityCommitCallback, IAuthEnterpriseLiveIdentityCallback, IAuthIndividualBusinessIdentityCommitCallback, IAuthEnterpriseLiveIdentityCallback,
LifeAccountFaceAuthView.OnLifeAccountFaceAuthCallback { LifeAccountFaceAuthView.OnLifeAccountFaceAuthCallback, PrivacyAgreementView.OnPrivacyAgreementCallback {
companion object { companion object {
// 身份证采集页面回传数据 // 身份证采集页面回传数据
...@@ -155,6 +159,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -155,6 +159,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
viewBinding.evIdCardNumber.setOnLifeAccountAuthIdentityInfoEditViewCallback(this) viewBinding.evIdCardNumber.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
viewBinding.evMobile.setOnLifeAccountAuthIdentityInfoEditViewCallback(this) viewBinding.evMobile.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
viewBinding.avFaceAuth.setOnLifeAccountFaceAuthCallback(this) viewBinding.avFaceAuth.setOnLifeAccountFaceAuthCallback(this)
viewBinding.avPrivacyAgreement.setOnPrivacyAgreementCallback(this)
} }
private fun initData() { private fun initData() {
...@@ -492,9 +497,9 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -492,9 +497,9 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
} }
// 检查下一步条件 // 检查下一步条件
if (authType == Constant.TYPE_AUTH_PERSONAL) { if (authType == Constant.TYPE_AUTH_PERSONAL) {
(activity as LifeAccountPersonalAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountPersonalAuthActivity).checkNextCondition() }
} else { } else {
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountEnterpriseAuthActivity).checkNextCondition() }
} }
} }
...@@ -518,9 +523,9 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -518,9 +523,9 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
} }
// 检查下一步条件 // 检查下一步条件
if (authType == Constant.TYPE_AUTH_PERSONAL) { if (authType == Constant.TYPE_AUTH_PERSONAL) {
(activity as LifeAccountPersonalAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountPersonalAuthActivity).checkNextCondition() }
} else { } else {
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountEnterpriseAuthActivity).checkNextCondition() }
} }
} }
...@@ -563,7 +568,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -563,7 +568,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
if (authType == Constant.TYPE_AUTH_PERSONAL) { if (authType == Constant.TYPE_AUTH_PERSONAL) {
ApiService.authLiveIdentity(this) ApiService.authLiveIdentity(this)
// 检查下一步条件 // 检查下一步条件
(activity as LifeAccountPersonalAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountPersonalAuthActivity).checkNextCondition() }
} else { } else {
ApiService.authEnterpriseLiveIdentity( ApiService.authEnterpriseLiveIdentity(
this, this,
...@@ -575,7 +580,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -575,7 +580,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
) )
) )
// 检查下一步条件 // 检查下一步条件
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition() activity?.let { (it as LifeAccountEnterpriseAuthActivity).checkNextCondition() }
} }
} }
} }
...@@ -682,8 +687,21 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -682,8 +687,21 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
) )
} }
override fun authPersonCheckFailure(message: String?) { override fun authPersonCheckFailure(code: Int?, message: String?) {
// 展示错误提示 if (code == Constant.ERROR_CODE_PERSONAL_AUTH_INFO_DUPLICATE) {
// 身份证号已认证并且认证手机号不是当前手机号 弹窗提示
activity?.let {
HintDialog(
it, message.toString(),
arrayListOf(
HintOptionBean(resources.getString(R.string.change)),
HintOptionBean(resources.getString(R.string.login_again))
), it as LifeAccountPersonalAuthActivity
).setRightBtnColor(ContextCompat.getColor(it, R.color.color_FF1852F1)).show()
}
return
}
// 展示输入框下错误提示
when (message) { when (message) {
Constant.ERROR_MESSAGE_REAL_NAME -> { Constant.ERROR_MESSAGE_REAL_NAME -> {
viewBinding.evRealName.showErrorTips( viewBinding.evRealName.showErrorTips(
...@@ -818,7 +836,19 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -818,7 +836,19 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
} }
override fun authIndividualBusinessIdentityCommitFailure(message: String?) { override fun authIndividualBusinessIdentityCommitFailure(message: String?) {
// 展示输入框下错误提示
when (message) {
Constant.ERROR_MESSAGE_REAL_NAME -> {
viewBinding.evRealName.showErrorTips(
resources.getText(R.string.id_card_name_error_tips) as String
)
viewBinding.evRealName.highLightEditContent()
}
Constant.ERROR_MESSAGE_ID_CARD_NUMBER -> {
viewBinding.evIdCardNumber.showErrorTips(resources.getText(R.string.id_card_number_error_tips) as String)
viewBinding.evIdCardNumber.highLightEditContent()
}
}
} }
override fun authEnterpriseLiveIdentitySuccess() { override fun authEnterpriseLiveIdentitySuccess() {
...@@ -847,4 +877,14 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth ...@@ -847,4 +877,14 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
&& LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload && LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload
} }
override fun onCheckPrivacyAgreement(isCheck: Boolean) {
LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement = isCheck
// 检查下一步条件
if (authType == Constant.TYPE_AUTH_PERSONAL) {
(activity as LifeAccountPersonalAuthActivity).checkNextCondition()
} else {
(activity as LifeAccountEnterpriseAuthActivity).checkNextCondition()
}
}
} }
...@@ -4,7 +4,6 @@ import android.os.Bundle ...@@ -4,7 +4,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import android.widget.CompoundButton import android.widget.CompoundButton
import com.orhanobut.hawk.Hawk import com.orhanobut.hawk.Hawk
import com.yidian.common.AppConfig
import com.yidian.common.HawkConfig import com.yidian.common.HawkConfig
import com.yidian.common.XEventConfig import com.yidian.common.XEventConfig
import com.yidian.common.XRouterPathConstants import com.yidian.common.XRouterPathConstants
...@@ -13,9 +12,10 @@ import com.yidian.shenghuoquan.newscontent.R ...@@ -13,9 +12,10 @@ import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountPersonalAuthBinding import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountPersonalAuthBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCompleteCallback import com.yidian.shenghuoquan.newscontent.http.callback.IAuthPersonalCompleteCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IUserLogoutCallBack
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthAuthenticationBean import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthAuthenticationBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthPersonalCompleteBean import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthPersonalCompleteBean
import com.yidian.shenghuoquan.newscontent.ui.ProtocolActivity import com.yidian.shenghuoquan.newscontent.ui.dialog.HintDialog
import com.yidian.shenghuoquan.newscontent.utils.StorageUtil import com.yidian.shenghuoquan.newscontent.utils.StorageUtil
import com.yidian.xarc.xevent.XBaseEvent import com.yidian.xarc.xevent.XBaseEvent
import com.yidian.xarc.xevent.XEventManager import com.yidian.xarc.xevent.XEventManager
...@@ -29,8 +29,8 @@ import org.greenrobot.eventbus.ThreadMode ...@@ -29,8 +29,8 @@ import org.greenrobot.eventbus.ThreadMode
* description: 生活号个人认证 * description: 生活号个人认证
*/ */
class LifeAccountPersonalAuthActivity : class LifeAccountPersonalAuthActivity :
BaseActivity<ActivityLifeAccountPersonalAuthBinding>(), BaseActivity<ActivityLifeAccountPersonalAuthBinding>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener,
View.OnClickListener, CompoundButton.OnCheckedChangeListener, IAuthPersonalCompleteCallback { IAuthPersonalCompleteCallback, HintDialog.OnHintOptionCallback, IUserLogoutCallBack {
companion object { companion object {
// 认证数据 // 认证数据
...@@ -41,7 +41,7 @@ class LifeAccountPersonalAuthActivity : ...@@ -41,7 +41,7 @@ class LifeAccountPersonalAuthActivity :
/** /**
* 当前fragment * 当前fragment
*/ */
private val fragment by lazy { LifeAccountIDCardAuthFragment() } private lateinit var curFragment: LifeAccountIDCardAuthFragment
/** /**
* 认证数据 还原认证流程用 * 认证数据 还原认证流程用
...@@ -87,28 +87,26 @@ class LifeAccountPersonalAuthActivity : ...@@ -87,28 +87,26 @@ class LifeAccountPersonalAuthActivity :
private fun initListener() { private fun initListener() {
viewBind.svOccupation.setOnClickListener(this) viewBind.svOccupation.setOnClickListener(this)
viewBind.cbProtocol.setOnCheckedChangeListener(this)
viewBind.btnNext.setOnClickListener(this) viewBind.btnNext.setOnClickListener(this)
viewBind.tvPrivacyCertification.setOnClickListener(this)
viewBind.tvUserAgreement.setOnClickListener(this)
} }
private fun initData() { private fun initData() {
// 如果有已存在的认证流程则还原进度 // 如果有已存在的认证流程则还原进度
authData?.let { LifeAccountAuthDataManager.generatePersonalAuthData(it) } authData?.let { LifeAccountAuthDataManager.generatePersonalAuthData(it) }
authData?.occupation?.let { viewBind.svOccupation.setContentResult(it) } authData?.occupation?.let { viewBind.svOccupation.setContentResult(it) }
curFragment = LifeAccountIDCardAuthFragment()
val bundle = Bundle() val bundle = Bundle()
bundle.putSerializable(LifeAccountIDCardAuthFragment.EXTRA_AUTH_DATA, authData) bundle.putSerializable(LifeAccountIDCardAuthFragment.EXTRA_AUTH_DATA, authData)
fragment.arguments = bundle curFragment.arguments = bundle
supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment).commit() .add(R.id.fragment_container, curFragment).commit()
} }
/** /**
* 检查是否可以进行下一步 * 检查是否可以进行下一步
*/ */
fun checkNextCondition() { fun checkNextCondition() {
if (viewBind.cbProtocol.isChecked if (LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement
&& !LifeAccountAuthDataManager.personalAuthData.occupation.isNullOrEmpty() && !LifeAccountAuthDataManager.personalAuthData.occupation.isNullOrEmpty()
&& LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass && LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass
) { ) {
...@@ -127,6 +125,21 @@ class LifeAccountPersonalAuthActivity : ...@@ -127,6 +125,21 @@ class LifeAccountPersonalAuthActivity :
viewBind.svOccupation.enableSelect(false) viewBind.svOccupation.enableSelect(false)
} }
/**
* 清空认证数据
* 避免在升级企业认证时出现数据异常
*/
private fun clearLifeAccountAuthData() {
LifeAccountAuthDataManager.personalAuthData.isAgreePrivacyAgreement = false
LifeAccountAuthDataManager.personalAuthData.occupation = null
LifeAccountAuthDataManager.personalAuthData.isFaceAuthPass = false
LifeAccountAuthDataManager.personalAuthData.realName = null
LifeAccountAuthDataManager.personalAuthData.idCardNum = null
LifeAccountAuthDataManager.personalAuthData.occupation = null
LifeAccountAuthDataManager.personalAuthData.isIDCardPortraitFaceUpload = false
LifeAccountAuthDataManager.personalAuthData.isIDCardNationalEmblemFaceUpload = false
}
override fun onClick(v: View?) { override fun onClick(v: View?) {
when (v?.id) { when (v?.id) {
R.id.sv_occupation -> { R.id.sv_occupation -> {
...@@ -136,19 +149,6 @@ class LifeAccountPersonalAuthActivity : ...@@ -136,19 +149,6 @@ class LifeAccountPersonalAuthActivity :
// 个人认证 完成认证 // 个人认证 完成认证
ApiService.authComplete(this, lifeAccountId?.let { hashMapOf(Pair(EXTRA_LIFE_ACCOUNT_ID, it)) } ?: hashMapOf()) ApiService.authComplete(this, lifeAccountId?.let { hashMapOf(Pair(EXTRA_LIFE_ACCOUNT_ID, it)) } ?: hashMapOf())
} }
R.id.tv_privacy_certification -> {
val urlMap = HashMap<String, String>()
urlMap[ProtocolActivity.ProtocolUrlKey] = AppConfig.privacyPolicyStatement
XPageManager.push(XRouterPathConstants.PROTOCOL, urlMap)
}
R.id.tv_user_agreement -> {
val urlMap = HashMap<String, String>()
urlMap[ProtocolActivity.ProtocolUrlKey] = AppConfig.userProtocol
XPageManager.push(XRouterPathConstants.PROTOCOL, urlMap)
}
} }
} }
...@@ -160,6 +160,8 @@ class LifeAccountPersonalAuthActivity : ...@@ -160,6 +160,8 @@ class LifeAccountPersonalAuthActivity :
override fun authPersonalCompleteSuccess(result: AuthPersonalCompleteBean.Response?) { override fun authPersonalCompleteSuccess(result: AuthPersonalCompleteBean.Response?) {
// 本地保存生活号id // 本地保存生活号id
StorageUtil.putLifeAccountId(result?.life_account_id) StorageUtil.putLifeAccountId(result?.life_account_id)
// 清空认证数据
clearLifeAccountAuthData()
// 跳转个人认证成功页 // 跳转个人认证成功页
XPageManager.push( XPageManager.push(
XRouterPathConstants.LIFE_ACCOUNT_PERSONAL_AUTH_COMPLETE, XRouterPathConstants.LIFE_ACCOUNT_PERSONAL_AUTH_COMPLETE,
...@@ -197,4 +199,25 @@ class LifeAccountPersonalAuthActivity : ...@@ -197,4 +199,25 @@ class LifeAccountPersonalAuthActivity :
} }
} }
override fun onLeftOption() {
// 更换认证信息
// 清空认证数据
clearLifeAccountAuthData()
// 清空职业标签回显
viewBind.svOccupation.clearContentResult()
// 清空身份信息页 直接替换fragment
val targetFragment = LifeAccountIDCardAuthFragment()
supportFragmentManager.beginTransaction().remove(curFragment).add(R.id.fragment_container, targetFragment).commit()
curFragment = targetFragment
}
override fun onRightOption() {
// 重新登录
ApiService.userLogout(this)
}
override fun userLogoutSuccess() {
XPageManager.push(XRouterPathConstants.LOGIN_LIFE_CIRCLE, null)
}
} }
...@@ -52,8 +52,11 @@ class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyName ...@@ -52,8 +52,11 @@ class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyName
private fun initView() { private fun initView() {
// 默认保存按钮不可用 // 默认保存按钮不可用
viewBind.bvTopBar.setActionEnable(false) viewBind.bvTopBar.setActionEnable(false)
// 生活号名称长度限制24个字符 // 生活号名称长度限制24个字符 禁止输入Emoji
viewBind.evLifeAccountName.setInputFilters(InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this)) viewBind.evLifeAccountName.setInputFilters(
InputFilterUtil.getLengthFilter(Constant.MAX_LENGTH_LIFE_ACCOUNT_NAME, this),
InputFilterUtil.getEmojiFilter()
)
} }
private fun initListener() { private fun initListener() {
......
...@@ -16,10 +16,7 @@ import com.yidian.shenghuoquan.newscontent.bean.HintOptionBean ...@@ -16,10 +16,7 @@ import com.yidian.shenghuoquan.newscontent.bean.HintOptionBean
import com.yidian.shenghuoquan.newscontent.constant.Constant import com.yidian.shenghuoquan.newscontent.constant.Constant
import com.yidian.shenghuoquan.newscontent.databinding.ActivityMerchantCenterBinding import com.yidian.shenghuoquan.newscontent.databinding.ActivityMerchantCenterBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.http.callback.IAuthMerchantCheckCallback import com.yidian.shenghuoquan.newscontent.http.callback.*
import com.yidian.shenghuoquan.newscontent.http.callback.IGetConfigListCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountInfoByIdCallback
import com.yidian.shenghuoquan.newscontent.http.callback.IGetLifeAccountListCallback
import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthMerchantCheckBean import com.yidian.shenghuoquan.newscontent.http.httpbean.AuthMerchantCheckBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.GetConfigListBean import com.yidian.shenghuoquan.newscontent.http.httpbean.GetConfigListBean
import com.yidian.shenghuoquan.newscontent.http.httpbean.GetLifeAccountInfoByIdBean import com.yidian.shenghuoquan.newscontent.http.httpbean.GetLifeAccountInfoByIdBean
...@@ -28,6 +25,7 @@ import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountAuthActivity ...@@ -28,6 +25,7 @@ import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountAuthActivity
import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountEnterpriseAuthActivity import com.yidian.shenghuoquan.newscontent.ui.auth.LifeAccountEnterpriseAuthActivity
import com.yidian.shenghuoquan.newscontent.ui.dialog.HintDialog import com.yidian.shenghuoquan.newscontent.ui.dialog.HintDialog
import com.yidian.shenghuoquan.newscontent.ui.dialog.MerchantCenterBottomHintDialog import com.yidian.shenghuoquan.newscontent.ui.dialog.MerchantCenterBottomHintDialog
import com.yidian.shenghuoquan.newscontent.utils.StorageUtil
import com.yidian.shenghuoquan.newscontent.widget.CommonTopBarView import com.yidian.shenghuoquan.newscontent.widget.CommonTopBarView
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountLabelView import com.yidian.shenghuoquan.newscontent.widget.LifeAccountLabelView
import com.yidian.shenghuoquan.newscontent.widget.MerchantAssetView import com.yidian.shenghuoquan.newscontent.widget.MerchantAssetView
...@@ -47,7 +45,8 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -47,7 +45,8 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
IGetConfigListCallback, MerchantSwitchDialog.OnMerchantSwitchCallback, IGetConfigListCallback, MerchantSwitchDialog.OnMerchantSwitchCallback,
LifeAccountLabelView.OnLifeAccountLabelCallback, IGetLifeAccountInfoByIdCallback, LifeAccountLabelView.OnLifeAccountLabelCallback, IGetLifeAccountInfoByIdCallback,
MerchantCenterBottomHintDialog.OnMerchantCenterBottomHintCallback, IAuthMerchantCheckCallback, MerchantCenterBottomHintDialog.OnMerchantCenterBottomHintCallback, IAuthMerchantCheckCallback,
MerchantServiceFunctionAdapter.OnItemClickListener, CommonTopBarView.OnCommonTopBarActionCallback, OnRefreshListener { MerchantServiceFunctionAdapter.OnItemClickListener, CommonTopBarView.OnCommonTopBarActionCallback, OnRefreshListener,
IUserLogoutCallBack {
companion object { companion object {
// 传递的生活号信息 // 传递的生活号信息
...@@ -73,6 +72,10 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -73,6 +72,10 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
* 功能-页面表 * 功能-页面表
*/ */
private val functionPageMap by lazy { HashMap<Int, String?>() } private val functionPageMap by lazy { HashMap<Int, String?>() }
/**
* 当前生活号状态下功能集
*/
private val functionPermissionList by lazy { ArrayList<Int>() } private val functionPermissionList by lazy { ArrayList<Int>() }
override fun createViewBinding(): ActivityMerchantCenterBinding { override fun createViewBinding(): ActivityMerchantCenterBinding {
...@@ -147,9 +150,9 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -147,9 +150,9 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
viewBind.lvLifeAccountLabel.setLifeAccountData(data) viewBind.lvLifeAccountLabel.setLifeAccountData(data)
// 展示底部浮窗 // 展示底部浮窗
showMerchantCenterBottomHint(data) showMerchantCenterBottomHint(data)
// 生成当前生活号状态下的功能集 // 生活号状态变更 生成当前生活号状态下的功能集
generateFunctionPermissionMap(curConfigData) generateFunctionPermissionMap(curConfigData)
// 过滤商户服务数据 // 生活号状态变更 过滤商户服务数据
filterMerchantServiceData(curConfigData) filterMerchantServiceData(curConfigData)
} }
...@@ -159,17 +162,14 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -159,17 +162,14 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
* @param data 当前生活号数据 * @param data 当前生活号数据
*/ */
private fun showMerchantCenterBottomHint(data: LifeAccountItemBean.Response) { private fun showMerchantCenterBottomHint(data: LifeAccountItemBean.Response) {
if (data.life_account_type == Constant.TYPE_LIFE_ACCOUNT_PERSONAL if (data.life_account_auth_status == Constant.STATUS_AUTH_NOT && data.enterprise_auth_record_id == 0) {
&& data.life_account_auth_status == Constant.STATUS_AUTH_NOT
&& data.enterprise_audit_status == 0
) {
// 当前是个人未认证生活号 提示认证升级 // 当前是个人未认证生活号 提示认证升级
MerchantCenterBottomHintDialog( MerchantCenterBottomHintDialog(
this, this,
MerchantCenterBottomHintDialog.TYPE_AUTH_UPGRADE, this MerchantCenterBottomHintDialog.TYPE_AUTH_UPGRADE, this
).show() ).show()
} }
if (data.enterprise_audit_status == Constant.STATUS_AUDIT_REJECT) { if (data.enterprise_audit_status == Constant.STATUS_AUDIT_REJECT && data.role_type != Constant.TYPE_ROLE_ORDINARY) {
// 当前企业认证驳回 提示修改 // 当前企业认证驳回 提示修改
MerchantCenterBottomHintDialog( MerchantCenterBottomHintDialog(
this, this,
...@@ -208,7 +208,19 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -208,7 +208,19 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
private fun generateFunctionPermissionMap(data: List<GetConfigListBean.Item>) { private fun generateFunctionPermissionMap(data: List<GetConfigListBean.Item>) {
if (data.isEmpty()) return if (data.isEmpty()) return
functionPermissionList.clear() functionPermissionList.clear()
when (curLifeAccount.tag.tag_key) { when (getCurLifeAccountLabel()) {
Constant.LIFE_ACCOUNT_TAG_ENTERPRISE_AUTH -> {
// 企业认证
// 所有服务都可用
functionPermissionList.add(data[0].functions[0].function_id)
functionPermissionList.add(data[0].functions[1].function_id)
functionPermissionList.add(data[1].functions[0].function_id)
functionPermissionList.add(data[1].functions[1].function_id)
functionPermissionList.add(data[2].functions[0].function_id)
functionPermissionList.add(data[2].functions[1].function_id)
functionPermissionList.add(data[2].functions[2].function_id)
functionPermissionList.add(data[2].functions[3].function_id)
}
Constant.LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH -> { Constant.LIFE_ACCOUNT_TAG_COMMON_ENTERPRISE_AUTH -> {
// 普通企业认证 // 普通企业认证
// 所有服务都可用 // 所有服务都可用
...@@ -267,7 +279,7 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -267,7 +279,7 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
/** /**
* 过滤商户服务数据 * 过滤商户服务数据
* 目前处理个人认证下不展示管理服务 * 目前处理个人认证状态下和企业员工角色下不展示管理服务
*/ */
private fun filterMerchantServiceData(data: List<GetConfigListBean.Item>) { private fun filterMerchantServiceData(data: List<GetConfigListBean.Item>) {
val result = ArrayList<GetConfigListBean.Item>(data.size) val result = ArrayList<GetConfigListBean.Item>(data.size)
...@@ -277,7 +289,7 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -277,7 +289,7 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
val group = next() val group = next()
if (group.group_id == Constant.MERCHANT_SERVICE_GROUP_MANAGEMENT) { if (group.group_id == Constant.MERCHANT_SERVICE_GROUP_MANAGEMENT) {
// 个人认证或企业员工不展示管理服务 // 个人认证或企业员工不展示管理服务
if (curLifeAccount.tag.tag_key == Constant.LIFE_ACCOUNT_TAG_PERSONAL_AUTH || curLifeAccount.role_type == Constant.TYPE_ROLE_ORDINARY) { if (getCurLifeAccountLabel() == Constant.LIFE_ACCOUNT_TAG_PERSONAL_AUTH || curLifeAccount.role_type == Constant.TYPE_ROLE_ORDINARY) {
continue continue
} }
} }
...@@ -288,6 +300,26 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -288,6 +300,26 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
(viewBind.rvServiceGroup.adapter as MerchantServiceGroupAdapter).updateData(result) (viewBind.rvServiceGroup.adapter as MerchantServiceGroupAdapter).updateData(result)
} }
/**
* 获取当前生活号标签
* 目前不支持区分个体工商户和普通企业
*/
private fun getCurLifeAccountLabel(): Int {
when (curLifeAccount.enterprise_audit_status) {
Constant.STATUS_AUDIT_UNDER -> return Constant.LIFE_ACCOUNT_TAG_AUDIT_UNDER // 审核中
Constant.STATUS_AUDIT_REJECT -> return Constant.LIFE_ACCOUNT_TAG_AUTH_REJECT // 认证驳回
}
when (curLifeAccount.life_account_auth_status) {
Constant.STATUS_AUTH_FINISH -> {
when (curLifeAccount.life_account_type) {
Constant.TYPE_LIFE_ACCOUNT_PERSONAL -> return Constant.LIFE_ACCOUNT_TAG_PERSONAL_AUTH // 个人已认证
Constant.TYPE_LIFE_ACCOUNT_ENTERPRISE -> return Constant.TYPE_LIFE_ACCOUNT_ENTERPRISE // 企业已认证
}
}
}
return Constant.LIFE_ACCOUNT_TAG_NOT_AUTH // 个人未认证
}
override fun getConfigListSuccess(result: GetConfigListBean.Response?) { override fun getConfigListSuccess(result: GetConfigListBean.Response?) {
result?.let { result?.let {
// 备份配置数据 // 备份配置数据
...@@ -485,6 +517,23 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -485,6 +517,23 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
override fun getLifeAccountListSuccess(result: ArrayList<LifeAccountItemBean.Response>?) { override fun getLifeAccountListSuccess(result: ArrayList<LifeAccountItemBean.Response>?) {
// 刷新成功 // 刷新成功
refreshLayout.finishRefresh(true) refreshLayout.finishRefresh(true)
if (result?.size == 0) {
// 如果当前无生活号则退出登录
ToastUtil.showToast(this@MerchantCenterActivity, resources.getString(R.string.no_life_account))
ApiService.userLogout(this@MerchantCenterActivity)
return
}
if (result?.contains(curLifeAccount) == false) {
// 当前选择的生活号已不存在则切换第一个生活号 目前为企业员工被解除关系会触发
curLifeAccount = result[0]
// 更新本地存储的生活号id
StorageUtil.putLifeAccountId(result[0].life_account_id)
// 刷新数据
refreshMerchantCenterData(result[0])
// 切换主体入口是否展示判断
viewBind.bvTopBar.setActionVisibility(result.size > 1)
return
}
result?.forEach { result?.forEach {
if (curLifeAccount.life_account_id == it.life_account_id) { if (curLifeAccount.life_account_id == it.life_account_id) {
curLifeAccount = it curLifeAccount = it
...@@ -504,4 +553,8 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), ...@@ -504,4 +553,8 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(),
} }
}) })
} }
override fun userLogoutSuccess() {
XPageManager.push(XRouterPathConstants.LOGIN_LIFE_CIRCLE, null)
}
} }
...@@ -93,12 +93,15 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha ...@@ -93,12 +93,15 @@ class MerchantInfoActivity : BaseActivity<ActivityMerchantInfoBinding>(), Mercha
if (lifeAccountInfo?.audit_status == Constant.STATUS_AUDIT_REJECT) { if (lifeAccountInfo?.audit_status == Constant.STATUS_AUDIT_REJECT) {
// 认证驳回 // 认证驳回
viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.auth_reject)) viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.auth_reject))
viewBind.ivLifeAccountAuth.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.MODIFY_AUTH) if (lifeAccountInfo?.role_type != Constant.TYPE_ROLE_ORDINARY) {
// 企业员工不允许修改认证信息
viewBind.ivLifeAccountAuth.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.MODIFY_AUTH)
}
return return
} }
// 认证状态 // 认证状态
if (lifeAccountInfo?.life_account_auth_status == Constant.STATUS_AUTH_NOT && lifeAccountInfo?.enterprise_auth_record_id == null) { if (lifeAccountInfo?.life_account_auth_status == Constant.STATUS_AUTH_NOT && lifeAccountInfo?.enterprise_auth_record_id == 0) {
// 个人未认证生活号 无企业审核记录id // 个人未认证生活号 企业审核记录id为0
viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.not_auth)) viewBind.ivLifeAccountAuth.fillContent(resources.getString(R.string.not_auth))
viewBind.ivLifeAccountAuth.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.NOT_AUTH) viewBind.ivLifeAccountAuth.showAuthEntry(MerchantInfoView.LifeAccountAuthStatus.NOT_AUTH)
return return
......
...@@ -89,6 +89,21 @@ class InputFilterUtil { ...@@ -89,6 +89,21 @@ class InputFilterUtil {
return@InputFilter null return@InputFilter null
} }
} }
/**
* Emoji过滤
*/
fun getEmojiFilter(): InputFilter {
return InputFilter { source, _, _, _, _, _ ->
val pattern = Pattern.compile(
"""\x{1F3F4}\x{E0067}\x{E0062}(?:\x{E0077}\x{E006C}\x{E0073}|\x{E0073}\x{E0063}\x{E0074}|\x{E0065}\x{E006E}\x{E0067})\x{E007F}|(?:\x{1F9D1}\x{1F3FF}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F9D1}|\x{1F469}\x{1F3FF}\u200D\x{1F91D}\u200D[\x{1F468}\x{1F469}])[\x{1F3FB}-\x{1F3FE}]|(?:\x{1F9D1}\x{1F3FE}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F9D1}|\x{1F469}\x{1F3FE}\u200D\x{1F91D}\u200D[\x{1F468}\x{1F469}])[\x{1F3FB}-\x{1F3FD}\x{1F3FF}]|(?:\x{1F9D1}\x{1F3FD}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F9D1}|\x{1F469}\x{1F3FD}\u200D\x{1F91D}\u200D[\x{1F468}\x{1F469}])[\x{1F3FB}\x{1F3FC}\x{1F3FE}\x{1F3FF}]|(?:\x{1F9D1}\x{1F3FC}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F9D1}|\x{1F469}\x{1F3FC}\u200D\x{1F91D}\u200D[\x{1F468}\x{1F469}])[\x{1F3FB}\x{1F3FD}-\x{1F3FF}]|(?:\x{1F9D1}\x{1F3FB}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F9D1}|\x{1F469}\x{1F3FB}\u200D\x{1F91D}\u200D[\x{1F468}\x{1F469}])[\x{1F3FC}-\x{1F3FF}]|\x{1F468}(?:\x{1F3FB}(?:\u200D(?:\u2764\uFE0F\u200D(?:\x{1F48B}\u200D\x{1F468}[\x{1F3FB}-\x{1F3FF}]|\x{1F468}[\x{1F3FB}-\x{1F3FF}])|\x{1F91D}\u200D\x{1F468}[\x{1F3FC}-\x{1F3FF}]|[\u2695\u2696\u2708]\uFE0F|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]))?|[\x{1F3FC}-\x{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D\x{1F468}[\x{1F3FB}-\x{1F3FF}]|\x{1F468}[\x{1F3FB}-\x{1F3FF}])|\u200D(?:\u2764\uFE0F\u200D(?:\x{1F48B}\u200D)?\x{1F468}|[\x{1F468}\x{1F469}]\u200D(?:\x{1F466}\u200D\x{1F466}|\x{1F467}\u200D[\x{1F466}\x{1F467}])|\x{1F466}\u200D\x{1F466}|\x{1F467}\u200D[\x{1F466}\x{1F467}]|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FF}\u200D(?:\x{1F91D}\u200D\x{1F468}[\x{1F3FB}-\x{1F3FE}]|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FE}\u200D(?:\x{1F91D}\u200D\x{1F468}[\x{1F3FB}-\x{1F3FD}\x{1F3FF}]|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FD}\u200D(?:\x{1F91D}\u200D\x{1F468}[\x{1F3FB}\x{1F3FC}\x{1F3FE}\x{1F3FF}]|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FC}\u200D(?:\x{1F91D}\u200D\x{1F468}[\x{1F3FB}\x{1F3FD}-\x{1F3FF}]|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|(?:\x{1F3FF}\u200D[\u2695\u2696\u2708]|\x{1F3FE}\u200D[\u2695\u2696\u2708]|\x{1F3FD}\u200D[\u2695\u2696\u2708]|\x{1F3FC}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:[\x{1F468}\x{1F469}]\u200D[\x{1F466}\x{1F467}]|[\x{1F466}\x{1F467}])|\x{1F3FF}|\x{1F3FE}|\x{1F3FD}|\x{1F3FC})?|(?:\x{1F469}(?:\x{1F3FB}\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D[\x{1F468}\x{1F469}]|[\x{1F468}\x{1F469}])|[\x{1F3FC}-\x{1F3FF}]\u200D\u2764\uFE0F\u200D(?:\x{1F48B}\u200D[\x{1F468}\x{1F469}]|[\x{1F468}\x{1F469}]))|\x{1F9D1}[\x{1F3FB}-\x{1F3FF}]\u200D\x{1F91D}\u200D\x{1F9D1})[\x{1F3FB}-\x{1F3FF}]|\x{1F469}\u200D\x{1F469}\u200D(?:\x{1F466}\u200D\x{1F466}|\x{1F467}\u200D[\x{1F466}\x{1F467}])|\x{1F469}(?:\u200D(?:\u2764\uFE0F\u200D(?:\x{1F48B}\u200D[\x{1F468}\x{1F469}]|[\x{1F468}\x{1F469}])|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FF}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FE}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FD}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FC}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FB}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F9D1}(?:\u200D(?:\x{1F91D}\u200D\x{1F9D1}|[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F3FF}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FE}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FD}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FC}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}]|\x{1F3FB}\u200D[\x{1F33E}\x{1F373}\x{1F37C}\x{1F384}\x{1F393}\x{1F3A4}\x{1F3A8}\x{1F3EB}\x{1F3ED}\x{1F4BB}\x{1F4BC}\x{1F527}\x{1F52C}\x{1F680}\x{1F692}\x{1F9AF}-\x{1F9B3}\x{1F9BC}\x{1F9BD}])|\x{1F469}\u200D\x{1F466}\u200D\x{1F466}|\x{1F469}\u200D\x{1F469}\u200D[\x{1F466}\x{1F467}]|\x{1F469}\u200D\x{1F467}\u200D[\x{1F466}\x{1F467}]|(?:\x{1F441}\uFE0F\u200D\x{1F5E8}|\x{1F9D1}(?:\x{1F3FF}\u200D[\u2695\u2696\u2708]|\x{1F3FE}\u200D[\u2695\u2696\u2708]|\x{1F3FD}\u200D[\u2695\u2696\u2708]|\x{1F3FC}\u200D[\u2695\u2696\u2708]|\x{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\x{1F469}(?:\x{1F3FF}\u200D[\u2695\u2696\u2708]|\x{1F3FE}\u200D[\u2695\u2696\u2708]|\x{1F3FD}\u200D[\u2695\u2696\u2708]|\x{1F3FC}\u200D[\u2695\u2696\u2708]|\x{1F3FB}\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\x{1F636}\u200D\x{1F32B}|\x{1F3F3}\uFE0F\u200D\u26A7|\x{1F43B}\u200D\u2744|(?:[\x{1F3C3}\x{1F3C4}\x{1F3CA}\x{1F46E}\x{1F470}\x{1F471}\x{1F473}\x{1F477}\x{1F481}\x{1F482}\x{1F486}\x{1F487}\x{1F645}-\x{1F647}\x{1F64B}\x{1F64D}\x{1F64E}\x{1F6A3}\x{1F6B4}-\x{1F6B6}\x{1F926}\x{1F935}\x{1F937}-\x{1F939}\x{1F93D}\x{1F93E}\x{1F9B8}\x{1F9B9}\x{1F9CD}-\x{1F9CF}\x{1F9D4}\x{1F9D6}-\x{1F9DD}][\x{1F3FB}-\x{1F3FF}]|[\x{1F46F}\x{1F93C}\x{1F9DE}\x{1F9DF}])\u200D[\u2640\u2642]|[\u26F9\x{1F3CB}\x{1F3CC}\x{1F575}][\uFE0F\x{1F3FB}-\x{1F3FF}]\u200D[\u2640\u2642]|\x{1F3F4}\u200D\u2620|[\x{1F3C3}\x{1F3C4}\x{1F3CA}\x{1F46E}\x{1F470}\x{1F471}\x{1F473}\x{1F477}\x{1F481}\x{1F482}\x{1F486}\x{1F487}\x{1F645}-\x{1F647}\x{1F64B}\x{1F64D}\x{1F64E}\x{1F6A3}\x{1F6B4}-\x{1F6B6}\x{1F926}\x{1F935}\x{1F937}-\x{1F939}\x{1F93D}\x{1F93E}\x{1F9B8}\x{1F9B9}\x{1F9CD}-\x{1F9CF}\x{1F9D4}\x{1F9D6}-\x{1F9DD}]\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299\x{1F170}\x{1F171}\x{1F17E}\x{1F17F}\x{1F202}\x{1F237}\x{1F321}\x{1F324}-\x{1F32C}\x{1F336}\x{1F37D}\x{1F396}\x{1F397}\x{1F399}-\x{1F39B}\x{1F39E}\x{1F39F}\x{1F3CD}\x{1F3CE}\x{1F3D4}-\x{1F3DF}\x{1F3F5}\x{1F3F7}\x{1F43F}\x{1F4FD}\x{1F549}\x{1F54A}\x{1F56F}\x{1F570}\x{1F573}\x{1F576}-\x{1F579}\x{1F587}\x{1F58A}-\x{1F58D}\x{1F5A5}\x{1F5A8}\x{1F5B1}\x{1F5B2}\x{1F5BC}\x{1F5C2}-\x{1F5C4}\x{1F5D1}-\x{1F5D3}\x{1F5DC}-\x{1F5DE}\x{1F5E1}\x{1F5E3}\x{1F5E8}\x{1F5EF}\x{1F5F3}\x{1F5FA}\x{1F6CB}\x{1F6CD}-\x{1F6CF}\x{1F6E0}-\x{1F6E5}\x{1F6E9}\x{1F6F0}\x{1F6F3}])\uFE0F|\x{1F3F3}\uFE0F\u200D\x{1F308}|\x{1F469}\u200D\x{1F467}|\x{1F469}\u200D\x{1F466}|\x{1F635}\u200D\x{1F4AB}|\x{1F62E}\u200D\x{1F4A8}|\x{1F415}\u200D\x{1F9BA}|\x{1F9D1}(?:\x{1F3FF}|\x{1F3FE}|\x{1F3FD}|\x{1F3FC}|\x{1F3FB})?|\x{1F469}(?:\x{1F3FF}|\x{1F3FE}|\x{1F3FD}|\x{1F3FC}|\x{1F3FB})?|\x{1F1FD}\x{1F1F0}|\x{1F1F6}\x{1F1E6}|\x{1F1F4}\x{1F1F2}|\x{1F408}\u200D\u2B1B|\u2764\uFE0F\u200D[\x{1F525}\x{1FA79}]|\x{1F441}\uFE0F|\x{1F3F3}\uFE0F|\x{1F1FF}[\x{1F1E6}\x{1F1F2}\x{1F1FC}]|\x{1F1FE}[\x{1F1EA}\x{1F1F9}]|\x{1F1FC}[\x{1F1EB}\x{1F1F8}]|\x{1F1FB}[\x{1F1E6}\x{1F1E8}\x{1F1EA}\x{1F1EC}\x{1F1EE}\x{1F1F3}\x{1F1FA}]|\x{1F1FA}[\x{1F1E6}\x{1F1EC}\x{1F1F2}\x{1F1F3}\x{1F1F8}\x{1F1FE}\x{1F1FF}]|\x{1F1F9}[\x{1F1E6}\x{1F1E8}\x{1F1E9}\x{1F1EB}-\x{1F1ED}\x{1F1EF}-\x{1F1F4}\x{1F1F7}\x{1F1F9}\x{1F1FB}\x{1F1FC}\x{1F1FF}]|\x{1F1F8}[\x{1F1E6}-\x{1F1EA}\x{1F1EC}-\x{1F1F4}\x{1F1F7}-\x{1F1F9}\x{1F1FB}\x{1F1FD}-\x{1F1FF}]|\x{1F1F7}[\x{1F1EA}\x{1F1F4}\x{1F1F8}\x{1F1FA}\x{1F1FC}]|\x{1F1F5}[\x{1F1E6}\x{1F1EA}-\x{1F1ED}\x{1F1F0}-\x{1F1F3}\x{1F1F7}-\x{1F1F9}\x{1F1FC}\x{1F1FE}]|\x{1F1F3}[\x{1F1E6}\x{1F1E8}\x{1F1EA}-\x{1F1EC}\x{1F1EE}\x{1F1F1}\x{1F1F4}\x{1F1F5}\x{1F1F7}\x{1F1FA}\x{1F1FF}]|\x{1F1F2}[\x{1F1E6}\x{1F1E8}-\x{1F1ED}\x{1F1F0}-\x{1F1FF}]|\x{1F1F1}[\x{1F1E6}-\x{1F1E8}\x{1F1EE}\x{1F1F0}\x{1F1F7}-\x{1F1FB}\x{1F1FE}]|\x{1F1F0}[\x{1F1EA}\x{1F1EC}-\x{1F1EE}\x{1F1F2}\x{1F1F3}\x{1F1F5}\x{1F1F7}\x{1F1FC}\x{1F1FE}\x{1F1FF}]|\x{1F1EF}[\x{1F1EA}\x{1F1F2}\x{1F1F4}\x{1F1F5}]|\x{1F1EE}[\x{1F1E8}-\x{1F1EA}\x{1F1F1}-\x{1F1F4}\x{1F1F6}-\x{1F1F9}]|\x{1F1ED}[\x{1F1F0}\x{1F1F2}\x{1F1F3}\x{1F1F7}\x{1F1F9}\x{1F1FA}]|\x{1F1EC}[\x{1F1E6}\x{1F1E7}\x{1F1E9}-\x{1F1EE}\x{1F1F1}-\x{1F1F3}\x{1F1F5}-\x{1F1FA}\x{1F1FC}\x{1F1FE}]|\x{1F1EB}[\x{1F1EE}-\x{1F1F0}\x{1F1F2}\x{1F1F4}\x{1F1F7}]|\x{1F1EA}[\x{1F1E6}\x{1F1E8}\x{1F1EA}\x{1F1EC}\x{1F1ED}\x{1F1F7}-\x{1F1FA}]|\x{1F1E9}[\x{1F1EA}\x{1F1EC}\x{1F1EF}\x{1F1F0}\x{1F1F2}\x{1F1F4}\x{1F1FF}]|\x{1F1E8}[\x{1F1E6}\x{1F1E8}\x{1F1E9}\x{1F1EB}-\x{1F1EE}\x{1F1F0}-\x{1F1F5}\x{1F1F7}\x{1F1FA}-\x{1F1FF}]|\x{1F1E7}[\x{1F1E6}\x{1F1E7}\x{1F1E9}-\x{1F1EF}\x{1F1F1}-\x{1F1F4}\x{1F1F6}-\x{1F1F9}\x{1F1FB}\x{1F1FC}\x{1F1FE}\x{1F1FF}]|\x{1F1E6}[\x{1F1E8}-\x{1F1EC}\x{1F1EE}\x{1F1F1}\x{1F1F2}\x{1F1F4}\x{1F1F6}-\x{1F1FA}\x{1F1FC}\x{1F1FD}\x{1F1FF}]|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|[\x{1F3C3}\x{1F3C4}\x{1F3CA}\x{1F46E}\x{1F470}\x{1F471}\x{1F473}\x{1F477}\x{1F481}\x{1F482}\x{1F486}\x{1F487}\x{1F645}-\x{1F647}\x{1F64B}\x{1F64D}\x{1F64E}\x{1F6A3}\x{1F6B4}-\x{1F6B6}\x{1F926}\x{1F935}\x{1F937}-\x{1F939}\x{1F93D}\x{1F93E}\x{1F9B8}\x{1F9B9}\x{1F9CD}-\x{1F9CF}\x{1F9D4}\x{1F9D6}-\x{1F9DD}][\x{1F3FB}-\x{1F3FF}]|[\u26F9\x{1F3CB}\x{1F3CC}\x{1F575}][\uFE0F\x{1F3FB}-\x{1F3FF}]|\x{1F3F4}|[\u270A\u270B\x{1F385}\x{1F3C2}\x{1F3C7}\x{1F442}\x{1F443}\x{1F446}-\x{1F450}\x{1F466}\x{1F467}\x{1F46B}-\x{1F46D}\x{1F472}\x{1F474}-\x{1F476}\x{1F478}\x{1F47C}\x{1F483}\x{1F485}\x{1F48F}\x{1F491}\x{1F4AA}\x{1F57A}\x{1F595}\x{1F596}\x{1F64C}\x{1F64F}\x{1F6C0}\x{1F6CC}\x{1F90C}\x{1F90F}\x{1F918}-\x{1F91C}\x{1F91E}\x{1F91F}\x{1F930}-\x{1F934}\x{1F936}\x{1F977}\x{1F9B5}\x{1F9B6}\x{1F9BB}\x{1F9D2}\x{1F9D3}\x{1F9D5}][\x{1F3FB}-\x{1F3FF}]|[\u261D\u270C\u270D\x{1F574}\x{1F590}][\uFE0F\x{1F3FB}-\x{1F3FF}]|[\u270A\u270B\x{1F385}\x{1F3C2}\x{1F3C7}\x{1F408}\x{1F415}\x{1F43B}\x{1F442}\x{1F443}\x{1F446}-\x{1F450}\x{1F466}\x{1F467}\x{1F46B}-\x{1F46D}\x{1F472}\x{1F474}-\x{1F476}\x{1F478}\x{1F47C}\x{1F483}\x{1F485}\x{1F48F}\x{1F491}\x{1F4AA}\x{1F57A}\x{1F595}\x{1F596}\x{1F62E}\x{1F635}\x{1F636}\x{1F64C}\x{1F64F}\x{1F6C0}\x{1F6CC}\x{1F90C}\x{1F90F}\x{1F918}-\x{1F91C}\x{1F91E}\x{1F91F}\x{1F930}-\x{1F934}\x{1F936}\x{1F977}\x{1F9B5}\x{1F9B6}\x{1F9BB}\x{1F9D2}\x{1F9D3}\x{1F9D5}]|[\x{1F3C3}\x{1F3C4}\x{1F3CA}\x{1F46E}\x{1F470}\x{1F471}\x{1F473}\x{1F477}\x{1F481}\x{1F482}\x{1F486}\x{1F487}\x{1F645}-\x{1F647}\x{1F64B}\x{1F64D}\x{1F64E}\x{1F6A3}\x{1F6B4}-\x{1F6B6}\x{1F926}\x{1F935}\x{1F937}-\x{1F939}\x{1F93D}\x{1F93E}\x{1F9B8}\x{1F9B9}\x{1F9CD}-\x{1F9CF}\x{1F9D4}\x{1F9D6}-\x{1F9DD}]|[\x{1F46F}\x{1F93C}\x{1F9DE}\x{1F9DF}]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\x{1F004}\x{1F0CF}\x{1F18E}\x{1F191}-\x{1F19A}\x{1F201}\x{1F21A}\x{1F22F}\x{1F232}-\x{1F236}\x{1F238}-\x{1F23A}\x{1F250}\x{1F251}\x{1F300}-\x{1F320}\x{1F32D}-\x{1F335}\x{1F337}-\x{1F37C}\x{1F37E}-\x{1F384}\x{1F386}-\x{1F393}\x{1F3A0}-\x{1F3C1}\x{1F3C5}\x{1F3C6}\x{1F3C8}\x{1F3C9}\x{1F3CF}-\x{1F3D3}\x{1F3E0}-\x{1F3F0}\x{1F3F8}-\x{1F407}\x{1F409}-\x{1F414}\x{1F416}-\x{1F43A}\x{1F43C}-\x{1F43E}\x{1F440}\x{1F444}\x{1F445}\x{1F451}-\x{1F465}\x{1F46A}\x{1F479}-\x{1F47B}\x{1F47D}-\x{1F480}\x{1F484}\x{1F488}-\x{1F48E}\x{1F490}\x{1F492}-\x{1F4A9}\x{1F4AB}-\x{1F4FC}\x{1F4FF}-\x{1F53D}\x{1F54B}-\x{1F54E}\x{1F550}-\x{1F567}\x{1F5A4}\x{1F5FB}-\x{1F62D}\x{1F62F}-\x{1F634}\x{1F637}-\x{1F644}\x{1F648}-\x{1F64A}\x{1F680}-\x{1F6A2}\x{1F6A4}-\x{1F6B3}\x{1F6B7}-\x{1F6BF}\x{1F6C1}-\x{1F6C5}\x{1F6D0}-\x{1F6D2}\x{1F6D5}-\x{1F6D7}\x{1F6EB}\x{1F6EC}\x{1F6F4}-\x{1F6FC}\x{1F7E0}-\x{1F7EB}\x{1F90D}\x{1F90E}\x{1F910}-\x{1F917}\x{1F91D}\x{1F920}-\x{1F925}\x{1F927}-\x{1F92F}\x{1F93A}\x{1F93F}-\x{1F945}\x{1F947}-\x{1F976}\x{1F978}\x{1F97A}-\x{1F9B4}\x{1F9B7}\x{1F9BA}\x{1F9BC}-\x{1F9CB}\x{1F9D0}\x{1F9E0}-\x{1F9FF}\x{1FA70}-\x{1FA74}\x{1FA78}-\x{1FA7A}\x{1FA80}-\x{1FA86}\x{1FA90}-\x{1FAA8}\x{1FAB0}-\x{1FAB6}\x{1FAC0}-\x{1FAC2}\x{1FAD0}-\x{1FAD6}]""",
Pattern.UNICODE_CASE or Pattern.CASE_INSENSITIVE
)
val matcher = pattern.matcher(source.toString())
if (matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
} }
interface OnLengthFilterCallback { interface OnLengthFilterCallback {
......
...@@ -131,7 +131,7 @@ class KS3Core private constructor(val context: Context) : AuthListener { ...@@ -131,7 +131,7 @@ class KS3Core private constructor(val context: Context) : AuthListener {
result?.objectId + getObjectKeySuffix(type), result?.objectId + getObjectKeySuffix(type),
File(path) File(path)
) )
request.cannedAcl = CannedAccessControlList.PublicRead request.cannedAcl = CannedAccessControlList.Private
client.putObject( client.putObject(
request, request,
KS3CorePutObjectResponseHandler( KS3CorePutObjectResponseHandler(
...@@ -162,7 +162,7 @@ class KS3Core private constructor(val context: Context) : AuthListener { ...@@ -162,7 +162,7 @@ class KS3Core private constructor(val context: Context) : AuthListener {
) )
// 执行金山云上传 // 执行金山云上传
val request = PutObjectRequest(result?.bucket, result?.objectId, File(path)) val request = PutObjectRequest(result?.bucket, result?.objectId, File(path))
request.cannedAcl = CannedAccessControlList.PublicRead request.cannedAcl = CannedAccessControlList.Private
client.putObject( client.putObject(
request, request,
KS3CorePutObjectResponseHandler(result?.bucket, result?.objectId, listener) KS3CorePutObjectResponseHandler(result?.bucket, result?.objectId, listener)
...@@ -189,7 +189,7 @@ class KS3Core private constructor(val context: Context) : AuthListener { ...@@ -189,7 +189,7 @@ class KS3Core private constructor(val context: Context) : AuthListener {
) )
// 执行金山云上传 // 执行金山云上传
val request = PutObjectRequest(result?.bucket, result?.objectId, file) val request = PutObjectRequest(result?.bucket, result?.objectId, file)
request.cannedAcl = CannedAccessControlList.PublicRead request.cannedAcl = CannedAccessControlList.Private
client.putObject( client.putObject(
request, request,
KS3CorePutObjectResponseHandler(result?.bucket, result?.objectId, listener) KS3CorePutObjectResponseHandler(result?.bucket, result?.objectId, listener)
...@@ -226,7 +226,7 @@ class KS3Core private constructor(val context: Context) : AuthListener { ...@@ -226,7 +226,7 @@ class KS3Core private constructor(val context: Context) : AuthListener {
result?.objectId + getObjectKeySuffix(type), result?.objectId + getObjectKeySuffix(type),
file file
) )
request.cannedAcl = CannedAccessControlList.PublicRead request.cannedAcl = CannedAccessControlList.Private
client.putObject( client.putObject(
request, request,
KS3CorePutObjectResponseHandler( KS3CorePutObjectResponseHandler(
...@@ -368,4 +368,4 @@ class KS3Core private constructor(val context: Context) : AuthListener { ...@@ -368,4 +368,4 @@ class KS3Core private constructor(val context: Context) : AuthListener {
} }
} }
} }
\ No newline at end of file
...@@ -20,7 +20,14 @@ object StorageUtil { ...@@ -20,7 +20,14 @@ object StorageUtil {
/** /**
* 获取生活号id * 获取生活号id
*/ */
fun getLifeAccountId(): String { fun getLifeAccountId(): String? {
return Hawk.get(HawkConfig.LifeAccountId, "") return Hawk.get(HawkConfig.LifeAccountId, null)
}
/**
* 删除生活号id
*/
fun deleteLifeAccountId() {
Hawk.delete(HawkConfig.LifeAccountId)
} }
} }
...@@ -8,6 +8,7 @@ import android.text.TextUtils ...@@ -8,6 +8,7 @@ import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.yidian.nightmode.widget.YdConstraintLayout import com.yidian.nightmode.widget.YdConstraintLayout
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
...@@ -22,7 +23,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -22,7 +23,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyle: Int = 0 defStyle: Int = 0
) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher { ) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher, View.OnFocusChangeListener {
private val viewBinding: ViewLifeAccountAuthBusinessInfoEditBinding = private val viewBinding: ViewLifeAccountAuthBusinessInfoEditBinding =
ViewLifeAccountAuthBusinessInfoEditBinding.bind( ViewLifeAccountAuthBusinessInfoEditBinding.bind(
...@@ -50,6 +51,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -50,6 +51,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
typedArray.recycle() typedArray.recycle()
viewBinding.ivClear.setOnClickListener(this) viewBinding.ivClear.setOnClickListener(this)
viewBinding.etContent.addTextChangedListener(this) viewBinding.etContent.addTextChangedListener(this)
viewBinding.etContent.onFocusChangeListener = this
} }
/** /**
...@@ -58,6 +60,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -58,6 +60,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
fun showErrorTips(tips: String) { fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.isVisible = true viewBinding.tvErrorTips.isVisible = true
viewBinding.tvErrorTips.text = tips viewBinding.tvErrorTips.text = tips
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
highLightEditContent() highLightEditContent()
} }
...@@ -67,6 +70,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -67,6 +70,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
private fun dismissErrorTips() { private fun dismissErrorTips() {
viewBinding.tvErrorTips.isVisible = false viewBinding.tvErrorTips.isVisible = false
viewBinding.tvErrorTips.text = "" viewBinding.tvErrorTips.text = ""
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_333333))
cancelHighLightEditContent() cancelHighLightEditContent()
} }
...@@ -77,7 +81,6 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -77,7 +81,6 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
viewBinding.etContent.setText("") viewBinding.etContent.setText("")
if (isInputError) { if (isInputError) {
dismissErrorTips() dismissErrorTips()
cancelHighLightEditContent()
} }
callback?.onTextClear(this) callback?.onTextClear(this)
} }
...@@ -105,7 +108,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -105,7 +108,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
*/ */
fun highLightEditContent() { fun highLightEditContent() {
isInputError = true isInputError = true
viewBinding.etContent.setTextColor(Color.parseColor("#FFFF3A3A")) viewBinding.etContent.setTextColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
} }
/** /**
...@@ -113,7 +116,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -113,7 +116,7 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
*/ */
private fun cancelHighLightEditContent() { private fun cancelHighLightEditContent() {
isInputError = false isInputError = false
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333")) viewBinding.etContent.setTextColor(ContextCompat.getColor(context, R.color.color_333333))
} }
/** /**
...@@ -144,7 +147,16 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor( ...@@ -144,7 +147,16 @@ class LifeAccountAuthBusinessInfoEditView @JvmOverloads constructor(
callback?.onTextChange(this, s.toString()) callback?.onTextChange(this, s.toString())
if (isInputError) { if (isInputError) {
dismissErrorTips() dismissErrorTips()
cancelHighLightEditContent() }
}
override fun onFocusChange(v: View?, hasFocus: Boolean) {
if (hasFocus) {
// 获得焦点
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_333333))
} else {
// 失去焦点
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_FFF2F2F2))
} }
} }
......
package com.yidian.shenghuoquan.newscontent.widget package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context import android.content.Context
import android.graphics.Color
import android.text.Editable import android.text.Editable
import android.text.InputFilter import android.text.InputFilter
import android.text.TextUtils import android.text.TextUtils
import android.text.TextWatcher import android.text.TextWatcher
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.core.content.ContextCompat
import com.yidian.nightmode.widget.YdConstraintLayout import com.yidian.nightmode.widget.YdConstraintLayout
import com.yidian.shenghuoquan.newscontent.R import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdentityInfoEditBinding import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdentityInfoEditBinding
...@@ -18,171 +18,182 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdenti ...@@ -18,171 +18,182 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthIdenti
* description: 生活号认证 身份证信息录入 * description: 生活号认证 身份证信息录入
*/ */
class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyle: Int = 0 defStyle: Int = 0
) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher { ) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener, TextWatcher, View.OnFocusChangeListener {
private val viewBinding: ViewLifeAccountAuthIdentityInfoEditBinding = private val viewBinding: ViewLifeAccountAuthIdentityInfoEditBinding =
ViewLifeAccountAuthIdentityInfoEditBinding.bind( ViewLifeAccountAuthIdentityInfoEditBinding.bind(
View.inflate( View.inflate(
getContext(), getContext(),
R.layout.view_life_account_auth_identity_info_edit, R.layout.view_life_account_auth_identity_info_edit,
this this
) )
) )
private var callback: OnLifeAccountAuthIdentityInfoEditViewCallback? = null private var callback: OnLifeAccountAuthIdentityInfoEditViewCallback? = null
/** /**
* 是否输入错误标识位 * 是否输入错误标识位
*/ */
private var isInputError = false private var isInputError = false
init { init {
val typedArray = val typedArray =
context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthIdentityInfoEditView) context.obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthIdentityInfoEditView)
viewBinding.tvContent.text = viewBinding.tvContent.text =
typedArray.getText(R.styleable.LifeAccountAuthIdentityInfoEditView_LifeAccountAuthIdentityInfoEditView_content_text) typedArray.getText(R.styleable.LifeAccountAuthIdentityInfoEditView_LifeAccountAuthIdentityInfoEditView_content_text)
viewBinding.etContent.hint = viewBinding.etContent.hint =
typedArray.getText(R.styleable.LifeAccountAuthIdentityInfoEditView_LifeAccountAuthIdentityInfoEditView_hint_text) typedArray.getText(R.styleable.LifeAccountAuthIdentityInfoEditView_LifeAccountAuthIdentityInfoEditView_hint_text)
typedArray.recycle() typedArray.recycle()
viewBinding.ivClear.setOnClickListener(this) viewBinding.ivClear.setOnClickListener(this)
viewBinding.etContent.addTextChangedListener(this) viewBinding.etContent.addTextChangedListener(this)
} viewBinding.etContent.onFocusChangeListener = this
}
/**
* 设置标题 /**
*/ * 设置标题
fun setTitleContent(content: String) { */
viewBinding.tvContent.text = content fun setTitleContent(content: String) {
} viewBinding.tvContent.text = content
}
/**
* 展示错误提示 /**
*/ * 展示错误提示
fun showErrorTips(tips: String) { */
viewBinding.tvErrorTips.visibility = View.VISIBLE fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.text = tips viewBinding.tvErrorTips.visibility = View.VISIBLE
highLightEditContent() viewBinding.tvErrorTips.text = tips
} viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
highLightEditContent()
/** }
* 隐藏错误提示
*/ /**
private fun dismissErrorTips() { * 隐藏错误提示
viewBinding.tvErrorTips.visibility = View.GONE */
viewBinding.tvErrorTips.text = "" private fun dismissErrorTips() {
cancelHighLightEditContent() viewBinding.tvErrorTips.visibility = View.GONE
} viewBinding.tvErrorTips.text = ""
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_333333))
/** cancelHighLightEditContent()
* 清除输入的文字 }
*/
fun clearEditContent() { /**
viewBinding.etContent.setText("") * 清除输入的文字
if (isInputError) { */
dismissErrorTips() fun clearEditContent() {
cancelHighLightEditContent() viewBinding.etContent.setText("")
} if (isInputError) {
callback?.onTextClear(this) dismissErrorTips()
} }
callback?.onTextClear(this)
/** }
* 填充传入的文字
*/ /**
fun fillEditContent(content: String?) { * 填充传入的文字
if (!TextUtils.isEmpty(content)) { */
viewBinding.etContent.setText(content) fun fillEditContent(content: String?) {
viewBinding.ivClear.visibility = View.VISIBLE if (!TextUtils.isEmpty(content)) {
} viewBinding.etContent.setText(content)
} viewBinding.ivClear.visibility = View.VISIBLE
}
/** }
* 禁止修改
*/ /**
fun disableModify() { * 禁止修改
viewBinding.ivClear.visibility = View.GONE */
viewBinding.etContent.keyListener = null fun disableModify() {
} viewBinding.ivClear.visibility = View.GONE
viewBinding.etContent.keyListener = null
}
/**
* 高亮显示输入文本
*/
fun highLightEditContent() {
isInputError = true
viewBinding.etContent.setTextColor(ContextCompat.getColor(context, R.color.color_FFFF3A3A))
}
/**
* 取消高亮显示输入文本
*/
fun cancelHighLightEditContent() {
isInputError = false
viewBinding.etContent.setTextColor(ContextCompat.getColor(context, R.color.color_333333))
}
/**
* 输入框获取焦点
*/
fun requestEditTextFocus() {
viewBinding.etContent.isFocusable = true
viewBinding.etContent.isFocusableInTouchMode = true
viewBinding.etContent.requestFocus()
}
/**
* 获取当前输入的内容
*/
fun getEditContent(): String {
return viewBinding.etContent.text.toString()
}
/**
* 设置输入过滤
*/
fun setInputFilters(vararg filter: InputFilter) {
viewBinding.etContent.filters = filter
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容
clearEditContent()
}
}
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?) {
// 处理一键清除按钮
viewBinding.ivClear.visibility = if (TextUtils.isEmpty(s)) View.GONE else View.VISIBLE
callback?.onTextChange(this, s.toString())
if (isInputError) {
dismissErrorTips()
}
}
override fun onFocusChange(v: View?, hasFocus: Boolean) {
if (hasFocus) {
// 获得焦点
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_333333))
} else {
// 失去焦点
viewBinding.viewDivider.setBackgroundColor(ContextCompat.getColor(context, R.color.color_FFF2F2F2))
}
}
fun setOnLifeAccountAuthIdentityInfoEditViewCallback(callback: OnLifeAccountAuthIdentityInfoEditViewCallback) {
this.callback = callback
}
interface OnLifeAccountAuthIdentityInfoEditViewCallback {
/** /**
* 高亮显示输入文本 * 清除内容
*/ */
fun highLightEditContent() { fun onTextClear(from: LifeAccountAuthIdentityInfoEditView)
isInputError = true
viewBinding.etContent.setTextColor(Color.parseColor("#FFFF3A3A"))
}
/**
* 取消高亮显示输入文本
*/
fun cancelHighLightEditContent() {
isInputError = false
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333"))
}
/** /**
* 输入框获取焦点 * 内容修改
*/ */
fun requestEditTextFocus() { fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String)
viewBinding.etContent.isFocusable = true }
viewBinding.etContent.isFocusableInTouchMode = true }
viewBinding.etContent.requestFocus()
}
/**
* 获取当前输入的内容
*/
fun getEditContent(): String {
return viewBinding.etContent.text.toString()
}
/**
* 设置输入过滤
*/
fun setInputFilters(vararg filter: InputFilter) {
viewBinding.etContent.filters = filter
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容
clearEditContent()
}
}
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?) {
// 处理一键清除按钮
viewBinding.ivClear.visibility = if (TextUtils.isEmpty(s)) View.GONE else View.VISIBLE
callback?.onTextChange(this, s.toString())
if (isInputError) {
dismissErrorTips()
cancelHighLightEditContent()
}
}
fun setOnLifeAccountAuthIdentityInfoEditViewCallback(callback: OnLifeAccountAuthIdentityInfoEditViewCallback) {
this.callback = callback
}
interface OnLifeAccountAuthIdentityInfoEditViewCallback {
/**
* 清除内容
*/
fun onTextClear(from: LifeAccountAuthIdentityInfoEditView)
/**
* 内容修改
*/
fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String)
}
}
\ No newline at end of file
...@@ -13,62 +13,69 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthSelect ...@@ -13,62 +13,69 @@ import com.yidian.shenghuoquan.newscontent.databinding.ViewLifeAccountAuthSelect
* description: 生活号认证 职业标签/商户类型选择 * description: 生活号认证 职业标签/商户类型选择
*/ */
class LifeAccountAuthSelectView @JvmOverloads constructor( class LifeAccountAuthSelectView @JvmOverloads constructor(
context: Context, context: Context,
attrs: AttributeSet? = null, attrs: AttributeSet? = null,
defStyle: Int = 0 defStyle: Int = 0
) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener { ) : YdConstraintLayout(context, attrs, defStyle), View.OnClickListener {
private val viewBinding = ViewLifeAccountAuthSelectBinding.bind( private val viewBinding = ViewLifeAccountAuthSelectBinding.bind(
View.inflate( View.inflate(
getContext(), getContext(),
R.layout.view_life_account_auth_select, R.layout.view_life_account_auth_select,
this this
)
) )
)
init { init {
val typeArray = val typeArray =
getContext().obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthSelectView) getContext().obtainStyledAttributes(attrs, R.styleable.LifeAccountAuthSelectView)
viewBinding.tvName.text = viewBinding.tvName.text =
typeArray.getString(R.styleable.LifeAccountAuthSelectView_LifeAccountAuthSelectView_name_text) typeArray.getString(R.styleable.LifeAccountAuthSelectView_LifeAccountAuthSelectView_name_text)
viewBinding.tvContent.hint = viewBinding.tvContent.hint =
typeArray.getString(R.styleable.LifeAccountAuthSelectView_LifeAccountAuthSelectView_content_hint_text) typeArray.getString(R.styleable.LifeAccountAuthSelectView_LifeAccountAuthSelectView_content_hint_text)
typeArray.recycle() typeArray.recycle()
} }
/** /**
* 回显选择的内容 * 回显选择的内容
*/ */
fun setContentResult(text: String) { fun setContentResult(text: String) {
viewBinding.tvContent.text = text viewBinding.tvContent.text = text
} }
/** /**
* 获取当前选择的内容 * 获取当前选择的内容
*/ */
fun getCurSelectItem(): String { fun getContentResult(): String {
return viewBinding.tvContent.text.toString() return viewBinding.tvContent.text.toString()
} }
/** /**
* 设置是否能选择 即是否可以弹出选择弹窗 * 设置是否能选择 即是否可以弹出选择弹窗
* @param enable true为可选择 false为不可选择 * @param enable true为可选择 false为不可选择
*/ */
fun enableSelect(enable: Boolean) { fun enableSelect(enable: Boolean) {
isEnabled = enable isEnabled = enable
viewBinding.ivSelect.visibility = if (enable) View.VISIBLE else View.GONE viewBinding.ivSelect.visibility = if (enable) View.VISIBLE else View.GONE
} }
/**
* 清空当前选择的内容
*/
fun clearContentResult() {
viewBinding.tvContent.text = ""
}
override fun onClick(v: View?) { override fun onClick(v: View?) {
} }
interface OnLifeAccountAuthSelectViewCallback { interface OnLifeAccountAuthSelectViewCallback {
/** /**
* 点击选择功能 * 点击选择功能
*/ */
fun onLifeAccountAuthSelect() fun onLifeAccountAuthSelect()
} }
} }
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.CompoundButton
import androidx.constraintlayout.widget.ConstraintLayout
import com.yidian.common.AppConfig
import com.yidian.common.XRouterPathConstants
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ViewPrivacyAgreementBinding
import com.yidian.shenghuoquan.newscontent.ui.ProtocolActivity
import com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
* date: 6/24/21 3:32 AM
* description: 用户协议、隐私政策
*/
class PrivacyAgreementView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : ConstraintLayout(context, attrs, defStyle), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
private val viewBinding: ViewPrivacyAgreementBinding =
ViewPrivacyAgreementBinding.bind(
View.inflate(
getContext(),
R.layout.view_privacy_agreement,
this
)
)
private var callback: OnPrivacyAgreementCallback? = null
init {
viewBinding.tvPrivacyPolicy.setOnClickListener(this)
viewBinding.tvUserAgreement.setOnClickListener(this)
viewBinding.cbAgree.setOnCheckedChangeListener(this)
}
override fun onClick(v: View?) {
val id = v?.id
if (id == R.id.tv_privacy_policy) {
// 隐私政策
XPageManager.push(XRouterPathConstants.PROTOCOL, hashMapOf(Pair(ProtocolActivity.ProtocolUrlKey, AppConfig.privacyPolicyStatement)))
} else if (id == R.id.tv_user_agreement) {
// 用户协议
XPageManager.push(XRouterPathConstants.PROTOCOL, hashMapOf(Pair(ProtocolActivity.ProtocolUrlKey, AppConfig.userProtocol)))
}
}
/**
* 获取当前是否选中
*/
fun getCheckState(): Boolean {
return viewBinding.cbAgree.isChecked
}
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
if (buttonView?.isPressed == false) return
callback?.onCheckPrivacyAgreement(isChecked)
}
fun setOnPrivacyAgreementCallback(callback: OnPrivacyAgreementCallback) {
this.callback = callback
}
interface OnPrivacyAgreementCallback {
/**
* 选择用户协议和隐私政策
*/
fun onCheckPrivacyAgreement(isCheck: Boolean)
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="@dimen/dp1"
android:color="@color/color_FFDDDDDD" />
<corners android:radius="@dimen/dp21" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_FF1852F1" />
<size
android:width="@dimen/dp2"
android:height="@dimen/dp19" />
</shape>
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
android:id="@+id/clRoot" android:id="@+id/clRoot"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@mipmap/launcher_bg" android:background="@drawable/icon_launcher_bg"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context=".ui.FlashActivity"> tools:context=".ui.FlashActivity">
......
...@@ -79,4 +79,17 @@ ...@@ -79,4 +79,17 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_enterprise_auth" /> app:layout_constraintTop_toBottomOf="@id/view_enterprise_auth" />
<Button
android:id="@+id/btn_logout"
android:layout_width="115dp"
android:layout_height="35dp"
android:layout_marginBottom="78dp"
android:background="@drawable/shape_bg_btn_logout"
android:text="@string/logout"
android:textColor="@color/color_FF969798"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</com.yidian.nightmode.widget.YdConstraintLayout> </com.yidian.nightmode.widget.YdConstraintLayout>
\ No newline at end of file
...@@ -38,7 +38,8 @@ ...@@ -38,7 +38,8 @@
<com.yidian.nightmode.widget.YdScrollView <com.yidian.nightmode.widget.YdScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginBottom="25dp" android:layout_marginBottom="16dp"
android:fillViewport="true"
app:layout_constraintBottom_toTopOf="@id/btn_next" app:layout_constraintBottom_toTopOf="@id/btn_next"
app:layout_constraintTop_toBottomOf="@id/sv_merchant_type"> app:layout_constraintTop_toBottomOf="@id/sv_merchant_type">
......
...@@ -24,54 +24,9 @@ ...@@ -24,54 +24,9 @@
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginBottom="19dp" android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@id/ll_protocol"
app:layout_constraintTop_toBottomOf="@id/sv_occupation" />
<com.yidian.nightmode.widget.YdLinearLayout
android:id="@+id/ll_protocol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="19dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintBottom_toTopOf="@id/btn_next" app:layout_constraintBottom_toTopOf="@id/btn_next"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/sv_occupation" />
app:layout_constraintStart_toStartOf="parent">
<com.yidian.nightmode.widget.YdCheckedBox
android:id="@+id/cb_protocol"
android:layout_width="27dp"
android:layout_height="27dp"
android:layout_marginEnd="2dp"
android:button="@drawable/selector_protocol_check"
android:clickable="true"
android:focusable="true" />
<com.yidian.nightmode.widget.YdTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/agree"
android:textColor="#FF999999"
android:textSize="13sp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/tv_privacy_certification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/privacy_certification"
android:textColor="#FF1852F1"
android:textSize="13sp" />
<com.yidian.nightmode.widget.YdTextView
android:id="@+id/tv_user_agreement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/user_agreement"
android:textColor="#FF1852F1"
android:textSize="13sp" />
</com.yidian.nightmode.widget.YdLinearLayout>
<com.yidian.nightmode.widget.YdButton <com.yidian.nightmode.widget.YdButton
android:id="@+id/btn_next" android:id="@+id/btn_next"
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
android:id="@+id/iv_person_auth_info" android:id="@+id/iv_person_auth_info"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp20" android:layout_marginTop="@dimen/dp15"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_create_success" /> app:layout_constraintTop_toBottomOf="@id/cl_create_success" />
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
android:id="@+id/tv_enter_merchant_center" android:id="@+id/tv_enter_merchant_center"
android:layout_width="@dimen/dp115" android:layout_width="@dimen/dp115"
android:layout_height="@dimen/dp35" android:layout_height="@dimen/dp35"
android:layout_marginTop="@dimen/dp31" android:layout_marginTop="@dimen/dp26"
android:background="@drawable/shape_bg_enter_merchant_center_btn" android:background="@drawable/shape_bg_enter_merchant_center_btn"
android:gravity="center" android:gravity="center"
android:text="@string/to_experience" android:text="@string/to_experience"
...@@ -73,11 +73,22 @@ ...@@ -73,11 +73,22 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_person_auth_info" /> app:layout_constraintTop_toBottomOf="@id/iv_person_auth_info" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp14"
android:paddingStart="@dimen/dp29"
android:paddingEnd="@dimen/dp29"
android:text="@string/personal_authentication_tips"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp12"
app:layout_constraintBottom_toTopOf="@id/tv_upgrade_enterprise_auth" />
<TextView <TextView
android:id="@+id/tv_upgrade_enterprise_auth" android:id="@+id/tv_upgrade_enterprise_auth"
android:layout_width="@dimen/dp302" android:layout_width="@dimen/dp302"
android:layout_height="@dimen/dp42" android:layout_height="@dimen/dp42"
android:layout_marginBottom="@dimen/dp33" android:layout_marginBottom="@dimen/dp28"
android:background="@drawable/account_btn_gradient_bg" android:background="@drawable/account_btn_gradient_bg"
android:gravity="center" android:gravity="center"
android:text="@string/turn_on_enterprise_certification" android:text="@string/turn_on_enterprise_certification"
...@@ -87,15 +98,4 @@ ...@@ -87,15 +98,4 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp19"
android:paddingStart="@dimen/dp29"
android:paddingEnd="@dimen/dp29"
android:text="@string/personal_authentication_tips"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp12"
app:layout_constraintBottom_toTopOf="@id/tv_upgrade_enterprise_auth" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -97,4 +97,14 @@ ...@@ -97,4 +97,14 @@
android:visibility="gone" android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/ev_id_card_number" /> app:layout_constraintTop_toBottomOf="@id/ev_id_card_number" />
<com.yidian.shenghuoquan.newscontent.widget.PrivacyAgreementView
android:id="@+id/av_privacy_agreement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/av_face_auth"
app:layout_constraintVertical_bias="1" />
</com.yidian.nightmode.widget.YdConstraintLayout> </com.yidian.nightmode.widget.YdConstraintLayout>
\ No newline at end of file
...@@ -24,7 +24,9 @@ ...@@ -24,7 +24,9 @@
android:includeFontPadding="false" android:includeFontPadding="false"
android:textColor="#FF333333" android:textColor="#FF333333"
android:textColorHint="#FFC2C2C2" android:textColorHint="#FFC2C2C2"
android:textCursorDrawable="@drawable/shape_bg_input_cursor"
android:textSize="15sp" android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/tv_content" /> app:layout_constraintTop_toBottomOf="@id/tv_content" />
<com.yidian.nightmode.widget.YdImageView <com.yidian.nightmode.widget.YdImageView
......
...@@ -28,9 +28,11 @@ ...@@ -28,9 +28,11 @@
android:singleLine="true" android:singleLine="true"
android:textColor="#FF333333" android:textColor="#FF333333"
android:textColorHint="#FFC2C2C2" android:textColorHint="#FFC2C2C2"
android:textCursorDrawable="@drawable/shape_bg_input_cursor"
android:textSize="15sp" android:textSize="15sp"
app:layout_constraintStart_toEndOf="@id/tv_content" android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/iv_clear" app:layout_constraintEnd_toStartOf="@id/iv_clear"
app:layout_constraintStart_toEndOf="@id/tv_content"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<com.yidian.nightmode.widget.YdImageView <com.yidian.nightmode.widget.YdImageView
......
<?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="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/cb_agree"
android:layout_width="@dimen/dp27"
android:layout_height="@dimen/dp27"
android:button="@drawable/selector_protocol_check"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_agree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp2"
android:text="@string/agree"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp13"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/cb_agree"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_privacy_policy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/privacy_policy"
android:textColor="@color/color_FF1852F1"
android:textSize="@dimen/sp13"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_agree"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_user_agreement"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/user_agreement"
android:textColor="@color/color_FF1852F1"
android:textSize="@dimen/sp13"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_privacy_policy"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -62,4 +62,6 @@ ...@@ -62,4 +62,6 @@
<color name="color_FF6BB81F">#FF6BB81F</color> <color name="color_FF6BB81F">#FF6BB81F</color>
<color name="color_66000000">#66000000</color> <color name="color_66000000">#66000000</color>
<color name="color_FFEAAF35">#FFEAAF35</color> <color name="color_FFEAAF35">#FFEAAF35</color>
<color name="color_FFDDDDDD">#FFDDDDDD</color>
<color name="color_FF969798">#FF969798</color>
</resources> </resources>
\ No newline at end of file
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
<string name="protocol_hint_title">温馨提示</string> <string name="protocol_hint_title">温馨提示</string>
<string name="protocol_hint_content_one">需同意</string> <string name="protocol_hint_content_one">需同意</string>
<string name="privacy_policy">&#160;隐私政策&#160;</string>
<string name="protocol_hint_content_two">后才能继续为提供您服务。</string> <string name="protocol_hint_content_two">后才能继续为提供您服务。</string>
<string name="agree_access">同意并进入</string> <string name="agree_access">同意并进入</string>
<string name="disagree">不同意</string> <string name="disagree">不同意</string>
...@@ -50,7 +49,7 @@ ...@@ -50,7 +49,7 @@
<string name="enter_life_account">进入生活号</string> <string name="enter_life_account">进入生活号</string>
<string name="create_account">确认创建</string> <string name="create_account">确认创建</string>
<string name="account_create_tips">同企业下生活号名称不可复用</string> <string name="account_create_tips">同企业下生活号名称不可复用</string>
<string name="account_create_desc">生活号作为企业服务管理载体,请正确使用生活号权益,新申请生活号默认当前申请人作为默认管理员,申请成功 后可在销售APP内进行更改</string> <string name="account_create_desc">生活号作为企业服务管理载体,请正确使用生活号权益,新申请生活号默认当前申请人作为默认管理员,申请成功后可在销售APP内进行更改</string>
<string name="life_account_name_overrun_error_tips">名称超限,最多24个字符</string> <string name="life_account_name_overrun_error_tips">名称超限,最多24个字符</string>
<string name="account_manager">管理员</string> <string name="account_manager">管理员</string>
<string name="account_name">生活号名称</string> <string name="account_name">生活号名称</string>
...@@ -103,7 +102,7 @@ ...@@ -103,7 +102,7 @@
<string name="face_auth_fail">验证未通过</string> <string name="face_auth_fail">验证未通过</string>
<string name="face_auth_error_tips">人脸识别失败,请重新识别</string> <string name="face_auth_error_tips">人脸识别失败,请重新识别</string>
<string name="agree">我同意</string> <string name="agree">我同意</string>
<string name="privacy_certification">《隐私认证</string> <string name="privacy_policy">《隐私政策</string>
<string name="user_agreement">《用户协议》</string> <string name="user_agreement">《用户协议》</string>
<string name="auth_finish">完成认证</string> <string name="auth_finish">完成认证</string>
<string name="enterprise_qualification">企业资质</string> <string name="enterprise_qualification">企业资质</string>
...@@ -111,7 +110,7 @@ ...@@ -111,7 +110,7 @@
<string name="platform_audit">平台审核</string> <string name="platform_audit">平台审核</string>
<string name="merchant_type">商户类型</string> <string name="merchant_type">商户类型</string>
<string name="business_license">营业执照</string> <string name="business_license">营业执照</string>
<string name="business_license_description">1、请确保证件内容文字清晰可见,证件本身无缺陷,否则会审核失败 2、仅支持中国大陆工商局或市场监督管理局登记的个体商户,请提供有效期内的营业执照</string> <string name="business_license_description">1、请确保证件内容文字清晰可见,证件本身无缺陷,否则会审核失败\n2、仅支持中国大陆工商局或市场监督管理局登记的个体商户,请提供有效期内的营业执照</string>
<string name="upload_business_license">上传营业执照</string> <string name="upload_business_license">上传营业执照</string>
<string name="check_business_license_distinct">请核对营业执照是否拍摄清晰</string> <string name="check_business_license_distinct">请核对营业执照是否拍摄清晰</string>
<string name="business_license_registration_name">注册名称</string> <string name="business_license_registration_name">注册名称</string>
...@@ -174,5 +173,9 @@ ...@@ -174,5 +173,9 @@
<string name="goto_upgrade">去升级</string> <string name="goto_upgrade">去升级</string>
<string name="goto_modify">去修改</string> <string name="goto_modify">去修改</string>
<string name="input_legal_person_phone_number">请输入法人手机号</string> <string name="input_legal_person_phone_number">请输入法人手机号</string>
<string name="change">更换</string>
<string name="login_again">重新登录</string>
<string name="no_life_account">当前无生活号,请重新登录</string>
<string name="logout">退出登录</string>
</resources> </resources>
\ No newline at end of file
<resources> <resources>
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="FlashTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <style name="FlashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowIsTranslucent" >false</item> <item name="android:windowIsTranslucent">false</item>
<item name="android:windowFullscreen" >false</item> <item name="android:windowFullscreen">false</item>
<item name="android:windowBackground" >@mipmap/launcher_bg</item> <item name="android:windowBackground">@drawable/icon_launcher_bg</item>
</style> </style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
...@@ -119,6 +119,7 @@ ...@@ -119,6 +119,7 @@
<style name="protocol_checkboxBg" parent="@android:style/Widget.CompoundButton.CheckBox"> <style name="protocol_checkboxBg" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/protocol_checkbox_bg</item> <item name="android:button">@drawable/protocol_checkbox_bg</item>
</style> </style>
<style name="merchant_center_bottom_hint_dialog" parent="android:style/Theme.Dialog"> <style name="merchant_center_bottom_hint_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
...@@ -126,6 +127,7 @@ ...@@ -126,6 +127,7 @@
<item name="android:windowIsFloating">true</item> <item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item> <item name="android:backgroundDimEnabled">false</item>
</style> </style>
<style name="merchant_switch_dialog" parent="android:style/Theme.Dialog"> <style name="merchant_switch_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
......
...@@ -39,7 +39,7 @@ android { ...@@ -39,7 +39,7 @@ android {
buildConfigField("String", "API_URL", rootProject.ext.buildParams.debug.API_URL) buildConfigField("String", "API_URL", rootProject.ext.buildParams.debug.API_URL)
buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"') buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".debug.fileprovider" + '\"')
manifestPlaceholders = [ manifestPlaceholders = [
app_name : "B端测试", app_name : "商家版测试",
file_provider: rootProject.ext.android.applicationId + ".debug.fileprovider", file_provider: rootProject.ext.android.applicationId + ".debug.fileprovider",
] ]
//不混淆 //不混淆
...@@ -53,7 +53,7 @@ android { ...@@ -53,7 +53,7 @@ android {
buildConfigField("String", "API_URL", rootProject.ext.buildParams.release.API_URL) buildConfigField("String", "API_URL", rootProject.ext.buildParams.release.API_URL)
buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".fileprovider" + '\"') buildConfigField("String", "PROVIDER_NAME", '\"' + rootProject.ext.android.applicationId + ".fileprovider" + '\"')
manifestPlaceholders = [ manifestPlaceholders = [
app_name : "B端", app_name : "生活圈商家版",
file_provider: rootProject.ext.android.applicationId + ".fileprovider", file_provider: rootProject.ext.android.applicationId + ".fileprovider",
] ]
//混淆 //混淆
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment