优化修改bug
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2289
.idea/caches/deviceStreaming.xml
generated
Normal file
2289
.idea/caches/deviceStreaming.xml
generated
Normal file
File diff suppressed because it is too large
Load Diff
13
.idea/deviceManager.xml
generated
Normal file
13
.idea/deviceManager.xml
generated
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DeviceTable">
|
||||||
|
<option name="columnSorters">
|
||||||
|
<list>
|
||||||
|
<ColumnSorterState>
|
||||||
|
<option name="column" value="Name" />
|
||||||
|
<option name="order" value="ASCENDING" />
|
||||||
|
</ColumnSorterState>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -53,6 +53,9 @@
|
|||||||
<activity
|
<activity
|
||||||
android:name=".ui.act.login.AgreementActivity"
|
android:name=".ui.act.login.AgreementActivity"
|
||||||
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>
|
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>
|
||||||
|
<activity
|
||||||
|
android:name=".ui.act.setting.SettingWebViewActivity"
|
||||||
|
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.act.home.MainActivity"
|
android:name=".ui.act.home.MainActivity"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
|
|||||||
@@ -34,4 +34,9 @@ object Config : TileSourceFactory() {
|
|||||||
override fun getTileURLString(pMapTileIndex: Long) =
|
override fun getTileURLString(pMapTileIndex: Long) =
|
||||||
("$baseUrl&X=${MapTileIndex.getX(pMapTileIndex)}&Y=${MapTileIndex.getY(pMapTileIndex)}&L=${MapTileIndex.getZoom(pMapTileIndex)}")
|
("$baseUrl&X=${MapTileIndex.getX(pMapTileIndex)}&Y=${MapTileIndex.getY(pMapTileIndex)}&L=${MapTileIndex.getZoom(pMapTileIndex)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//隐私政策
|
||||||
|
var PRIVACY_POLICY = "http://f.chongdunpet.com/privacy_policy.html#a6";
|
||||||
|
//三方SDK
|
||||||
|
var THIRD_PARTY_SDK = "http://h.chongdunpet.com/third_party_sdk.html";
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.ck.ckcollar.app.ui.act.balance
|
package com.ck.ckcollar.app.ui.act.balance
|
||||||
|
|
||||||
|
import android.content.pm.ApplicationInfo
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
|
import com.alipay.sdk.app.EnvUtils
|
||||||
import com.alipay.sdk.app.PayTask
|
import com.alipay.sdk.app.PayTask
|
||||||
import com.ck.ckcollar.app.R
|
import com.ck.ckcollar.app.R
|
||||||
import com.ck.ckcollar.app.databinding.ActivityRechargeBinding
|
import com.ck.ckcollar.app.databinding.ActivityRechargeBinding
|
||||||
@@ -23,7 +25,7 @@ import kotlinx.coroutines.withContext
|
|||||||
|
|
||||||
class RechargeActivity : CKBaseActivity() {
|
class RechargeActivity : CKBaseActivity() {
|
||||||
lateinit var binding: ActivityRechargeBinding
|
lateinit var binding: ActivityRechargeBinding
|
||||||
var payType = "1"
|
var payType = "0"
|
||||||
var model : RechargeModel? = null
|
var model : RechargeModel? = null
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
binding = ActivityRechargeBinding.inflate(layoutInflater)
|
binding = ActivityRechargeBinding.inflate(layoutInflater)
|
||||||
@@ -87,7 +89,10 @@ class RechargeActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
fun aliPay(){
|
fun aliPay(){
|
||||||
GlobalScope.launch(Dispatchers.IO){
|
GlobalScope.launch(Dispatchers.IO){
|
||||||
|
// [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。
|
||||||
|
if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) {
|
||||||
|
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)
|
||||||
|
}
|
||||||
val alipay = PayTask(this@RechargeActivity)
|
val alipay = PayTask(this@RechargeActivity)
|
||||||
val result = alipay.payV2(model?.orderStr, true)
|
val result = alipay.payV2(model?.orderStr, true)
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class WithDrawActivity : CKLHBaseActionBarActivity() {
|
|||||||
lateinit var binding: ActivityWithdrawBinding
|
lateinit var binding: ActivityWithdrawBinding
|
||||||
var model : BalanceModle? = null
|
var model : BalanceModle? = null
|
||||||
|
|
||||||
var payType = "1"
|
var payType = "0"
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
binding = ActivityWithdrawBinding.inflate(layoutInflater)
|
binding = ActivityWithdrawBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import com.ck.ckcollar.app.ui.popview.CKCollarTypePopView
|
|||||||
import com.ck.ckcollar.app.ui.popview.CKPowerAlertView
|
import com.ck.ckcollar.app.ui.popview.CKPowerAlertView
|
||||||
import com.ck.ckcollar.app.utils.CKUtils
|
import com.ck.ckcollar.app.utils.CKUtils
|
||||||
import com.ck.ckcollar.app.utils.Const
|
import com.ck.ckcollar.app.utils.Const
|
||||||
|
import com.ck.ckcollar.app.utils.LubanCompressUtil
|
||||||
import com.ck.ckcollar.app.utils.networkone.ICallback
|
import com.ck.ckcollar.app.utils.networkone.ICallback
|
||||||
import com.ck.ckcollar.app.utils.networkone.TTHttpClient
|
import com.ck.ckcollar.app.utils.networkone.TTHttpClient
|
||||||
import com.ck.ckcollar.app.utils.networkone.model.TTRequestData
|
import com.ck.ckcollar.app.utils.networkone.model.TTRequestData
|
||||||
@@ -81,6 +82,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
private enum class CameraAction { SCAN, TAKE_PHOTO }
|
private enum class CameraAction { SCAN, TAKE_PHOTO }
|
||||||
|
|
||||||
private var pendingCameraAction: CameraAction? = null
|
private var pendingCameraAction: CameraAction? = null
|
||||||
|
private var imageUploadInProgress = false
|
||||||
private var permissionTopDialog: AlertDialog? = null
|
private var permissionTopDialog: AlertDialog? = null
|
||||||
private val cameraSettingsLauncher = registerForActivityResult(
|
private val cameraSettingsLauncher = registerForActivityResult(
|
||||||
ActivityResultContracts.StartActivityForResult()
|
ActivityResultContracts.StartActivityForResult()
|
||||||
@@ -794,8 +796,26 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
|
||||||
if (requestCode == 55 && resultCode == RESULT_OK) {
|
if (requestCode == 55 && resultCode == RESULT_OK) {
|
||||||
var path = PreferencesUtils.getString(activity!!, Const.IMAGE_PATH, "")
|
val path = PreferencesUtils.getString(activity!!, Const.IMAGE_PATH, "")
|
||||||
uploadImage(path!!)
|
if (!path.isNullOrBlank()) {
|
||||||
|
imageUploadInProgress = true
|
||||||
|
LubanCompressUtil.getCompressFile(
|
||||||
|
requireContext(),
|
||||||
|
File(path),
|
||||||
|
object : LubanCompressUtil.CompressCallback {
|
||||||
|
override fun success(file: File) {
|
||||||
|
if (!isAdded) return
|
||||||
|
uploadImage(file.absolutePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun fail(failMsg: String) {
|
||||||
|
if (!isAdded) return
|
||||||
|
imageUploadInProgress = false
|
||||||
|
toast(failMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -809,6 +829,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
TTHttpClient.postFile(activity as TTBaseActivity, "上传照片s", param, object : ICallback {
|
TTHttpClient.postFile(activity as TTBaseActivity, "上传照片s", param, object : ICallback {
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
if (!CKApp.app.isUserLoggedIn) {
|
if (!CKApp.app.isUserLoggedIn) {
|
||||||
|
imageUploadInProgress = false
|
||||||
hiddenProgeassDialog()
|
hiddenProgeassDialog()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -819,6 +840,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailed(code: String, msg: String) {
|
override fun onFailed(code: String, msg: String) {
|
||||||
|
imageUploadInProgress = false
|
||||||
hiddenProgeassDialog()
|
hiddenProgeassDialog()
|
||||||
toast(msg)
|
toast(msg)
|
||||||
}
|
}
|
||||||
@@ -832,6 +854,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
add(TTRequestData("imageUrl", imageUrl))
|
add(TTRequestData("imageUrl", imageUrl))
|
||||||
}, object : ICallback {
|
}, object : ICallback {
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
|
imageUploadInProgress = false
|
||||||
hiddenProgeassDialog()
|
hiddenProgeassDialog()
|
||||||
if (!CKApp.app.isUserLoggedIn) return
|
if (!CKApp.app.isUserLoggedIn) return
|
||||||
|
|
||||||
@@ -851,6 +874,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onFailed(code: String, msg: String) {
|
override fun onFailed(code: String, msg: String) {
|
||||||
|
imageUploadInProgress = false
|
||||||
hiddenProgeassDialog()
|
hiddenProgeassDialog()
|
||||||
toast(msg)
|
toast(msg)
|
||||||
}
|
}
|
||||||
@@ -911,7 +935,7 @@ class HomeFragment : CKBaseFragment() {
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
if (CKApp.app.isUserLoggedIn && loadedLoginToken != CKApp.app.token) {
|
if (CKApp.app.isUserLoggedIn && loadedLoginToken != CKApp.app.token) {
|
||||||
initData()
|
initData()
|
||||||
} else if (CKApp.app.isUserLoggedIn && shouldRefreshPetListOnResume) {
|
} else if (CKApp.app.isUserLoggedIn && shouldRefreshPetListOnResume && !imageUploadInProgress) {
|
||||||
getPetList()
|
getPetList()
|
||||||
}
|
}
|
||||||
shouldRefreshPetListOnResume = false
|
shouldRefreshPetListOnResume = false
|
||||||
|
|||||||
@@ -12,10 +12,12 @@ import android.text.style.ClickableSpan
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import com.ck.ckcollar.app.CKApp
|
import com.ck.ckcollar.app.CKApp
|
||||||
import com.ck.ckcollar.app.R
|
import com.ck.ckcollar.app.R
|
||||||
|
import com.ck.ckcollar.app.config.Config
|
||||||
import com.ck.ckcollar.app.databinding.ActivityLoginBinding
|
import com.ck.ckcollar.app.databinding.ActivityLoginBinding
|
||||||
import com.ck.ckcollar.app.model.LoginModel
|
import com.ck.ckcollar.app.model.LoginModel
|
||||||
import com.ck.ckcollar.app.model.UserInfoModel
|
import com.ck.ckcollar.app.model.UserInfoModel
|
||||||
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
||||||
|
import com.ck.ckcollar.app.ui.act.setting.SettingWebViewActivity
|
||||||
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
||||||
import com.ck.ckcollar.app.utils.Const
|
import com.ck.ckcollar.app.utils.Const
|
||||||
import com.ck.ckcollar.app.utils.networkone.ICallback
|
import com.ck.ckcollar.app.utils.networkone.ICallback
|
||||||
@@ -124,8 +126,11 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
var clickableSpan2 = object : ClickableSpan() {
|
var clickableSpan2 = object : ClickableSpan() {
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
toActivity(
|
toActivity(
|
||||||
AgreementActivity::class.java,
|
SettingWebViewActivity::class.java,
|
||||||
DataCollection().apply { add(Data("title", "隐私政策")) })
|
DataCollection().apply {
|
||||||
|
add(Data("url", Config.PRIVACY_POLICY))
|
||||||
|
add(Data("title", getString(R.string.privacy_agreement)))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateDrawState(ds: TextPaint) {
|
override fun updateDrawState(ds: TextPaint) {
|
||||||
@@ -146,7 +151,6 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
binding.btnCheck.setOnClickListener {
|
binding.btnCheck.setOnClickListener {
|
||||||
isCheck = !isCheck
|
isCheck = !isCheck
|
||||||
setCheckUI()
|
setCheckUI()
|
||||||
PreferencesUtils.putBoolean(this@LoginActivity, Const.AGREEMENT_CHECK, isCheck)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSendCode.setOnClickListener {
|
binding.btnSendCode.setOnClickListener {
|
||||||
@@ -154,6 +158,10 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
sendCode()
|
sendCode()
|
||||||
}
|
}
|
||||||
binding.btnWX.setOnClickListener {
|
binding.btnWX.setOnClickListener {
|
||||||
|
if (!isCheck) {
|
||||||
|
toast(getString(R.string.alert_agreement))
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
val req = SendAuth.Req()
|
val req = SendAuth.Req()
|
||||||
req.scope = "snsapi_userinfo" // 只能填 snsapi_userinfo
|
req.scope = "snsapi_userinfo" // 只能填 snsapi_userinfo
|
||||||
req.state = "wechat_sdk_demo_test"
|
req.state = "wechat_sdk_demo_test"
|
||||||
@@ -303,7 +311,9 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
binding.editLoginName.setText(PreferencesUtils.getString(this, Const.LOGIN_NAME, ""))
|
binding.editLoginName.setText(PreferencesUtils.getString(this, Const.LOGIN_NAME, ""))
|
||||||
|
|
||||||
isCheck = PreferencesUtils.getBolean(this, Const.AGREEMENT_CHECK, false) as Boolean
|
// Agreement consent is intentionally session-local: users must confirm it on every login.
|
||||||
|
isCheck = false
|
||||||
|
setCheckUI()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,6 +329,12 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun wxLogin(code : String){
|
fun wxLogin(code : String){
|
||||||
|
|
||||||
|
if (!isCheck) {
|
||||||
|
toast(getString(R.string.alert_agreement))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
showProgeassDialog(getString(R.string.login))
|
showProgeassDialog(getString(R.string.login))
|
||||||
TTHttpClient.postJson(this,"微信登录", TTRequestParam().apply { add(TTRequestData("code",code)) },object : ICallback{
|
TTHttpClient.postJson(this,"微信登录", TTRequestParam().apply { add(TTRequestData("code",code)) },object : ICallback{
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.ck.ckcollar.app.ui.act.member
|
package com.ck.ckcollar.app.ui.act.member
|
||||||
|
|
||||||
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@@ -8,6 +9,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import com.alipay.sdk.app.EnvUtils
|
||||||
import com.alipay.sdk.app.PayTask
|
import com.alipay.sdk.app.PayTask
|
||||||
import com.ck.ckcollar.app.R
|
import com.ck.ckcollar.app.R
|
||||||
import com.ck.ckcollar.app.databinding.ActivityMemberBinding
|
import com.ck.ckcollar.app.databinding.ActivityMemberBinding
|
||||||
@@ -38,7 +40,7 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
|
|||||||
var data = listOf<MemberPriceModel>()
|
var data = listOf<MemberPriceModel>()
|
||||||
var pos = -1
|
var pos = -1
|
||||||
var isAuto = false
|
var isAuto = false
|
||||||
var payType = "1"
|
var payType = "0"
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
binding = ActivityOpenMemberBinding.inflate(layoutInflater)
|
binding = ActivityOpenMemberBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
@@ -220,7 +222,10 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
|
|||||||
|
|
||||||
fun aliPay(orderStr : String){
|
fun aliPay(orderStr : String){
|
||||||
GlobalScope.launch(Dispatchers.IO){
|
GlobalScope.launch(Dispatchers.IO){
|
||||||
|
// [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。
|
||||||
|
if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) {
|
||||||
|
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)
|
||||||
|
}
|
||||||
val alipay = PayTask(this@OpenMemberActivity)
|
val alipay = PayTask(this@OpenMemberActivity)
|
||||||
val result = alipay.payV2(orderStr, true)
|
val result = alipay.payV2(orderStr, true)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ck.ckcollar.app.ui.act.order
|
package com.ck.ckcollar.app.ui.act.order
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.pm.ApplicationInfo
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@@ -8,6 +9,7 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.alipay.sdk.app.EnvUtils
|
||||||
import com.alipay.sdk.app.PayTask
|
import com.alipay.sdk.app.PayTask
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.ck.ckcollar.app.CKApp
|
import com.ck.ckcollar.app.CKApp
|
||||||
@@ -55,7 +57,7 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var memberModel: UserInfoModel? = null
|
var memberModel: UserInfoModel? = null
|
||||||
|
|
||||||
var payType = "1"
|
var payType = "0"
|
||||||
|
|
||||||
var selectBalance = false
|
var selectBalance = false
|
||||||
var selectPoints = false
|
var selectPoints = false
|
||||||
@@ -83,9 +85,6 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
binding.btnAli.setOnClickListener(payClick)
|
binding.btnAli.setOnClickListener(payClick)
|
||||||
binding.btnWX.setOnClickListener(payClick)
|
binding.btnWX.setOnClickListener(payClick)
|
||||||
binding.btnBalance.setOnClickListener(payClick)
|
|
||||||
binding.btnPoints.setOnClickListener(payClick)
|
|
||||||
|
|
||||||
|
|
||||||
binding.btnBalance.setOnClickListener {
|
binding.btnBalance.setOnClickListener {
|
||||||
|
|
||||||
@@ -102,6 +101,11 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
binding.btnPoints.setOnClickListener {
|
binding.btnPoints.setOnClickListener {
|
||||||
|
if ((memberModel?.points ?: 0.0) <= 0.0) {
|
||||||
|
toast(getString(R.string.points_over))
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
|
||||||
selectPoints = !selectPoints
|
selectPoints = !selectPoints
|
||||||
if (selectPoints){
|
if (selectPoints){
|
||||||
binding.image4.setImageResource(R.mipmap.image_address_check_select)
|
binding.image4.setImageResource(R.mipmap.image_address_check_select)
|
||||||
@@ -113,8 +117,7 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
binding.btnBuyNow.setOnClickListener {
|
binding.btnBuyNow.setOnClickListener {
|
||||||
|
|
||||||
|
if (selectBalance && !canPointsCoverPayAmount()){
|
||||||
if (selectBalance){
|
|
||||||
getPayPassword()
|
getPayPassword()
|
||||||
}else{
|
}else{
|
||||||
order("")
|
order("")
|
||||||
@@ -171,7 +174,7 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
|
|
||||||
if (TextUtils.isEmpty(payType) && memberModel?.balance == 0.0){
|
if (TextUtils.isEmpty(payType) && memberModel?.balance == 0.0){
|
||||||
if (!selectPoints || "1".equals(confirmOrderModel?.isPoint)){
|
if (!selectPoints || "1".equals(confirmOrderModel?.isPoint.toString())){
|
||||||
toast(getString(R.string.balance_over))
|
toast(getString(R.string.balance_over))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -207,10 +210,7 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var showBalance = BigDecimal.valueOf(model.payAmount).setScale(2, RoundingMode.HALF_UP)
|
var showBalance = BigDecimal.valueOf(model.payAmount).setScale(2, RoundingMode.HALF_UP)
|
||||||
if (selectPoints){
|
if (selectPoints){
|
||||||
memberModel?.intoAmounts?.let { intoAmounts ->
|
calculatePointsDeduction()?.let { pointsDeduction ->
|
||||||
val pointsDeduction = BigDecimal.valueOf(memberModel!!.points)
|
|
||||||
.multiply(BigDecimal(intoAmounts))
|
|
||||||
.setScale(2, RoundingMode.HALF_UP)
|
|
||||||
showBalance = showBalance.subtract(pointsDeduction)
|
showBalance = showBalance.subtract(pointsDeduction)
|
||||||
.max(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP))
|
.max(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP))
|
||||||
}
|
}
|
||||||
@@ -234,6 +234,11 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var payType = payType
|
var payType = payType
|
||||||
if(selectBalance){
|
if(selectBalance){
|
||||||
|
if (TextUtils.isEmpty(payType) && memberModel?.balance == 0.0){
|
||||||
|
toast(getString(R.string.balance_over))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (TextUtils.isEmpty(payType)){
|
if (TextUtils.isEmpty(payType)){
|
||||||
payType = "2"
|
payType = "2"
|
||||||
}else{
|
}else{
|
||||||
@@ -241,6 +246,11 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(selectPoints){
|
if(selectPoints){
|
||||||
|
if (TextUtils.isEmpty(payType) && memberModel?.points == 0.0){
|
||||||
|
toast(getString(R.string.points_over))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (TextUtils.isEmpty(payType)){
|
if (TextUtils.isEmpty(payType)){
|
||||||
payType = "3"
|
payType = "3"
|
||||||
}else{
|
}else{
|
||||||
@@ -304,9 +314,28 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aliPay(orderStr: String) {
|
private fun canPointsCoverPayAmount(): Boolean {
|
||||||
GlobalScope.launch(Dispatchers.IO) {
|
if (!selectPoints) return false
|
||||||
|
val pointsDeduction = calculatePointsDeduction() ?: return false
|
||||||
|
val payAmount = BigDecimal.valueOf(model.payAmount).setScale(2, RoundingMode.HALF_UP)
|
||||||
|
return pointsDeduction >= payAmount
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun calculatePointsDeduction(): BigDecimal? {
|
||||||
|
val member = memberModel ?: return null
|
||||||
|
val intoAmounts = member.intoAmounts?.toBigDecimalOrNull() ?: return null
|
||||||
|
return BigDecimal.valueOf(member.points)
|
||||||
|
.multiply(intoAmounts)
|
||||||
|
.setScale(2, RoundingMode.HALF_UP)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun aliPay(orderStr: String) {
|
||||||
|
|
||||||
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
|
// [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。
|
||||||
|
if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) {
|
||||||
|
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)
|
||||||
|
}
|
||||||
val alipay = PayTask(this@PayOrderActivity)
|
val alipay = PayTask(this@PayOrderActivity)
|
||||||
val result = alipay.payV2(orderStr, true)
|
val result = alipay.payV2(orderStr, true)
|
||||||
|
|
||||||
@@ -347,7 +376,7 @@ class PayOrderActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getResult(data: DataCollection, resultCode: Int) {
|
override fun getResult(data: DataCollection, resultCode: Int) {
|
||||||
if (resultCode == 10001){
|
if (resultCode == 10001){
|
||||||
showPayBottomView()
|
showPayBottomView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -342,8 +342,8 @@ class AddPetActivity : CKBaseActivity() {
|
|||||||
data?.data?.let(::handleSelectedImage)
|
data?.data?.let(::handleSelectedImage)
|
||||||
?: toast(getString(R.string.read_photo_failed))
|
?: toast(getString(R.string.read_photo_failed))
|
||||||
}else if (requestCode == 555 && resultCode == RESULT_OK) {
|
}else if (requestCode == 555 && resultCode == RESULT_OK) {
|
||||||
var path = PreferencesUtils.getString(this@AddPetActivity, Const.IMAGE_PATH,"")
|
val path = PreferencesUtils.getString(this@AddPetActivity, Const.IMAGE_PATH, "")
|
||||||
uploadImage(path!!)
|
compressAndUploadImage(path.orEmpty())
|
||||||
}
|
}
|
||||||
binding.textPhotoNum.setText((this.data.size - 1 ).toString() + "/3")
|
binding.textPhotoNum.setText((this.data.size - 1 ).toString() + "/3")
|
||||||
}
|
}
|
||||||
@@ -389,6 +389,29 @@ class AddPetActivity : CKBaseActivity() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun compressAndUploadImage(path: String) {
|
||||||
|
if (path.isBlank()) {
|
||||||
|
toast(getString(R.string.read_photo_failed))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
LubanCompressUtil.getCompressFile(
|
||||||
|
this,
|
||||||
|
File(path),
|
||||||
|
object : LubanCompressUtil.CompressCallback {
|
||||||
|
override fun success(file: File) {
|
||||||
|
if (isFinishing || isDestroyed) return
|
||||||
|
uploadImage(file.absolutePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun fail(failMsg: String) {
|
||||||
|
if (isFinishing || isDestroyed) return
|
||||||
|
toast(failMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun copySelectedImageToCache(uri: Uri): String? {
|
private fun copySelectedImageToCache(uri: Uri): String? {
|
||||||
val extension = contentResolver.getType(uri)
|
val extension = contentResolver.getType(uri)
|
||||||
?.let(MimeTypeMap.getSingleton()::getExtensionFromMimeType)
|
?.let(MimeTypeMap.getSingleton()::getExtensionFromMimeType)
|
||||||
|
|||||||
@@ -5,94 +5,66 @@ import android.os.Bundle
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import com.ck.ckcollar.app.CKApp
|
import com.ck.ckcollar.app.CKApp
|
||||||
import com.ck.ckcollar.app.R
|
import com.ck.ckcollar.app.R
|
||||||
|
import com.ck.ckcollar.app.config.Config
|
||||||
import com.ck.ckcollar.app.databinding.ActivitySettingBinding
|
import com.ck.ckcollar.app.databinding.ActivitySettingBinding
|
||||||
|
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
||||||
import com.ck.ckcollar.app.ui.act.login.AgreementActivity
|
import com.ck.ckcollar.app.ui.act.login.AgreementActivity
|
||||||
import com.ck.ckcollar.app.ui.act.login.LoginActivity
|
import com.ck.ckcollar.app.ui.act.login.LoginActivity
|
||||||
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
|
||||||
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
||||||
import com.ck.ckcollar.app.ui.dialog.CKAlertDialog
|
import com.ck.ckcollar.app.ui.dialog.CKAlertDialog
|
||||||
import com.tt.kit.model.Data
|
import com.tt.kit.model.Data
|
||||||
import com.tt.kit.model.DataCollection
|
import com.tt.kit.model.DataCollection
|
||||||
|
|
||||||
class SettingActivity : CKBaseActivity(), View.OnClickListener {
|
class SettingActivity : CKBaseActivity(), View.OnClickListener {
|
||||||
lateinit var binding: ActivitySettingBinding
|
private lateinit var binding: ActivitySettingBinding
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
binding = ActivitySettingBinding.inflate(layoutInflater)
|
binding = ActivitySettingBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
setStatusBarColor(getColor(R.color.white))
|
||||||
setStatusBarColor(resources.getColor(R.color.white))
|
setActionBarColor(getColor(R.color.white))
|
||||||
setActionBarColor(resources.getColor(R.color.white))
|
|
||||||
|
|
||||||
setTitleText(getString(R.string.setting))
|
setTitleText(getString(R.string.setting))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
binding.btnLogout.visibility = if (CKApp.app.isUserLoggedIn) View.VISIBLE else View.GONE
|
binding.btnLogout.visibility = if (CKApp.app.isUserLoggedIn) View.VISIBLE else View.GONE
|
||||||
|
listOf(binding.contentLoginPassword, binding.contentPaymentPassword, binding.contentAboutUs,
|
||||||
binding.contentLoginPassword.setOnClickListener(this)
|
binding.contentUserAgreement, binding.contentPrivacyAgreement, binding.contentShippingAddress,
|
||||||
binding.contentPaymentPassword.setOnClickListener(this)
|
binding.contentCancellation, binding.btnLogout).forEach { it.setOnClickListener(this) }
|
||||||
binding.contentAboutUs.setOnClickListener(this)
|
|
||||||
binding.contentUserAgreement.setOnClickListener(this)
|
|
||||||
binding.contentPrivacyAgreement.setOnClickListener(this)
|
|
||||||
binding.contentShippingAddress.setOnClickListener(this)
|
|
||||||
binding.contentCancellation.setOnClickListener(this)
|
|
||||||
binding.btnLogout.setOnClickListener(this)
|
|
||||||
}
|
}
|
||||||
override fun initData() {
|
|
||||||
|
|
||||||
}
|
override fun initData() = Unit
|
||||||
|
|
||||||
override fun onClick(v: View?) {
|
override fun onClick(v: View?) {
|
||||||
|
when (v?.id) {
|
||||||
when (v?.id){
|
R.id.contentLoginPassword -> if (requireLogin()) toActivity(PasswordManagerActivity::class.java, DataCollection())
|
||||||
R.id.contentLoginPassword->{
|
R.id.contentPaymentPassword -> if (requireLogin()) toActivity(PayPasswordManagerActivity::class.java, DataCollection())
|
||||||
if (!requireLogin()) return
|
R.id.contentAboutUs -> toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title", getString(R.string.about_us))) })
|
||||||
toActivity(PasswordManagerActivity::class.java, DataCollection())
|
R.id.contentUserAgreement -> toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title", getString(R.string.user_agreement))) })
|
||||||
}
|
R.id.contentPrivacyAgreement -> toActivity(SettingWebViewActivity::class.java, pageParams(Config.PRIVACY_POLICY, getString(R.string.privacy_agreement)))
|
||||||
R.id.contentPaymentPassword->{
|
R.id.contentShippingAddress -> if (requireLogin()) toActivity(AddressActivity::class.java, DataCollection().apply { add(Data("flag", "1")) })
|
||||||
if (!requireLogin()) return
|
R.id.contentCancellation -> if (requireLogin()) toActivity(AccountCancellationActivity::class.java, DataCollection())
|
||||||
toActivity(PayPasswordManagerActivity::class.java, DataCollection())
|
R.id.btnLogout -> CKAlertDialog(this, getString(R.string.logout), getString(R.string.logout_alert), object : CKAlertDialog.AlertClickListener {
|
||||||
|
override fun onBack(isConfirm: Boolean) {
|
||||||
}
|
if (isConfirm) {
|
||||||
R.id.contentAboutUs->{
|
CKApp.app.clearLoginState()
|
||||||
toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title","关于我们")) })
|
startActivity(Intent(this@SettingActivity, MainActivity::class.java).apply {
|
||||||
}
|
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
||||||
R.id.contentUserAgreement->{
|
putExtra(MainActivity.EXTRA_SHOW_HOME, true)
|
||||||
toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title","用户协议")) })
|
})
|
||||||
}
|
finish()
|
||||||
R.id.contentPrivacyAgreement->{
|
|
||||||
toActivity(AgreementActivity::class.java, DataCollection().apply { add(Data("title","隐私协议")) })
|
|
||||||
}
|
|
||||||
R.id.contentShippingAddress->{
|
|
||||||
if (!requireLogin()) return
|
|
||||||
toActivity(AddressActivity::class.java, DataCollection().apply { add(Data("flag","1"))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
R.id.contentCancellation->{
|
|
||||||
if (!requireLogin()) return
|
|
||||||
toActivity(AccountCancellationActivity::class.java, DataCollection())
|
|
||||||
}
|
|
||||||
R.id.btnLogout->{
|
|
||||||
CKAlertDialog(this@SettingActivity,getString(R.string.logout),getString(R.string.logout_alert),object : CKAlertDialog.AlertClickListener{
|
|
||||||
override fun onBack(isConfirm: Boolean) {
|
|
||||||
if (isConfirm){
|
|
||||||
CKApp.app.clearLoginState()
|
|
||||||
startActivity(
|
|
||||||
Intent(this@SettingActivity, MainActivity::class.java).apply {
|
|
||||||
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
|
||||||
putExtra(MainActivity.EXTRA_SHOW_HOME, true)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}).show()
|
}
|
||||||
|
}).show()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun pageParams(url: String, title: String) = DataCollection().apply {
|
||||||
|
add(Data("url", url))
|
||||||
|
add(Data("title", title))
|
||||||
|
}
|
||||||
|
|
||||||
private fun requireLogin(): Boolean {
|
private fun requireLogin(): Boolean {
|
||||||
if (CKApp.app.isUserLoggedIn) return true
|
if (CKApp.app.isUserLoggedIn) return true
|
||||||
toActivity(LoginActivity::class.java, DataCollection())
|
toActivity(LoginActivity::class.java, DataCollection())
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package com.ck.ckcollar.app.ui.act.setting
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.webkit.WebSettings
|
||||||
|
import android.webkit.WebView
|
||||||
|
import android.webkit.WebViewClient
|
||||||
|
import android.net.Uri
|
||||||
|
import com.ck.ckcollar.app.R
|
||||||
|
import com.ck.ckcollar.app.databinding.ActivitySettingWebViewBinding
|
||||||
|
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
||||||
|
|
||||||
|
/** Displays a setting document supplied by the caller. */
|
||||||
|
class SettingWebViewActivity : CKBaseActivity() {
|
||||||
|
private lateinit var binding: ActivitySettingWebViewBinding
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
binding = ActivitySettingWebViewBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setActionBarColor(getColor(R.color.white))
|
||||||
|
setStatusBarColor(getColor(R.color.white))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun initView() {
|
||||||
|
binding.webView.settings.apply {
|
||||||
|
javaScriptEnabled = true; domStorageEnabled = true
|
||||||
|
useWideViewPort = true; loadWithOverviewMode = true
|
||||||
|
setSupportZoom(true); builtInZoomControls = true; displayZoomControls = false
|
||||||
|
layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS
|
||||||
|
}
|
||||||
|
binding.webView.apply {
|
||||||
|
isFocusableInTouchMode = true
|
||||||
|
requestFocus()
|
||||||
|
webViewClient = object : WebViewClient() {
|
||||||
|
override fun onPageFinished(view: WebView?, url: String?) {
|
||||||
|
super.onPageFinished(view, url)
|
||||||
|
// Do this after the page's anchor/default restoration has run.
|
||||||
|
view?.post {
|
||||||
|
view.scrollTo(0, 0)
|
||||||
|
view.evaluateJavascript("window.scrollTo(0, 0);", null)
|
||||||
|
}
|
||||||
|
view?.postDelayed({ view.scrollTo(0, 0) }, 300)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun initData() {
|
||||||
|
val params = getReceiveParam()
|
||||||
|
setTitleText(params.get("title")?.stringValue?.toString().orEmpty())
|
||||||
|
val url = params.get("url")?.stringValue?.toString().orEmpty()
|
||||||
|
if (url.isNotEmpty()) {
|
||||||
|
// Fragment anchors (for example #a6 in the privacy URL) override the
|
||||||
|
// initial position, while this screen always starts at the document top.
|
||||||
|
val topUrl = runCatching { Uri.parse(url).buildUpon().fragment(null).build().toString() }
|
||||||
|
.getOrDefault(url)
|
||||||
|
binding.webView.loadUrl(topUrl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
binding.webView.apply { stopLoading(); destroy() }
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,7 +65,7 @@ class OrderActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var memberModel: UserInfoModel? = null
|
var memberModel: UserInfoModel? = null
|
||||||
|
|
||||||
var payType = "1"
|
var payType = "0"
|
||||||
|
|
||||||
var selectBalance = false
|
var selectBalance = false
|
||||||
var selectPoints = false
|
var selectPoints = false
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.ck.ckcollar.app.ui.dialog.CKEditNameDialog
|
|||||||
import com.ck.ckcollar.app.ui.dialog.CKEditPhoneDialog
|
import com.ck.ckcollar.app.ui.dialog.CKEditPhoneDialog
|
||||||
import com.ck.ckcollar.app.ui.dialog.CKPhotoDialog
|
import com.ck.ckcollar.app.ui.dialog.CKPhotoDialog
|
||||||
import com.ck.ckcollar.app.utils.Const
|
import com.ck.ckcollar.app.utils.Const
|
||||||
|
import com.ck.ckcollar.app.utils.IDCardValidate
|
||||||
import com.ck.ckcollar.app.utils.networkone.ICallback
|
import com.ck.ckcollar.app.utils.networkone.ICallback
|
||||||
import com.ck.ckcollar.app.utils.networkone.TTHttpClient
|
import com.ck.ckcollar.app.utils.networkone.TTHttpClient
|
||||||
import com.ck.ckcollar.app.utils.networkone.model.TTRequestData
|
import com.ck.ckcollar.app.utils.networkone.model.TTRequestData
|
||||||
@@ -86,7 +87,7 @@ class UserInfoActivity: CKBaseActivity() {
|
|||||||
binding.textPhone.setOnClickListener {
|
binding.textPhone.setOnClickListener {
|
||||||
CKEditPhoneDialog(
|
CKEditPhoneDialog(
|
||||||
this@UserInfoActivity,
|
this@UserInfoActivity,
|
||||||
getString(R.string.bind_phone),
|
getString(R.string.modify_phone_number),
|
||||||
object : CKEditPhoneDialog.AlertClickListener {
|
object : CKEditPhoneDialog.AlertClickListener {
|
||||||
override fun onBack(text: String) {
|
override fun onBack(text: String) {
|
||||||
binding.textPhone.text = text
|
binding.textPhone.text = text
|
||||||
@@ -99,7 +100,12 @@ class UserInfoActivity: CKBaseActivity() {
|
|||||||
binding.textIdCard.setOnClickListener {
|
binding.textIdCard.setOnClickListener {
|
||||||
CKEditDialog(this@UserInfoActivity,getString(R.string.id_card),binding.textIdCard.text.toString(),object : CKEditDialog.AlertClickListener{
|
CKEditDialog(this@UserInfoActivity,getString(R.string.id_card),binding.textIdCard.text.toString(),object : CKEditDialog.AlertClickListener{
|
||||||
override fun onBack(text: String) {
|
override fun onBack(text: String) {
|
||||||
binding.textIdCard.text = text
|
val idCard = text.trim().uppercase()
|
||||||
|
if (!IDCardValidate.validateEffective(idCard)) {
|
||||||
|
toast("请输入正确的身份证号码")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
binding.textIdCard.text = idCard
|
||||||
save()
|
save()
|
||||||
}
|
}
|
||||||
}).show()
|
}).show()
|
||||||
|
|||||||
@@ -4,9 +4,27 @@ import android.os.Bundle
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.GradientDrawable
|
||||||
|
import android.text.SpannableString
|
||||||
|
import android.text.Spanned
|
||||||
|
import android.text.method.LinkMovementMethod
|
||||||
|
import android.text.style.ClickableSpan
|
||||||
|
import android.view.View
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.view.WindowManager
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.ScrollView
|
||||||
import com.ck.ckcollar.app.CKApp
|
import com.ck.ckcollar.app.CKApp
|
||||||
|
import com.ck.ckcollar.app.R
|
||||||
import com.ck.ckcollar.app.databinding.ActivityIndexBinding
|
import com.ck.ckcollar.app.databinding.ActivityIndexBinding
|
||||||
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
import com.ck.ckcollar.app.ui.act.home.MainActivity
|
||||||
|
import com.ck.ckcollar.app.ui.act.login.AgreementActivity
|
||||||
|
import com.ck.ckcollar.app.ui.act.setting.SettingWebViewActivity
|
||||||
|
import com.ck.ckcollar.app.config.Config
|
||||||
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
||||||
import com.ck.ckcollar.app.utils.Const
|
import com.ck.ckcollar.app.utils.Const
|
||||||
import com.cyclone.shadowsocks.utils.PreferencesUtils
|
import com.cyclone.shadowsocks.utils.PreferencesUtils
|
||||||
@@ -23,19 +41,89 @@ class IndexActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
var handler = object : Handler(Looper.getMainLooper()){
|
var handler = object : Handler(Looper.getMainLooper()){
|
||||||
override fun handleMessage(msg: Message) {
|
override fun handleMessage(msg: Message) {
|
||||||
if (!CKApp.app.isUserLoggedIn){
|
continueAfterAgreement()
|
||||||
var isFirst = PreferencesUtils.getBolean(this@IndexActivity, Const.FIRST,true) as Boolean
|
}
|
||||||
if (isFirst){
|
}
|
||||||
toActivity(WelcomeActivity::class.java, DataCollection())
|
|
||||||
}else{
|
|
||||||
toActivity(MainActivity::class.java, DataCollection())
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
toActivity(MainActivity::class.java, DataCollection())
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private fun continueAfterAgreement() {
|
||||||
|
val agreed = PreferencesUtils.getBolean(this, Const.AGREEMENT_CHECK, false) as Boolean
|
||||||
|
if (!agreed) {
|
||||||
|
showUserNotice()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val isFirst = PreferencesUtils.getBolean(this, Const.FIRST, true) as Boolean
|
||||||
|
toActivity(if (isFirst) WelcomeActivity::class.java else MainActivity::class.java, DataCollection())
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
finish()
|
private fun showUserNotice() {
|
||||||
|
fun dp(value: Int) = (value * resources.displayMetrics.density).toInt()
|
||||||
|
val title = TextView(this).apply {
|
||||||
|
text = "用户须知"
|
||||||
|
setTextColor(Color.rgb(35, 39, 55))
|
||||||
|
textSize = 20f
|
||||||
|
gravity = Gravity.CENTER
|
||||||
|
setTypeface(typeface, android.graphics.Typeface.BOLD)
|
||||||
|
}
|
||||||
|
val content = TextView(this).apply {
|
||||||
|
setTextColor(Color.rgb(95, 99, 115))
|
||||||
|
textSize = 14f
|
||||||
|
setLineSpacing(0f, 1.35f)
|
||||||
|
movementMethod = LinkMovementMethod.getInstance()
|
||||||
|
val text = "感谢您使用宠盾!我们非常重视您的个人信息和隐私保护。请阅读并同意《用户协议》和《隐私协议》后继续使用。\n\n1. 为提供宠物管理、设备连接、消息通知和 AI 识别等服务,我们可能会收集必要的账号、设备及使用信息。\n\n2. 在您使用拍照、扫码、地图定位、蓝牙或相册等功能时,我们会在获得授权后申请相应权限;您可以随时在系统设置中关闭权限,但可能无法使用对应功能。\n\n3. 我们会采取合理的安全措施保护您的信息,不会将信息用于协议约定以外的用途,也不会向无关方出售或出租您的信息。\n\n4. 为保障服务稳定运行,部分功能可能由第三方服务提供商协助完成,我们会要求其按照法律法规和隐私政策保护您的信息。\n\n5. 当协议内容或服务发生重要变化时,我们会通过弹窗或其他适当方式提醒您。您可以通过应用内相关入口再次查看完整协议。"
|
||||||
|
val spannable = SpannableString(text)
|
||||||
|
val userStart = text.indexOf("《用户协议》")
|
||||||
|
val privacyStart = text.indexOf("《隐私协议》")
|
||||||
|
spannable.setSpan(object : ClickableSpan() {
|
||||||
|
override fun onClick(widget: View) = toActivity(AgreementActivity::class.java, DataCollection().apply { add(com.tt.kit.model.Data("title", getString(R.string.user_agreement))) })
|
||||||
|
}, userStart, userStart + 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||||
|
spannable.setSpan(object : ClickableSpan() {
|
||||||
|
override fun onClick(widget: View) = toActivity(SettingWebViewActivity::class.java, DataCollection().apply {
|
||||||
|
add(com.tt.kit.model.Data("url", Config.PRIVACY_POLICY)); add(com.tt.kit.model.Data("title", getString(R.string.privacy_agreement)))
|
||||||
|
})
|
||||||
|
}, privacyStart, privacyStart + 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
|
||||||
|
setText(spannable)
|
||||||
|
}
|
||||||
|
val contentScroll = ScrollView(this).apply {
|
||||||
|
isFillViewport = true
|
||||||
|
isVerticalScrollBarEnabled = false
|
||||||
|
addView(content, ViewGroup.LayoutParams(-1, -2))
|
||||||
|
}
|
||||||
|
lateinit var dialog: AlertDialog
|
||||||
|
val buttons = LinearLayout(this).apply {
|
||||||
|
orientation = LinearLayout.HORIZONTAL
|
||||||
|
gravity = Gravity.CENTER
|
||||||
|
}
|
||||||
|
fun action(text: String, backgroundColor: Int, textColor: Int, onClick: () -> Unit) = TextView(this).apply {
|
||||||
|
this.text = text; gravity = Gravity.CENTER; setTextColor(textColor); textSize = 15f
|
||||||
|
setTypeface(typeface, android.graphics.Typeface.BOLD); setPadding(0, dp(13), 0, dp(13))
|
||||||
|
background = GradientDrawable().apply { setColor(backgroundColor); cornerRadius = dp(10).toFloat() }
|
||||||
|
setOnClickListener { onClick() }
|
||||||
|
}
|
||||||
|
val rejectButton = action("不同意", Color.rgb(245, 246, 250), Color.rgb(35, 39, 55), {
|
||||||
|
dialog.dismiss(); finishAndRemoveTask()
|
||||||
|
})
|
||||||
|
val agreeButton = action("同意", getColor2(R.attr.buttonColor), Color.WHITE) {
|
||||||
|
PreferencesUtils.putBoolean(this@IndexActivity, Const.AGREEMENT_CHECK, true)
|
||||||
|
dialog.dismiss(); continueAfterAgreement()
|
||||||
|
}
|
||||||
|
buttons.addView(rejectButton, LinearLayout.LayoutParams(0, dp(52), 1f).apply { marginEnd = dp(7) })
|
||||||
|
buttons.addView(agreeButton, LinearLayout.LayoutParams(0, dp(52), 1f).apply { marginStart = dp(7) })
|
||||||
|
val panel = LinearLayout(this).apply {
|
||||||
|
orientation = LinearLayout.VERTICAL
|
||||||
|
setPadding(dp(24), dp(25), dp(24), dp(24))
|
||||||
|
addView(title, LinearLayout.LayoutParams(-1, dp(40)))
|
||||||
|
addView(contentScroll, LinearLayout.LayoutParams(-1, dp(390)).apply { topMargin = dp(12); bottomMargin = dp(20) })
|
||||||
|
addView(buttons, LinearLayout.LayoutParams(-1, dp(52)))
|
||||||
|
background = GradientDrawable().apply { setColor(Color.WHITE); cornerRadius = dp(22).toFloat() }
|
||||||
|
}
|
||||||
|
dialog = AlertDialog.Builder(this).setView(panel).setCancelable(false).create()
|
||||||
|
dialog.show()
|
||||||
|
dialog.window?.apply {
|
||||||
|
setBackgroundDrawableResource(android.R.color.transparent)
|
||||||
|
setDimAmount(0.55f)
|
||||||
|
setGravity(Gravity.CENTER)
|
||||||
|
setLayout((resources.displayMetrics.widthPixels * 0.82f).toInt(), WindowManager.LayoutParams.WRAP_CONTENT)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ck.ckcollar.app.ui.dialog
|
package com.ck.ckcollar.app.ui.dialog
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.ColorStateList
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -33,8 +34,15 @@ class CKEditPhoneDialog(
|
|||||||
dialogAlertBinding.title.text = title
|
dialogAlertBinding.title.text = title
|
||||||
}
|
}
|
||||||
dialogAlertBinding.btnSendCode.setOnClickListener { sendCode() }
|
dialogAlertBinding.btnSendCode.setOnClickListener { sendCode() }
|
||||||
|
dialogAlertBinding.btnSendCode.setTextColor(
|
||||||
|
ColorStateList(
|
||||||
|
arrayOf(intArrayOf(-android.R.attr.state_enabled), intArrayOf()),
|
||||||
|
intArrayOf(mContext.getColor(R.color.textSecondColor), mContext.getColor(R.color.appStyle))
|
||||||
|
)
|
||||||
|
)
|
||||||
dialogAlertBinding.cancelButton.setOnClickListener(object : View.OnClickListener {
|
dialogAlertBinding.cancelButton.setOnClickListener(object : View.OnClickListener {
|
||||||
override fun onClick(v: View?) {
|
override fun onClick(v: View?) {
|
||||||
|
dialogAlertBinding.btnSendCode.stopCountDown()
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -72,7 +80,7 @@ class CKEditPhoneDialog(
|
|||||||
add(TTRequestData("smsCode",dialogAlertBinding.textCode.text.toString()))
|
add(TTRequestData("smsCode",dialogAlertBinding.textCode.text.toString()))
|
||||||
},object : ICallback{
|
},object : ICallback{
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
mContext.toast(mContext.getString(R.string.send_success))
|
mContext.toast(mContext.getString(R.string.edit_success))
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +102,8 @@ class CKEditPhoneDialog(
|
|||||||
add(TTRequestData("scene","changePhone"))
|
add(TTRequestData("scene","changePhone"))
|
||||||
},object : ICallback{
|
},object : ICallback{
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
mContext.toast(mContext.getString(R.string.edit_success))
|
mContext.toast(mContext.getString(R.string.verification_code_sent))
|
||||||
|
dialogAlertBinding.btnSendCode.startCountDown()
|
||||||
alertClickListener.onBack(dialogAlertBinding.textPhone.text.toString())
|
alertClickListener.onBack(dialogAlertBinding.textPhone.text.toString())
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -108,4 +117,4 @@ class CKEditPhoneDialog(
|
|||||||
interface AlertClickListener {
|
interface AlertClickListener {
|
||||||
fun onBack(text : String)
|
fun onBack(text : String)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package com.ck.ckcollar.app.utils
|
||||||
|
|
||||||
|
import java.time.DateTimeException
|
||||||
|
import java.time.LocalDate
|
||||||
|
import java.time.format.DateTimeFormatter
|
||||||
|
import java.time.format.ResolverStyle
|
||||||
|
|
||||||
|
/** 校验中国大陆地区的 15 位和 18 位居民身份证号码。 */
|
||||||
|
object IDCardValidate {
|
||||||
|
private val weights = intArrayOf(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
|
||||||
|
private val verifyCodes = charArrayOf('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
|
||||||
|
private val areaCodes = setOf(
|
||||||
|
"11", "12", "13", "14", "15",
|
||||||
|
"21", "22", "23",
|
||||||
|
"31", "32", "33", "34", "35", "36", "37",
|
||||||
|
"41", "42", "43", "44", "45", "46",
|
||||||
|
"50", "51", "52", "53", "54",
|
||||||
|
"61", "62", "63", "64", "65",
|
||||||
|
"71", "81", "82", "91"
|
||||||
|
)
|
||||||
|
private val birthDateFormatter = DateTimeFormatter
|
||||||
|
.ofPattern("uuuuMMdd")
|
||||||
|
.withResolverStyle(ResolverStyle.STRICT)
|
||||||
|
private val earliestBirthDate = LocalDate.of(1900, 1, 1)
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun validate_effective(idcardNumber: String?): Boolean = validateEffective(idcardNumber)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为兼容 Water 项目而保留,第二个参数不会影响校验结果。
|
||||||
|
*/
|
||||||
|
@JvmStatic
|
||||||
|
@Suppress("UNUSED_PARAMETER")
|
||||||
|
fun validate_effective(idcardNumber: String?, isreturn_AutoCard: Boolean): Boolean =
|
||||||
|
validateEffective(idcardNumber)
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun validateEffective(idCardNumber: String?): Boolean {
|
||||||
|
val source = idCardNumber?.trim()?.uppercase() ?: return false
|
||||||
|
val cardNumber = when (source.length) {
|
||||||
|
OLD_CARD_NUMBER_LENGTH -> convertToNewCardNumber(source) ?: return false
|
||||||
|
NEW_CARD_NUMBER_LENGTH -> source
|
||||||
|
else -> return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cardNumber.take(17).all(Char::isDigit)) return false
|
||||||
|
if (cardNumber.last() != 'X' && !cardNumber.last().isDigit()) return false
|
||||||
|
if (cardNumber.substring(0, 2) !in areaCodes) return false
|
||||||
|
if (!hasValidBirthDate(cardNumber.substring(6, 14))) return false
|
||||||
|
return cardNumber.last() == calculateVerifyCode(cardNumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun convertToNewCardNumber(oldCardNumber: String): String? {
|
||||||
|
if (!oldCardNumber.all(Char::isDigit)) return null
|
||||||
|
val firstSeventeen = buildString(17) {
|
||||||
|
append(oldCardNumber, 0, 6)
|
||||||
|
append("19")
|
||||||
|
append(oldCardNumber, 6, oldCardNumber.length)
|
||||||
|
}
|
||||||
|
return firstSeventeen + calculateVerifyCode(firstSeventeen)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hasValidBirthDate(value: String): Boolean {
|
||||||
|
val birthDate = try {
|
||||||
|
LocalDate.parse(value, birthDateFormatter)
|
||||||
|
} catch (_: DateTimeException) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return birthDate.isAfter(earliestBirthDate) && birthDate.isBefore(LocalDate.now())
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun calculateVerifyCode(cardNumber: CharSequence): Char {
|
||||||
|
val sum = weights.indices.sumOf { index ->
|
||||||
|
(cardNumber[index] - '0') * weights[index]
|
||||||
|
}
|
||||||
|
return verifyCodes[sum % 11]
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val NEW_CARD_NUMBER_LENGTH = 18
|
||||||
|
private const val OLD_CARD_NUMBER_LENGTH = 15
|
||||||
|
}
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
android:text="@string/no_reason_text"
|
android:text="@string/no_reason_text"
|
||||||
android:background="@drawable/bg_cz_button"
|
android:background="@drawable/bg_cz_button"
|
||||||
android:paddingHorizontal="5dp"
|
android:paddingHorizontal="5dp"
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
android:visibility="gone"/>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
|
|||||||
@@ -49,38 +49,6 @@
|
|||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
|
||||||
android:id="@+id/btnAli"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingHorizontal="20dp"
|
|
||||||
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_ali"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKTextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textColor="@color/textColor"
|
|
||||||
android:text="@string/alipay"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:id="@+id/image1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_address_check_select"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
android:id="@+id/btnWX"
|
android:id="@+id/btnWX"
|
||||||
@@ -91,7 +59,7 @@
|
|||||||
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:visibility="gone"
|
android:visibility="visible"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -113,10 +81,46 @@
|
|||||||
android:id="@+id/image2"
|
android:id="@+id/image2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_address_check_select"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
|
android:id="@+id/btnAli"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="20dp"
|
||||||
|
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_marginTop="10dp">
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_ali"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKTextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textColor="@color/textColor"
|
||||||
|
android:text="@string/alipay"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:id="@+id/image1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
android:src="@mipmap/image_address_check_narmal"
|
android:src="@mipmap/image_address_check_narmal"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
android:id="@+id/btnBalance"
|
android:id="@+id/btnBalance"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -263,7 +263,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:visibility="gone"
|
android:visibility="visible"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -295,7 +295,6 @@
|
|||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -317,7 +316,7 @@
|
|||||||
android:id="@+id/image1"
|
android:id="@+id/image1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@mipmap/image_address_check_select"
|
android:src="@mipmap/image_address_check_narmal"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -232,7 +232,7 @@
|
|||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:visibility="gone"
|
android:visibility="visible"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -264,7 +264,6 @@
|
|||||||
android:layout_height="50dp"
|
android:layout_height="50dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -286,7 +285,7 @@
|
|||||||
android:id="@+id/image1"
|
android:id="@+id/image1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@mipmap/image_address_check_select"
|
android:src="@mipmap/image_address_check_narmal"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -56,38 +56,6 @@
|
|||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
|
||||||
android:id="@+id/btnAli"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingHorizontal="20dp"
|
|
||||||
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_ali"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKTextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textColor="@color/textColor"
|
|
||||||
android:text="@string/alipay"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:id="@+id/image1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_address_check_select"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
android:id="@+id/btnWX"
|
android:id="@+id/btnWX"
|
||||||
@@ -97,8 +65,7 @@
|
|||||||
android:paddingHorizontal="20dp"
|
android:paddingHorizontal="20dp"
|
||||||
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
android:visibility="visible"
|
||||||
android:visibility="gone"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -120,11 +87,48 @@
|
|||||||
android:id="@+id/image2"
|
android:id="@+id/image2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_address_check_select"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
|
android:id="@+id/btnAli"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="20dp"
|
||||||
|
android:background="@drawable/bg_view_gray_radius_12_stroke_1"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_ali"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKTextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textColor="@color/textColor"
|
||||||
|
android:text="@string/alipay"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:id="@+id/image1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
android:src="@mipmap/image_address_check_narmal"
|
android:src="@mipmap/image_address_check_narmal"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKButton
|
<com.ck.ckcollar.app.widget.CKButton
|
||||||
android:id="@+id/btnRecharge"
|
android:id="@+id/btnRecharge"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -107,40 +107,6 @@
|
|||||||
android:layout_marginBottom="20dp"
|
android:layout_marginBottom="20dp"
|
||||||
android:textSize="16sp"></com.ck.ckcollar.app.widget.CKTextView>
|
android:textSize="16sp"></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
|
||||||
android:id="@+id/btnAli"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingHorizontal="20dp"
|
|
||||||
android:background="@drawable/bg_view_white_radius_12_stroke_1"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_ali"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKTextView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textColor="@color/textColor"
|
|
||||||
android:text="@string/alipay"
|
|
||||||
android:paddingLeft="8dp"
|
|
||||||
></com.ck.ckcollar.app.widget.CKTextView>
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
|
||||||
android:id="@+id/image1"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@mipmap/image_address_check_select"
|
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
android:id="@+id/btnWX"
|
android:id="@+id/btnWX"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -150,7 +116,7 @@
|
|||||||
android:background="@drawable/bg_view_white_radius_12_stroke_1"
|
android:background="@drawable/bg_view_white_radius_12_stroke_1"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:visibility="gone"
|
android:visibility="visible"
|
||||||
>
|
>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
@@ -172,10 +138,44 @@
|
|||||||
android:id="@+id/image2"
|
android:id="@+id/image2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_address_check_select"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
|
android:id="@+id/btnAli"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="20dp"
|
||||||
|
android:background="@drawable/bg_view_white_radius_12_stroke_1"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_marginTop="10dp">
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@mipmap/image_ali"
|
||||||
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKTextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textColor="@color/textColor"
|
||||||
|
android:text="@string/alipay"
|
||||||
|
android:paddingLeft="8dp"
|
||||||
|
></com.ck.ckcollar.app.widget.CKTextView>
|
||||||
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
|
android:id="@+id/image1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
android:src="@mipmap/image_address_check_narmal"
|
android:src="@mipmap/image_address_check_narmal"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
></com.ck.ckcollar.app.widget.CKImageView>
|
||||||
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
</com.ck.ckcollar.app.widget.CKLinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKButton
|
<com.ck.ckcollar.app.widget.CKButton
|
||||||
android:id="@+id/btnApply"
|
android:id="@+id/btnApply"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="50dp"
|
android:layout_marginTop="20dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:text="提示"
|
android:text="提示"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="@color/textColor"
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:layout_marginHorizontal="30dp"
|
android:layout_marginHorizontal="30dp"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="20dp"
|
||||||
android:hint="@string/input_phone"
|
android:hint="@string/input_phone"
|
||||||
android:textColor="@color/textColor"
|
android:textColor="@color/textColor"
|
||||||
android:textColorHint="@color/textSecondColor"
|
android:textColorHint="@color/textSecondColor"
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
<string name="cancel_cussess">取消成功</string>
|
<string name="cancel_cussess">取消成功</string>
|
||||||
<string name="receive_cussess">收货成功</string>
|
<string name="receive_cussess">收货成功</string>
|
||||||
<string name="bound_success">绑定成功</string>
|
<string name="bound_success">绑定成功</string>
|
||||||
|
<string name="modify_phone_number">修改手机号</string>
|
||||||
|
|
||||||
<string name="next">下一步</string>
|
<string name="next">下一步</string>
|
||||||
<string name="into">立即体验</string>
|
<string name="into">立即体验</string>
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
<string name="go_to_main">进入平台(%sS)</string>
|
<string name="go_to_main">进入平台(%sS)</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="time">(%s) 秒</string>
|
<string name="time">(%s) 秒后重发</string>
|
||||||
<string name="send_code">发送验证码</string>
|
<string name="send_code">发送验证码</string>
|
||||||
<string name="login">登录</string>
|
<string name="login">登录</string>
|
||||||
<string name="register">注册</string>
|
<string name="register">注册</string>
|
||||||
@@ -505,6 +506,7 @@
|
|||||||
<string name="input_addres_details">输入详细地址</string>
|
<string name="input_addres_details">输入详细地址</string>
|
||||||
<string name="input_tag">选择标签</string>
|
<string name="input_tag">选择标签</string>
|
||||||
<string name="input_phone_alert">输入正确手机号</string>
|
<string name="input_phone_alert">输入正确手机号</string>
|
||||||
|
<string name="verification_code_sent">验证码已发送</string>
|
||||||
|
|
||||||
<string name="register_success">注册成功</string>
|
<string name="register_success">注册成功</string>
|
||||||
<string name="lost_success">找回成功</string>
|
<string name="lost_success">找回成功</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user