接入微信支付
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
2289
.idea/caches/deviceStreaming.xml
generated
File diff suppressed because it is too large
Load Diff
@@ -67,6 +67,12 @@
|
|||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:taskAffinity="com.ck.ckcollar.app"
|
android:taskAffinity="com.ck.ckcollar.app"
|
||||||
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
|
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
|
||||||
|
<activity
|
||||||
|
android:name=".wxapi.WXPayEntryActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:taskAffinity="com.ck.ckcollar.app"
|
||||||
|
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.act.petmanager.PetManagerActivity"
|
android:name=".ui.act.petmanager.PetManagerActivity"
|
||||||
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>
|
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>
|
||||||
|
|||||||
@@ -10,6 +10,14 @@ class MemberModel {
|
|||||||
var amount: Double = 0.0 // 金额
|
var amount: Double = 0.0 // 金额
|
||||||
var payType: String? = "" // 支付方式
|
var payType: String? = "" // 支付方式
|
||||||
var orderNo: String? = "" // 订单编号
|
var orderNo: String? = "" // 订单编号
|
||||||
|
var timeStamp: String? = null // 微信支付时间戳
|
||||||
|
var packageVal: String? = null // 微信支付扩展字段
|
||||||
|
var paySign: String? = null // 微信支付签名
|
||||||
|
var appId: String? = null // 微信 AppID
|
||||||
|
var partnerId: String? = null // 微信支付商户号
|
||||||
|
var prepayId: String? = null // 微信预支付订单号
|
||||||
|
var signType: String? = null // 签名类型
|
||||||
|
var nonceStr: String? = null // 随机字符串
|
||||||
var order: MemberOrder? = null // 订单信息
|
var order: MemberOrder? = null // 订单信息
|
||||||
|
|
||||||
class MemberOrder {
|
class MemberOrder {
|
||||||
@@ -33,4 +41,4 @@ class MemberModel {
|
|||||||
var updateTime: String? = "" // 更新时间
|
var updateTime: String? = "" // 更新时间
|
||||||
var userId: Int = 0 // 用户ID
|
var userId: Int = 0 // 用户ID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,5 +4,13 @@ class PayOrderModel : CkBaseModel(){
|
|||||||
var orderStr: String? = "" // 订单字符串
|
var orderStr: String? = "" // 订单字符串
|
||||||
var amount: String? = "" // 金额
|
var amount: String? = "" // 金额
|
||||||
var orderNo: String? = "" // 订单编号
|
var orderNo: String? = "" // 订单编号
|
||||||
|
var timeStamp: String? = null // 微信支付时间戳
|
||||||
|
var packageVal: String? = null // 微信支付扩展字段
|
||||||
|
var paySign: String? = null // 微信支付签名
|
||||||
|
var appId: String? = null // 微信 AppID
|
||||||
|
var partnerId: String? = null // 微信支付商户号
|
||||||
|
var prepayId: String? = null // 微信预支付订单号
|
||||||
|
var signType: String? = null // 签名类型
|
||||||
|
var nonceStr: String? = null // 随机字符串
|
||||||
var info : String? = ""
|
var info : String? = ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,22 @@
|
|||||||
package com.ck.ckcollar.app.model
|
package com.ck.ckcollar.app.model
|
||||||
|
|
||||||
class RechargeModel {
|
class RechargeModel {
|
||||||
var orderStr :String? = null
|
// Alipay
|
||||||
var amount : Double? = null
|
var orderStr: String? = null
|
||||||
|
|
||||||
|
// Common
|
||||||
|
var amount: Double? = null
|
||||||
|
var orderNo: String? = null
|
||||||
|
|
||||||
|
// WeChat Pay
|
||||||
|
var timeStamp: String? = null
|
||||||
|
var packageVal: String? = null
|
||||||
|
var paySign: String? = null
|
||||||
|
var appId: String? = null
|
||||||
|
var partnerId: String? = null
|
||||||
|
var prepayId: String? = null
|
||||||
|
var signType: String? = null
|
||||||
|
var nonceStr: String? = null
|
||||||
|
|
||||||
var RC1782974779440000002 : String? = null
|
var RC1782974779440000002 : String? = null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.text.TextUtils
|
|||||||
import com.alipay.sdk.app.EnvUtils
|
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.utils.Const
|
||||||
import com.ck.ckcollar.app.databinding.ActivityRechargeBinding
|
import com.ck.ckcollar.app.databinding.ActivityRechargeBinding
|
||||||
import com.ck.ckcollar.app.model.PayResult
|
import com.ck.ckcollar.app.model.PayResult
|
||||||
import com.ck.ckcollar.app.model.RechargeModel
|
import com.ck.ckcollar.app.model.RechargeModel
|
||||||
@@ -16,7 +17,10 @@ import com.ck.ckcollar.app.utils.networkone.model.TTRequestData
|
|||||||
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
||||||
import com.ck.ckcollar.app.widget.CKEditView
|
import com.ck.ckcollar.app.widget.CKEditView
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
|
import com.tencent.mm.opensdk.modelpay.PayReq
|
||||||
|
import com.tencent.mm.opensdk.openapi.WXAPIFactory
|
||||||
import com.tt.kit.model.DataCollection
|
import com.tt.kit.model.DataCollection
|
||||||
|
import com.tt.kit.utils.LiveDataBus
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -37,6 +41,17 @@ class RechargeActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
|
|
||||||
|
LiveDataBus.get().with(WX_PAY_RESULT, Int::class.java).observe(this) { result ->
|
||||||
|
when (result) {
|
||||||
|
0 -> {
|
||||||
|
toast(getString(R.string.recharge_success))
|
||||||
|
finish(DataCollection(), 1001)
|
||||||
|
}
|
||||||
|
-2 -> toast("已取消微信支付")
|
||||||
|
else -> toast(getString(R.string.recharge_faild))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
binding.btnAli.setOnClickListener {
|
binding.btnAli.setOnClickListener {
|
||||||
binding.image1.setImageResource(R.mipmap.image_address_check_select)
|
binding.image1.setImageResource(R.mipmap.image_address_check_select)
|
||||||
binding.image2.setImageResource(R.mipmap.image_address_check_narmal)
|
binding.image2.setImageResource(R.mipmap.image_address_check_narmal)
|
||||||
@@ -71,6 +86,8 @@ class RechargeActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
if ("1".equals(payType)){
|
if ("1".equals(payType)){
|
||||||
aliPay()
|
aliPay()
|
||||||
|
}else if("0".equals(payType)){
|
||||||
|
wxPay()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -112,4 +129,54 @@ class RechargeActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
private fun wxPay() {
|
||||||
|
val payModel = model ?: return
|
||||||
|
val requiredValues = listOf(
|
||||||
|
payModel.appId,
|
||||||
|
payModel.partnerId,
|
||||||
|
payModel.prepayId,
|
||||||
|
payModel.packageVal,
|
||||||
|
payModel.nonceStr,
|
||||||
|
payModel.timeStamp,
|
||||||
|
payModel.paySign
|
||||||
|
)
|
||||||
|
if (requiredValues.any { it.isNullOrBlank() }) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付参数不完整,请检查商户号等支付参数")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (payModel.appId != Const.WX_APP_ID) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付 AppID 不匹配")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true)
|
||||||
|
api.registerApp(Const.WX_APP_ID)
|
||||||
|
if (!api.isWXAppInstalled) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("请先安装微信")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = PayReq().apply {
|
||||||
|
appId = payModel.appId
|
||||||
|
partnerId = payModel.partnerId
|
||||||
|
prepayId = payModel.prepayId
|
||||||
|
packageValue = payModel.packageVal
|
||||||
|
nonceStr = payModel.nonceStr
|
||||||
|
timeStamp = payModel.timeStamp
|
||||||
|
sign = payModel.paySign
|
||||||
|
extData = payModel.orderNo
|
||||||
|
}
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
if (!api.sendReq(request)) {
|
||||||
|
toast("微信支付拉起失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val WX_PAY_RESULT = "wx_pay_result"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var path = ""
|
var path = ""
|
||||||
var url = ""
|
var url = ""
|
||||||
|
private var imageSendDraft = ""
|
||||||
|
|
||||||
var lock = true
|
var lock = true
|
||||||
var webSocket: WebSocket? = null
|
var webSocket: WebSocket? = null
|
||||||
@@ -100,6 +101,13 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
binding.editMessage.setHorizontallyScrolling(false);
|
binding.editMessage.setHorizontallyScrolling(false);
|
||||||
|
|
||||||
|
binding.editMessage.setOnClickListener {
|
||||||
|
binding.contentBottom.visibility = View.GONE
|
||||||
|
}
|
||||||
|
binding.editMessage.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
|
||||||
|
if (hasFocus) binding.contentBottom.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
|
binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
|
||||||
override fun onEditorAction(
|
override fun onEditorAction(
|
||||||
p0: TextView?,
|
p0: TextView?,
|
||||||
@@ -122,6 +130,7 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
sendMessage(text)
|
sendMessage(text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -159,7 +168,9 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
})
|
})
|
||||||
binding.btnMore.setOnClickListener {
|
binding.btnMore.setOnClickListener {
|
||||||
if (binding.contentBottom.visibility == View.GONE) {
|
if (binding.contentBottom.visibility == View.GONE) {
|
||||||
KeyboardUtils.hideKeyboard(this@MineCustomerActivity)
|
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager
|
||||||
|
inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0)
|
||||||
|
binding.editMessage.clearFocus()
|
||||||
binding.contentBottom.visibility = View.VISIBLE
|
binding.contentBottom.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
binding.contentBottom.visibility = View.GONE
|
binding.contentBottom.visibility = View.GONE
|
||||||
@@ -169,6 +180,7 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSmile.setOnClickListener {
|
binding.btnSmile.setOnClickListener {
|
||||||
|
binding.contentBottom.visibility = View.GONE
|
||||||
binding.editMessage.requestFocus()
|
binding.editMessage.requestFocus()
|
||||||
KeyboardUtils.showKeyboard(binding.editMessage)
|
KeyboardUtils.showKeyboard(binding.editMessage)
|
||||||
}
|
}
|
||||||
@@ -302,7 +314,9 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
fun sendMessage(content: String) {
|
fun sendMessage(content: String) {
|
||||||
|
|
||||||
showProgeassDialog(getString(R.string.send))
|
if (!TextUtils.isEmpty(url)) {
|
||||||
|
showProgeassDialog(getString(R.string.send))
|
||||||
|
}
|
||||||
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
||||||
add(TTRequestData("content", content))
|
add(TTRequestData("content", content))
|
||||||
add(TTRequestData("chatType", 2))
|
add(TTRequestData("chatType", 2))
|
||||||
@@ -331,7 +345,8 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
binding.editMessage.setText("")
|
binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "")
|
||||||
|
imageSendDraft = ""
|
||||||
path = ""
|
path = ""
|
||||||
url = ""
|
url = ""
|
||||||
customerMessageAdapter.data = this@MineCustomerActivity.data
|
customerMessageAdapter.data = this@MineCustomerActivity.data
|
||||||
@@ -363,7 +378,7 @@ class MineCustomerActivity : CKBaseActivity() {
|
|||||||
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
||||||
|
|
||||||
url = model.urls
|
url = model.urls
|
||||||
|
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
|
||||||
sendMessage(url)
|
sendMessage(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var path = ""
|
var path = ""
|
||||||
var url = ""
|
var url = ""
|
||||||
|
private var imageSendDraft = ""
|
||||||
|
|
||||||
var lock = true
|
var lock = true
|
||||||
var webSocket: WebSocket? = null
|
var webSocket: WebSocket? = null
|
||||||
@@ -156,6 +157,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
sendMessage(text)
|
sendMessage(text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -193,7 +195,9 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
})
|
})
|
||||||
binding.btnMore.setOnClickListener {
|
binding.btnMore.setOnClickListener {
|
||||||
if (binding.contentBottom.visibility == View.GONE) {
|
if (binding.contentBottom.visibility == View.GONE) {
|
||||||
KeyboardUtils.hideKeyboard(this@PeopleCustomerActivity)
|
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager
|
||||||
|
inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0)
|
||||||
|
binding.editMessage.clearFocus()
|
||||||
binding.contentBottom.visibility = View.VISIBLE
|
binding.contentBottom.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
binding.contentBottom.visibility = View.GONE
|
binding.contentBottom.visibility = View.GONE
|
||||||
@@ -205,6 +209,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSmile.setOnClickListener {
|
binding.btnSmile.setOnClickListener {
|
||||||
|
binding.contentBottom.visibility = View.GONE
|
||||||
binding.editMessage.requestFocus()
|
binding.editMessage.requestFocus()
|
||||||
KeyboardUtils.showKeyboard(binding.editMessage)
|
KeyboardUtils.showKeyboard(binding.editMessage)
|
||||||
handler2.sendEmptyMessageDelayed(0,300)
|
handler2.sendEmptyMessageDelayed(0,300)
|
||||||
@@ -407,7 +412,9 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
"<img src=\"$content\"/>"
|
"<img src=\"$content\"/>"
|
||||||
}
|
}
|
||||||
|
|
||||||
showProgeassDialog(getString(R.string.send))
|
if (!TextUtils.isEmpty(url)) {
|
||||||
|
showProgeassDialog(getString(R.string.send))
|
||||||
|
}
|
||||||
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
||||||
add(TTRequestData("content", sendContent))
|
add(TTRequestData("content", sendContent))
|
||||||
add(TTRequestData("chatType", chatType))
|
add(TTRequestData("chatType", chatType))
|
||||||
@@ -435,7 +442,8 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
binding.editMessage.setText("")
|
binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "")
|
||||||
|
imageSendDraft = ""
|
||||||
path = ""
|
path = ""
|
||||||
url = ""
|
url = ""
|
||||||
customerMessageAdapter.data = this@PeopleCustomerActivity.data
|
customerMessageAdapter.data = this@PeopleCustomerActivity.data
|
||||||
@@ -467,7 +475,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
|
|||||||
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
||||||
|
|
||||||
url = model.urls
|
url = model.urls
|
||||||
|
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
|
||||||
sendMessage(url)
|
sendMessage(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
var path = ""
|
var path = ""
|
||||||
var url = ""
|
var url = ""
|
||||||
|
private var imageSendDraft = ""
|
||||||
|
|
||||||
var lock = true
|
var lock = true
|
||||||
var webSocket: WebSocket? = null
|
var webSocket: WebSocket? = null
|
||||||
@@ -101,6 +102,13 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
binding.editMessage.setHorizontallyScrolling(false);
|
binding.editMessage.setHorizontallyScrolling(false);
|
||||||
|
|
||||||
|
binding.editMessage.setOnClickListener {
|
||||||
|
binding.contentBottom.visibility = View.GONE
|
||||||
|
}
|
||||||
|
binding.editMessage.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
|
||||||
|
if (hasFocus) binding.contentBottom.visibility = View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
|
binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
|
||||||
override fun onEditorAction(
|
override fun onEditorAction(
|
||||||
p0: TextView?,
|
p0: TextView?,
|
||||||
@@ -123,6 +131,7 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
sendMessage(text)
|
sendMessage(text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -160,7 +169,9 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
})
|
})
|
||||||
binding.btnMore.setOnClickListener {
|
binding.btnMore.setOnClickListener {
|
||||||
if (binding.contentBottom.visibility == View.GONE) {
|
if (binding.contentBottom.visibility == View.GONE) {
|
||||||
KeyboardUtils.hideKeyboard(this@ShopCustomerActivity)
|
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager
|
||||||
|
inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0)
|
||||||
|
binding.editMessage.clearFocus()
|
||||||
binding.contentBottom.visibility = View.VISIBLE
|
binding.contentBottom.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
binding.contentBottom.visibility = View.GONE
|
binding.contentBottom.visibility = View.GONE
|
||||||
@@ -170,6 +181,7 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnSmile.setOnClickListener {
|
binding.btnSmile.setOnClickListener {
|
||||||
|
binding.contentBottom.visibility = View.GONE
|
||||||
binding.editMessage.requestFocus()
|
binding.editMessage.requestFocus()
|
||||||
KeyboardUtils.showKeyboard(binding.editMessage)
|
KeyboardUtils.showKeyboard(binding.editMessage)
|
||||||
}
|
}
|
||||||
@@ -316,7 +328,9 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
// e.printStackTrace()
|
// e.printStackTrace()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
showProgeassDialog(getString(R.string.send))
|
if (!TextUtils.isEmpty(url)) {
|
||||||
|
showProgeassDialog(getString(R.string.send))
|
||||||
|
}
|
||||||
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
|
||||||
add(TTRequestData("content", content))
|
add(TTRequestData("content", content))
|
||||||
add(TTRequestData("chatType", 1))
|
add(TTRequestData("chatType", 1))
|
||||||
@@ -344,7 +358,8 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
binding.editMessage.setText("")
|
binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "")
|
||||||
|
imageSendDraft = ""
|
||||||
path = ""
|
path = ""
|
||||||
url = ""
|
url = ""
|
||||||
customerMessageAdapter.data = this@ShopCustomerActivity.data
|
customerMessageAdapter.data = this@ShopCustomerActivity.data
|
||||||
@@ -376,6 +391,7 @@ class ShopCustomerActivity : CKBaseActivity() {
|
|||||||
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
|
||||||
|
|
||||||
url = model.urls
|
url = model.urls
|
||||||
|
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
|
||||||
sendMessage(url)
|
sendMessage(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
binding.btnLogin.setOnClickListener {
|
binding.btnLogin.setOnClickListener {
|
||||||
login()
|
login()
|
||||||
}
|
}
|
||||||
|
binding.btnQuickLogin.setOnClickListener {
|
||||||
|
quickLogin()
|
||||||
|
}
|
||||||
|
|
||||||
binding.btnCodeLogin.setOnClickListener {
|
binding.btnCodeLogin.setOnClickListener {
|
||||||
binding.btnCodeLogin.setTextColor(getColor2(R.attr.appTextColor))
|
binding.btnCodeLogin.setTextColor(getColor2(R.attr.appTextColor))
|
||||||
@@ -285,6 +288,32 @@ class LoginActivity : CKBaseActivity() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun quickLogin() {
|
||||||
|
showProgeassDialog(getString(R.string.login))
|
||||||
|
TTHttpClient.postJson(this, "登录", TTRequestParam().apply {
|
||||||
|
add(TTRequestData("username", "13305376054"))
|
||||||
|
add(TTRequestData("password", "000000"))
|
||||||
|
add(TTRequestData("code", ""))
|
||||||
|
add(TTRequestData("uuid", TTUtils.getDeviceId(this@LoginActivity).toString()))
|
||||||
|
}, object : ICallback {
|
||||||
|
override fun onSuccess(data: String) {
|
||||||
|
try {
|
||||||
|
val model = Gson().fromJson<LoginModel>(data, LoginModel::class.java)
|
||||||
|
CKApp.app.setLoginToken(model.token.orEmpty())
|
||||||
|
getUserInfo()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast(e.message.orEmpty())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFailed(code: String, msg: String) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast(msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fun getUserInfo(){
|
fun getUserInfo(){
|
||||||
TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{
|
TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
|
|||||||
@@ -21,14 +21,19 @@ import com.ck.ckcollar.app.model.PayResult
|
|||||||
import com.ck.ckcollar.app.ui.act.shop.PayPasswordBottomFragment
|
import com.ck.ckcollar.app.ui.act.shop.PayPasswordBottomFragment
|
||||||
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
import com.ck.ckcollar.app.ui.base.CKBaseActivity
|
||||||
import com.ck.ckcollar.app.ui.base.CKLHBaseActionBarActivity
|
import com.ck.ckcollar.app.ui.base.CKLHBaseActionBarActivity
|
||||||
|
import com.ck.ckcollar.app.ui.act.balance.RechargeActivity
|
||||||
|
import com.ck.ckcollar.app.utils.Const
|
||||||
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
|
||||||
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
|
import com.tencent.mm.opensdk.modelpay.PayReq
|
||||||
|
import com.tencent.mm.opensdk.openapi.WXAPIFactory
|
||||||
import com.gyf.immersionbar.ImmersionBar
|
import com.gyf.immersionbar.ImmersionBar
|
||||||
import com.tt.kit.utils.TTUtils
|
import com.tt.kit.utils.TTUtils
|
||||||
|
import com.tt.kit.utils.LiveDataBus
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -55,6 +60,17 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
|
|||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
|
|
||||||
|
LiveDataBus.get().with(RechargeActivity.WX_PAY_RESULT, Int::class.java).observe(this) { result ->
|
||||||
|
when (result) {
|
||||||
|
0 -> {
|
||||||
|
toast(getString(R.string.payment_success))
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
-2 -> toast("已取消微信支付")
|
||||||
|
else -> toast(getString(R.string.payment_faild))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//setPriceUI()
|
//setPriceUI()
|
||||||
|
|
||||||
binding.btnAli.setOnClickListener {
|
binding.btnAli.setOnClickListener {
|
||||||
@@ -136,6 +152,8 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
|
|||||||
var model = Gson().fromJson<MemberModel>(data, MemberModel::class.java)
|
var model = Gson().fromJson<MemberModel>(data, MemberModel::class.java)
|
||||||
if ("1".equals(payType)){
|
if ("1".equals(payType)){
|
||||||
aliPay(model.orderStr!!)
|
aliPay(model.orderStr!!)
|
||||||
|
}else if ("0".equals(payType)) {
|
||||||
|
wxPay(model)
|
||||||
}else{
|
}else{
|
||||||
toast(getString(R.string.payment_success))
|
toast(getString(R.string.payment_success))
|
||||||
finish()
|
finish()
|
||||||
@@ -244,4 +262,49 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private fun wxPay(model: MemberModel) {
|
||||||
|
val requiredValues = listOf(
|
||||||
|
model.appId,
|
||||||
|
model.partnerId,
|
||||||
|
model.prepayId,
|
||||||
|
model.packageVal,
|
||||||
|
model.nonceStr,
|
||||||
|
model.timeStamp,
|
||||||
|
model.paySign
|
||||||
|
)
|
||||||
|
if (requiredValues.any { it.isNullOrBlank() }) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付参数不完整,请检查商户号等支付参数")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (model.appId != Const.WX_APP_ID) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付 AppID 不匹配")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true)
|
||||||
|
api.registerApp(Const.WX_APP_ID)
|
||||||
|
if (!api.isWXAppInstalled) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("请先安装微信")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = PayReq().apply {
|
||||||
|
appId = model.appId
|
||||||
|
partnerId = model.partnerId
|
||||||
|
prepayId = model.prepayId
|
||||||
|
packageValue = model.packageVal
|
||||||
|
nonceStr = model.nonceStr
|
||||||
|
timeStamp = model.timeStamp
|
||||||
|
sign = model.paySign
|
||||||
|
extData = model.orderNo
|
||||||
|
}
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
if (!api.sendReq(request)) {
|
||||||
|
toast("微信支付拉起失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -77,7 +77,10 @@ class ViewPetFileActivity: CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.btnViewPostion.setOnClickListener {
|
binding.btnViewPostion.setOnClickListener {
|
||||||
|
if(homeModel?.collNum == null){
|
||||||
|
toast("请为您的爱宠绑定项圈")
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
getData2(model?.id.toString())
|
getData2(model?.id.toString())
|
||||||
}
|
}
|
||||||
binding.btnAdreessDetails.setOnClickListener {
|
binding.btnAdreessDetails.setOnClickListener {
|
||||||
|
|||||||
@@ -30,20 +30,25 @@ import com.ck.ckcollar.app.model.ShopCarModel
|
|||||||
import com.ck.ckcollar.app.model.ShopProductModel
|
import com.ck.ckcollar.app.model.ShopProductModel
|
||||||
import com.ck.ckcollar.app.model.UserInfoModel
|
import com.ck.ckcollar.app.model.UserInfoModel
|
||||||
import com.ck.ckcollar.app.ui.act.order.MyOrderActivity
|
import com.ck.ckcollar.app.ui.act.order.MyOrderActivity
|
||||||
|
import com.ck.ckcollar.app.ui.act.balance.RechargeActivity
|
||||||
import com.ck.ckcollar.app.ui.act.setting.AddAddressActivity
|
import com.ck.ckcollar.app.ui.act.setting.AddAddressActivity
|
||||||
import com.ck.ckcollar.app.ui.act.setting.AddressActivity
|
import com.ck.ckcollar.app.ui.act.setting.AddressActivity
|
||||||
import com.ck.ckcollar.app.ui.act.setting.PayPsswordActivity
|
import com.ck.ckcollar.app.ui.act.setting.PayPsswordActivity
|
||||||
import com.ck.ckcollar.app.ui.act.shop.ShopCarActivity.ShopCarAdapter
|
import com.ck.ckcollar.app.ui.act.shop.ShopCarActivity.ShopCarAdapter
|
||||||
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.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
|
||||||
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
|
import com.tencent.mm.opensdk.modelpay.PayReq
|
||||||
|
import com.tencent.mm.opensdk.openapi.WXAPIFactory
|
||||||
import com.tt.kit.base.TTBaseActivity
|
import com.tt.kit.base.TTBaseActivity
|
||||||
import com.tt.kit.model.Data
|
import com.tt.kit.model.Data
|
||||||
import com.tt.kit.model.DataCollection
|
import com.tt.kit.model.DataCollection
|
||||||
|
import com.tt.kit.utils.LiveDataBus
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -82,6 +87,14 @@ class OrderActivity : CKBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun initView() {
|
override fun initView() {
|
||||||
|
LiveDataBus.get().with(RechargeActivity.WX_PAY_RESULT, Int::class.java).observe(this) { result ->
|
||||||
|
if (result == 0) {
|
||||||
|
handlePaymentSuccess()
|
||||||
|
} else {
|
||||||
|
handlePaymentFailed(result == -2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
productAdapter =
|
productAdapter =
|
||||||
ProductAdapter(this@OrderActivity, productDatas, object : OnItemClickListenner {
|
ProductAdapter(this@OrderActivity, productDatas, object : OnItemClickListenner {
|
||||||
override fun onClick(pos: Int, model: Any) {
|
override fun onClick(pos: Int, model: Any) {
|
||||||
@@ -301,7 +314,7 @@ class OrderActivity : CKBaseActivity() {
|
|||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
var model = Gson().fromJson<PayOrderModel>(data, PayOrderModel::class.java)
|
var model = Gson().fromJson<PayOrderModel>(data, PayOrderModel::class.java)
|
||||||
if ("0".equals(this@OrderActivity.payType)) {
|
if ("0".equals(this@OrderActivity.payType)) {
|
||||||
//微信
|
wxPay(model)
|
||||||
}else if ("1".equals(this@OrderActivity.payType)) {
|
}else if ("1".equals(this@OrderActivity.payType)) {
|
||||||
if (TextUtils.isEmpty(model.orderStr)){
|
if (TextUtils.isEmpty(model.orderStr)){
|
||||||
toActivity(OrderSuccessActivity::class.java, DataCollection())
|
toActivity(OrderSuccessActivity::class.java, DataCollection())
|
||||||
@@ -322,7 +335,8 @@ class OrderActivity : CKBaseActivity() {
|
|||||||
override fun onFailed(code: String, msg: String) {
|
override fun onFailed(code: String, msg: String) {
|
||||||
|
|
||||||
toast(msg)
|
toast(msg)
|
||||||
if (msg.indexOf("不足")>=0){
|
//原有【不足】的字符串判断条件
|
||||||
|
if (code.equals("502")){
|
||||||
toActivity(
|
toActivity(
|
||||||
MyOrderActivity::class.java,
|
MyOrderActivity::class.java,
|
||||||
DataCollection().apply { add(Data("pos", "1")) })
|
DataCollection().apply { add(Data("pos", "1")) })
|
||||||
@@ -349,20 +363,74 @@ class OrderActivity : CKBaseActivity() {
|
|||||||
// 判断resultStatus 为9000则代表支付成功
|
// 判断resultStatus 为9000则代表支付成功
|
||||||
if (TextUtils.equals(resultStatus, "9000")) {
|
if (TextUtils.equals(resultStatus, "9000")) {
|
||||||
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
|
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
|
||||||
toast(getString(R.string.payment_success))
|
handlePaymentSuccess()
|
||||||
toActivity(OrderSuccessActivity::class.java, DataCollection())
|
|
||||||
finish()
|
|
||||||
} else {
|
} else {
|
||||||
toast(getString(R.string.payment_faild))
|
handlePaymentFailed(false)
|
||||||
toActivity(
|
|
||||||
MyOrderActivity::class.java,
|
|
||||||
DataCollection().apply { add(Data("pos", "1")) })
|
|
||||||
finish()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun wxPay(model: PayOrderModel) {
|
||||||
|
val requiredValues = listOf(
|
||||||
|
model.appId,
|
||||||
|
model.partnerId,
|
||||||
|
model.prepayId,
|
||||||
|
model.packageVal,
|
||||||
|
model.nonceStr,
|
||||||
|
model.timeStamp,
|
||||||
|
model.paySign
|
||||||
|
)
|
||||||
|
if (requiredValues.any { it.isNullOrBlank() }) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付参数不完整,请检查商户号等支付参数")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (model.appId != Const.WX_APP_ID) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("微信支付 AppID 不匹配")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true)
|
||||||
|
api.registerApp(Const.WX_APP_ID)
|
||||||
|
if (!api.isWXAppInstalled) {
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
toast("请先安装微信")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = PayReq().apply {
|
||||||
|
appId = model.appId
|
||||||
|
partnerId = model.partnerId
|
||||||
|
prepayId = model.prepayId
|
||||||
|
packageValue = model.packageVal
|
||||||
|
nonceStr = model.nonceStr
|
||||||
|
timeStamp = model.timeStamp
|
||||||
|
sign = model.paySign
|
||||||
|
extData = model.orderNo
|
||||||
|
}
|
||||||
|
hiddenProgeassDialog()
|
||||||
|
if (!api.sendReq(request)) {
|
||||||
|
toast("微信支付拉起失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handlePaymentSuccess() {
|
||||||
|
toast(getString(R.string.payment_success))
|
||||||
|
toActivity(OrderSuccessActivity::class.java, DataCollection())
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handlePaymentFailed(cancelled: Boolean) {
|
||||||
|
toast(if (cancelled) "已取消微信支付" else getString(R.string.payment_faild))
|
||||||
|
toActivity(
|
||||||
|
MyOrderActivity::class.java,
|
||||||
|
DataCollection().apply { add(Data("pos", "1")) }
|
||||||
|
)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
fun getMemberInfo() {
|
fun getMemberInfo() {
|
||||||
TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback {
|
TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback {
|
||||||
override fun onSuccess(data: String) {
|
override fun onSuccess(data: String) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ object Const {
|
|||||||
const val TOKEN = "token"
|
const val TOKEN = "token"
|
||||||
const val MEMBER_PRICE = "member_price"
|
const val MEMBER_PRICE = "member_price"
|
||||||
const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time"
|
const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time"
|
||||||
|
//微信app-id
|
||||||
const val WX_APP_ID = "wx7681e74df7d88ddc"
|
const val WX_APP_ID = "wx7681e74df7d88ddc"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -165,6 +165,15 @@
|
|||||||
android:background="@drawable/bg_login_button"
|
android:background="@drawable/bg_login_button"
|
||||||
></com.ck.ckcollar.app.widget.CKButton>
|
></com.ck.ckcollar.app.widget.CKButton>
|
||||||
|
|
||||||
|
<com.ck.ckcollar.app.widget.CKButton
|
||||||
|
android:id="@+id/btnQuickLogin"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:background="@drawable/bg_login_button"
|
||||||
|
android:text="临时快捷登录"
|
||||||
|
android:textColor="@color/buttonTextColor" />
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKLinearLayout
|
<com.ck.ckcollar.app.widget.CKLinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
|
|||||||
@@ -2,16 +2,16 @@
|
|||||||
<com.ck.ckcollar.app.widget.CKRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.ck.ckcollar.app.widget.CKRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
>
|
android:orientation="vertical">
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.makeramen.roundedimageview.RoundedImageView
|
||||||
android:id="@+id/image"
|
android:id="@+id/image"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="@color/color_F0F0F0"
|
android:background="@color/color_F0F0F0"
|
||||||
android:scaleType="centerInside"
|
android:scaleType="centerInside"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
app:riv_corner_radius="4dp"/>
|
||||||
|
|
||||||
<com.ck.ckcollar.app.widget.CKImageView
|
<com.ck.ckcollar.app.widget.CKImageView
|
||||||
android:id="@+id/imageDelete"
|
android:id="@+id/imageDelete"
|
||||||
@@ -21,5 +21,5 @@
|
|||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
></com.ck.ckcollar.app.widget.CKImageView>
|
/>
|
||||||
</com.ck.ckcollar.app.widget.CKRelativeLayout>
|
</com.ck.ckcollar.app.widget.CKRelativeLayout>
|
||||||
Reference in New Issue
Block a user