增加蓝牙围栏设置,修改了对比测试bug

This commit is contained in:
yezhiqiu
2025-10-31 18:18:50 +08:00
parent e81b62159a
commit 9e465cef8c
103 changed files with 176 additions and 191 deletions

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.clj.fastble" >
<uses-sdk android:minSdkVersion="21" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

View File

@@ -1,18 +0,0 @@
{
"version": 3,
"artifactType": {
"type": "AAPT_FRIENDLY_MERGED_MANIFESTS",
"kind": "Directory"
},
"applicationId": "com.clj.fastble",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"outputFile": "AndroidManifest.xml"
}
],
"elementType": "File"
}

View File

@@ -1,6 +0,0 @@
aarFormatVersion=1.0
aarMetadataVersion=1.0
minCompileSdk=1
minCompileSdkExtension=0
minAndroidGradlePluginVersion=1.0.0
coreLibraryDesugaringEnabled=false

View File

@@ -1 +1 @@
#Tue Sep 30 10:14:20 CST 2025 #Fri Oct 31 15:54:13 CST 2025

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\assets"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\release\assets"/></dataSet><dataSet config="generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\build\intermediates\shader_assets\release\compileReleaseShaders\out"/></dataSet></merger>

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\jniLibs"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\release\jniLibs"/></dataSet></merger>

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\shaders"/></dataSet><dataSet config="release" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\release\shaders"/></dataSet></merger>

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="release$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\release\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="release" generated-set="release$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\release\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\build\generated\res\resValues\release"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="generated" generated-set="generated$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:&lt;dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\build\generated\res\resValues\release"/></dataSet><mergedItems/></merger>

View File

@@ -1,2 +0,0 @@
R_DEF: Internal format may change without notice
local

View File

@@ -1,20 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.clj.fastble" >
4
5 <uses-sdk android:minSdkVersion="21" />
6
7 <uses-permission android:name="android.permission.BLUETOOTH" />
7-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:4:5-68
7-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:4:22-65
8 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
8-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:5:5-74
8-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:5:22-71
9 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
9-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:6:5-81
9-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:6:22-78
10 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
10-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:7:5-79
10-->E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:7:22-76
11
12</manifest>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.clj.fastble" >
<uses-sdk android:minSdkVersion="21" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

View File

@@ -1,33 +0,0 @@
-- Merging decision tree log ---
manifest
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:1:1-9:12
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:1:1-9:12
package
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:2:5-30
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml
xmlns:android
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:1:11-69
uses-permission#android.permission.BLUETOOTH
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:4:5-68
android:name
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:4:22-65
uses-permission#android.permission.BLUETOOTH_ADMIN
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:5:5-74
android:name
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:5:22-71
uses-permission#android.permission.ACCESS_COARSE_LOCATION
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:6:5-81
android:name
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:6:22-78
uses-permission#android.permission.ACCESS_FINE_LOCATION
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:7:5-79
android:name
ADDED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml:7:22-76
uses-sdk
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml reason: use-sdk injection requested
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml
android:targetSdkVersion
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml
android:minSdkVersion
INJECTED from E:\AndroidProject\LatestSdkProject\Tracker\FastBleLib\src\main\AndroidManifest.xml

View File

