diff --git a/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties index 761033c..f7032fe 100644 --- a/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +++ b/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties @@ -1 +1 @@ -#Sat Feb 14 11:22:05 CST 2026 +#Thu Mar 12 15:15:30 CST 2026 diff --git a/app/build.gradle b/app/build.gradle index ac72798..62467b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/com/abbidot/tracker/adapter/HomePetTrackMenuAdapter.kt b/app/src/main/java/com/abbidot/tracker/adapter/HomePetTrackMenuAdapter.kt index b69bc69..898c178 100644 --- a/app/src/main/java/com/abbidot/tracker/adapter/HomePetTrackMenuAdapter.kt +++ b/app/src/main/java/com/abbidot/tracker/adapter/HomePetTrackMenuAdapter.kt @@ -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(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) } diff --git a/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt b/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt index 0e8f9bd..82b8404 100644 --- a/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt +++ b/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt @@ -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 diff --git a/app/src/main/java/com/abbidot/tracker/adapter/ScanDeviceAdapter.kt b/app/src/main/java/com/abbidot/tracker/adapter/ScanDeviceAdapter.kt index 1cc569c..cf85d6a 100644 --- a/app/src/main/java/com/abbidot/tracker/adapter/ScanDeviceAdapter.kt +++ b/app/src/main/java/com/abbidot/tracker/adapter/ScanDeviceAdapter.kt @@ -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)) } } } \ No newline at end of file diff --git a/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt b/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt index 07bdbf4..68af49a 100644 --- a/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt +++ b/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt @@ -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 diff --git a/app/src/main/java/com/abbidot/tracker/bean/MapDeviceBean.kt b/app/src/main/java/com/abbidot/tracker/bean/MapDeviceBean.kt index e99fe2d..b917975 100644 --- a/app/src/main/java/com/abbidot/tracker/bean/MapDeviceBean.kt +++ b/app/src/main/java/com/abbidot/tracker/bean/MapDeviceBean.kt @@ -35,6 +35,7 @@ data class MapDeviceBean( var wifiZones: MutableList?, 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 diff --git a/app/src/main/java/com/abbidot/tracker/bean/PetBean.kt b/app/src/main/java/com/abbidot/tracker/bean/PetBean.kt index 74f4141..2019aaf 100644 --- a/app/src/main/java/com/abbidot/tracker/bean/PetBean.kt +++ b/app/src/main/java/com/abbidot/tracker/bean/PetBean.kt @@ -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 { diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker1Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker1Activity.kt index 272be71..573b322 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker1Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker1Activity.kt @@ -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 diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker3Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker3Activity.kt index 67910c9..b76afec 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker3Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddNewTracker3Activity.kt @@ -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 diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt index ecf73d6..c469ec9 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt @@ -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) diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt index b33dbc2..c3930e3 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt @@ -708,6 +708,29 @@ class LiveActivityV3 : BaseActivity(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 diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt index 8581c8e..05234e9 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt @@ -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, 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, 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) + ) + ) + } } } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt index 0fb36f8..8a5030a 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt @@ -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 + } } } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/pet/PetV2Fragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/pet/PetV2Fragment.kt index 4619262..c8dfa8c 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/pet/PetV2Fragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/pet/PetV2Fragment.kt @@ -200,7 +200,7 @@ class PetV2Fragment : BaseFragment(FragmentPetV2Binding::i ) (mFragments[0] as HomePetFragment).getPetAllInfoData() - (mFragments[1] as HomeTrackFragment).getPetTrackerInfoData() + (mFragments[1] as HomeTrackFragment).getPetTrackerInfoData(true) } } diff --git a/app/src/main/java/com/abbidot/tracker/util/Util.kt b/app/src/main/java/com/abbidot/tracker/util/Util.kt index 2a2c1c7..4568640 100644 --- a/app/src/main/java/com/abbidot/tracker/util/Util.kt +++ b/app/src/main/java/com/abbidot/tracker/util/Util.kt @@ -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 + } + } } /** diff --git a/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt b/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt index 9404b90..1a92f2e 100644 --- a/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt +++ b/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt @@ -38,7 +38,7 @@ import java.util.UUID class SRBleUtil private constructor() { //track设备蓝牙的开头名字 - val trackDeviceBleStartName = "Pet_" + val trackDeviceBleStartName = "AB_" //是否正在连接蓝牙设备 var isBleConnecting = false diff --git a/app/src/main/res/drawable-xhdpi/icon_pair_tracker_image.png b/app/src/main/res/drawable-xhdpi/icon_pair_tracker_image.png new file mode 100644 index 0000000..1f4dca5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_pair_tracker_image.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_sound_image.png b/app/src/main/res/drawable-xhdpi/icon_sound_image.png new file mode 100644 index 0000000..2576b56 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_sound_image.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_tracker_g40.png b/app/src/main/res/drawable-xhdpi/icon_tracker_g40.png new file mode 100644 index 0000000..5da62e8 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_tracker_g40.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_user_location_image.png b/app/src/main/res/drawable-xhdpi/icon_user_location_image.png new file mode 100644 index 0000000..a0cb719 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_user_location_image.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_pair_tracker_image.png b/app/src/main/res/drawable-xxhdpi/icon_pair_tracker_image.png new file mode 100644 index 0000000..e9395e9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_pair_tracker_image.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_sound_image.png b/app/src/main/res/drawable-xxhdpi/icon_sound_image.png new file mode 100644 index 0000000..3e71971 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_sound_image.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_tracker_g40.png b/app/src/main/res/drawable-xxhdpi/icon_tracker_g40.png new file mode 100644 index 0000000..0d84c44 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_tracker_g40.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_user_location_image.png b/app/src/main/res/drawable-xxhdpi/icon_user_location_image.png new file mode 100644 index 0000000..537d458 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_user_location_image.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_pair_tracker_image.png b/app/src/main/res/drawable-xxxhdpi/icon_pair_tracker_image.png new file mode 100644 index 0000000..5a86fc4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_pair_tracker_image.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_sound_image.png b/app/src/main/res/drawable-xxxhdpi/icon_sound_image.png new file mode 100644 index 0000000..abdc77b Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_sound_image.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_tracker_g40.png b/app/src/main/res/drawable-xxxhdpi/icon_tracker_g40.png new file mode 100644 index 0000000..48e3d0f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_tracker_g40.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/icon_user_location_image.png b/app/src/main/res/drawable-xxxhdpi/icon_user_location_image.png new file mode 100644 index 0000000..28de9e7 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/icon_user_location_image.png differ diff --git a/app/src/main/res/drawable/icon_pair_tracker_image1.png b/app/src/main/res/drawable/icon_pair_tracker_image1.png deleted file mode 100644 index ce7d6f4..0000000 Binary files a/app/src/main/res/drawable/icon_pair_tracker_image1.png and /dev/null differ diff --git a/app/src/main/res/drawable/icon_pair_tracker_image2.png b/app/src/main/res/drawable/icon_pair_tracker_image2.png deleted file mode 100644 index fbfcabe..0000000 Binary files a/app/src/main/res/drawable/icon_pair_tracker_image2.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_add_new_tracker1.xml b/app/src/main/res/layout/activity_add_new_tracker1.xml index b592d44..d5b68ff 100644 --- a/app/src/main/res/layout/activity_add_new_tracker1.xml +++ b/app/src/main/res/layout/activity_add_new_tracker1.xml @@ -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"> - + + + + + - - - - - + android:layout_marginTop="@dimen/dp_24" + android:src="@drawable/icon_pair_tracker_image" /> diff --git a/app/src/main/res/layout/activity_add_new_tracker4.xml b/app/src/main/res/layout/activity_add_new_tracker4.xml index 50e5004..87362fa 100644 --- a/app/src/main/res/layout/activity_add_new_tracker4.xml +++ b/app/src/main/res/layout/activity_add_new_tracker4.xml @@ -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" /> + android:layout_marginTop="@dimen/dp_38" + android:visibility="invisible" /> diff --git a/app/src/main/res/layout/fragment_home_track.xml b/app/src/main/res/layout/fragment_home_track.xml index e227722..63afe22 100644 --- a/app/src/main/res/layout/fragment_home_track.xml +++ b/app/src/main/res/layout/fragment_home_track.xml @@ -19,9 +19,8 @@ + android:layout_width="@dimen/dp_80" + android:layout_height="@dimen/dp_80" /> Locating… (Renew at $%s/%s years thereafter) (Renew at $%s/%s months thereafter) + Tone \ No newline at end of file