This commit is contained in:
fengjignqi
2026-08-05 15:00:34 +08:00
parent 9d432dba67
commit c6eeb1321c
51 changed files with 857 additions and 452 deletions

Binary file not shown.

View File

@@ -75,6 +75,18 @@
<option name="screenX" value="1080" /> <option name="screenX" value="1080" />
<option name="screenY" value="2400" /> <option name="screenY" value="2400" />
</PersistentDeviceSelectionData> </PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="OPPO" />
<option name="codename" value="OP5759L1" />
<option name="id" value="OP5759L1" />
<option name="labId" value="google" />
<option name="manufacturer" value="OPPO" />
<option name="name" value="A38" />
<option name="screenDensity" value="320" />
<option name="screenX" value="720" />
<option name="screenY" value="1612" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData> <PersistentDeviceSelectionData>
<option name="api" value="35" /> <option name="api" value="35" />
<option name="brand" value="realme" /> <option name="brand" value="realme" />

View File

@@ -4,6 +4,13 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-08-05T02:01:17.427812300Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=D122222104A9" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection /> <DialogSelection />
</SelectionState> </SelectionState>
</selectionStates> </selectionStates>

View File

@@ -295,7 +295,7 @@
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />--> <!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />--> <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />-->
<!-- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />--> <!-- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />-->
@@ -305,12 +305,12 @@
<!-- android:required="true" />--> <!-- android:required="true" />-->
<!-- &lt;!&ndash; 必要的蓝牙权限 &ndash;&gt;--> <!-- &lt;!&ndash; 必要的蓝牙权限 &ndash;&gt;-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" />--> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />--> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- &lt;!&ndash; 从 Android 12 (API 31) 开始,需要新的蓝牙扫描/连接权限 &ndash;&gt;--> <!-- &lt;!&ndash; 从 Android 12 (API 31) 开始,需要新的蓝牙扫描/连接权限 &ndash;&gt;-->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />--> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />--> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />--> <!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />-->
@@ -326,4 +326,4 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
</manifest> </manifest>

View File

@@ -80,6 +80,7 @@ class CKApp : Application() {
isUserLoggedIn = false isUserLoggedIn = false
PreferencesUtils.putString(this, Const.TOKEN, "") PreferencesUtils.putString(this, Const.TOKEN, "")
PreferencesUtils.putString(this, Const.USER_DATA, "") PreferencesUtils.putString(this, Const.USER_DATA, "")
PreferencesUtils.putString(this, Const.PET_DATA, "")
} }

View File

@@ -29,7 +29,11 @@ import pub.devrel.easypermissions.EasyPermissions.PermissionCallbacks
class BlueToothActivity : CKBaseActivity() , PermissionCallbacks{ class BlueToothActivity : CKBaseActivity() , PermissionCallbacks{
lateinit var activityBluetoothBinding: ActivityBluetoothBinding lateinit var activityBluetoothBinding: ActivityBluetoothBinding
val permissions = listOf(Manifest.permission.BLUETOOTH,Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_CONNECT) val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
listOf(Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT)
} else {
listOf(Manifest.permission.ACCESS_FINE_LOCATION)
}
lateinit var blueBoothAdapter: BlueBoothAdapter lateinit var blueBoothAdapter: BlueBoothAdapter
var devices = mutableListOf<String>() var devices = mutableListOf<String>()
@@ -185,7 +189,17 @@ class BlueToothActivity : CKBaseActivity() , PermissionCallbacks{
requestCode: Int, requestCode: Int,
perms: List<String?> perms: List<String?>
) { ) {
val deniedPermissions = perms.filterNotNull().toTypedArray()
val permanentlyDenied = deniedPermissions.any {
!ActivityCompat.shouldShowRequestPermissionRationale(this, it)
}
if (permanentlyDenied) {
super.onPermissionsDenied(requestCode, deniedPermissions, true)
}
}
override fun onPermissionsGranted(requestCode: Int, permissions: Array<String>) {
initData()
} }
class BlueBoothAdapter(var context: CKBaseActivity, var scanResults: List<String>) : RecyclerView.Adapter<BlueBoothAdapter.BlueBoothHolder>() { class BlueBoothAdapter(var context: CKBaseActivity, var scanResults: List<String>) : RecyclerView.Adapter<BlueBoothAdapter.BlueBoothHolder>() {
@@ -215,4 +229,4 @@ class BlueToothActivity : CKBaseActivity() , PermissionCallbacks{
} }
} }

View File

@@ -143,7 +143,17 @@ class WifiListActivity : CKBaseActivity(), PermissionCallbacks {
requestCode: Int, requestCode: Int,
perms: List<String?> perms: List<String?>
) { ) {
val deniedPermissions = perms.filterNotNull().toTypedArray()
val permanentlyDenied = deniedPermissions.any {
!ActivityCompat.shouldShowRequestPermissionRationale(this, it)
}
if (permanentlyDenied) {
super.onPermissionsDenied(requestCode, deniedPermissions, true)
}
}
override fun onPermissionsGranted(requestCode: Int, permissions: Array<String>) {
initData()
} }
class WifiAdapter(var context: CKBaseActivity, var scanResults: List<ScanResult>) : RecyclerView.Adapter<WifiAdapter.WifiiewHoldr>() { class WifiAdapter(var context: CKBaseActivity, var scanResults: List<ScanResult>) : RecyclerView.Adapter<WifiAdapter.WifiiewHoldr>() {
@@ -177,4 +187,4 @@ class WifiListActivity : CKBaseActivity(), PermissionCallbacks {
} }

View File

@@ -39,6 +39,8 @@ import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{ class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{
override val shouldRequestPermissionsOnCreate: Boolean = false
lateinit var binding: ActivityBalanceBinding lateinit var binding: ActivityBalanceBinding
var data = listOf<RecordModel>() var data = listOf<RecordModel>()
lateinit var adapter: RecordAdapter lateinit var adapter: RecordAdapter
@@ -116,9 +118,16 @@ class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
getBalanceInfo() showProgeassDialog()
var pendingRequests = 2
getList() val onRequestFinished = {
pendingRequests--
if (pendingRequests == 0) {
hiddenProgeassDialog()
}
}
getBalanceInfo(onRequestFinished)
getList(onRequestFinished)
} }
override fun getResult(data: DataCollection, resultCode: Int) { override fun getResult(data: DataCollection, resultCode: Int) {
if (resultCode == 1001){ if (resultCode == 1001){
@@ -127,22 +136,24 @@ class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{
getList() getList()
} }
} }
fun getBalanceInfo(){ fun getBalanceInfo(onFinished: (() -> Unit)? = null){
TTHttpClient.get(this,"余额", TTRequestParam(),object : ICallback{ TTHttpClient.get(this,"余额", TTRequestParam(),object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
model = Gson().fromJson<BalanceModle>(data, BalanceModle::class.java) model = Gson().fromJson<BalanceModle>(data, BalanceModle::class.java)
binding.textBalance.text = model?.balance.toString() binding.textBalance.text = model?.balance.toString()
onFinished?.invoke()
} }
override fun onFailed(code: String, msg: String) { override fun onFailed(code: String, msg: String) {
onFinished?.invoke()
toast(msg) toast(msg)
} }
}) })
} }
fun getList(){ fun getList(onFinished: (() -> Unit)? = null){
TTHttpClient.get(this,"余额明细列表", TTRequestParam().apply { add(TTRequestData("type",type)) TTHttpClient.get(this,"余额明细列表", TTRequestParam().apply { add(TTRequestData("type",type))
add(TTRequestData("month",""))},object : ICallback{ add(TTRequestData("month",""))},object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
@@ -150,9 +161,11 @@ class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{
adapter.data = this@BalanceActivity.data adapter.data = this@BalanceActivity.data
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
onFinished?.invoke()
} }
override fun onFailed(code: String, msg: String) { override fun onFailed(code: String, msg: String) {
onFinished?.invoke()
toast(msg) toast(msg)
} }
}) })
@@ -238,4 +251,4 @@ class BalanceActivity : CKLHBaseActionBarActivity() , View.OnClickListener{
} }
} }
} }

View File

@@ -60,7 +60,6 @@ import com.tt.kit.utils.TTLog
import com.tt.kit.utils.TTUtils import com.tt.kit.utils.TTUtils
import java.io.File import java.io.File
import java.util.UUID import java.util.UUID
import kotlin.math.min
class CustomerActivity : CKBaseActivity() { class CustomerActivity : CKBaseActivity() {
@@ -118,6 +117,10 @@ class CustomerActivity : CKBaseActivity() {
binding.editMessage.setSingleLine(false) binding.editMessage.setSingleLine(false)
binding.editMessage.imeOptions = EditorInfo.IME_ACTION_NONE binding.editMessage.imeOptions = EditorInfo.IME_ACTION_NONE
binding.editMessage.setRawInputType(android.text.InputType.TYPE_CLASS_TEXT or android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE) binding.editMessage.setRawInputType(android.text.InputType.TYPE_CLASS_TEXT or android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE)
// setSingleLine(false) resets the XML maxLines value, so apply it last.
binding.editMessage.maxLines = 4
binding.editMessage.maxHeight = (70 * resources.displayMetrics.density).toInt()
binding.editMessage.isVerticalScrollBarEnabled = true
binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener { binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction( override fun onEditorAction(
@@ -179,14 +182,6 @@ class CustomerActivity : CKBaseActivity() {
) { ) {
if (p0?.toString()?.trim()?.isNotEmpty() == true) isSending = false if (p0?.toString()?.trim()?.isNotEmpty() == true) isSending = false
updateSendControls() updateSendControls()
try {
val lineCount: Int? = binding.editMessage.getLineCount()
val lineHeight: Int = binding.editMessage.getLineHeight()
val maxHeight: Int = lineCount!! * lineHeight
binding.editMessage.setHeight(min(maxHeight, maxHeight))
}catch (e : Exception){
e.toString()
}
} }
}) })
binding.btnMore.setOnClickListener { binding.btnMore.setOnClickListener {

View File

@@ -37,6 +37,7 @@ import com.ck.ckcollar.app.model.CustomerMessageModel
import com.ck.ckcollar.app.model.UploadModel import com.ck.ckcollar.app.model.UploadModel
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.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
@@ -190,10 +191,7 @@ class MineCustomerActivity : CKBaseActivity() {
} else { } else {
Manifest.permission.READ_EXTERNAL_STORAGE Manifest.permission.READ_EXTERNAL_STORAGE
} }
getPermissionRequst( getPermissionRequst(permission, REQUEST_PHOTO_PERMISSION)
permission,
REQUEST_PHOTO_PERMISSION
)
} else { } else {
toast(getString(R.string.only_one_photo)) toast(getString(R.string.only_one_photo))
} }
@@ -452,17 +450,35 @@ class MineCustomerActivity : CKBaseActivity() {
if (requestCode == 55 && resultCode == RESULT_OK) { if (requestCode == 55 && resultCode == RESULT_OK) {
path = PreferencesUtils.getString(this@MineCustomerActivity, Const.IMAGE_PATH, "")!! path = PreferencesUtils.getString(this@MineCustomerActivity, Const.IMAGE_PATH, "")!!
compressAndUploadImage()
//addImage(path!!)
uploadImage()
} else if (requestCode == 56 && resultCode == RESULT_OK) { } else if (requestCode == 56 && resultCode == RESULT_OK) {
path = TTUtils.getImageUrl(this, data!!.getData()); path = TTUtils.getImageUrl(this, data!!.getData());
// addImage(path) compressAndUploadImage()
uploadImage()
} }
} }
private fun compressAndUploadImage() {
if (TextUtils.isEmpty(path)) return
LubanCompressUtil.getCompressFile(
this,
File(path),
object : LubanCompressUtil.CompressCallback {
override fun success(file: File) {
if (isFinishing || isDestroyed) return
path = file.absolutePath
uploadImage()
}
override fun fail(failMsg: String) {
if (isFinishing || isDestroyed) return
path = ""
toast(failMsg)
}
}
)
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
@@ -557,10 +573,11 @@ class MineCustomerActivity : CKBaseActivity() {
holder.binding.textTo.visibility = View.GONE holder.binding.textTo.visibility = View.GONE
holder.binding.imageContentTo.visibility = View.VISIBLE holder.binding.imageContentTo.visibility = View.VISIBLE
Glide.with(context) ChatImageLoader.load(
.load(ActionCode.BASE_URL + model.url) context,
.placeholder(R.mipmap.image_default) holder.binding.imageContentTo,
.into(holder.binding.imageContentTo) ActionCode.BASE_URL + model.url
)
} else { } else {
holder.binding.textTo.visibility = View.VISIBLE holder.binding.textTo.visibility = View.VISIBLE
holder.binding.imageContentTo.visibility = View.GONE holder.binding.imageContentTo.visibility = View.GONE

View File

@@ -46,6 +46,7 @@ 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.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
@@ -228,10 +229,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
} else { } else {
Manifest.permission.READ_EXTERNAL_STORAGE Manifest.permission.READ_EXTERNAL_STORAGE
} }
getPermissionRequst( getPermissionRequst(permission, REQUEST_PHOTO_PERMISSION)
permission,
REQUEST_PHOTO_PERMISSION
)
} else { } else {
toast(getString(R.string.only_one_photo)) toast(getString(R.string.only_one_photo))
} }
@@ -574,17 +572,35 @@ class PeopleCustomerActivity : CKBaseActivity() {
if (requestCode == 55 && resultCode == RESULT_OK) { if (requestCode == 55 && resultCode == RESULT_OK) {
path = PreferencesUtils.getString(this@PeopleCustomerActivity, Const.IMAGE_PATH, "")!! path = PreferencesUtils.getString(this@PeopleCustomerActivity, Const.IMAGE_PATH, "")!!
compressAndUploadImage()
//addImage(path!!)
uploadImage()
} else if (requestCode == 56 && resultCode == RESULT_OK) { } else if (requestCode == 56 && resultCode == RESULT_OK) {
path = TTUtils.getImageUrl(this, data!!.getData()); path = TTUtils.getImageUrl(this, data!!.getData());
//addImage(path) compressAndUploadImage()
uploadImage()
} }
} }
private fun compressAndUploadImage() {
if (TextUtils.isEmpty(path)) return
LubanCompressUtil.getCompressFile(
this,
File(path),
object : LubanCompressUtil.CompressCallback {
override fun success(file: File) {
if (isFinishing || isDestroyed) return
path = file.absolutePath
uploadImage()
}
override fun fail(failMsg: String) {
if (isFinishing || isDestroyed) return
path = ""
toast(failMsg)
}
}
)
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
@@ -695,10 +711,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
holder.binding.textTo.visibility = View.GONE holder.binding.textTo.visibility = View.GONE
holder.binding.imageContentTo.visibility = View.VISIBLE holder.binding.imageContentTo.visibility = View.VISIBLE
Glide.with(context) ChatImageLoader.load(context, holder.binding.imageContentTo, model.url!!)
.load( model.url)
.placeholder(R.mipmap.image_default)
.into(holder.binding.imageContentTo)
holder.binding.imageContentTo.setTag(model.url) holder.binding.imageContentTo.setTag(model.url)

View File

@@ -1,5 +1,6 @@
package com.ck.ckcollar.app.ui.act.customer package com.ck.ckcollar.app.ui.act.customer
import android.Manifest
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
@@ -36,6 +37,7 @@ import com.ck.ckcollar.app.model.CustomerMessageModel
import com.ck.ckcollar.app.model.UploadModel import com.ck.ckcollar.app.model.UploadModel
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.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
@@ -58,6 +60,8 @@ import java.util.concurrent.TimeUnit
class ShopCustomerActivity : CKBaseActivity() { class ShopCustomerActivity : CKBaseActivity() {
private val requestPhotoPermission = 1402
lateinit var binding: ActivityCustomerBinding lateinit var binding: ActivityCustomerBinding
lateinit var customerMessageAdapter: CustomerMessageAdapter lateinit var customerMessageAdapter: CustomerMessageAdapter
var data = mutableListOf<CustomerMessageModel.MessageItemModel>() var data = mutableListOf<CustomerMessageModel.MessageItemModel>()
@@ -181,11 +185,12 @@ class ShopCustomerActivity : CKBaseActivity() {
binding.conetnt2.setOnClickListener { binding.conetnt2.setOnClickListener {
if (TextUtils.isEmpty(path)) { if (TextUtils.isEmpty(path)) {
//相册 //相册
val i = Intent( val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Intent.ACTION_PICK, Manifest.permission.READ_MEDIA_IMAGES
MediaStore.Images.Media.EXTERNAL_CONTENT_URI } else {
) Manifest.permission.READ_EXTERNAL_STORAGE
startActivityForResult(i, 56) }
getPermissionRequst(permission, requestPhotoPermission)
} else { } else {
toast(getString(R.string.only_one_photo)) toast(getString(R.string.only_one_photo))
} }
@@ -194,6 +199,22 @@ class ShopCustomerActivity : CKBaseActivity() {
} }
override fun onPermissionsGranted(requestCode: Int, permissions: Array<String>) {
if (requestCode == requestPhotoPermission) {
openPhotoAlbum()
}
}
private fun openPhotoAlbum() {
val intent = Intent(
Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
).apply {
setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*")
}
startActivityForResult(intent, 56)
}
override fun initData() { override fun initData() {
//getList() //getList()
@@ -441,17 +462,35 @@ class ShopCustomerActivity : CKBaseActivity() {
if (requestCode == 55 && resultCode == RESULT_OK) { if (requestCode == 55 && resultCode == RESULT_OK) {
path = PreferencesUtils.getString(this@ShopCustomerActivity, Const.IMAGE_PATH, "")!! path = PreferencesUtils.getString(this@ShopCustomerActivity, Const.IMAGE_PATH, "")!!
compressAndUploadImage()
//addImage(path!!)
uploadImage()
} else if (requestCode == 56 && resultCode == RESULT_OK) { } else if (requestCode == 56 && resultCode == RESULT_OK) {
path = TTUtils.getImageUrl(this, data!!.getData()); path = TTUtils.getImageUrl(this, data!!.getData());
//addImage(path) compressAndUploadImage()
uploadImage()
} }
} }
private fun compressAndUploadImage() {
if (TextUtils.isEmpty(path)) return
LubanCompressUtil.getCompressFile(
this,
File(path),
object : LubanCompressUtil.CompressCallback {
override fun success(file: File) {
if (isFinishing || isDestroyed) return
path = file.absolutePath
uploadImage()
}
override fun fail(failMsg: String) {
if (isFinishing || isDestroyed) return
path = ""
toast(failMsg)
}
}
)
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
@@ -541,10 +580,7 @@ class ShopCustomerActivity : CKBaseActivity() {
holder.binding.textTo.visibility = View.GONE holder.binding.textTo.visibility = View.GONE
holder.binding.imageContentTo.visibility = View.VISIBLE holder.binding.imageContentTo.visibility = View.VISIBLE
Glide.with(context) ChatImageLoader.load(context, holder.binding.imageContentTo, model.url!!)
.load( model.url)
.placeholder(R.mipmap.image_default)
.into(holder.binding.imageContentTo)
} else { } else {
holder.binding.textTo.visibility = View.VISIBLE holder.binding.textTo.visibility = View.VISIBLE
holder.binding.imageContentTo.visibility = View.GONE holder.binding.imageContentTo.visibility = View.GONE
@@ -569,4 +605,4 @@ class ShopCustomerActivity : CKBaseActivity() {
} }
} }
} }

View File

@@ -1,5 +1,6 @@
package com.ck.ckcollar.app.ui.act.home package com.ck.ckcollar.app.ui.act.home
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@@ -116,6 +117,22 @@ class MainActivity : CKLHBaseActivity(),View.OnClickListener {
mainBinding.viewPager.setPagingEnabled(false) mainBinding.viewPager.setPagingEnabled(false)
if (intent.getBooleanExtra(EXTRA_SHOW_HOME, false)) {
showHomeTab()
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
if (intent.getBooleanExtra(EXTRA_SHOW_HOME, false)) {
showHomeTab()
}
}
private fun showHomeTab() {
mainBinding.content1.performClick()
} }
fun resetItemIcon() { fun resetItemIcon() {
@@ -210,6 +227,7 @@ class MainActivity : CKLHBaseActivity(),View.OnClickListener {
} }
companion object { companion object {
const val EXTRA_SHOW_HOME = "extra_show_home"
private const val EXIT_INTERVAL_MS = 2_000L private const val EXIT_INTERVAL_MS = 2_000L
} }
} }

View File

@@ -75,6 +75,7 @@ class HealthFragment: CKBaseFragment() {
toActivity(CustomerActivity::class.java, DataCollection()) toActivity(CustomerActivity::class.java, DataCollection())
} }
binding.contentCustomer.setOnClickListener { binding.contentCustomer.setOnClickListener {
if (!requireLogin()) return@setOnClickListener
checkCustomerStatus() checkCustomerStatus()
} }
binding.refreshLayout.setEnableLoadMore(false) binding.refreshLayout.setEnableLoadMore(false)

View File

@@ -11,6 +11,7 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.provider.MediaStore import android.provider.MediaStore
import android.provider.Settings
import android.text.TextUtils import android.text.TextUtils
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -22,6 +23,7 @@ import android.widget.PopupWindow
import android.widget.TextView import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -80,18 +82,30 @@ class HomeFragment : CKBaseFragment() {
private var pendingCameraAction: CameraAction? = null private var pendingCameraAction: CameraAction? = null
private var permissionTopDialog: AlertDialog? = null private var permissionTopDialog: AlertDialog? = null
private val cameraSettingsLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
val action = pendingCameraAction
pendingCameraAction = null
if (checkCameraPermissions()) {
performCameraAction(action)
}
}
private val cameraPermissionLauncher = registerForActivityResult( private val cameraPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission() ActivityResultContracts.RequestPermission()
) { granted -> ) { granted ->
hideCameraPermissionTopDialog() hideCameraPermissionTopDialog()
val action = pendingCameraAction val action = pendingCameraAction
pendingCameraAction = null
if (granted) { if (granted) {
when (action) { pendingCameraAction = null
CameraAction.SCAN -> startScan() performCameraAction(action)
CameraAction.TAKE_PHOTO -> takePhoto() } else if (!ActivityCompat.shouldShowRequestPermissionRationale(
null -> Unit requireActivity(),
} Manifest.permission.CAMERA
)) {
showCameraSettingsDialog()
} else {
pendingCameraAction = null
} }
} }
@@ -103,6 +117,8 @@ class HomeFragment : CKBaseFragment() {
var dataModel: CollarTypeModel.TypeDataModel? = null var dataModel: CollarTypeModel.TypeDataModel? = null
var homeModel: HomeModel? = null var homeModel: HomeModel? = null
var isFirstShow = false var isFirstShow = false
private var waitingForLoginResult = false
private var loadedLoginToken: String? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@@ -128,7 +144,8 @@ class HomeFragment : CKBaseFragment() {
homeBinding.textName?.setOnClickListener { homeBinding.textName?.setOnClickListener {
if (!requireLogin()) return@setOnClickListener if (!requireLogin()) return@setOnClickListener
getPetList() if (collarDatas.size <= 1) return@setOnClickListener
showPetSelector()
} }
//扫一扫 //扫一扫
homeBinding.btnScan?.setOnClickListener { homeBinding.btnScan?.setOnClickListener {
@@ -206,6 +223,10 @@ class HomeFragment : CKBaseFragment() {
} }
homeBinding.btnViewPostion?.setOnClickListener { homeBinding.btnViewPostion?.setOnClickListener {
if (!requireLogin()) return@setOnClickListener if (!requireLogin()) return@setOnClickListener
if(homeModel?.equipment?.collNum == null){
toast("请为您的爱宠绑定项圈")
return@setOnClickListener
}
getData(dataModel?.id.toString()) getData(dataModel?.id.toString())
// toActivity(MapLocationActivity::class.java, DataCollection().apply { // toActivity(MapLocationActivity::class.java, DataCollection().apply {
@@ -242,10 +263,18 @@ class HomeFragment : CKBaseFragment() {
homeBinding.btnTraining?.setOnClickListener { homeBinding.btnTraining?.setOnClickListener {
toast(getString(R.string.waitting_open_area)) toast(getString(R.string.waitting_open_area))
} }
LiveDataBus.get().with("FIRST", Int::class.java)
.observe(viewLifecycleOwner, object : Observer<Int?> {
override fun onChanged(result: Int?) {
if (CKApp.app.isUserLoggedIn) getPetList2()
}
})
} }
private fun requireLogin(): Boolean { private fun requireLogin(): Boolean {
if (CKApp.app.isUserLoggedIn) return true if (CKApp.app.isUserLoggedIn) return true
waitingForLoginResult = true
toActivity(LoginActivity::class.java, DataCollection()) toActivity(LoginActivity::class.java, DataCollection())
return false return false
} }
@@ -297,12 +326,12 @@ class HomeFragment : CKBaseFragment() {
override fun initData() { override fun initData() {
if (!CKApp.app.isUserLoggedIn) { if (!CKApp.app.isUserLoggedIn) {
setBannerData(listOf(BannarModel().apply { resetLoggedOutState()
localImageRes = R.mipmap.index_banner1
}))
return return
} }
loadedLoginToken = CKApp.app.token
var data = PreferencesUtils.getString(activity!!, Const.PET_DATA, "") var data = PreferencesUtils.getString(activity!!, Const.PET_DATA, "")
if (!TextUtils.isEmpty(data)) { if (!TextUtils.isEmpty(data)) {
@@ -322,18 +351,9 @@ class HomeFragment : CKBaseFragment() {
} }
if (isFirstShow) { getPetList()
getPetList()
}
LiveDataBus.get().with("FIRST", Int::class.java)
.observe(viewLifecycleOwner, object : Observer<Int?> {
override fun onChanged(result: Int?) {
if (CKApp.app.isUserLoggedIn) getPetList2()
}
})
} }
fun takePhoto() { fun takePhoto() {
@@ -380,6 +400,7 @@ class HomeFragment : CKBaseFragment() {
add(TTRequestData("patId", id)) add(TTRequestData("patId", id))
}, object : ICallback { }, object : ICallback {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
if (!CKApp.app.isUserLoggedIn) return
homeModel = Gson().fromJson<HomeModel>(data, HomeModel::class.java) homeModel = Gson().fromJson<HomeModel>(data, HomeModel::class.java)
setBannerData(homeModel?.banners.orEmpty()) setBannerData(homeModel?.banners.orEmpty())
@@ -391,9 +412,9 @@ class HomeFragment : CKBaseFragment() {
} }
}) })
TTHttpClient.get(activity as TTBaseActivity, "设备信息", TTRequestParam().apply { add(TTRequestData("patId",id)) },object : ICallback{ TTHttpClient.get(activity as TTBaseActivity, "设备信息", TTRequestParam().apply { add(TTRequestData("patId",id)) },object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
if (!CKApp.app.isUserLoggedIn) return
var model = Gson().fromJson<HomeModel.EquipmentModel>(data, HomeModel.EquipmentModel::class.java) var model = Gson().fromJson<HomeModel.EquipmentModel>(data, HomeModel.EquipmentModel::class.java)
homeModel?.equipment = model homeModel?.equipment = model
@@ -487,6 +508,35 @@ class HomeFragment : CKBaseFragment() {
}) })
} }
private fun performCameraAction(action: CameraAction?) {
when (action) {
CameraAction.SCAN -> startScan()
CameraAction.TAKE_PHOTO -> takePhoto()
null -> Unit
}
}
private fun showCameraSettingsDialog() {
CKAlertDialog(
requireActivity(),
getString(R.string.settting_permissions),
getString(R.string.camera_permission_settings_alert),
object : CKAlertDialog.AlertClickListener {
override fun onBack(isConfirm: Boolean) {
if (isConfirm) {
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.parse("package:${requireContext().packageName}")
)
cameraSettingsLauncher.launch(intent)
} else {
pendingCameraAction = null
}
}
}
).show()
}
private fun setBannerData(data: List<BannarModel>) { private fun setBannerData(data: List<BannarModel>) {
bannarData = data bannarData = data
imageAdapter = ImageAdapter(activity!!, bannarData, object : OnItemClickListenner { imageAdapter = ImageAdapter(activity!!, bannarData, object : OnItemClickListenner {
@@ -634,43 +684,31 @@ class HomeFragment : CKBaseFragment() {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
hiddenProgeassDialog() hiddenProgeassDialog()
if (!CKApp.app.isUserLoggedIn) return
var model = Gson().fromJson<CollarTypeModel>(data, CollarTypeModel::class.java) var model = Gson().fromJson<CollarTypeModel>(data, CollarTypeModel::class.java)
collarDatas = model.rows
if (!isFirstShow) { if (model.rows.isEmpty()) {
collarDatas = model.rows
homeBinding.btnRotate?.rotateDownward()
CKCollarTypePopView(
activity!!,
homeBinding.textName!!,
collarDatas,
object : PopupWindow.OnDismissListener {
override fun onDismiss() {
homeBinding.btnRotate?.rotateUpwards()
}
}).show(object : CKCollarTypePopView.OnItemDataClickListenner {
override fun onClick(
pos: Int,
model: CollarTypeModel.TypeDataModel
) {
dataModel = model
homeBinding.textName?.setText(model.patName)
switchPet()
dataModel?.let {
PreferencesUtils.putString(
activity!!,
Const.PET_DATA,
Gson().toJson(dataModel)
)
}
}
})
} else {
isFirstShow = false isFirstShow = false
if (model.rows.size > 0) { dataModel = null
dataModel = model.rows.get(0) homeBinding.textName?.text = getString(R.string.choost_pet)
homeBinding.textName?.setText(dataModel?.patName) PreferencesUtils.putString(activity!!, Const.PET_DATA, "")
return
}
if (isFirstShow) {
isFirstShow = false
dataModel = model.rows.first()
homeBinding.textName?.text = dataModel?.patName
switchPet()
} else {
val currentPet = model.rows.firstOrNull { it.id == dataModel?.id }
if (currentPet != null) {
dataModel = currentPet
homeBinding.textName?.text = currentPet.patName
} else if (model.rows.isNotEmpty()) {
dataModel = model.rows.first()
homeBinding.textName?.text = dataModel?.patName
switchPet() switchPet()
} }
} }
@@ -684,6 +722,33 @@ class HomeFragment : CKBaseFragment() {
}) })
} }
private fun showPetSelector() {
homeBinding.btnRotate?.rotateDownward()
CKCollarTypePopView(
activity!!,
homeBinding.textName!!,
collarDatas,
object : PopupWindow.OnDismissListener {
override fun onDismiss() {
homeBinding.btnRotate?.rotateUpwards()
}
}).show(object : CKCollarTypePopView.OnItemDataClickListenner {
override fun onClick(
pos: Int,
model: CollarTypeModel.TypeDataModel
) {
dataModel = model
homeBinding.textName?.text = model.patName
switchPet()
PreferencesUtils.putString(
activity!!,
Const.PET_DATA,
Gson().toJson(dataModel)
)
}
})
}
fun getPetList2() { fun getPetList2() {
if (!CKApp.app.isUserLoggedIn) return if (!CKApp.app.isUserLoggedIn) return
@@ -699,6 +764,7 @@ class HomeFragment : CKBaseFragment() {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
hiddenProgeassDialog() hiddenProgeassDialog()
if (!CKApp.app.isUserLoggedIn) return
var model = Gson().fromJson<CollarTypeModel>(data, CollarTypeModel::class.java) var model = Gson().fromJson<CollarTypeModel>(data, CollarTypeModel::class.java)
if (model.rows.size == 1) { if (model.rows.size == 1) {
@@ -735,6 +801,10 @@ class HomeFragment : CKBaseFragment() {
showProgeassDialog(getString(R.string.see)) showProgeassDialog(getString(R.string.see))
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) {
hiddenProgeassDialog()
return
}
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java) var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
//aiPhoto(ActionCode.BASE_URL + "/" + model.fileNames) //aiPhoto(ActionCode.BASE_URL + "/" + model.fileNames)
@@ -756,6 +826,7 @@ class HomeFragment : CKBaseFragment() {
}, object : ICallback { }, object : ICallback {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
hiddenProgeassDialog() hiddenProgeassDialog()
if (!CKApp.app.isUserLoggedIn) return
var model = Gson().fromJson<AIPhotoModel>(data, AIPhotoModel::class.java) var model = Gson().fromJson<AIPhotoModel>(data, AIPhotoModel::class.java)
if ("".equals(model.species) || "".equals(model.species)) { if ("".equals(model.species) || "".equals(model.species)) {
@@ -813,11 +884,54 @@ class HomeFragment : CKBaseFragment() {
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
homeBinding.banner.start(); homeBinding.banner.start();
if (!CKApp.app.isUserLoggedIn) {
waitingForLoginResult = false
resetLoggedOutState()
return
}
if (waitingForLoginResult) {
waitingForLoginResult = false
if (CKApp.app.isUserLoggedIn) {
getPetList()
}
}
dataModel?.let { dataModel?.let {
getData(dataModel!!.id.toString()) getData(dataModel!!.id.toString())
} }
} }
override fun onResume() {
super.onResume()
if (CKApp.app.isUserLoggedIn && loadedLoginToken != CKApp.app.token) {
initData()
}
}
private fun resetLoggedOutState() {
loadedLoginToken = null
collarDatas = emptyList()
bannarData = emptyList()
dataModel = null
homeModel = null
isFirstShow = false
homeBinding.textName?.text = getString(R.string.choost_pet)
homeBinding.btnBound?.text = getString(R.string.unbound)
homeBinding.textHealthPoints?.text = "--"
homeBinding.points?.visibility = View.GONE
homeBinding.textStep?.text = "-"
homeBinding.textAddress?.text = getString(R.string.no_position)
homeBinding.textDistance?.text = "-"
homeBinding.textPowerValue?.text = "%"
homeBinding.imagePower?.setImageResource(R.mipmap.image_power_0)
homeBinding.contentPower?.visibility = View.GONE
setNoDeviceUI()
setBannerData(listOf(BannarModel().apply {
localImageRes = R.mipmap.index_banner1
}))
homeBinding.refreshLayout?.finishRefresh()
}
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
homeBinding.banner.stop(); homeBinding.banner.stop();

View File

@@ -69,6 +69,7 @@ class MineFragment : CKBaseFragment() {
} }
binding.btnMessage.setOnClickListener { binding.btnMessage.setOnClickListener {
if (!requireLogin()) return@setOnClickListener
toActivity(MessageCenterActivity::class.java, DataCollection()) toActivity(MessageCenterActivity::class.java, DataCollection())
} }
@@ -135,13 +136,14 @@ class MineFragment : CKBaseFragment() {
override fun initData() { override fun initData() {
if (!CKApp.app.isUserLoggedIn) { if (!CKApp.app.isUserLoggedIn) {
renderLoggedOutState()
binding.textNick.text = getString(R.string.guest) binding.textNick.text = getString(R.string.guest)
binding.textPhone.text = "" binding.textPhone.text = "用户未登录"
binding.textPhone.visibility = View.GONE binding.textPhone.visibility = View.VISIBLE
binding.textBalance.text = "0" binding.textBalance.text = "0"
binding.textPoints.text = "0" binding.textPoints.text = "0"
binding.textCount.visibility = View.INVISIBLE binding.textCount.visibility = View.INVISIBLE
binding.imageUser.setImageResource(R.mipmap.image_user_default) binding.imageUser.setImageResource(R.mipmap.icon_unlogin_defaul)
return return
} }
@@ -152,7 +154,7 @@ class MineFragment : CKBaseFragment() {
if (!TextUtils.isEmpty(CKApp.app.userInfo?.avatar)){ if (!TextUtils.isEmpty(CKApp.app.userInfo?.avatar)){
Glide.with(this@MineFragment) Glide.with(this@MineFragment)
.load( CKApp.app.userInfo?.avatar) .load( CKApp.app.userInfo?.avatar)
.placeholder(R.mipmap.image_user_default) .placeholder(R.mipmap.icon_unlogin_defaul)
.into(binding.imageUser) .into(binding.imageUser)
} }
@@ -168,6 +170,7 @@ class MineFragment : CKBaseFragment() {
}else{ }else{
binding.btnOpen.setText(getString(R.string.open_member)) binding.btnOpen.setText(getString(R.string.open_member))
binding.textMemberTitle.text = getString(R.string.pet_member) binding.textMemberTitle.text = getString(R.string.pet_member)
binding.textMemberDate.text = getString(R.string.pet_member_rewards)
} }
@@ -180,9 +183,28 @@ class MineFragment : CKBaseFragment() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
getUserInfo() initData()
if (CKApp.app.isUserLoggedIn) {
getUserInfo()
}
} }
fun getUserInfo(){
private fun renderLoggedOutState() {
binding.textNick.text = getString(R.string.guest)
binding.textPhone.text = getString(R.string.user_not_logged_in)
binding.textPhone.visibility = View.VISIBLE
binding.textBalance.text = "0"
binding.textPoints.text = "0"
binding.textCount.text = "0"
binding.textCount.visibility = View.INVISIBLE
binding.btnOpen.text = getString(R.string.open_member)
binding.textMemberTitle.text = getString(R.string.pet_member)
binding.textMemberDate.text = getString(R.string.pet_member_rewards)
Glide.with(this).clear(binding.imageUser)
binding.imageUser.setImageResource(R.mipmap.icon_unlogin_defaul)
}
private fun getUserInfo(){
if (!CKApp.app.isUserLoggedIn) { if (!CKApp.app.isUserLoggedIn) {
binding.textCount.visibility = View.INVISIBLE binding.textCount.visibility = View.INVISIBLE
return return
@@ -190,6 +212,7 @@ class MineFragment : CKBaseFragment() {
TTHttpClient.get(activity as TTBaseActivity,"个人资料", TTRequestParam(),object : ICallback{ TTHttpClient.get(activity as TTBaseActivity,"个人资料", TTRequestParam(),object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
if (!CKApp.app.isUserLoggedIn) return
CKApp.app.userInfo = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java) CKApp.app.userInfo = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java)
PreferencesUtils.putString(activity!!, Const.USER_DATA,data) PreferencesUtils.putString(activity!!, Const.USER_DATA,data)
@@ -206,6 +229,7 @@ class MineFragment : CKBaseFragment() {
add(TTRequestData("accept","true")) add(TTRequestData("accept","true"))
},object : ICallback{ },object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
if (!CKApp.app.isUserLoggedIn) return
var model = Gson().fromJson<UnReadModel>(data, UnReadModel::class.java) var model = Gson().fromJson<UnReadModel>(data, UnReadModel::class.java)
binding.textCount.text = model.unreadCount.toString() binding.textCount.text = model.unreadCount.toString()

View File

@@ -135,10 +135,12 @@ class ShopFragment : CKBaseFragment() {
} }
binding.btnShopCar.setOnClickListener { binding.btnShopCar.setOnClickListener {
if (!isUserLogin()) return@setOnClickListener
toActivity(ShopCarActivity::class.java, DataCollection()) toActivity(ShopCarActivity::class.java, DataCollection())
} }
binding.btnShopOrder.setOnClickListener { binding.btnShopOrder.setOnClickListener {
if (!isUserLogin()) return@setOnClickListener
toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","0")) }) toActivity(MyOrderActivity::class.java, DataCollection().apply { add(Data("pos","0")) })
} }
@@ -155,7 +157,7 @@ class ShopFragment : CKBaseFragment() {
getHot() getHot()
page = 1 page = 1
getData() getData()
getBannar() // getBannar()
} }
override fun onLoadMore(refreshLayout: RefreshLayout) { override fun onLoadMore(refreshLayout: RefreshLayout) {

View File

@@ -283,9 +283,12 @@ class LoginActivity : CKBaseActivity() {
CKApp.app.userInfo = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java) CKApp.app.userInfo = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java)
PreferencesUtils.putString(this@LoginActivity, Const.USER_DATA,data) PreferencesUtils.putString(this@LoginActivity, Const.USER_DATA,data)
toActivity(MainActivity::class.java, DataCollection()) startActivity(
Intent(this@LoginActivity, MainActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
putExtra(MainActivity.EXTRA_SHOW_HOME, true)
}
)
finish() finish()
} }

View File

@@ -8,45 +8,42 @@ import android.widget.ImageButton
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.databinding.ActivityMemberBinding import com.ck.ckcollar.app.databinding.ActivityMemberBinding
import com.ck.ckcollar.app.model.MemberModel
import com.ck.ckcollar.app.model.MemberPriceModel import com.ck.ckcollar.app.model.MemberPriceModel
import com.ck.ckcollar.app.model.PointsModel
import com.ck.ckcollar.app.model.RecordModel
import com.ck.ckcollar.app.model.UserInfoModel import com.ck.ckcollar.app.model.UserInfoModel
import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.ui.base.CKBaseActivity
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.MemberPriceCache
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.TTRequestParam import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
import com.cyclone.shadowsocks.utils.PreferencesUtils
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.gyf.immersionbar.ImmersionBar
import com.tt.kit.base.TTBaseActivity
import com.tt.kit.model.DataCollection import com.tt.kit.model.DataCollection
class MemberActivity : CKBaseActivity() { class MemberActivity : CKBaseActivity() {
override val useDarkStatusBarIcons: Boolean = false
lateinit var binding: ActivityMemberBinding lateinit var binding: ActivityMemberBinding
private var priceRequestInFlight = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityMemberBinding.inflate(layoutInflater) binding = ActivityMemberBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
// ImmersionBar.with(this)
// .statusBarDarkFont(true)
// .init()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setActionBarColor(resources.getColor(R.color.color_252132)) setActionBarColor(resources.getColor(R.color.color_252132))
setStatusBarColor2(resources.getColor(R.color.color_252132)) setStatusBarColor2(resources.getColor(R.color.color_252132))
findViewById<ImageButton>(R.id.btnLeft).imageTintList = ColorStateList.valueOf(Color.WHITE) findViewById<ImageButton>(R.id.btnLeft).imageTintList =
ColorStateList.valueOf(Color.WHITE)
setTitleTextColor(resources.getColor(R.color.white)) setTitleTextColor(resources.getColor(R.color.white))
setTitleText(getString(R.string.member)) setTitleText(getString(R.string.member))
} }
override fun initView() { override fun initView() {
binding.btnOpen.setOnClickListener { binding.btnOpen.setOnClickListener {
toActivity(OpenMemberActivity::class.java, DataCollection()) toActivity(OpenMemberActivity::class.java, DataCollection())
} }
@@ -56,8 +53,7 @@ class MemberActivity : CKBaseActivity() {
} }
override fun initData() { override fun initData() {
renderMemberInfo(CKApp.app.userInfo)
} }
override fun onStart() { override fun onStart() {
@@ -65,45 +61,78 @@ class MemberActivity : CKBaseActivity() {
getMemberInfo() getMemberInfo()
} }
fun getInfo() { private fun loadMemberPrice() {
TTHttpClient.get(this, "会员套餐列表", TTRequestParam(), object : ICallback { val cachedPrice = MemberPriceCache.getPrice(this)
override fun onSuccess(data: String) { if (cachedPrice != null) {
var model = Gson().fromJson<List<MemberPriceModel>>(data, object : TypeToken<List<MemberPriceModel>>(){}.type) showMemberPrice(cachedPrice)
}
if (model.size > 0){ if (cachedPrice == null || MemberPriceCache.isExpired(this)) {
binding.textMoney.text = model.get(0).actualPrice.toString() getInfo(cachedPrice != null)
} }
}
override fun onFailed(code: String, msg: String) {
toast(msg)
}
})
} }
fun getMemberInfo(){ private fun getInfo(hasCachedPrice: Boolean) {
TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{ if (priceRequestInFlight) return
priceRequestInFlight = true
TTHttpClient.get(this, "会员套餐列表", TTRequestParam(), object : ICallback {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
var model = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java) priceRequestInFlight = false
val model = Gson().fromJson<List<MemberPriceModel>>(
data,
object : TypeToken<List<MemberPriceModel>>() {}.type
)
if (model.isNotEmpty()) {
if (model.isMember == true){ val price = model.first().actualPrice
binding.textMemberDate.text = getString(R.string.deadline_date, CKUtils.dataToFormat(model.deadlineTime, MemberPriceCache.save(this@MemberActivity, price)
CKUtils.YYYYMMDD_HHMMSS, CKUtils.YYYYMMDD)) showMemberPrice(price)
binding.conetnt1.visibility = View.GONE
binding.conetnt2.visibility = View.VISIBLE
}else{
binding.conetnt1.visibility = View.VISIBLE
binding.conetnt2.visibility = View.GONE
getInfo()
} }
} }
override fun onFailed(code: String, msg: String) {
priceRequestInFlight = false
if (!hasCachedPrice) toast(msg)
}
})
}
private fun showMemberPrice(price: Double) {
binding.textMoney.text = price.toString()
binding.priceContent.visibility = View.VISIBLE
}
private fun getMemberInfo() {
TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback {
override fun onSuccess(data: String) {
val model = Gson().fromJson<UserInfoModel>(data, UserInfoModel::class.java)
CKApp.app.userInfo = model
PreferencesUtils.putString(this@MemberActivity, Const.USER_DATA, data)
renderMemberInfo(model)
}
override fun onFailed(code: String, msg: String) { override fun onFailed(code: String, msg: String) {
toast(msg) toast(msg)
} }
}) })
} }
}
private fun renderMemberInfo(model: UserInfoModel?) {
if (model?.isMember == true) {
binding.textMemberDate.text = getString(
R.string.deadline_date,
CKUtils.dataToFormat(
model.deadlineTime,
CKUtils.YYYYMMDD_HHMMSS,
CKUtils.YYYYMMDD
)
)
binding.conetnt1.visibility = View.GONE
binding.conetnt2.visibility = View.VISIBLE
} else {
binding.conetnt1.visibility = View.VISIBLE
binding.conetnt2.visibility = View.GONE
loadMemberPrice()
}
}
}

View File

@@ -188,14 +188,22 @@ class AddPetActivity : CKBaseActivity() {
} }
binding.tvAiRecognize.setOnClickListener { binding.tvAiRecognize.setOnClickListener {
if (!checkCameraPermissions()) {
getPermissionRequst(
Manifest.permission.CAMERA,
REQUEST_AI_CAMERA_PERMISSION
)
return@setOnClickListener
}
takePhoto2() takePhoto2()
} }
} }
override fun onPermissionsGranted(requestCode: Int, permissions: Array<String>) { override fun onPermissionsGranted(requestCode: Int, permissions: Array<String>) {
if (requestCode == REQUEST_CAMERA_PERMISSION) { when (requestCode) {
takePhoto() REQUEST_CAMERA_PERMISSION -> takePhoto()
REQUEST_AI_CAMERA_PERMISSION -> takePhoto2()
} }
} }
@@ -415,6 +423,7 @@ class AddPetActivity : CKBaseActivity() {
companion object { companion object {
private const val REQUEST_CAMERA_PERMISSION = 1201 private const val REQUEST_CAMERA_PERMISSION = 1201
private const val REQUEST_AI_CAMERA_PERMISSION = 1202
} }

View File

@@ -22,6 +22,8 @@ import com.google.gson.reflect.TypeToken
import com.tt.kit.model.DataCollection import com.tt.kit.model.DataCollection
class ImageViewActivity : CKBaseActivity() { class ImageViewActivity : CKBaseActivity() {
override val useDarkStatusBarIcons: Boolean = false
lateinit var binding: ActivityImageViewBinding lateinit var binding: ActivityImageViewBinding
var views = mutableListOf<View>() var views = mutableListOf<View>()
var data : List<String>? = null var data : List<String>? = null
@@ -81,4 +83,4 @@ class ImageViewActivity : CKBaseActivity() {
pos = data.stringValue!!.toInt() pos = data.stringValue!!.toInt()
} }
} }
} }

View File

@@ -33,6 +33,7 @@ import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
class PointsActivity : CKLHBaseActionBarActivity() { class PointsActivity : CKLHBaseActionBarActivity() {
override val shouldRequestPermissionsOnCreate: Boolean = false
lateinit var binding: ActivityPointsBinding lateinit var binding: ActivityPointsBinding
var data = listOf<PointsModel.PointsRecordModel>() var data = listOf<PointsModel.PointsRecordModel>()
@@ -207,4 +208,4 @@ class PointsActivity : CKLHBaseActionBarActivity() {
} }
} }
} }

View File

@@ -168,7 +168,7 @@ class AddAddressActivity : CKBaseActivity() {
add(TTRequestData("provinceName",provinceName)) add(TTRequestData("provinceName",provinceName))
add(TTRequestData("cityName",cityName)) add(TTRequestData("cityName",cityName))
add(TTRequestData("areaName",areaName)) add(TTRequestData("areaName",areaName))
add(TTRequestData("detailAddress",binding.textDetailsAddress.text.toString())) add(TTRequestData("detailAddress",binding.textDetailsAddress.text.toString().trim()))
add(TTRequestData("postalCode","")) add(TTRequestData("postalCode",""))
add(TTRequestData("isDefault",check)) add(TTRequestData("isDefault",check))
add(TTRequestData("addressTag",tag)) add(TTRequestData("addressTag",tag))

View File

@@ -195,12 +195,12 @@ class EditAddressActivity : CKBaseActivity() {
} }
var param = TTRequestParam().apply { var param = TTRequestParam().apply {
add(TTRequestData("id", model?.id.toString())) add(TTRequestData("id", model?.id.toString()))
add(TTRequestData("receiverName", binding.textName.text.toString())) add(TTRequestData("receiverName", binding.textName.text.toString().trim()))
add(TTRequestData("receiverPhone", binding.textPhone.text.toString())) add(TTRequestData("receiverPhone", binding.textPhone.text.toString().trim()))
add(TTRequestData("provinceName", provinceName)) add(TTRequestData("provinceName", provinceName))
add(TTRequestData("cityName", cityName)) add(TTRequestData("cityName", cityName))
add(TTRequestData("areaName", areaName)) add(TTRequestData("areaName", areaName))
add(TTRequestData("detailAddress", binding.textDetailsAddress.text.toString())) add(TTRequestData("detailAddress", binding.textDetailsAddress.text.toString().trim()))
add(TTRequestData("postalCode", "")) add(TTRequestData("postalCode", ""))
add(TTRequestData("isDefault", check)) add(TTRequestData("isDefault", check))
add(TTRequestData("addressTag", tag)) add(TTRequestData("addressTag", tag))

View File

@@ -8,6 +8,7 @@ import com.ck.ckcollar.app.R
import com.ck.ckcollar.app.databinding.ActivitySettingBinding import com.ck.ckcollar.app.databinding.ActivitySettingBinding
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
@@ -77,7 +78,12 @@ class SettingActivity : CKBaseActivity(), View.OnClickListener {
override fun onBack(isConfirm: Boolean) { override fun onBack(isConfirm: Boolean) {
if (isConfirm){ if (isConfirm){
CKApp.app.clearLoginState() CKApp.app.clearLoginState()
toActivityNewTaskClear(LoginActivity::class.java, DataCollection()) 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() finish()
} }
} }

View File

@@ -91,6 +91,10 @@ class ShopCarActivity : CKLHBaseActionBarActivity() {
binding.checkbox.setOnClickListener { binding.checkbox.setOnClickListener {
if (productDatas.isEmpty()) {
toast(getString(R.string.shop_car_empty))
return@setOnClickListener
}
selectAll = !selectAll selectAll = !selectAll
if (selectAll){ if (selectAll){
@@ -154,6 +158,11 @@ class ShopCarActivity : CKLHBaseActionBarActivity() {
override fun rightButton1OnClick() { override fun rightButton1OnClick() {
if (productDatas.isEmpty()) {
toast(getString(R.string.shop_car_empty))
return
}
isShowDelete = !isShowDelete isShowDelete = !isShowDelete
if (isShowDelete){ if (isShowDelete){
@@ -296,14 +305,15 @@ class ShopCarActivity : CKLHBaseActionBarActivity() {
} }
fun sendSelectAll(select : String){ fun sendSelectAll(select : String){
showProgeassDialog()
TTHttpClient.putJson(this,"购物车全部选中", TTRequestParam().apply { add(TTRequestData("selected",select)) },object : ICallback{ TTHttpClient.putJson(this,"购物车全部选中", TTRequestParam().apply { add(TTRequestData("selected",select)) },object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
hiddenProgeassDialog()
getData() getData()
} }
override fun onFailed(code: String, msg: String) { override fun onFailed(code: String, msg: String) {
hiddenProgeassDialog()
toast(msg) toast(msg)
getData() getData()
} }
@@ -433,4 +443,4 @@ class ShopCarActivity : CKLHBaseActionBarActivity() {
} }
} }
} }

View File

@@ -2,10 +2,13 @@ package com.ck.ckcollar.app.ui.base
import android.Manifest import android.Manifest
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.Intent
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.graphics.Color import android.graphics.Color
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings
import android.util.TypedValue import android.util.TypedValue
import android.view.View import android.view.View
import android.view.Gravity import android.view.Gravity
@@ -21,6 +24,7 @@ import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
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.ui.dialog.CKAlertDialog import com.ck.ckcollar.app.ui.dialog.CKAlertDialog
@@ -32,9 +36,25 @@ import pub.devrel.easypermissions.EasyPermissions
open class CKBaseActivity : TTBaseActivity(){ open class CKBaseActivity : TTBaseActivity(){
protected open val useDarkStatusBarIcons: Boolean = true
private var permissionDialog: AlertDialog? = null private var permissionDialog: AlertDialog? = null
private var pendingPermissionRequestCode: Int? = null private var pendingPermissionRequestCode: Int? = null
private var pendingPermissions: Array<String> = emptyArray() private var pendingPermissions: Array<String> = emptyArray()
private var settingsPermissionRequestCode: Int? = null
private var settingsPermissions: Array<String> = emptyArray()
private val permissionSettingsLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
val requestCode = settingsPermissionRequestCode
val permissions = settingsPermissions
settingsPermissionRequestCode = null
settingsPermissions = emptyArray()
if (requestCode != null && hasRecordPermission(permissions)) {
onPermissionsGranted(requestCode, permissions)
}
}
private val permissionLauncher = registerForActivityResult( private val permissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions() ActivityResultContracts.RequestMultiplePermissions()
) { result -> ) { result ->
@@ -48,7 +68,9 @@ open class CKBaseActivity : TTBaseActivity(){
if (denied.isEmpty()) { if (denied.isEmpty()) {
onPermissionsGranted(requestCode, requestedPermissions) onPermissionsGranted(requestCode, requestedPermissions)
} else { } else {
val permanentlyDenied = denied.all { !ActivityCompat.shouldShowRequestPermissionRationale(this, it) } val permanentlyDenied = denied.any {
!ActivityCompat.shouldShowRequestPermissionRationale(this, it)
}
onPermissionsDenied(requestCode, denied, permanentlyDenied) onPermissionsDenied(requestCode, denied, permanentlyDenied)
} }
} }
@@ -80,10 +102,15 @@ open class CKBaseActivity : TTBaseActivity(){
CKApp.app.activitys.add(this) CKApp.app.activitys.add(this)
setStatusBarColor(R.attr.actionBarBackground) setStatusBarColor(R.attr.actionBarBackground)
setStatusBarTextDark(useDarkStatusBarIcons)
} }
fun setStatusBarTextDark(isDark: Boolean = true) {
WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = isDark
}
fun checkAppPermissions(){ fun checkAppPermissions(){
if (!checkPermissions()){ if (!checkPermissions()){
requstPermissions() requstPermissions()
@@ -345,6 +372,27 @@ open class CKBaseActivity : TTBaseActivity(){
permissions: Array<String>, permissions: Array<String>,
permanentlyDenied: Boolean permanentlyDenied: Boolean
) { ) {
if (!permanentlyDenied) return
CKAlertDialog(
this,
getString(R.string.settting_permissions),
getString(R.string.permission_settings_alert),
object : CKAlertDialog.AlertClickListener {
override fun onBack(isConfirm: Boolean) {
if (isConfirm) {
settingsPermissionRequestCode = requestCode
settingsPermissions = permissions
permissionSettingsLauncher.launch(
Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.parse("package:$packageName")
)
)
}
}
}
).show()
} }
fun requstPermissions(){ fun requstPermissions(){
@@ -366,6 +414,8 @@ open class CKBaseActivity : TTBaseActivity(){
hidePermissionDialog() hidePermissionDialog()
pendingPermissionRequestCode = null pendingPermissionRequestCode = null
pendingPermissions = emptyArray() pendingPermissions = emptyArray()
settingsPermissionRequestCode = null
settingsPermissions = emptyArray()
super.onDestroy() super.onDestroy()
CKApp.app.activitys.remove(this) CKApp.app.activitys.remove(this)
} }

View File

@@ -1,14 +1,21 @@
package com.ck.ckcollar.app.ui.base package com.ck.ckcollar.app.ui.base
import android.Manifest import android.Manifest
import com.ck.ckcollar.app.CKApp
import com.ck.ckcollar.app.ui.act.login.LoginActivity
import com.cyclone.shadowsocks.ui.frg.TTBaseFragment import com.cyclone.shadowsocks.ui.frg.TTBaseFragment
import com.tt.kit.model.DataCollection
import pub.devrel.easypermissions.EasyPermissions import pub.devrel.easypermissions.EasyPermissions
open class CKBaseFragment : TTBaseFragment() { open class CKBaseFragment : TTBaseFragment() {
var perms_carmra = listOf<String>(Manifest.permission.CAMERA) var perms_carmra = listOf<String>(Manifest.permission.CAMERA)
fun isUserLogin(): Boolean {
if (CKApp.app.isUserLoggedIn) return true
toActivity(LoginActivity::class.java, DataCollection())
return false
}
fun checkCameraPermissions() : Boolean{ fun checkCameraPermissions() : Boolean{

View File

@@ -28,7 +28,7 @@ import pub.devrel.easypermissions.EasyPermissions
open class CKLHBaseActionBarActivity : TTBaseActivity(){ open class CKLHBaseActionBarActivity : TTBaseActivity(){
protected open val shouldRequestPermissionsOnCreate: Boolean = true protected open val shouldRequestPermissionsOnCreate: Boolean = false
var perms_= listOf<String>(Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES,Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE) var perms_= listOf<String>(Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES,Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)
var perms_tiramisu = listOf<String>(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE) var perms_tiramisu = listOf<String>(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE)

View File

@@ -12,6 +12,8 @@ object Const {
const val LOGIN_NAME = "login_name" const val LOGIN_NAME = "login_name"
const val LOGIN_PWD = "login_pwd" const val LOGIN_PWD = "login_pwd"
const val TOKEN = "token" const val TOKEN = "token"
const val MEMBER_PRICE = "member_price"
const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time"
const val WX_APP_ID = "wx7681e74df7d88ddc" const val WX_APP_ID = "wx7681e74df7d88ddc"
} }

View File

@@ -35,8 +35,8 @@
<com.ck.ckcollar.app.widget.CKTextView <com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textBalance" android:id="@+id/textBalance"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="50dp"
android:text="0.00" android:gravity="center_vertical"
android:textColor="@color/textColor" android:textColor="@color/textColor"
android:textSize="38sp" android:textSize="38sp"
android:textStyle="bold" android:textStyle="bold"
@@ -198,4 +198,4 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView> android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>

View File

@@ -78,19 +78,22 @@
android:textColorHint="@color/textColor" android:textColorHint="@color/textColor"
android:hint="@string/please_input_message" android:hint="@string/please_input_message"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:paddingVertical="5dp" android:paddingVertical="8dp"
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
android:layout_marginHorizontal="12dp" android:layout_marginHorizontal="12dp"
android:background="@drawable/bg_input_message" android:background="@drawable/bg_input_message"
android:imeOptions="actionSend" android:imeOptions="actionSend"
android:inputType="text" android:inputType="text"
android:maxHeight="70dp"
android:maxLines="4"
android:scrollbars="vertical"
android:maxLength="100" /> android:maxLength="100" />
<com.ck.ckcollar.app.widget.CKImageView <com.ck.ckcollar.app.widget.CKImageView
android:id="@+id/btnSmile" android:id="@+id/btnSmile"
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="24dp" android:layout_height="24dp"
android:src="@mipmap/image_smile" android:src="@mipmap/image_smile"
android:visibility="visible"/> android:visibility="gone"/>
<com.ck.ckcollar.app.widget.CKImageView <com.ck.ckcollar.app.widget.CKImageView
android:id="@+id/btnMore" android:id="@+id/btnMore"

View File

@@ -33,16 +33,21 @@
android:orientation="vertical" android:orientation="vertical"
> >
<com.ck.ckcollar.app.widget.CKLinearLayout <com.ck.ckcollar.app.widget.CKLinearLayout
android:id="@+id/priceContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="58dp"
android:orientation="horizontal"> android:baselineAligned="true"
android:baselineAlignedChildIndex="1"
android:gravity="bottom"
android:orientation="horizontal"
android:visibility="invisible">
<com.ck.ckcollar.app.widget.CKTextView <com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="¥" android:text="¥"
android:textColor="@color/color_7B4B12" android:textColor="@color/color_7B4B12"
android:textSize="22sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="22sp"/>
<com.ck.ckcollar.app.widget.CKTextView <com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textMoney" android:id="@+id/textMoney"
@@ -51,14 +56,15 @@
android:text="" android:text=""
android:textColor="@color/color_7B4B12" android:textColor="@color/color_7B4B12"
android:textSize="48sp" android:textSize="48sp"
android:textStyle="bold"></com.ck.ckcollar.app.widget.CKTextView> android:textStyle="bold"/>
<com.ck.ckcollar.app.widget.CKTextView <com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/tv_month"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="/月" android:text="/月"
android:textColor="@color/color_7B4B12" android:textColor="@color/color_7B4B12"
android:textSize="22sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="22sp"/>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
@@ -71,7 +77,7 @@
android:gravity="center" android:gravity="center"
android:text="@string/pet_member_open_now" android:text="@string/pet_member_open_now"
android:textColor="@color/color_CACACA" android:textColor="@color/color_CACACA"
android:textSize="16sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="16sp"/>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKLinearLayout <com.ck.ckcollar.app.widget.CKLinearLayout
@@ -93,7 +99,7 @@
android:textColor="@color/color_7B4B12" android:textColor="@color/color_7B4B12"
android:textSize="22sp" android:textSize="22sp"
android:textStyle="bold" android:textStyle="bold"
></com.ck.ckcollar.app.widget.CKTextView> />
<com.ck.ckcollar.app.widget.CKTextView <com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textMemberDate" android:id="@+id/textMemberDate"
@@ -101,7 +107,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/deadline_date" android:text="@string/deadline_date"
android:textColor="@color/color_7B4B12" android:textColor="@color/color_7B4B12"
android:textSize="16sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="16sp"/>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
@@ -260,13 +266,13 @@
android:id="@+id/textNode" android:id="@+id/textNode"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="16sp" android:textSize="14sp"
android:textColor="@color/color_CACACA" android:textColor="@color/color_CACACA"
android:text="" android:text="商城商品享受折扣,开通会员赠送积分"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
></com.ck.ckcollar.app.widget.CKTextView> ></com.ck.ckcollar.app.widget.CKTextView>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>

View File

@@ -21,7 +21,6 @@
android:textStyle="bold" android:textStyle="bold"
android:textColor="@color/textColor" android:textColor="@color/textColor"
android:textSize="38dp" android:textSize="38dp"
android:text="0"
></com.ck.ckcollar.app.widget.CKTextView> ></com.ck.ckcollar.app.widget.CKTextView>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>

View File

@@ -47,7 +47,7 @@
<com.scwang.smartrefresh.layout.SmartRefreshLayout <com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout" android:id="@+id/refreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent">
<com.scwang.smartrefresh.layout.header.ClassicsHeader <com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"></com.scwang.smartrefresh.layout.header.ClassicsHeader> android:layout_height="wrap_content"></com.scwang.smartrefresh.layout.header.ClassicsHeader>

View File

@@ -29,7 +29,6 @@
android:id="@+id/textAmount" android:id="@+id/textAmount"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="0.0"
android:textColor="@color/textColor" android:textColor="@color/textColor"
android:textSize="38sp" android:textSize="38sp"
android:textStyle="bold" android:textStyle="bold"

View File

@@ -9,6 +9,228 @@
android:background="?attr/mainBackground" android:background="?attr/mainBackground"
android:orientation="vertical"> android:orientation="vertical">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@mipmap/image_health_top"
/>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_view_top_gray_radius_16"
android:layout_marginTop="-10dp"
android:paddingHorizontal="20dp"
>
<com.ck.ckcollar.app.widget.CKFrameLayout
android:id="@+id/contentCustomer"
android:layout_width="match_parent"
android:layout_height="96dp">
<View
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_health_item1" />
<com.ck.ckcollar.app.widget.CKLinearLayout
android:id="@+id/customerTextContent"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:paddingLeft="18dp"
android:paddingRight="96dp"
android:orientation="vertical">
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="@color/textColor"
android:text="@string/pet_advisor2"
android:textStyle="bold" />
<com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textDate2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:singleLine="true"
android:text="@string/pet_advisor_time_default"
android:textColor="@color/textColor"
android:textSize="12sp"
app:autoSizeMaxTextSize="12sp"
app:autoSizeMinTextSize="9sp"
app:autoSizeStepGranularity="1sp"
app:autoSizeTextType="uniform" />
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:includeFontPadding="false"
android:maxLines="1"
android:textSize="12sp"
android:textColor="@color/textColor"
android:text="@string/pet_advisor_desc" />
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKImageView
android:id="@+id/imageCustomerService"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_gravity="top|end"
android:layout_marginEnd="15dp"
android:layout_marginTop="7dp"
android:scaleType="fitCenter"
android:src="@mipmap/image_health_kf"/>
</com.ck.ckcollar.app.widget.CKFrameLayout>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp"
>
<com.ck.ckcollar.app.widget.CKRelativeLayout
android:id="@+id/btnAIText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="@mipmap/image_health_item_2"
android:paddingLeft="16dp"
>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="16sp"
android:text="@string/ai_text_diagnosis"
android:layout_marginTop="15dp"
android:textStyle="bold"
/>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textSecondColor"
android:textSize="14sp"
android:text="@string/ai_text_diagnosis_tag"
android:layout_marginTop="15dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/image_health_wz"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
</com.ck.ckcollar.app.widget.CKRelativeLayout>
<View
android:layout_width="10dp"
android:layout_height="0dp"/>
<com.ck.ckcollar.app.widget.CKRelativeLayout
android:id="@+id/btnAIPhoto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="@mipmap/image_health_item_3"
android:paddingLeft="15dp"
>
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/image_health_tp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="16sp"
android:text="@string/ai_photo_diagnosis"
android:layout_marginTop="15dp"
android:textStyle="bold"
/>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textSecondColor"
android:textSize="14sp"
android:text="@string/ai_photo_diagnosis_tag"
android:layout_marginTop="15dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKRelativeLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@color/textColor"
android:text="@string/pet_knowledge_popularization"
android:layout_marginTop="30dp"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</androidx.core.widget.NestedScrollView>
<com.scwang.smartrefresh.layout.SmartRefreshLayout <com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout" android:id="@+id/refreshLayout"
@@ -19,228 +241,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<!--内容--> <!--内容-->
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@mipmap/image_health_top"
/>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg_view_top_gray_radius_16"
android:layout_marginTop="-10dp"
android:paddingHorizontal="20dp"
>
<com.ck.ckcollar.app.widget.CKFrameLayout
android:id="@+id/contentCustomer"
android:layout_width="match_parent"
android:layout_height="96dp"
android:layout_marginTop="8dp">
<View
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_gravity="bottom"
android:background="@drawable/bg_health_item1" />
<com.ck.ckcollar.app.widget.CKLinearLayout
android:id="@+id/customerTextContent"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_gravity="bottom"
android:gravity="center_vertical"
android:paddingLeft="18dp"
android:paddingRight="96dp"
android:orientation="vertical">
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="@color/textColor"
android:text="@string/pet_advisor2"
android:textStyle="bold" />
<com.ck.ckcollar.app.widget.CKTextView
android:id="@+id/textDate2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:singleLine="true"
android:text="@string/pet_advisor_time_default"
android:textColor="@color/textColor"
android:textSize="12sp"
app:autoSizeMaxTextSize="12sp"
app:autoSizeMinTextSize="9sp"
app:autoSizeStepGranularity="1sp"
app:autoSizeTextType="uniform" />
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:includeFontPadding="false"
android:maxLines="1"
android:textSize="12sp"
android:textColor="@color/textColor"
android:text="@string/pet_advisor_desc" />
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKImageView
android:id="@+id/imageCustomerService"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_gravity="top|end"
android:layout_marginEnd="15dp"
android:scaleType="fitCenter"
android:src="@mipmap/image_health_kf"/>
</com.ck.ckcollar.app.widget.CKFrameLayout>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp"
>
<com.ck.ckcollar.app.widget.CKRelativeLayout
android:id="@+id/btnAIText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="@mipmap/image_health_item_2"
android:paddingLeft="16dp"
>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="16sp"
android:text="@string/ai_text_diagnosis"
android:layout_marginTop="15dp"
android:textStyle="bold"
/>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textSecondColor"
android:textSize="14sp"
android:text="@string/ai_text_diagnosis_tag"
android:layout_marginTop="15dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/image_health_wz"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
</com.ck.ckcollar.app.widget.CKRelativeLayout>
<View
android:layout_width="10dp"
android:layout_height="0dp"/>
<com.ck.ckcollar.app.widget.CKRelativeLayout
android:id="@+id/btnAIPhoto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
android:background="@mipmap/image_health_item_3"
android:paddingLeft="15dp"
>
<com.ck.ckcollar.app.widget.CKImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/image_health_tp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
<com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textColor"
android:textSize="16sp"
android:text="@string/ai_photo_diagnosis"
android:layout_marginTop="15dp"
android:textStyle="bold"
/>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textSecondColor"
android:textSize="14sp"
android:text="@string/ai_photo_diagnosis_tag"
android:layout_marginTop="15dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKRelativeLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="@color/textColor"
android:text="@string/pet_knowledge_popularization"
android:layout_marginTop="30dp"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
/>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKLinearLayout>
</androidx.core.widget.NestedScrollView>
</com.scwang.smartrefresh.layout.SmartRefreshLayout> </com.scwang.smartrefresh.layout.SmartRefreshLayout>

View File

@@ -8,6 +8,8 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical"> android:orientation="vertical">
<com.scwang.smartrefresh.layout.SmartRefreshLayout <com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout" android:id="@+id/refreshLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -16,6 +18,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
</com.scwang.smartrefresh.layout.header.ClassicsHeader> </com.scwang.smartrefresh.layout.header.ClassicsHeader>
<!--内容-->
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">

View File

@@ -31,7 +31,7 @@
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="60dp" android:layout_height="60dp"
app:isCircle="true" app:isCircle="true"
android:src="@mipmap/image_user_default" android:src="@mipmap/icon_unlogin_defaul"
></com.ck.ckcollar.app.widget.CKRoundImageView> ></com.ck.ckcollar.app.widget.CKRoundImageView>
<com.ck.ckcollar.app.widget.CKLinearLayout <com.ck.ckcollar.app.widget.CKLinearLayout
android:id="@+id/btnUserInfo" android:id="@+id/btnUserInfo"

View File

@@ -53,20 +53,17 @@
android:textSize="14sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="14sp"></com.ck.ckcollar.app.widget.CKTextView>
<com.ck.ckcollar.app.widget.CKImageView <com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/imageContentFrom" android:id="@+id/imageContentFrom"
android:textIsSelectable="true" android:layout_width="200dp"
android:layout_width="80dp" android:layout_height="wrap_content"
android:layout_height="100dp" android:adjustViewBounds="true"
android:textColor="@color/textColor"
android:background="@drawable/bg_message_from"
android:paddingVertical="3dp"
android:paddingHorizontal="5dp"
android:layout_marginTop="3dp" android:layout_marginTop="3dp"
android:maxWidth="200dp" android:maxWidth="200dp"
android:maxHeight="200dp"
android:scaleType="fitCenter"
android:visibility="gone" android:visibility="gone"
></com.ck.ckcollar.app.widget.CKImageView> app:riv_corner_radius="8dp" />
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
@@ -114,19 +111,17 @@
android:textSize="14sp"></com.ck.ckcollar.app.widget.CKTextView> android:textSize="14sp"></com.ck.ckcollar.app.widget.CKTextView>
<com.ck.ckcollar.app.widget.CKImageView <com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/imageContentTo" android:id="@+id/imageContentTo"
android:textIsSelectable="true" android:layout_width="200dp"
android:layout_width="80dp" android:layout_height="wrap_content"
android:layout_height="100dp" android:adjustViewBounds="true"
android:textColor="@color/textColor"
android:background="@drawable/bg_message_to"
android:paddingVertical="3dp"
android:paddingHorizontal="5dp"
android:layout_marginTop="3dp" android:layout_marginTop="3dp"
android:maxWidth="200dp" android:maxWidth="200dp"
android:maxHeight="200dp"
android:scaleType="fitCenter"
android:visibility="gone" android:visibility="gone"
></com.ck.ckcollar.app.widget.CKImageView> app:riv_corner_radius="8dp" />
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
<com.ck.ckcollar.app.widget.CKRoundImageView <com.ck.ckcollar.app.widget.CKRoundImageView
@@ -140,4 +135,4 @@
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>
</com.ck.ckcollar.app.widget.CKFrameLayout> </com.ck.ckcollar.app.widget.CKFrameLayout>

View File

@@ -19,7 +19,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="@color/textColor" android:textColor="@color/textColor"
android:textSize="14sp" android:textSize="12sp"
android:text="宠物食品" android:text="宠物食品"
></com.ck.ckcollar.app.widget.CKTextView> ></com.ck.ckcollar.app.widget.CKTextView>
</com.ck.ckcollar.app.widget.CKLinearLayout> </com.ck.ckcollar.app.widget.CKLinearLayout>

View File

@@ -1,5 +1,6 @@
<resources> <resources>
<string name="guest">游客</string> <string name="guest">游客</string>
<string name="user_not_logged_in">用户未登录</string>
<string name="app_name">宠盾</string> <string name="app_name">宠盾</string>
@@ -56,6 +57,7 @@
<string name="settting_permissions">设置权限</string> <string name="settting_permissions">设置权限</string>
<string name="settting_permissions_alert">使用宠物项圈,需要给予以下访问权限</string> <string name="settting_permissions_alert">使用宠物项圈,需要给予以下访问权限</string>
<string name="permission_settings_alert">相关权限已被关闭,请前往系统设置开启权限</string>
<string name="continue_str">继续</string> <string name="continue_str">继续</string>
<string name="camera">相机</string> <string name="camera">相机</string>
<string name="scan_bind_camera">用于扫码绑定设备</string> <string name="scan_bind_camera">用于扫码绑定设备</string>
@@ -465,6 +467,7 @@
<string name="price_total">合计¥ %s</string> <string name="price_total">合计¥ %s</string>
<string name="shop_car">购物车</string> <string name="shop_car">购物车</string>
<string name="shop_car_empty">购物车内暂无商品</string>
<string name="power_alert">设备电量:%s% 更新时间:%s</string> <string name="power_alert">设备电量:%s% 更新时间:%s</string>
<string name="desc_text">规格:%s</string> <string name="desc_text">规格:%s</string>
@@ -588,6 +591,7 @@
<string name="cancel_account_phone">注销%s绑定的账号</string> <string name="cancel_account_phone">注销%s绑定的账号</string>
<string name="please_choose_data">请选择原因</string> <string name="please_choose_data">请选择原因</string>
<string name="camera_alert">宠盾需要您的授权,使用相机功能来进行扫码和拍照</string> <string name="camera_alert">宠盾需要您的授权,使用相机功能来进行扫码和拍照</string>
<string name="camera_permission_settings_alert">相机权限已被关闭,请前往系统设置开启相机权限</string>
<string name="photo_permission_alert">宠盾需要您的授权,访问相册以选择照片</string> <string name="photo_permission_alert">宠盾需要您的授权,访问相册以选择照片</string>
<string name="press_again_to_exit">再按一次退出应用</string> <string name="press_again_to_exit">再按一次退出应用</string>
<string name="input_question">请输入问题</string> <string name="input_question">请输入问题</string>