@@ -74,13 +74,16 @@ public class BleManager {
public void init(Application app) { public void init(Application app) {
if (context == null && app != null) { if (context == null && app != null) {
context = app; context = app;
if (isSupportBle()) { bluetoothManager =
bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
(BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); bluetoothAdapter = bluetoothManager.getAdapter();
bluetoothAdapter = bluetoothManager.getAdapter(); // if (isSupportBle()) {
} else { // bluetoothManager =
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
} // bluetoothAdapter = bluetoothManager.getAdapter();
// } else {
// bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// }
multipleBluetoothController = new MultipleBluetoothController(); multipleBluetoothController = new MultipleBluetoothController();
bleScanRuleConfig = new BleScanRuleConfig(); bleScanRuleConfig = new BleScanRuleConfig();
} }
@@ -556,7 +559,7 @@ public class BleManager {
* @param uuid_service * @param uuid_service
* @param uuid_write * @param uuid_write
* @param data * @param data
* @param split * @param split 是否自动分包
* @param callback * @param callback
*/ */
public void write(BleDevice bleDevice, String uuid_service, String uuid_write, byte[] data, public void write(BleDevice bleDevice, String uuid_service, String uuid_write, byte[] data,

View File

@@ -28,9 +28,9 @@ android {
applicationId "com.abbidot.tracker" applicationId "com.abbidot.tracker"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 35 targetSdkVersion 35
versionCode 2021 versionCode 2022
// versionName "2.0.21" // versionName "2.0.22"
versionName "2.0.21-Beta1" versionName "2.0.22-Beta2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -406,6 +406,7 @@
<activity <activity
android:name=".ui.activity.HomeV2Activity" android:name=".ui.activity.HomeV2Activity"
android:exported="false" android:exported="false"
android:launchMode="singleTask"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.activity.set.AboutActivity" android:name=".ui.activity.set.AboutActivity"

View File

@@ -8,6 +8,7 @@ import com.abbidot.tracker.bean.CountryCodeBean
import com.abbidot.tracker.bean.DeviceBean import com.abbidot.tracker.bean.DeviceBean
import com.abbidot.tracker.bean.DeviceDetailBean import com.abbidot.tracker.bean.DeviceDetailBean
import com.abbidot.tracker.bean.FamilyPetBean import com.abbidot.tracker.bean.FamilyPetBean
import com.abbidot.tracker.bean.FencesBean
import com.abbidot.tracker.bean.FirmwareBean import com.abbidot.tracker.bean.FirmwareBean
import com.abbidot.tracker.bean.GetFencesBean import com.abbidot.tracker.bean.GetFencesBean
import com.abbidot.tracker.bean.HistoryDataBean import com.abbidot.tracker.bean.HistoryDataBean
@@ -360,7 +361,7 @@ interface INetworkService {
@Field("ancillaryOtherLatitude") ancillaryOtherLatitude: Double, @Field("ancillaryOtherLatitude") ancillaryOtherLatitude: Double,
@Field("ancillaryOtherLongitude") ancillaryOtherLongitude: Double @Field("ancillaryOtherLongitude") ancillaryOtherLongitude: Double
// @Field("fenceId") fenceId: String // @Field("fenceId") fenceId: String
): BaseResponse<String> ): BaseResponse<FencesBean>
/** /**
* 添加矩形围栏 * 添加矩形围栏
@@ -393,7 +394,7 @@ interface INetworkService {
@Field("latitudeCenter") latitudeCenter: Double, @Field("latitudeCenter") latitudeCenter: Double,
@Field("longDistance") longDistance: Int, @Field("longDistance") longDistance: Int,
@Field("shortDistance") shortDistance: Int @Field("shortDistance") shortDistance: Int
): BaseResponse<String> ): BaseResponse<FencesBean>
/** /**
* 添加矩形围栏 * 添加矩形围栏
@@ -426,7 +427,7 @@ interface INetworkService {
@Field("latitudeCenter") latitudeCenter: Double, @Field("latitudeCenter") latitudeCenter: Double,
// @Field("longDistance") longDistance: Double, // @Field("longDistance") longDistance: Double,
// @Field("shortDistance") shortDistance: Double // @Field("shortDistance") shortDistance: Double
): BaseResponse<String> ): BaseResponse<FencesBean>
/** /**
* 更新圆形围栏 * 更新圆形围栏

View File

@@ -349,6 +349,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
setSelectPetPos(mSelectPetPosition) setSelectPetPos(mSelectPetPosition)
//判断套餐有没有到期 //判断套餐有没有到期
packageUnavailableState() packageUnavailableState()
//刚开始打开APP上传日志
getPet(false)?.apply { getPet(false)?.apply {
mLogBleReportViewModel.uploadLog(mContext, macID) mLogBleReportViewModel.uploadLog(mContext, macID)
} }

View File

@@ -297,8 +297,12 @@ open class AddAndEditFencesZoneBaseActivity :
mFencesManageViewModel.mFencesAddLiveData.observe(this) { mFencesManageViewModel.mFencesAddLiveData.observe(this) {
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
sendNotifyData() it.getOrNull()?.apply {
successTips(R.string.txt_fence_saved) // sendNotifyData()
mFencesBean.fenceId = fenceId
sendFenceData()
successTips(R.string.txt_fence_saved)
}
} }
override fun onRequestError(exceptionCode: String?) { override fun onRequestError(exceptionCode: String?) {
@@ -317,7 +321,10 @@ open class AddAndEditFencesZoneBaseActivity :
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
XEventBus.post(EventName.DeleteFences) XEventBus.post(EventName.DeleteFences)
sendNotifyData() // sendNotifyData()
//删除蓝牙标志
mFencesBean.isOn = ConstantInt.Type2
sendFenceData()
showToast( showToast(
R.string.txt_delete_success, isFinish = true, gravity = Gravity.CENTER R.string.txt_delete_success, isFinish = true, gravity = Gravity.CENTER
) )
@@ -327,7 +334,8 @@ open class AddAndEditFencesZoneBaseActivity :
mFencesManageViewModel.mUpdateFenceLiveData.observe(this) { mFencesManageViewModel.mUpdateFenceLiveData.observe(this) {
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
sendNotifyData() // sendNotifyData()
sendFenceData()
successTips(R.string.txt_fence_saved) successTips(R.string.txt_fence_saved)
} }
}) })
@@ -340,6 +348,15 @@ open class AddAndEditFencesZoneBaseActivity :
} }
} }
/**
* 发送围栏数据
*/
private fun sendFenceData() {
mPetBean?.apply {
SRBleUtil.instance.isConnectBleSendFenceData(macID, mFencesBean)
}
}
/** /**
* 修改成功提示 * 修改成功提示
*/ */
@@ -760,24 +777,18 @@ open class AddAndEditFencesZoneBaseActivity :
when (mFencesBean.fenceShapeType) { when (mFencesBean.fenceShapeType) {
ConstantInt.CircleShapeType -> { ConstantInt.CircleShapeType -> {
mFencesBean.radius = Utils.roundOffToInt(distances[0].toDouble()) mFencesBean.radius = Utils.roundOffToInt(distances[0].toDouble())
// val radiusStr = Util.metricConvertUnits( val r = Util.metricConvertUnits(distances[0].toFloat(), ConstantInt.Type3, 2)
// mContext, distances[0].toFloat(), ConstantInt.Type3, 2 val radiusStr = Utils.roundOffToInt(r.toDouble()).toString() + mDistanceUnit
// ).toString() + mDistanceUnit
val radiusStr = mFencesBean.radius.toString() + mDistanceUnit
mViewBinding.fencesZoneCircleView.setShowDisDistance(radiusStr) mViewBinding.fencesZoneCircleView.setShowDisDistance(radiusStr)
} }
ConstantInt.RectangleShapeType -> { ConstantInt.RectangleShapeType -> {
mFencesBean.longDistance = Utils.roundOffToInt(distances[0].toDouble()) mFencesBean.longDistance = Utils.roundOffToInt(distances[0].toDouble())
mFencesBean.shortDistance = Utils.roundOffToInt(distances[1].toDouble()) mFencesBean.shortDistance = Utils.roundOffToInt(distances[1].toDouble())
// val longStr = Util.metricConvertUnits( val l = Util.metricConvertUnits(distances[0].toFloat(), ConstantInt.Type3, 2)
// mContext, distances[0].toFloat(), ConstantInt.Type3, 2 val s = Util.metricConvertUnits(distances[1].toFloat(), ConstantInt.Type3, 2)
// ).toString() + mDistanceUnit val longStr = Utils.roundOffToInt(l.toDouble()).toString() + mDistanceUnit
// val shortStr = Util.metricConvertUnits( val shortStr = Utils.roundOffToInt(s.toDouble()).toString() + mDistanceUnit
// mContext, distances[0].toFloat(), ConstantInt.Type3, 2
// ).toString() + mDistanceUnit
val longStr = mFencesBean.longDistance.toString() + mDistanceUnit
val shortStr = mFencesBean.shortDistance.toString() + mDistanceUnit
mViewBinding.fencesZoneRectView.setShowDisDistance(longStr, shortStr) mViewBinding.fencesZoneRectView.setShowDisDistance(longStr, shortStr)
} }

View File

@@ -22,6 +22,7 @@ import com.abbidot.tracker.databinding.ActivityPreviewFencesZoneBinding
import com.abbidot.tracker.ui.common.map.PreviewFencesZoneCommon import com.abbidot.tracker.ui.common.map.PreviewFencesZoneCommon
import com.abbidot.tracker.util.Util import com.abbidot.tracker.util.Util
import com.abbidot.tracker.util.ViewUtil import com.abbidot.tracker.util.ViewUtil
import com.abbidot.tracker.util.bluetooth.SRBleUtil
import com.abbidot.tracker.vm.FencesManageViewModel import com.abbidot.tracker.vm.FencesManageViewModel
import com.abbidot.tracker.vm.FencesMapViewModel import com.abbidot.tracker.vm.FencesMapViewModel
import com.daimajia.androidanimations.library.Techniques import com.daimajia.androidanimations.library.Techniques
@@ -154,6 +155,7 @@ class PreviewFencesZoneActivity :
mFencesManageViewModel.getFenceList( mFencesManageViewModel.getFenceList(
this@PreviewFencesZoneActivity, mCurrentDeviceId this@PreviewFencesZoneActivity, mCurrentDeviceId
) )
sendFenceData()
} }
} }
}) })
@@ -163,6 +165,9 @@ class PreviewFencesZoneActivity :
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
isCurrentActivityDelete = true isCurrentActivityDelete = true
//删除蓝牙标志
mCurrentFences?.isOn = ConstantInt.Type2
sendFenceData()
XEventBus.post(EventName.DeleteFences) XEventBus.post(EventName.DeleteFences)
showToast(R.string.txt_delete_success, true, gravity = Gravity.CENTER) showToast(R.string.txt_delete_success, true, gravity = Gravity.CENTER)
} }
@@ -182,6 +187,18 @@ class PreviewFencesZoneActivity :
} }
} }
/**
* 发送围栏数据
*/
private fun sendFenceData() {
mPetBean?.apply {
mCurrentFences?.apply {
SRBleUtil.instance.isConnectBleSendFenceData(macID, this)
}
}
}
/** /**
* 设置当前围栏的信息 * 设置当前围栏的信息
*/ */

