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

99 lines
2.3 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) {
2018-06-11 18:57:33 +02:00
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) {
2018-07-13 14:53:58 +02:00
val chatIdsToDuration = app.settings.getChatIdsToDuration()
if (chatIdsToDuration.isNotEmpty()) {
app.telegramHelper.sendLiveLocationMessage(chatIdsToDuration, location.latitude, location.longitude)
2018-06-11 18:57:33 +02:00
}
lastLocationMessageSentTime = System.currentTimeMillis()
}
refreshNotification()
}
fun startSharingLocation() {
if (!sharingLocation) {
sharingLocation = true
app.startMyLocationService()
refreshNotification()
} else {
app.forceUpdateMyLocation()
2018-06-11 18:57:33 +02:00
}
}
fun stopSharingLocation() {
if (sharingLocation) {
sharingLocation = false
app.stopMyLocationService()
lastLocation = null
lastTimeInMillis = 0L
distance = 0
duration = 0
refreshNotification()
}
}
fun pauseSharingLocation() {
sharingLocation = false
app.stopMyLocationService()
lastLocation = null
lastTimeInMillis = 0L
refreshNotification()
}
private fun refreshNotification() {
app.runInUIThread {
app.notificationHelper.refreshNotification(NotificationType.LOCATION)
}
}
companion object {
// min and max values for the UI
const val MIN_LOCATION_MESSAGE_LIVE_PERIOD_SEC = TelegramHelper.MIN_LOCATION_MESSAGE_LIVE_PERIOD_SEC - 1
const val MAX_LOCATION_MESSAGE_LIVE_PERIOD_SEC = TelegramHelper.MAX_LOCATION_MESSAGE_LIVE_PERIOD_SEC + 1
}
}