1.适配g30和g40

2.国内经纬度自定义用户位置图标,国外经纬度使用谷歌地图自带的用户位置图标
This commit is contained in:
yezhiqiu
2026-03-16 15:47:12 +08:00
parent 5e5679672f
commit 13035c6037
40 changed files with 394 additions and 173 deletions

View File

@@ -30,7 +30,7 @@ android {
targetSdkVersion 35
versionCode 2110
// versionName "2.1.10"
versionName "2.1.10-Beta5"
versionName "2.1.10-Beta6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -39,7 +39,7 @@ class HomePetTrackMenuAdapter(
}
override fun convert(holder: BaseViewHolder, item: MenuTxtBean) {
val position = getItemPosition(item)
// val position = getItemPosition(item)
val qMUICommonItemView =
holder.getView<QMUICommonListItemView>(R.id.tracker_manage_setting_item).apply {
ViewUtil.instance.showQMUICommonListItemView(
@@ -55,12 +55,21 @@ class HomePetTrackMenuAdapter(
setTextColor(ContextCompat.getColor(context, tColor))
}
qMUICommonItemView.setOnClickListener {
when (position) {
0 -> mHomeTrackFragment.goPetDataActivity(LedLightActivity::class.java)
1 -> mHomeTrackFragment.goMapDeviceDataActivity(TrackingDurationSetActivity::class.java)
2 -> mHomeTrackFragment.goMapDeviceDataActivity(LiveDurationSetActivity::class.java)
3 -> mHomeTrackFragment.firmwareCheckUpdate()
4 -> {
when (item.menuName) {
context.getString(R.string.tracker_manage_led) -> mHomeTrackFragment.goPetDataActivity(
LedLightActivity::class.java
)
context.getString(R.string.tracker_manage_set_duration) -> mHomeTrackFragment.goMapDeviceDataActivity(
TrackingDurationSetActivity::class.java
)
context.getString(R.string.txt_live_duration) -> mHomeTrackFragment.goMapDeviceDataActivity(
LiveDurationSetActivity::class.java
)
context.getString(R.string.txt_firmware_version) -> mHomeTrackFragment.firmwareCheckUpdate()
context.getString(R.string.txt_power_off) -> {
if (item.type == ConstantInt.SpecialType) return@setOnClickListener
mHomeTrackFragment.goPetDataActivity(PowerOffActivity::class.java)
}

View File

@@ -12,6 +12,7 @@ import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.ui.activity.device.AddNewTracker1Activity
import com.abbidot.tracker.ui.activity.device.MyTrackerV2Activity
import com.abbidot.tracker.ui.activity.pet.PetProfileActivity
import com.abbidot.tracker.util.Util
import com.abbidot.tracker.util.ViewUtil
import com.qmuiteam.qmui.widget.QMUIRadiusImageView
@@ -100,6 +101,7 @@ class MyTrackerV2Adapter(
trackerImageView.visibility = View.VISIBLE
trackerName.visibility = View.VISIBLE
trackerImageView.setImageResource(Util.getDeviceTypeImage(item.deviceType))
trackerName.text = item.deviceOutId
val battery = "${item.batteryCapacity} "
batteryTextView.text = battery

View File

@@ -8,6 +8,7 @@ import com.abbidot.baselibrary.list.BaseRecyclerAdapter
import com.abbidot.baselibrary.list.RecyclerViewHolder
import com.abbidot.tracker.R
import com.abbidot.tracker.bean.DeviceBean
import com.abbidot.tracker.util.Util
/**
*Created by .yzq on 2025/12/19/周五.
@@ -39,6 +40,8 @@ class ScanDeviceAdapter(
holder.getView(R.id.ld_add_new_tracker3_connect_state).visibility =
if (item.conState == ConState.CONNECTING) View.VISIBLE
else View.GONE
holder.getImageView(R.id.iv_add_new_tracker3_device_image)
.setImageResource(Util.getDeviceTypeImage(item.type))
}
}
}

View File

@@ -19,27 +19,46 @@ import kotlinx.parcelize.Parcelize
@Entity(tableName = MyDatabase.DeviceTableName, primaryKeys = ["deviceOutId", "deviceId"])
@Parcelize
data class DeviceBean(//@PrimaryKey(autoGenerate = true) var id: Long,//autoGenerate = true 自动增长分配ID
@ColumnInfo @DeviceType var type: Int,//设备类型
@ColumnInfo var deviceName: String,
@ColumnInfo var deviceOutId: String,
@ColumnInfo var deviceId: String,
@ColumnInfo var shared: Int, //0=没有分享1=是授权分享的
@ColumnInfo var batteryCapacity: Int,
@ColumnInfo var ledSwitch: Int,
@ColumnInfo @ConState var conState: Int,//连接状态
@ColumnInfo var macId: String,
@ColumnInfo var deviceInfoId: String,
@ColumnInfo var surplusDays: Int,
@ColumnInfo var gnssSignal: Int,
@ColumnInfo var lteSignal: Int,
@ColumnInfo var turnOff: Int,
@ColumnInfo var lightMode: Int,
@Ignore var pet: PetBean?) : BaseDiffBean(), Parcelable {
@ColumnInfo @DeviceType var type: Int,//设备类型
@ColumnInfo var deviceName: String,
@ColumnInfo var deviceOutId: String,
@ColumnInfo var deviceId: String,
@ColumnInfo var shared: Int, //0=没有分享1=是授权分享的
@ColumnInfo var batteryCapacity: Int,
@ColumnInfo var ledSwitch: Int,
@ColumnInfo @ConState var conState: Int,//连接状态
@ColumnInfo var macId: String,
@ColumnInfo var deviceInfoId: String,
@ColumnInfo var surplusDays: Int,
@ColumnInfo var gnssSignal: Int,
@ColumnInfo var lteSignal: Int,
@ColumnInfo var turnOff: Int,
@ColumnInfo var lightMode: Int,
@Ignore var deviceType: Int,
@Ignore var pet: PetBean?
) : BaseDiffBean(), Parcelable {
// 如果某个实体中有您不想保留的字段,则可以使用 @Ignore 为这些字段添加注释
//设置空的构造方法
constructor() : this(DeviceType.TYPE_ONE, "", "", "", 0, 0, 0, ConState.DISCONNECTED, "", "", 0,
0, 0, 0, 0, null)
constructor() : this(
DeviceType.TYPE_ONE,
"",
"",
"",
0,
0,
0,
ConState.DISCONNECTED,
"",
"",
0,
0,
0,
0,
0,
1,
null
)
override fun isSameObject(other: Any): Boolean {
val oldItem = other as DeviceBean

View File

@@ -35,6 +35,7 @@ data class MapDeviceBean(
var wifiZones: MutableList<WiFiZoneBean>?,
var startTime: String,
var endTime: String,
var deviceType: Int,
var canShowBattery: Boolean,
var isCloseBattery: Boolean,
var isCloseMsg: Boolean
@@ -69,6 +70,7 @@ data class MapDeviceBean(
null,
"",
"",
1,
false,
false,
false

View File

@@ -31,13 +31,14 @@ data class PetBean(
var deviceOutId: String,
var macID: String,
var mealType: Int,
var deviceType: Int,
var availableOrder: Int,//判断套餐是否可用或过期1是可用 0不可用
var deviceId: String
) : Parcelable, BaseDiffBean() {
constructor() : this(
"", "", "", "", 0, 1, MMKVUtil.getString(MMKVKey.UserId), "", 0, Utils.formatTime(
System.currentTimeMillis(), Utils.DATE_FORMAT_PATTERN_CN
), "", 0f, 0f, "", "", "", 1, 1, ""
), "", 0f, 0f, "", "", "", 1, 1, 1, ""
)
override fun isSameObject(other: Any): Boolean {

View File

@@ -3,7 +3,6 @@ package com.abbidot.tracker.ui.activity.device
import android.content.Intent
import android.view.View
import androidx.activity.viewModels
import coil.load
import com.abbidot.baselibrary.constant.EventName
import com.abbidot.baselibrary.eventbus.XEventBus
import com.abbidot.tracker.R
@@ -36,7 +35,7 @@ class AddNewTracker1Activity :
}
mViewBinding.apply {
ivChargePowerOnGif.load(R.drawable.charge_power_on)
// ivChargePowerOnGif.load(R.drawable.charge_power_on)
if (!isFirstBind) {
tvChargePowerOnBackLoginBtn.visibility = View.GONE

View File

@@ -16,6 +16,7 @@ import com.abbidot.tracker.base.BaseActivity
import com.abbidot.tracker.base.BaseDialog
import com.abbidot.tracker.bean.BleTrackDeviceBean
import com.abbidot.tracker.bean.DeviceBean
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
import com.abbidot.tracker.databinding.ActivityAddNewTracker3Binding
@@ -40,6 +41,7 @@ class AddNewTracker3Activity :
private var mDeviceId = ""
private var mDeviceOutId = ""
private var mConBleMac = ""
private var mType = ConstantInt.Type1
private lateinit var mScanDeviceAdapter: ScanDeviceAdapter
@@ -68,6 +70,7 @@ class AddNewTracker3Activity :
notifyItemRangeChanged(0, it.size)
mDeviceOutId = it[pos].deviceOutId
mConBleMac = it[pos].macId
mType = it[pos].type
mTrackerSetViewModel.bindDevice(
this@AddNewTracker3Activity, mDeviceOutId
)
@@ -97,6 +100,7 @@ class AddNewTracker3Activity :
val intent = Intent(mContext, AddPairedSuccessActivity::class.java)
intent.putExtra(ConstantString.DeviceOutId, mDeviceOutId)
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
intent.putExtra(ConstantString.Type, mType)
intent.putExtra(ConstantString.DeviceId, mDeviceId)
intent.putExtra(ConstantString.Mac, ble.mac)
startActivity(intent)
@@ -186,14 +190,19 @@ class AddNewTracker3Activity :
LogUtil.d("onScanning....$bleDevice")
bleDevice?.apply {
if (null != name && name.contains(SRBleUtil.instance.trackDeviceBleStartName)) {
val start = 45
val end = start + 6
val subArray = scanRecord.sliceArray(start until end)
val subArray = getManufacturerInfo(scanRecord)
LogUtil.e("截取后的外显id广播=${HexUtil.formatHexString(subArray, true)}")
val deviceOutId = subArray.decodeToString()
var typeName = ""
subArray?.let {
typeName = it.decodeToString()
}
DeviceBean().let {
it.deviceOutId = deviceOutId
it.type = getDeviceType(typeName)
it.deviceOutId =
name.substring(SRBleUtil.instance.trackDeviceBleStartName.length)
.trim()
it.macId = mac
it.deviceName = name
mScanDeviceAdapter.getData().let { list ->
ViewUtil.instance.viewShow(mViewBinding.rvAddNewTracker3DeviceList)
list.add(it)
@@ -211,6 +220,44 @@ class AddNewTracker3Activity :
})
}
/**
* 获取查找设备类型
*/
private fun getManufacturerInfo(scanRecord: ByteArray): ByteArray? {
var index = 0
while (index < scanRecord.size) {
val length = scanRecord[index].toInt() and 0xFF
if (length == 0) break
val typeIndex = index + 1
val dataStart = index + 2
val dataLength = length - 1
val dataEndExclusive = dataStart + dataLength
if (typeIndex >= scanRecord.size || dataEndExclusive > scanRecord.size) {
return null
}
val type = scanRecord[typeIndex].toInt() and 0xFF
if (type == 0xFF) {
val data = scanRecord.copyOfRange(dataStart, dataEndExclusive)
if (data.size < 2) return null
// val companyId = (data[0].toInt() and 0xFF) or ((data[1].toInt() and 0xFF) shl 8)
val payload = data.copyOfRange(2, data.size)
return payload
}
index += (length + 1)
}
return null
}
/**
* 获取设备类型
*/
private fun getDeviceType(typeName: String): Int {
return when (typeName) {
"G40" -> ConstantInt.Type2
else -> ConstantInt.Type1
}
}
private fun scanFinished() {
mAnimatorSet?.cancel()
mViewBinding.ivAddNewTracker3RefreshBtn.isEnabled = true

View File

@@ -51,6 +51,7 @@ class AddPairedSuccessActivity :
private var mDeviceOutId = ""
private var mDeviceId = ""
private var mMac = ""
private var mType = ConstantInt.Type1
private var mPetBean: PetBean? = null
//判断设备可用套餐状态
@@ -66,6 +67,7 @@ class AddPairedSuccessActivity :
isFirstBind = getBoolean(ConstantString.isFirstBind, false)
mDeviceId = getString(ConstantString.DeviceId, "")
mMac = getString(ConstantString.Mac, "")
mType = getInt(ConstantString.Type, ConstantInt.Type1)
mDeviceOutId = getString(ConstantString.DeviceOutId, "")
}
@@ -73,6 +75,7 @@ class AddPairedSuccessActivity :
mViewBinding.apply {
tvPairSuccessDeviceOutId.text = mDeviceOutId
ivPairSuccessDeviceImage.setImageResource(Util.getDeviceTypeImage(mType))
setOnClickListenerViews(btnPairSuccessActivate)
}
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)

View File

@@ -708,6 +708,29 @@ class LiveActivityV3 : BaseActivity<ActivityLiveV3Binding>(ActivityLiveV3Binding
}
mViewBinding.let {
if (deviceType == ConstantInt.Type2) {
it.ilLiveV2BluetoothFindDevice.ilLiveV2RadarLightSwitch.tvDeviceLightSwitchTitle.text =
getString(R.string.txt_light)
it.ilLiveV2BluetoothFindDevice.ilLiveV2RadarLightSwitch.tvDeviceLightSwitchTitle.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.icon_light_svg, 0, 0, 0
)
it.ilLiveV2OperateLayout.ilLiveV2DataLightSwitch.tvDeviceLightSwitchTitle.text =
getString(R.string.txt_light)
it.ilLiveV2OperateLayout.ilLiveV2DataLightSwitch.tvDeviceLightSwitchTitle.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.icon_light_svg, 0, 0, 0
)
} else {
it.ilLiveV2BluetoothFindDevice.ilLiveV2RadarLightSwitch.tvDeviceLightSwitchTitle.text =
getString(R.string.txt_tone)
it.ilLiveV2BluetoothFindDevice.ilLiveV2RadarLightSwitch.tvDeviceLightSwitchTitle.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.icon_sound_image, 0, 0, 0
)
it.ilLiveV2OperateLayout.ilLiveV2DataLightSwitch.tvDeviceLightSwitchTitle.text =
getString(R.string.txt_tone)
it.ilLiveV2OperateLayout.ilLiveV2DataLightSwitch.tvDeviceLightSwitchTitle.setCompoundDrawablesWithIntrinsicBounds(
R.drawable.icon_sound_image, 0, 0, 0
)
}
isLedOpen = ledSwitch == ConstantInt.Open
it.ilLiveV2OperateLayout.ilLiveV2DataLightSwitch.cbDeviceLightSwitch.isChecked =
isLedOpen

View File

@@ -91,6 +91,7 @@ class HomeTrackFragment :
//是否是dfu的返回的
private var isDFUCallback = false
private var mFirmwareBean: FirmwareBean? = null
private var isSwitchPet = true
companion object {
@JvmStatic
@@ -102,7 +103,7 @@ class HomeTrackFragment :
override fun initData() {
mViewBinding.apply {
root.setBackgroundResource(R.color.transparent)
addListData()
addStateListData()
mHomePetTrackStateAdapter =
HomePetTrackStateAdapter(mContext!!, mTrackStateList).apply {
setOnItemClickListener(object : BaseRecyclerAdapter.OnItemClickListener {
@@ -219,7 +220,7 @@ class HomeTrackFragment :
// }
}
getPetTrackerInfoData()
getPetTrackerInfoData(isSwitchPet)
}
private fun getHomeV2Activity(): HomeV2Activity? {
@@ -287,6 +288,7 @@ class HomeTrackFragment :
// LogUtil.e("蓝牙连接,不使用接口数据更新状态")
// } else {
// }
addMenuListData()
setStateData(data)
setZoneData(data)
}
@@ -319,10 +321,18 @@ class HomeTrackFragment :
mFirmwareBean = this
mFirmwareBean?.mac = mBleTrackDeviceBean?.mac!!
val localVersion = mTrackMenuList[3].menuValue
if (mDeviceDFUViewModel.checkVersionUpdate(localVersion, version)) {
mTrackMenuList[3].isSwitch = true
mTrackMenuAdapter.notifyItemChanged(3)
findItem(
mTrackMenuList, getString(R.string.txt_firmware_version)
)?.let { m ->
val localVersion = m.menuValue
if (mDeviceDFUViewModel.checkVersionUpdate(localVersion, version)) {
m.isSwitch = true
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_firmware_version)
)
)
}
}
}
}
@@ -382,45 +392,18 @@ class HomeTrackFragment :
}
}
fun getPetTrackerInfoData() {
fun getPetTrackerInfoData(switchPet: Boolean = false) {
isSwitchPet = switchPet
getHomeV2Activity()?.let {
it.getPet()?.apply {
mTrackMenuList[1].menuValue = ""
mTrackMenuList[2].menuValue = ""
mTrackMenuList[4].menuValue = ""
if (isSwitchPet) {
isSwitchPet = false
mTrackMenuAdapter.notifyItemRangeRemoved(0, mTrackMenuList.size)
mTrackMenuList.clear()
}
mTrackerInfoViewModel.getPetTrackerInfo(it, deviceId)
getBleTrackDeviceBean(false)?.let { ble ->
if (BleManager.getInstance().isConnected(macID)) {
//获取固件版本号
if (null == mFirmwareBean) {
SRBleUtil.instance.writeData(
ble.bleDevice, SRBleCmdUtil.instance.getFirmwareVersion()
)
} else {
//只有新的设备回到这个界面才去检查dfu
if (mFirmwareBean?.mac != ble.mac) {
mTrackMenuList[3].menuValue = ""
mTrackMenuList[3].isSwitch = false
SRBleUtil.instance.writeData(
ble.bleDevice, SRBleCmdUtil.instance.getFirmwareVersion()
)
}
}
} else {
mFirmwareBean = null
mTrackMenuList[3].menuValue = ""
mTrackMenuList[3].isSwitch = false
}
}
if (null == mBleTrackDeviceBean) {
mFirmwareBean = null
mTrackMenuList[3].menuValue = ""
mTrackMenuList[3].isSwitch = false
}
mTrackMenuAdapter.notifyItemRangeChanged(1, 4)
}
}
}
@@ -441,11 +424,11 @@ class HomeTrackFragment :
}
}
private fun addListData() {
private fun addStateListData() {
mTrackStateList = mutableListOf()
mFencesList = mutableListOf()
mZoneList = mutableListOf()
mTrackMenuList = mutableListOf()
ViewUtil.instance.addMenuBean(
mTrackStateList,
getString(R.string.tracker_manage_set_network),
@@ -485,21 +468,73 @@ class HomeTrackFragment :
imageResId = R.drawable.icon_light_svg,
type = ConstantInt.SpecialType
)
}
mTrackMenuList = mutableListOf()
ViewUtil.instance.addMenuBean(mTrackMenuList, getString(R.string.tracker_manage_led))
ViewUtil.instance.addMenuBean(
mTrackMenuList, getString(R.string.tracker_manage_set_duration)
)
ViewUtil.instance.addMenuBean(mTrackMenuList, getString(R.string.txt_live_duration))
ViewUtil.instance.addMenuBean(
mTrackMenuList,
getString(R.string.txt_firmware_version),
menuType = MultipleEntity.IMG_TEXT_IMG
)
ViewUtil.instance.addMenuBean(
mTrackMenuList, getString(R.string.txt_power_off)
// menuType = MultipleEntity.IMG_TEXT//, menuType = MultipleEntity.TEXT_NAME
private fun addMenuListData() {
mMapDeviceBean?.apply {
if (mTrackMenuList.size == 0) {
if (deviceType == ConstantInt.Type1) {
ViewUtil.instance.addMenuBean(
mTrackMenuList, getString(R.string.tracker_manage_led)
)
}
ViewUtil.instance.addMenuBean(
mTrackMenuList, getString(R.string.tracker_manage_set_duration)
)
ViewUtil.instance.addMenuBean(mTrackMenuList, getString(R.string.txt_live_duration))
ViewUtil.instance.addMenuBean(
mTrackMenuList,
getString(R.string.txt_firmware_version),
menuType = MultipleEntity.IMG_TEXT_IMG
)
if (deviceType == ConstantInt.Type1) {
ViewUtil.instance.addMenuBean(mTrackMenuList, getString(R.string.txt_power_off))
}
}
}
getBleTrackDeviceBean(false)?.let { ble ->
if (BleManager.getInstance().isConnected(ble.mac)) {
//获取固件版本号
if (null == mFirmwareBean) {
SRBleUtil.instance.writeData(
ble.bleDevice, SRBleCmdUtil.instance.getFirmwareVersion()
)
} else {
//只有新的设备回到这个界面才去检查dfu
if (mFirmwareBean?.mac != ble.mac) {
findItem(
mTrackMenuList, getString(R.string.txt_firmware_version)
)?.let { m ->
m.menuValue = ""
m.isSwitch = false
}
SRBleUtil.instance.writeData(
ble.bleDevice, SRBleCmdUtil.instance.getFirmwareVersion()
)
} else {
}
}
} else {
mFirmwareBean = null
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let { m ->
m.menuValue = ""
m.isSwitch = false
}
}
}
if (null == mBleTrackDeviceBean) {
mFirmwareBean = null
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let { m ->
m.menuValue = ""
m.isSwitch = false
}
}
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_firmware_version)
)
)
}
@@ -534,6 +569,7 @@ class HomeTrackFragment :
val endTime = "${getString(R.string.txt_end_time)}$eTime"
val id = "ID:$deviceOutId"
mViewBinding.let {
it.ivHomePetTrackPetHead.setImageResource(Util.getDeviceTypeImage(deviceType))
it.tvHomePetTrackPetStartTime.text = startTime
it.tvHomePetTrackPetEndTime.text = endTime
it.tvHomePetTrackId.text = id
@@ -604,17 +640,19 @@ class HomeTrackFragment :
setLedControlState(mapDeviceBean)
mTrackMenuList.let {
it[1].menuValue =
findItem(it, getString(R.string.tracker_manage_set_duration))?.menuValue =
(gnssInterval / 60).toString() + getString(R.string.data_active_unit_min)
it[2].menuValue =
findItem(it, getString(R.string.txt_live_duration))?.menuValue =
(liveTime / 60).toString() + getString(R.string.data_active_unit_min)
it[4].type =
if (powerSwitch == ConstantInt.Type3 || powerSwitch == ConstantInt.Type0) ConstantInt.SpecialType
else ConstantInt.Type0
it[4].menuValue = when (powerSwitch) {
ConstantInt.Type0 -> getString(R.string.tracker_manage_set_led_off)
ConstantInt.Type1 -> getString(R.string.tracker_manage_set_led_on)
else -> ""
findItem(it, getString(R.string.txt_power_off))?.let { menu ->
menu.type =
if (powerSwitch == ConstantInt.Type3 || powerSwitch == ConstantInt.Type0) ConstantInt.SpecialType
else ConstantInt.Type0
menu.menuValue = when (powerSwitch) {
ConstantInt.Type0 -> getString(R.string.tracker_manage_set_led_off)
ConstantInt.Type1 -> getString(R.string.tracker_manage_set_led_on)
else -> ""
}
}
}
@@ -625,15 +663,48 @@ class HomeTrackFragment :
}
}
mTrackMenuAdapter.notifyItemRangeChanged(1, mTrackMenuList.size)
mTrackMenuAdapter.notifyItemRangeChanged(
findIndexOf(
mTrackMenuList, getString(R.string.tracker_manage_set_duration)
), mTrackMenuList.size
)
mHomePetTrackStateAdapter.notifyItemRangeChanged(0, mTrackStateList.size)
}
private fun findItem(list: MutableList<MenuTxtBean>, name: String): MenuTxtBean? {
var menuTxt: MenuTxtBean? = null
for (l in list) {
if (name == l.menuName) {
menuTxt = l
break
}
}
return menuTxt
}
private fun findIndexOf(list: MutableList<MenuTxtBean>, name: String): Int {
var index = 0
for (i in 0 until list.size) {
if (name == list[i].menuName) {
index = i
break
}
}
return index
}
private fun setLedControlState(mapDeviceBean: MapDeviceBean) {
mapDeviceBean.apply {
//是否超时上报
val isTimeoutReport = Util.isTimeoutReport(updateTime)
mTrackStateList[5].let {
if (deviceType == ConstantInt.Type1) {
it.imageId = R.drawable.icon_light_svg
it.menuName = getString(R.string.txt_light)
} else {
it.imageId = R.drawable.icon_sound_image
it.menuName = getString(R.string.txt_tone)
}
it.colorRedId = R.color.orange_color3
it.type = if (SRBleUtil.instance.isMacConnect(deviceMacId)) {
ConstantInt.Type0
@@ -698,8 +769,9 @@ class HomeTrackFragment :
// mDFUStateAdapter = DFUStateAdapter(mContext!!, null)
// mTrackerDFUStateDialog = TrackerDFUStateDialog(mContext!!, mDFUStateAdapter)
// }
val localVersion = mTrackMenuList[3].menuValue
if (mDeviceDFUViewModel.checkVersionUpdate(localVersion, version)) {
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let {
val localVersion = it.menuValue
if (mDeviceDFUViewModel.checkVersionUpdate(localVersion, version)) {
// mTrackerDFUStateDialog?.apply {
// show()
// setContent(message)
@@ -711,21 +783,22 @@ class HomeTrackFragment :
// }
// }
// }
if (null == mDFUNewDialogDialog) mDFUNewDialogDialog = DFUNewDialog(mContext!!)
mDFUNewDialogDialog?.apply {
show()
startDfuState(version) {
if (TextUtils.isEmpty(firmwareUrl)) {
showToast(R.string.txt_no_down_url)
} else {
mDownLoadFileViewModel.downLoadFile(
mContext, fileName, firmwareUrl
)
if (null == mDFUNewDialogDialog) mDFUNewDialogDialog = DFUNewDialog(mContext!!)
mDFUNewDialogDialog?.apply {
show()
startDfuState(version) {
if (TextUtils.isEmpty(firmwareUrl)) {
showToast(R.string.txt_no_down_url)
} else {
mDownLoadFileViewModel.downLoadFile(
mContext, fileName, firmwareUrl
)
}
}
}
} else {
showToast(R.string.txt_latest_version)
}
} else {
showToast(R.string.txt_latest_version)
}
}
}
@@ -765,6 +838,15 @@ class HomeTrackFragment :
colorRedId = R.color.orange_color3
mHomePetTrackStateAdapter.notifyItemChanged(4)
}
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let { m ->
m.menuValue = ""
m.isSwitch = false
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_firmware_version)
)
)
}
}
//dfu升级成功 重新连接返回
if (isDFUCallback) {
@@ -785,9 +867,15 @@ class HomeTrackFragment :
if (data2 == 0) {
val strVersion = String(data.sliceArray(3..11))
LogUtil.e("设备固件版本号:$strVersion")
mTrackMenuList[3].menuValue = strVersion
mTrackMenuList[3].isSwitch = false
mTrackMenuAdapter.notifyItemChanged(3)
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let {
it.menuValue = strVersion
it.isSwitch = false
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_firmware_version)
)
)
}
mDeviceDFUViewModel.getFirmware()
mBleTrackDeviceBean?.apply {
SRBleUtil.instance.writeData(
@@ -835,13 +923,24 @@ class HomeTrackFragment :
mMapDeviceBean?.let { ble ->
mTrackerSetViewModel.turnOff(ble.deviceServerId)
}
mTrackMenuList[1].menuValue = ""
mTrackMenuList[2].menuValue = ""
mTrackMenuList[3].menuValue = ""
//取消红点显示
mTrackMenuList[3].isSwitch = false
mTrackMenuList[4].menuValue = ConstantInt.Close.toString()
mTrackMenuAdapter.notifyItemRangeChanged(1, 4)
findItem(mTrackMenuList, getString(R.string.txt_firmware_version))?.let {
it.menuValue = ""
//取消红点显示
it.isSwitch = false
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_firmware_version)
)
)
}
findItem(mTrackMenuList, getString(R.string.txt_power_off))?.let {
it.menuValue = ConstantInt.Close.toString()
mTrackMenuAdapter.notifyItemChanged(
findIndexOf(
mTrackMenuList, getString(R.string.txt_power_off)
)
)
}
}
}
}

View File

@@ -1,7 +1,9 @@
package com.abbidot.tracker.ui.fragment.map.googlemap
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.Point
import android.location.Location
@@ -9,6 +11,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import com.abbidot.baselibrary.constant.MMKVKey
@@ -373,14 +376,31 @@ abstract class BaseGoogleMapFragment :
}
fun setUserMarker() {
mUserLatLng?.let {
if (null == mUserMarker) {
mUserMarker = addImageMarker(it, R.drawable.pic_avatar_df)
} else {
if (it.latitude == mUserMarker!!.position.latitude && it.longitude == mUserMarker!!.position.longitude) {
if (MMKVUtil.getBoolean(MMKVKey.isGpsToGCJ02)) {
mUserLatLng?.let {
if (null == mUserMarker) {
mUserMarker = addImageMarker(it, R.drawable.icon_user_location_image)
} else {
mUserMarker?.remove()
mUserMarker = addImageMarker(it, R.drawable.pic_avatar_df)
if (it.latitude == mUserMarker!!.position.latitude && it.longitude == mUserMarker!!.position.longitude) {
} else {
mUserMarker?.remove()
mUserMarker = addImageMarker(it, R.drawable.icon_user_location_image)
}
}
}
} else {
mGoogleMap?.apply {
if (!isMyLocationEnabled) {
//检测权限开启用户的当前位置https://developers.google.cn/maps/documentation/android-sdk/location?hl=zh-cn
if (ActivityCompat.checkSelfPermission(
mContext!!, Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
mContext!!, Manifest.permission.ACCESS_COARSE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
//启用“我的位置”图层。
isMyLocationEnabled = true
}
}
}
}

View File

@@ -200,7 +200,7 @@ class PetV2Fragment : BaseFragment<FragmentPetV2Binding>(FragmentPetV2Binding::i
)
(mFragments[0] as HomePetFragment).getPetAllInfoData()
(mFragments[1] as HomeTrackFragment).getPetTrackerInfoData()
(mFragments[1] as HomeTrackFragment).getPetTrackerInfoData(true)
}
}

View File

@@ -837,6 +837,12 @@ class Util {
fun getMapTypeSp() = MMKVUtil.getInt(MMKVKey.MapType, ConstantInt.Type0)
fun getShowFenceSp() = MMKVUtil.getBoolean(MMKVKey.ShowFence, true)
fun getDeviceTypeImage(type: Int): Int {
return when (type) {
ConstantInt.Type2 -> R.drawable.icon_tracker_g40
else -> R.drawable.icon_tracker_device_small
}
}
}
/**

View File

@@ -38,7 +38,7 @@ import java.util.UUID
class SRBleUtil private constructor() {
//track设备蓝牙的开头名字
val trackDeviceBleStartName = "Pet_"
val trackDeviceBleStartName = "AB_"
//是否正在连接蓝牙设备
var isBleConnecting = false

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -26,18 +26,17 @@
android:layout_marginTop="@dimen/dp_24"
android:background="@drawable/shape24_white_bg"
android:paddingHorizontal="@dimen/dp_22"
android:paddingBottom="@dimen/dp_56">
android:paddingVertical="@dimen/dp_40">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_charge_power_on_gif"
android:layout_width="@dimen/dp_255"
android:layout_height="@dimen/dp_170"
android:layout_centerHorizontal="true" />
<!-- <androidx.appcompat.widget.AppCompatImageView-->
<!-- android:id="@+id/iv_charge_power_on_gif"-->
<!-- android:layout_width="@dimen/dp_255"-->
<!-- android:layout_height="@dimen/dp_170"-->
<!-- android:layout_centerHorizontal="true" />-->
<com.abbidot.tracker.widget.TypefaceTextView
android:id="@+id/tv_charge_power_on_step_one"
style="@style/my_TextView_style_v2"
android:layout_below="@id/iv_charge_power_on_gif"
android:text="@string/txt_step_one"
android:textColor="@color/select_color3"
android:textSize="@dimen/textSize12"
@@ -58,7 +57,7 @@
android:id="@+id/tv_charge_power_on_step_two"
style="@style/my_TextView_style_v2"
android:layout_below="@id/tv_charge_power_on_step_one"
android:layout_marginTop="@dimen/dp_44"
android:layout_marginTop="@dimen/dp_38"
android:text="@string/txt_step_two"
android:textColor="@color/select_color3"
android:textSize="@dimen/textSize12"

View File

@@ -36,26 +36,13 @@
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:id="@+id/v_add_new_tracker3_solid_view"
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_1"
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_20" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_160"
android:layout_height="@dimen/dp_160"
android:layout_alignTop="@id/v_add_new_tracker3_solid_view"
android:layout_alignEnd="@id/v_add_new_tracker3_solid_view"
android:src="@drawable/icon_pair_tracker_image1" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="@dimen/dp_160"
android:layout_height="@dimen/dp_160"
android:layout_alignStart="@id/v_add_new_tracker3_solid_view"
android:layout_alignTop="@id/v_add_new_tracker3_solid_view"
android:src="@drawable/icon_pair_tracker_image2" />
android:layout_marginTop="@dimen/dp_24"
android:src="@drawable/icon_pair_tracker_image" />
<androidx.appcompat.widget.AppCompatImageView
@@ -63,7 +50,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/dp_200"
android:layout_marginTop="@dimen/dp_140"
android:layout_marginEnd="@dimen/dp_18"
android:src="@drawable/icon_refresh" />

View File

@@ -41,7 +41,7 @@
android:layout_height="@dimen/dp_200"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_30"
android:src="@drawable/icon_pair_tracker_image2" />
android:src="@drawable/icon_pair_tracker_image" />
<com.abbidot.tracker.widget.VerifyEditText
android:id="@+id/vet_add_new_tracker4_edit_text"

View File

@@ -21,15 +21,16 @@
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_pair_success_device_image"
android:layout_width="@dimen/dp_130"
android:layout_height="@dimen/dp_90"
android:layout_height="@dimen/dp_100"
android:layout_marginTop="@dimen/dp_50"
android:src="@drawable/icon_tracker_device_small" />
<com.abbidot.tracker.widget.TypefaceTextView
style="@style/my_TextView_style_v2"
android:layout_width="match_parent"
android:layout_marginTop="@dimen/dp_28"
android:layout_marginTop="@dimen/dp_18"
android:layout_marginBottom="@dimen/dp_8"
android:text="@string/txt_id_number"
android:textColor="@color/select_color3"
@@ -67,11 +68,11 @@
android:id="@+id/il_pair_success_bluetooth_tips"
layout="@layout/layout_ble_connect_state"
android:layout_width="wrap_content"
android:visibility="invisible"
android:layout_height="wrap_content"
android:layout_above="@id/btn_payment_success_continue"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_38" />
android:layout_marginTop="@dimen/dp_38"
android:visibility="invisible" />
<com.abbidot.tracker.widget.TypefaceButton
android:id="@+id/btn_pair_success_activate"

View File

@@ -23,7 +23,7 @@
android:id="@+id/switch_only_google_map"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_38"
android:layout_marginBottom="@dimen/dp_2"
android:layout_marginBottom="@dimen/dp_6"
android:background="@drawable/selector_shape6_gray_bg_pressed"
app:qmui_accessory_type="switcher" />

View File

@@ -19,9 +19,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_home_pet_track_pet_head"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_80"
android:src="@drawable/icon_tracker_device_small" />
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80" />
<com.abbidot.tracker.widget.TypefaceTextView
android:id="@+id/tv_home_pet_track_id"

View File

@@ -12,6 +12,7 @@
<com.abbidot.tracker.widget.TypefaceTextView
style="@style/my_TextView_style_v2"
android:layout_width="0dp"
android:id="@+id/tv_device_light_switch_title"
android:layout_weight="1"
android:drawableStart="@drawable/icon_light_svg"
android:text="@string/txt_light"

View File

@@ -8,6 +8,7 @@
android:paddingHorizontal="@dimen/dp_30">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_add_new_tracker3_device_image"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginEnd="@dimen/dp_10"
@@ -17,8 +18,7 @@
android:id="@+id/tv_add_new_tracker3_device_out_id_item"
style="@style/my_TextView_style_v2"
android:text="a0c0c1"
android:textAllCaps="true"
android:textSize="@dimen/textSize20"
android:textSize="@dimen/textSize18"
app:typeface="@string/roboto_regular_font" />
<View

View File

@@ -1068,5 +1068,6 @@
<string name="txt_locating">Locating&#8230;</string>
<string name="txt_auto_subscription_years">(Renew at $%s/%s years thereafter)</string>
<string name="txt_auto_subscription_months">(Renew at $%s/%s months thereafter)</string>
<string name="txt_tone">Tone</string>
</resources>