View File

@@ -137,14 +137,14 @@ class PetHeightActivity : BaseActivity<ActivityPetHeightBinding>(ActivityPetHeig
"${mViewBinding.npDialogPetHeightTens.value}.${mViewBinding.npDialogPetHeightUnit.value}" "${mViewBinding.npDialogPetHeightTens.value}.${mViewBinding.npDialogPetHeightUnit.value}"
if (isFirstBind) { if (isFirstBind) {
mPetBean?.apply { mPetBean?.apply {
height = Util.convertMetricUnits(value.toFloat(), ConstantInt.Type0) height = Util.convertMetricUnits(value.toFloat(), ConstantInt.Type0,4)
val intent = Intent(mContext, PetWeightActivity::class.java) val intent = Intent(mContext, PetWeightActivity::class.java)
intent.putExtra(ConstantString.Pet, this) intent.putExtra(ConstantString.Pet, this)
intent.putExtra(ConstantString.isFirstBind, isFirstBind) intent.putExtra(ConstantString.isFirstBind, isFirstBind)
startActivity(intent) startActivity(intent)
} }
} else { } else {
// val petHeight = Util.convertMetricUnits(mContext, value.toFloat(), ConstantInt.Type0) // val petHeight = Util.convertMetricUnits(mContext, value.toFloat(), ConstantInt.Type0,4)
val intent = Intent() val intent = Intent()
intent.putExtra(ConstantString.PetHeight, value.toFloat()) intent.putExtra(ConstantString.PetHeight, value.toFloat())
setResult(ResultCode.ResultCode_2, intent) setResult(ResultCode.ResultCode_2, intent)

View File

@@ -424,13 +424,13 @@ class PetProfileActivity :
//接收身高设置页面的值 //接收身高设置页面的值
it.data?.extras?.getFloat(ConstantString.PetHeight)?.apply { it.data?.extras?.getFloat(ConstantString.PetHeight)?.apply {
mViewBinding.ilPetProfileHeight.etInputContent.setText("$this") mViewBinding.ilPetProfileHeight.etInputContent.setText("$this")
mPetBean?.height = Util.convertMetricUnits(this, ConstantInt.Type0) mPetBean?.height = Util.convertMetricUnits(this, ConstantInt.Type0,4)
} }
} else if (it.resultCode == ResultCode.ResultCode_3) { } else if (it.resultCode == ResultCode.ResultCode_3) {
//接收体重设置页面的值 //接收体重设置页面的值
it.data?.extras?.getFloat(ConstantString.PetWeight)?.apply { it.data?.extras?.getFloat(ConstantString.PetWeight)?.apply {
mViewBinding.ilPetProfileWeight.etInputContent.setText("$this") mViewBinding.ilPetProfileWeight.etInputContent.setText("$this")
mPetBean?.weight = Util.convertMetricUnits(this, ConstantInt.Type1) mPetBean?.weight = Util.convertMetricUnits(this, ConstantInt.Type1,4)
} }
} }
} }
@@ -502,7 +502,7 @@ class PetProfileActivity :
if (any is String) { if (any is String) {
mViewBinding.ilPetProfileWeight.etInputContent.setText(any) mViewBinding.ilPetProfileWeight.etInputContent.setText(any)
weight = Util.convertMetricUnits( weight = Util.convertMetricUnits(
any.toFloat(), ConstantInt.Type1 any.toFloat(), ConstantInt.Type1,4
) )
} }
} }

