OsmAnd/OsmAnd-telegram/src/net/osmand/telegram/helpers/ShareLocationHelper.kt

90 lines
2.4 KiB
Kotlin
Raw Normal View History

package net.osmand.telegram.helpers
import net.osmand.Location
import net.osmand.telegram.TelegramApplication
import net.osmand.telegram.notifications.TelegramNotification.NotificationType
class ShareLocationHelper(private val app: TelegramApplication) {
companion object {
const val MAX_LOCATION_MESSAGE_LIVE_PERIOD_SEC = 60 * 60 * 24 - 1 // day
}
var sharingLocation: Boolean = false
private set
var duration: Long = 0
private set
var distance: Int = 0
private set
var lastLocationMessageSentTime: Long = 0
private var lastTimeInMillis: Long = 0L
private var lastLocation: Location? = null
set(value) {
if (lastTimeInMillis == 0L) {
lastTimeInMillis = System.currentTimeMillis()
} else {
val currentTimeInMillis = System.currentTimeMillis()
duration += currentTimeInMillis - lastTimeInMillis
lastTimeInMillis = currentTimeInMillis
}
if (lastLocation != null && value != null) {
distance += value.distanceTo(lastLocation).toInt()
}
field = value
}
fun updateLocation(location: Location?) {
lastLocation = location
if (location != null && app.isInternetConnectionAvailable) {
val shareLocationChats = app.settings.getShareLocationChats()
if (shareLocationChats.isNotEmpty()) {
2018-06-09 16:55:14 +02:00
app.telegramHelper.sendLiveLocationMessage(shareLocationChats, MAX_LOCATION_MESSAGE_LIVE_PERIOD_SEC, location.latitude, location.longitude)
}
lastLocationMessageSentTime = System.currentTimeMillis()
}
refreshNotification()
}
fun startSharingLocation() {
sharingLocation = true
app.startLocationService()
refreshNotification()
}
fun stopSharingLocation() {
sharingLocation = false
app.stopLocationService()
lastLocation = null
lastTimeInMillis = 0L
distance = 0
duration = 0
refreshNotification()
}
fun pauseSharingLocation() {
sharingLocation = false
app.stopLocationService()
lastLocation = null
lastTimeInMillis = 0L
refreshNotification()
}
private fun refreshNotification() {
app.runInUIThread {
app.notificationHelper.refreshNotification(NotificationType.SHARE_LOCATION)
}
}
}