|
@@ -9,6 +9,7 @@ import com.xplora.commonservice.BaseApplication.Companion.globalContext
|
|
|
import com.xplora.commonservice.BaseApplication.Companion.positionInfo
|
|
|
import com.xplora.commonservice.model.Config.POSITIONING_DURATION
|
|
|
import com.xplora.commonservice.model.Config.POSITIONING_STEP_THRESHOLD
|
|
|
+import com.xplora.commonservice.model.Config.POSITION_MIN_GPS_COUNT
|
|
|
import com.xplora.commonservice.model.Config.STEP_REPORT_TIME_THRESHOLD
|
|
|
import com.xplora.commonservice.model.HttpApi
|
|
|
import com.xplora.commonservice.model.NetworkType
|
|
@@ -16,7 +17,13 @@ import com.xplora.commonservice.model.http.BaseRequest
|
|
|
import com.xplora.commonservice.model.http.FcmResultReq
|
|
|
import com.xplora.commonservice.model.http.PercentReq
|
|
|
import com.xplora.commonservice.model.http.etc.GetXCoinRepo
|
|
|
-import com.xplora.commonservice.model.http.location.*
|
|
|
+import com.xplora.commonservice.model.http.location.CellLocationReq
|
|
|
+import com.xplora.commonservice.model.http.location.CellTowers
|
|
|
+import com.xplora.commonservice.model.http.location.CombainPositionReq
|
|
|
+import com.xplora.commonservice.model.http.location.GpsLocationReq
|
|
|
+import com.xplora.commonservice.model.http.location.LocationTrackingStatusReq
|
|
|
+import com.xplora.commonservice.model.http.location.MultiPositionReq
|
|
|
+import com.xplora.commonservice.model.http.location.WifiAPs
|
|
|
import com.xplora.commonservice.model.http.step.StepCountReq
|
|
|
import com.xplora.commonservice.modules.WatchStateChangeImpl.watchBaseInfo
|
|
|
import com.xplora.commonservice.modules.XPAlarmManager.cancelLiveTrackingTimer
|
|
@@ -28,7 +35,15 @@ import com.xplora.commonservice.modules.http.XPHttpServiceExecutor
|
|
|
import com.xplora.commonservice.modules.service.WeatherService
|
|
|
import com.xplora.commonservice.utils.Logger
|
|
|
import io.reactivex.schedulers.Schedulers
|
|
|
-import kotlinx.coroutines.*
|
|
|
+import kotlinx.coroutines.Deferred
|
|
|
+import kotlinx.coroutines.DelicateCoroutinesApi
|
|
|
+import kotlinx.coroutines.Dispatchers
|
|
|
+import kotlinx.coroutines.GlobalScope
|
|
|
+import kotlinx.coroutines.Job
|
|
|
+import kotlinx.coroutines.async
|
|
|
+import kotlinx.coroutines.delay
|
|
|
+import kotlinx.coroutines.launch
|
|
|
+import kotlinx.coroutines.withContext
|
|
|
|
|
|
@OptIn(DelicateCoroutinesApi::class)
|
|
|
class Position {
|
|
@@ -83,6 +98,8 @@ class Position {
|
|
|
private var preSent = 0
|
|
|
private val multiplePositions = ArrayList<CombainPositionReq>()
|
|
|
|
|
|
+ private var isLastReportGpsCount = 0
|
|
|
+
|
|
|
fun executePosition(pushId: String?, mode: Int) {
|
|
|
Logger.d(TAG, "begin executePosition $mode")
|
|
|
if (pushId != null) {
|
|
@@ -143,21 +160,21 @@ class Position {
|
|
|
}
|
|
|
if (watchBaseInfo.networkType == NetworkType.NETWORK_NO) {
|
|
|
Logger.w(TAG, "no network, return")
|
|
|
- if(mode != MODE_ONCE) updateMode(mode)
|
|
|
+ if (mode != MODE_ONCE) updateMode(mode)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
val step = queryCurrentStep()
|
|
|
val cellInfo = CellManager.cellInfo ?: run {
|
|
|
Logger.w(TAG, "no cellInfo, return")
|
|
|
- if(mode != MODE_ONCE) updateMode(mode)
|
|
|
+ if (mode != MODE_ONCE) updateMode(mode)
|
|
|
return
|
|
|
}
|
|
|
val cid = if (cellInfo.values.isNotEmpty() && cellInfo.values.first().isNotEmpty()) {
|
|
|
cellInfo.values.first().first().id
|
|
|
} else {
|
|
|
Logger.w(TAG, "no cid, return")
|
|
|
- if(mode != MODE_ONCE) updateMode(mode)
|
|
|
+ if (mode != MODE_ONCE) updateMode(mode)
|
|
|
return
|
|
|
}
|
|
|
/* val cid = cellInfo.values.first().first().id ?: run {
|
|
@@ -344,7 +361,8 @@ class Position {
|
|
|
rad = it.rad
|
|
|
}
|
|
|
shouldReport = true
|
|
|
- }?:let {
|
|
|
+ isLastReportGpsCount++
|
|
|
+ } ?: let {
|
|
|
req.apply {
|
|
|
gps = false
|
|
|
}
|
|
@@ -357,8 +375,15 @@ class Position {
|
|
|
}
|
|
|
shouldReport = true
|
|
|
}
|
|
|
- if(shouldReport) {
|
|
|
+
|
|
|
+ if (isLastReportGpsCount > POSITION_MIN_GPS_COUNT && !req.gps) {
|
|
|
+ shouldReport = false
|
|
|
+ isLastReportGpsCount = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ if (shouldReport) {
|
|
|
reportPositionResult(pushId, req, aps, cellInfo, mode)
|
|
|
+ if (!req.gps) isLastReportGpsCount = 0
|
|
|
} else {
|
|
|
if (mode == MODE_ONCE) {
|
|
|
if (now - watchBaseInfo.lastReportStepTime >= STEP_REPORT_TIME_THRESHOLD) {
|
|
@@ -372,7 +397,10 @@ class Position {
|
|
|
refreshXCoin()
|
|
|
Logger.w(TAG, "position mode once, no gps no wifi/cell, report steps")
|
|
|
}
|
|
|
- Logger.w(TAG, "position mode once, no gps no wifi/cell, STEP_REPORT_TIME_THRESHOLD not reach, report nothing")
|
|
|
+ Logger.w(
|
|
|
+ TAG,
|
|
|
+ "position mode once, no gps no wifi/cell, STEP_REPORT_TIME_THRESHOLD not reach, report nothing"
|
|
|
+ )
|
|
|
} else {
|
|
|
Logger.w(TAG, "position mode tracking, no gps no wifi/cell, report nothing")
|
|
|
}
|