View File

@@ -119,14 +119,14 @@ class PetWeightActivity : BaseActivity<ActivityPetWeightBinding>(ActivityPetWeig
"${mViewBinding.npSetPetWeightTens.value}.${mViewBinding.npSetPetWeightUnit.value}" "${mViewBinding.npSetPetWeightTens.value}.${mViewBinding.npSetPetWeightUnit.value}"
if (isFirstBind) { if (isFirstBind) {
mPetBean?.apply { mPetBean?.apply {
weight = Util.convertMetricUnits(value.toFloat(), ConstantInt.Type1) weight = Util.convertMetricUnits(value.toFloat(), ConstantInt.Type1,4)
val intent = Intent(mContext, FirstPetProfileActivity::class.java) val intent = Intent(mContext, FirstPetProfileActivity::class.java)
intent.putExtra(ConstantString.Pet, this) intent.putExtra(ConstantString.Pet, this)
intent.putExtra(ConstantString.isFirstBind, isFirstBind) intent.putExtra(ConstantString.isFirstBind, isFirstBind)
startActivity(intent) startActivity(intent)
} }
} else { } else {
// val petWeight = Util.convertMetricUnits(mContext, value.toFloat(), ConstantInt.Type1) // val petWeight = Util.convertMetricUnits(mContext, value.toFloat(), ConstantInt.Type1,4)
val intent = Intent() val intent = Intent()
intent.putExtra(ConstantString.PetWeight, value.toFloat()) intent.putExtra(ConstantString.PetWeight, value.toFloat())
setResult(ResultCode.ResultCode_3, intent) setResult(ResultCode.ResultCode_3, intent)

View File

@@ -55,6 +55,10 @@ class SubscriptionHistoryActivity :
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
it.getOrNull()?.let { list -> it.getOrNull()?.let { list ->
if (mSubscriptionsOrderList.size > 0) {
mHistoryAdapter.notifyItemRangeRemoved(0, mSubscriptionsOrderList.size)
mSubscriptionsOrderList.clear()
}
for (l in list) { for (l in list) {
mSubscriptionsOrderList.add(l) mSubscriptionsOrderList.add(l)
if (l.annualCareType == ConstantInt.Type1) { if (l.annualCareType == ConstantInt.Type1) {

View File

@@ -242,7 +242,7 @@ class RouteV2Fragment : BaseFragment<FragmentRouteV2Binding>(FragmentRouteV2Bind
// getString(R.string.map_current_update_time), // getString(R.string.map_current_update_time),
// DateUtils.getRelativeTimeSpanString(timeStamp * 1000) // DateUtils.getRelativeTimeSpanString(timeStamp * 1000)
// ) // )
val timeString = Utils.formatTime(timeStamp * 1000, Utils.DATE_FORMAT_PATTERN_EN6) val timeString = Utils.formatTime(timeStamp * 1000, Utils.DATE_FORMAT_PATTERN_EN10)
//更新位置时间 //更新位置时间
dayTime = timeString dayTime = timeString

View File

@@ -91,12 +91,9 @@ class CreditCardPaymentFragment : BaseFragment<FragmentCreditCardPaymentBinding>
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) { viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
val list = MyDatabase.creditCardDao().findAll(MyDatabase.CreditCardTableName) val list = MyDatabase.creditCardDao().findAll(MyDatabase.CreditCardTableName)
list?.let { list?.let {
if (it.isNotEmpty()) mActivity!!.runOnUiThread { mActivity?.runOnUiThread {
val sortedByList = list.sortedByDescending { l -> l.isPrimary }.toMutableList() val sortedByList = list.sortedByDescending { l -> l.isPrimary }.toMutableList()
//卡管理 不需要点击效果 setCheckAndPrimaryState(sortedByList)
if (null != mPaymentMethodActivity.mOrderBean) {
setCheckAndPrimaryState(sortedByList)
}
mCreditCardAdapter.setData(sortedByList, true) mCreditCardAdapter.setData(sortedByList, true)
} }
} }
@@ -150,22 +147,30 @@ class CreditCardPaymentFragment : BaseFragment<FragmentCreditCardPaymentBinding>
} }
private fun setCheckAndPrimaryState(list: MutableList<CreditCardBean>) { private fun setCheckAndPrimaryState(list: MutableList<CreditCardBean>) {
if (list.size == 0) return if (list.size == 0) {
var haveCheck = false mViewBinding.apply {
for (l in list) { tvCreditCardPaymentChoose.visibility = View.GONE
if (l.checked) { btnCreditCardPaymentAdd.visibility = View.GONE
haveCheck = true
break
} }
return
} }
if (!haveCheck) { //卡管理 不需要点击效果
list[0].checked = true if (null == mPaymentMethodActivity.mOrderBean) {
mViewBinding.btnMakePaymentCreditCard.visibility = View.GONE
} else {
var haveCheck = false
for (l in list) {
if (l.checked) {
haveCheck = true
break
}
}
if (!haveCheck) {
list[0].checked = true
}
mViewBinding.btnMakePaymentCreditCard.visibility = View.VISIBLE
} }
mViewBinding.apply { mViewBinding.apply {
btnMakePaymentCreditCard.visibility =
if (null == mPaymentMethodActivity.mOrderBean) View.GONE
else View.VISIBLE
tvCreditCardPaymentChoose.visibility = View.VISIBLE tvCreditCardPaymentChoose.visibility = View.VISIBLE
btnCreditCardPaymentAdd.visibility = View.VISIBLE btnCreditCardPaymentAdd.visibility = View.VISIBLE
} }

View File

@@ -1,7 +1,9 @@
package com.abbidot.tracker.util.bluetooth package com.abbidot.tracker.util.bluetooth
import android.text.TextUtils import android.text.TextUtils
import com.abbidot.tracker.bean.FencesBean
import com.abbidot.tracker.bean.WiFiZoneBean import com.abbidot.tracker.bean.WiFiZoneBean
import com.abbidot.tracker.constant.ConstantInt
import java.util.TimeZone import java.util.TimeZone
import kotlin.experimental.xor import kotlin.experimental.xor
@@ -73,6 +75,17 @@ class SRBleCmdUtil private constructor() {
return calcCrc8(data) return calcCrc8(data)
} }
/**
* 将十六进制字符串转换为字节数组
*/
private fun hexStringToByteArray(hexString: String): ByteArray {
require(hexString.length % 2 == 0) { "十六进制字符串长度必须为偶数" }
return ByteArray(hexString.length / 2) { i ->
val startIndex = i * 2
hexString.substring(startIndex, startIndex + 2).toInt(16).toByte()
}
}
/** /**
* 长整型转换高低4个字节 * 长整型转换高低4个字节
*/ */
@@ -294,5 +307,40 @@ class SRBleCmdUtil private constructor() {
val byteArray = byteArrayOf(0x1A, writeAndRed.toByte(), status.toByte()) val byteArray = byteArrayOf(0x1A, writeAndRed.toByte(), status.toByte())
return getCrc8Cmd(byteArray) return getCrc8Cmd(byteArray)
} }
/**
* 围栏设置
*/
fun setFences(fencesBean: FencesBean): ByteArray {
var byteArray = byteArrayOf(0x13, CMD_WRITE.toByte())
fencesBean.apply {
val fenceIdByteArray = hexStringToByteArray(fenceId.takeLast(8))
byteArray = byteArray.plus(fenceIdByteArray)
byteArray = byteArray.plus(
byteArrayOf(
isOn.toByte(), fenceType.toByte(), fenceShapeType.toByte()
)
)
if (fenceShapeType == ConstantInt.Type1) {
byteArray = byteArray.plus(longTo4ByteArray((longitudeCenter * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeCenter * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((radius.toLong())))
} else {
byteArray = byteArray.plus(longTo4ByteArray((longitudeA * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeA * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((longitudeB * 1000000L).toLong()))
}
byteArray = byteArray.plus(longTo4ByteArray((latitudeB * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((longitudeC * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeC * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((longitudeD * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeD * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((longitudeE * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeE * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((longitudeF * 1000000L).toLong()))
byteArray = byteArray.plus(longTo4ByteArray((latitudeF * 1000000L).toLong()))
}
return getCrc8Cmd(byteArray)
}
} }

View File

@@ -16,10 +16,12 @@ import com.abbidot.baselibrary.eventbus.XEventBus
import com.abbidot.baselibrary.util.AppUtils import com.abbidot.baselibrary.util.AppUtils
import com.abbidot.baselibrary.util.LogUtil import com.abbidot.baselibrary.util.LogUtil
import com.abbidot.tracker.bean.BleTrackDeviceBean import com.abbidot.tracker.bean.BleTrackDeviceBean
import com.abbidot.tracker.bean.FencesBean
import com.abbidot.tracker.bean.ReceiveDeviceData import com.abbidot.tracker.bean.ReceiveDeviceData
import com.abbidot.tracker.util.Util import com.abbidot.tracker.util.Util
import com.clj.fastble.BleManager import com.clj.fastble.BleManager
import com.clj.fastble.callback.BleGattCallback import com.clj.fastble.callback.BleGattCallback
import com.clj.fastble.callback.BleMtuChangedCallback
import com.clj.fastble.callback.BleNotifyCallback import com.clj.fastble.callback.BleNotifyCallback
import com.clj.fastble.callback.BleRssiCallback import com.clj.fastble.callback.BleRssiCallback
import com.clj.fastble.callback.BleWriteCallback import com.clj.fastble.callback.BleWriteCallback
@@ -27,7 +29,6 @@ import com.clj.fastble.data.BleDevice
import com.clj.fastble.data.BleScanState import com.clj.fastble.data.BleScanState
import com.clj.fastble.exception.BleException import com.clj.fastble.exception.BleException
import com.clj.fastble.utils.HexUtil import com.clj.fastble.utils.HexUtil
import com.hjq.toast.Toaster
import java.util.UUID import java.util.UUID
@@ -308,7 +309,7 @@ class SRBleUtil private constructor() {
) { ) {
LogUtil.d("send cmd:" + HexUtil.formatHexString(data, true)) LogUtil.d("send cmd:" + HexUtil.formatHexString(data, true))
BleManager.getInstance() BleManager.getInstance()
.write(bleDevice, uuidService, uuidWrite, data, object : BleWriteCallback() { .write(bleDevice, uuidService, uuidWrite, data, false, object : BleWriteCallback() {
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) { override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
LogUtil.e( LogUtil.e(
"writeData onWriteSuccess data:" + HexUtil.formatHexString(data, true) "writeData onWriteSuccess data:" + HexUtil.formatHexString(data, true)
@@ -403,7 +404,7 @@ class SRBleUtil private constructor() {
} }
/** /**
* 发送参数同步提醒消息 0x017 * 发送参数同步提醒消息 0x17
*/ */
fun isConnectBleSendNotifyData(mac: String) { fun isConnectBleSendNotifyData(mac: String) {
if (TextUtils.isEmpty(mac)) { if (TextUtils.isEmpty(mac)) {
@@ -419,6 +420,25 @@ class SRBleUtil private constructor() {
} }
} }
/**
* 发送围栏设置 0x13
*/
fun isConnectBleSendFenceData(mac: String, fencesBean: FencesBean) {
if (TextUtils.isEmpty(mac)) {
return
}
if (BleManager.getInstance().isConnected(mac)) {
val trackDeviceBean = getConnectMacDevice(mac)
trackDeviceBean?.let {
writeData(
it.bleDevice, SRBleCmdUtil.instance.setFences(fencesBean)
)
}
}
}
/** /**
*发送设备开启关闭led蓝牙指令 *发送设备开启关闭led蓝牙指令
*/ */

Some files were not shown because too many files have changed in this diff Show More