Commit 9554bd68 authored by yinjiacheng's avatar yinjiacheng

add 生活号名称修改页

parent bd4de1d4
...@@ -51,5 +51,7 @@ class XRouterPathConstants { ...@@ -51,5 +51,7 @@ class XRouterPathConstants {
const val MERCHANT_CENTER = "/merchantCenter" const val MERCHANT_CENTER = "/merchantCenter"
// 商户基本信息 // 商户基本信息
const val MERCHANT_INFO = "/merchantInfo" const val MERCHANT_INFO = "/merchantInfo"
// 生活号修改名称
const val LIFE_ACCOUNT_MODIFY_NAME = "/lifeAccountModifyName"
} }
} }
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<!--全局字号--> <!--全局字号-->
<dimen name="sp12">12sp</dimen> <dimen name="sp12">12sp</dimen>
<dimen name="sp13">13sp</dimen>
<dimen name="sp14">14sp</dimen> <dimen name="sp14">14sp</dimen>
<dimen name="sp15">15sp</dimen> <dimen name="sp15">15sp</dimen>
<dimen name="sp16">16sp</dimen> <dimen name="sp16">16sp</dimen>
......
...@@ -127,6 +127,11 @@ ...@@ -127,6 +127,11 @@
android:name=".ui.center.MerchantInfoActivity" android:name=".ui.center.MerchantInfoActivity"
android:theme="@style/Transparent" /> android:theme="@style/Transparent" />
<activity
android:name=".ui.center.LifeAccountModifyNameActivity"
android:theme="@style/Transparent"
android:windowSoftInputMode="stateVisible" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -11,6 +11,7 @@ import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_ ...@@ -11,6 +11,7 @@ import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_AUTH_COMPLETE
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_CERTIFICATION import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_ENTERPRISE_CERTIFICATION
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_IDENTITY import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_IDENTITY
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_MODIFY_NAME
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_PERSONAL_AUTH import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_PERSONAL_AUTH
import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_PERSONAL_AUTH_COMPLETE import com.yidian.common.XRouterPathConstants.Companion.LIFE_ACCOUNT_PERSONAL_AUTH_COMPLETE
import com.yidian.common.XRouterPathConstants.Companion.LOGIN_LIFE_CIRCLE import com.yidian.common.XRouterPathConstants.Companion.LOGIN_LIFE_CIRCLE
...@@ -35,6 +36,7 @@ import com.yidian.shenghuoquan.newscontent.personnel.ui.* ...@@ -35,6 +36,7 @@ import com.yidian.shenghuoquan.newscontent.personnel.ui.*
import com.yidian.shenghuoquan.newscontent.service.* import com.yidian.shenghuoquan.newscontent.service.*
import com.yidian.shenghuoquan.newscontent.ui.* import com.yidian.shenghuoquan.newscontent.ui.*
import com.yidian.shenghuoquan.newscontent.ui.auth.* import com.yidian.shenghuoquan.newscontent.ui.auth.*
import com.yidian.shenghuoquan.newscontent.ui.center.LifeAccountModifyNameActivity
import com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity import com.yidian.shenghuoquan.newscontent.ui.center.MerchantCenterActivity
import com.yidian.shenghuoquan.newscontent.ui.center.MerchantInfoActivity import com.yidian.shenghuoquan.newscontent.ui.center.MerchantInfoActivity
import com.yidian.shenghuoquan.newscontent.ui.idcard.IDCardTestActivity import com.yidian.shenghuoquan.newscontent.ui.idcard.IDCardTestActivity
...@@ -350,6 +352,17 @@ class NewsContentApplication : YdBaseApplication() { ...@@ -350,6 +352,17 @@ class NewsContentApplication : YdBaseApplication() {
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent) context.startActivity(intent)
} }
}),
XPageNode(LIFE_ACCOUNT_MODIFY_NAME, XPageNodePageType.NATIVE, object : XPageHandler {
override fun handler(params: Map<String, Any?>?) {
val intent = Intent()
if (params != null) {
intent.putExtra(XRouterPathConstants.ParamsKey, params as HashMap)
}
intent.setClass(context, LifeAccountModifyNameActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
}) })
) )
) )
......
package com.yidian.shenghuoquan.newscontent.ui.center
import android.os.Bundle
import android.text.InputFilter
import com.yidian.common.XRouterPathConstants
import com.yidian.common.base.BaseActivity
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.bean.ICreateLifeAccountCallback
import com.yidian.shenghuoquan.newscontent.databinding.ActivityLifeAccountModifyNameBinding
import com.yidian.shenghuoquan.newscontent.http.ApiService
import com.yidian.shenghuoquan.newscontent.utils.InputFilterUtil
import com.yidian.shenghuoquan.newscontent.widget.CommonTopBarView
import com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthIdentityInfoEditView
import com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
* date: 6/14/21 12:55 AM
* description: 生活号名称修改
*/
class LifeAccountModifyNameActivity : BaseActivity<ActivityLifeAccountModifyNameBinding>(),
CommonTopBarView.OnCommonTopBarCallback,
LifeAccountAuthIdentityInfoEditView.OnLifeAccountAuthIdentityInfoEditViewCallback,
ICreateLifeAccountCallback {
companion object {
const val EXTRA_LIFE_ACCOUNT_ID = "life_account_id"
const val EXTRA_LIFE_ACCOUNT_NAME = "life_account_name"
}
private var lifeAccountId: Long? = null
private var lifeAccountName: String? = null
override fun createViewBinding(): ActivityLifeAccountModifyNameBinding {
return ActivityLifeAccountModifyNameBinding.inflate(layoutInflater)
}
override fun getXPageName(): String {
return XRouterPathConstants.LIFE_ACCOUNT_MODIFY_NAME
}
override fun init(savedInstanceState: Bundle?) {
super.init(savedInstanceState)
initView()
initListener()
initData()
}
private fun initView() {
// 只允许输入中文并且最长20汉字
viewBind.evLifeAccountName.setInputFilters(InputFilterUtil.getChineseFilter(), InputFilter.LengthFilter(20))
}
private fun initListener() {
viewBind.bvTopBar.setOnCommonTopBarCallback(this)
viewBind.evLifeAccountName.setOnLifeAccountAuthIdentityInfoEditViewCallback(this)
}
private fun initData() {
intent.getSerializableExtra(XRouterPathConstants.ParamsKey)?.let { params ->
(params as HashMap<*, *>).let {
lifeAccountId = it[EXTRA_LIFE_ACCOUNT_ID] as Long
lifeAccountName = it[EXTRA_LIFE_ACCOUNT_NAME] as String
}
}
viewBind.evLifeAccountName.fillEditContent(lifeAccountName)
// 获取焦点弹出软键盘
viewBind.evLifeAccountName.requestEditTextFocus()
}
override fun onDoAction() {
// 请求接口检查并修改生活号名称
ApiService.createLifeAccount(
this,
hashMapOf(
Pair(EXTRA_LIFE_ACCOUNT_ID, lifeAccountId.toString()),
Pair(EXTRA_LIFE_ACCOUNT_NAME, viewBind.evLifeAccountName.getEditContent())
)
)
}
override fun onTextClear(from: LifeAccountAuthIdentityInfoEditView) {
}
override fun onTextChange(from: LifeAccountAuthIdentityInfoEditView, text: String) {
}
override fun createLifeAccountCallback(result: Boolean) {
if (result) {
// 生活号名称修改成功
XPageManager.pop(null)
} else {
// 生活号名称修改失败 提示
viewBind.evLifeAccountName.showErrorTips(resources.getString(R.string.life_account_name_already_exist))
}
}
}
\ No newline at end of file
package com.yidian.shenghuoquan.newscontent.utils
import android.text.InputFilter
import java.util.regex.Pattern
/**
* author: yinjiacheng
* date: 6/15/21 1:59 AM
* description: 输入过滤
*/
object InputFilterUtil {
/**
* 只允许汉字输入
*/
fun getChineseFilter(): InputFilter {
return InputFilter { source, start, end, dest, dstart, dend ->
val pattern = Pattern.compile("[\\u4E00-\\u9FFF]+")
val matcher = pattern.matcher(source.toString())
if (!matcher.matches()) return@InputFilter ""
return@InputFilter null
}
}
}
\ 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 androidx.constraintlayout.widget.ConstraintLayout
import com.yidian.shenghuoquan.newscontent.R
import com.yidian.shenghuoquan.newscontent.databinding.ViewCommonTopBarBinding
import com.yidian.xpage.XPageManager
/**
* author: yinjiacheng
* date: 6/14/21 12:58 AM
* description: 顶部栏
*/
class CommonTopBarView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : ConstraintLayout(context, attrs, defStyle), View.OnClickListener {
private val viewBinding by lazy {
ViewCommonTopBarBinding.bind(
View.inflate(
getContext(),
R.layout.view_common_top_bar,
this
)
)
}
private var callback: OnCommonTopBarCallback? = null
init {
val typeArray = context.obtainStyledAttributes(attrs, R.styleable.CommonTopBarView)
viewBinding.tvTitle.text =
typeArray.getText(R.styleable.CommonTopBarView_CommonTopBarView_title_text)
typeArray.getText(R.styleable.CommonTopBarView_CommonTopBarView_action_text).let {
if (it.isNotEmpty()) visibility = View.VISIBLE
viewBinding.tvAction.text = it
}
typeArray.recycle()
viewBinding.ivBack.setOnClickListener(this)
viewBinding.tvAction.setOnClickListener(this)
}
override fun onClick(v: View?) {
if (v?.id == R.id.iv_back) {
XPageManager.pop(null)
} else if (v?.id == R.id.tv_action) {
callback?.onDoAction()
}
}
fun setOnCommonTopBarCallback(callback: OnCommonTopBarCallback) {
this.callback = callback
}
interface OnCommonTopBarCallback {
/**
* 操作回调
*/
fun onDoAction()
}
}
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.newscontent.widget ...@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.newscontent.widget
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.text.Editable import android.text.Editable
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
...@@ -63,6 +64,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -63,6 +64,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
fun showErrorTips(tips: String) { fun showErrorTips(tips: String) {
viewBinding.tvErrorTips.visibility = View.VISIBLE viewBinding.tvErrorTips.visibility = View.VISIBLE
viewBinding.tvErrorTips.text = tips viewBinding.tvErrorTips.text = tips
highLightEditContent()
} }
/** /**
...@@ -71,6 +73,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -71,6 +73,7 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
private fun dismissErrorTips() { private fun dismissErrorTips() {
viewBinding.tvErrorTips.visibility = View.GONE viewBinding.tvErrorTips.visibility = View.GONE
viewBinding.tvErrorTips.text = "" viewBinding.tvErrorTips.text = ""
cancelHighLightEditContent()
} }
/** /**
...@@ -119,6 +122,29 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor( ...@@ -119,6 +122,29 @@ class LifeAccountAuthIdentityInfoEditView @JvmOverloads constructor(
viewBinding.etContent.setTextColor(Color.parseColor("#FF333333")) viewBinding.etContent.setTextColor(Color.parseColor("#FF333333"))
} }
/**
* 输入框获取焦点
*/
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?) { override fun onClick(v: View?) {
if (v?.id == R.id.iv_clear) { if (v?.id == R.id.iv_clear) {
// 清除输入框中的内容 // 清除输入框中的内容
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.yidian.shenghuoquan.newscontent.widget.CommonTopBarView
android:id="@+id/bv_top_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:CommonTopBarView_action_text="@string/save_life_account_name"
app:CommonTopBarView_title_text="@string/modify_life_account_name"
app:layout_constraintTop_toTopOf="parent" />
<com.yidian.shenghuoquan.newscontent.widget.LifeAccountAuthIdentityInfoEditView
android:id="@+id/ev_life_account_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:LifeAccountAuthIdentityInfoEditView_content_text="@string/life_account_name"
app:layout_constraintTop_toBottomOf="@id/bv_top_bar" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/dp42"
android:paddingStart="@dimen/dp19"
android:paddingEnd="@dimen/dp19">
<ImageView
android:id="@+id/iv_back"
android:layout_width="27dp"
android:layout_height="27dp"
android:src="@drawable/icon_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/color_333333"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/color_FF1852F1"
android:textSize="@dimen/sp13"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -25,10 +25,12 @@ ...@@ -25,10 +25,12 @@
android:layout_marginStart="23dp" android:layout_marginStart="23dp"
android:background="@null" android:background="@null"
android:includeFontPadding="false" android:includeFontPadding="false"
android:singleLine="true"
android:textColor="#FF333333" android:textColor="#FF333333"
android:textColorHint="#FFC2C2C2" android:textColorHint="#FFC2C2C2"
android:textSize="15sp" android:textSize="15sp"
app:layout_constraintStart_toEndOf="@id/tv_content" app:layout_constraintStart_toEndOf="@id/tv_content"
app:layout_constraintEnd_toStartOf="@id/iv_clear"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<com.yidian.nightmode.widget.YdImageView <com.yidian.nightmode.widget.YdImageView
......
...@@ -24,4 +24,9 @@ ...@@ -24,4 +24,9 @@
<attr name="MerchantInfoView_name_text" format="string" /> <attr name="MerchantInfoView_name_text" format="string" />
</declare-styleable> </declare-styleable>
<declare-styleable name="CommonTopBarView">
<attr name="CommonTopBarView_title_text" format="string" />
<attr name="CommonTopBarView_action_text" format="string" />
</declare-styleable>
</resources> </resources>
\ No newline at end of file
...@@ -155,5 +155,8 @@ ...@@ -155,5 +155,8 @@
<string name="upgrade_enterprise_merchant">升级为企业商户</string> <string name="upgrade_enterprise_merchant">升级为企业商户</string>
<string name="immediate_auth">立刻认证</string> <string name="immediate_auth">立刻认证</string>
<string name="basic_info">基本信息</string> <string name="basic_info">基本信息</string>
<string name="modify_life_account_name">修改名称</string>
<string name="save_life_account_name">保存</string>
<string name="life_account_name_already_exist">该名称已存在</string>
</resources> </resources>
\ No newline at end of file
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