Fix the ability to open locations from OsmAnd-Telegram on map in OsmAnd
This commit is contained in:
parent
f208ac3af6
commit
a821a872df
3 changed files with 44 additions and 17 deletions
|
@ -2,12 +2,12 @@ package net.osmand.telegram.helpers
|
|||
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.text.TextUtils
|
||||
import net.osmand.aidl.map.ALatLon
|
||||
import net.osmand.aidl.maplayer.point.AMapPoint
|
||||
import net.osmand.telegram.TelegramApplication
|
||||
import net.osmand.telegram.helpers.TelegramHelper.MessageOsmAndBotLocation
|
||||
import net.osmand.telegram.helpers.TelegramUiHelper.ListItem
|
||||
import net.osmand.telegram.utils.AndroidUtils
|
||||
import org.drinkless.td.libcore.telegram.TdApi
|
||||
import java.io.File
|
||||
|
@ -30,6 +30,25 @@ class ShowLocationHelper(private val app: TelegramApplication) {
|
|||
}
|
||||
}
|
||||
|
||||
fun showLocationOnMap(item: ListItem) {
|
||||
if (item.latLon == null) {
|
||||
return
|
||||
}
|
||||
execOsmandApi {
|
||||
osmandAidlHelper.showMapPoint(
|
||||
MAP_LAYER_ID,
|
||||
item.getMapPointId(),
|
||||
item.getVisibleName(),
|
||||
item.getVisibleName(),
|
||||
item.chatTitle,
|
||||
Color.RED,
|
||||
ALatLon(item.latLon!!.latitude, item.latLon!!.longitude),
|
||||
null,
|
||||
generatePhotoParams(item.photoPath)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun updateLocationsOnMap() {
|
||||
execOsmandApi {
|
||||
val messages = telegramHelper.getMessages()
|
||||
|
@ -50,7 +69,7 @@ class ShowLocationHelper(private val app: TelegramApplication) {
|
|||
val content = message.content
|
||||
if (chatTitle != null && content is TdApi.MessageLocation) {
|
||||
var userName = ""
|
||||
var photoUri: Uri? = null
|
||||
var photoPath: String? = null
|
||||
val user = telegramHelper.getUser(message.senderUserId)
|
||||
if (user != null) {
|
||||
userName = "${user.firstName} ${user.lastName}".trim()
|
||||
|
@ -60,20 +79,13 @@ class ShowLocationHelper(private val app: TelegramApplication) {
|
|||
if (userName.isEmpty()) {
|
||||
userName = user.phoneNumber
|
||||
}
|
||||
val photoPath = telegramHelper.getUserPhotoPath(user)
|
||||
if (!TextUtils.isEmpty(photoPath)) {
|
||||
photoUri = AndroidUtils.getUriForFile(app, File(photoPath))
|
||||
app.grantUriPermission(OsmandAidlHelper.OSMAND_PACKAGE_NAME, photoUri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
}
|
||||
photoPath = telegramHelper.getUserPhotoPath(user)
|
||||
}
|
||||
if (userName.isEmpty()) {
|
||||
userName = message.senderUserId.toString()
|
||||
}
|
||||
setupMapLayer()
|
||||
val params = mutableMapOf<String, String>()
|
||||
if (photoUri != null) {
|
||||
params[AMapPoint.POINT_IMAGE_URI_PARAM] = photoUri.toString()
|
||||
}
|
||||
val params = generatePhotoParams(photoPath)
|
||||
osmandAidlHelper.addMapPoint(MAP_LAYER_ID, "${chatTitle}_${message.senderUserId}", userName, userName,
|
||||
chatTitle, Color.RED, ALatLon(content.location.latitude, content.location.longitude), null, params)
|
||||
} else if (chatTitle != null && content is MessageOsmAndBotLocation && content.isValid()) {
|
||||
|
@ -120,6 +132,19 @@ class ShowLocationHelper(private val app: TelegramApplication) {
|
|||
}
|
||||
}
|
||||
|
||||
private fun generatePhotoParams(photoPath: String?): Map<String, String>? {
|
||||
if (TextUtils.isEmpty(photoPath)) {
|
||||
return null
|
||||
}
|
||||
val photoUri = AndroidUtils.getUriForFile(app, File(photoPath))
|
||||
app.grantUriPermission(
|
||||
OsmandAidlHelper.OSMAND_PACKAGE_NAME,
|
||||
photoUri,
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
)
|
||||
return mapOf(AMapPoint.POINT_IMAGE_URI_PARAM to photoUri.toString())
|
||||
}
|
||||
|
||||
private fun removeMapPoint(chatTitle: String, message: TdApi.Message) {
|
||||
val content = message.content
|
||||
if (content is TdApi.MessageLocation) {
|
||||
|
|
|
@ -144,6 +144,8 @@ object TelegramUiHelper {
|
|||
abstract fun canBeOpenedOnMap(): Boolean
|
||||
|
||||
abstract fun getMapPointId(): String
|
||||
|
||||
abstract fun getVisibleName(): String
|
||||
}
|
||||
|
||||
class ChatItem : ListItem() {
|
||||
|
@ -160,6 +162,8 @@ object TelegramUiHelper {
|
|||
override fun canBeOpenedOnMap() = latLon != null && !chatWithBot
|
||||
|
||||
override fun getMapPointId() = "${chatTitle}_$userId"
|
||||
|
||||
override fun getVisibleName() = chatTitle
|
||||
}
|
||||
|
||||
class LocationItem : ListItem() {
|
||||
|
@ -173,5 +177,7 @@ object TelegramUiHelper {
|
|||
val id = if (userId != 0) userId.toString() else name
|
||||
return "${chatTitle}_$id"
|
||||
}
|
||||
|
||||
override fun getVisibleName() = name
|
||||
}
|
||||
}
|
||||
|
|
|
@ -244,16 +244,14 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
|||
val openOnMapView = holder.getOpenOnMapClickView()
|
||||
|
||||
TelegramUiHelper.setupPhoto(app, holder.icon, item.photoPath, item.placeholderId)
|
||||
holder.title?.text = item.getVisibleName()
|
||||
openOnMapView?.isEnabled = canBeOpenedOnMap
|
||||
if (canBeOpenedOnMap) {
|
||||
openOnMapView?.setOnClickListener {
|
||||
if (osmandAidlHelper.isOsmandNotInstalled()) {
|
||||
showOsmAndMissingDialog()
|
||||
} else {
|
||||
// osmandAidlHelper.showLayerPointOnMap(
|
||||
// ShowLocationHelper.MAP_LAYER_ID,
|
||||
// item.getMapPointId()
|
||||
// )
|
||||
app.showLocationHelper.showLocationOnMap(item)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -278,14 +276,12 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
|||
val chatTitle = item.chatTitle
|
||||
val stateTextInd = if (settings.isShowingChatOnMap(chatTitle)) 1 else 0
|
||||
|
||||
holder.title?.text = chatTitle
|
||||
holder.description?.text = "Chat description" // FIXME
|
||||
holder.imageButton?.visibility = View.GONE
|
||||
holder.showOnMapRow?.setOnClickListener { showPopupMenu(holder, chatTitle) }
|
||||
holder.showOnMapState?.text = menuList[stateTextInd]
|
||||
holder.bottomDivider?.visibility = if (nextIsLocation) View.VISIBLE else View.GONE
|
||||
} else if (item is LocationItem && holder is ContactViewHolder) {
|
||||
holder.title?.text = item.name
|
||||
holder.description?.text = "Some description"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue