open geolink on click + minor refactoring

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2021-05-28 12:43:56 +02:00 committed by Andy Scherzinger
parent 04fb57df7a
commit 7540e57dd8
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
2 changed files with 58 additions and 27 deletions

View File

@ -14,28 +14,29 @@
</style>
</head>
<body>
<div id="map"></div>
<div id="map" ></div>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<script>
var queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
var lat = urlParams.get('lat')
var lon = urlParams.get('lon')
var name = urlParams.get('name')
var locationLat = urlParams.get('locationLat')
var locationLon = urlParams.get('locationLon')
var locationGeoLink = urlParams.get('locationGeoLink')
var mapProviderUrl = urlParams.get('mapProviderUrl')
var mapProviderAttribution = urlParams.get('mapProviderAttribution')
var map = L.map('map', { zoomControl: false }).setView([lat, lon], 13);
var map = L.map('map', {
zoomControl: false,
scrollWheelZoom: false
}).setView([locationLat, locationLon], 13);
map.dragging.disable();
L.tileLayer(mapProviderUrl, {
attribution: '&copy; ' + mapProviderAttribution
}).addTo(map);
L.marker([lat, lon]).addTo(map);
L.marker([locationLat, locationLon]).addTo(map);
</script>
</body>
</html>

View File

@ -5,15 +5,18 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.TextView
import android.widget.Toast
import autodagger.AutoInjector
import butterknife.BindView
import butterknife.ButterKnife
import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.models.json.chat.ChatMessage
import com.stfalcon.chatkit.messages.MessageHolders
import java.net.URLEncoder
@ -25,10 +28,13 @@ class LocationMessageViewHolder(incomingView: View) : MessageHolders
private val TAG = "LocationMessageViewHolder"
var lon : String? = ""
var lat : String? = ""
var name : String? = ""
var id : String? = ""
var mapProviderUrl: String = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
var mapProviderAttribution: String = "OpenStreetMap contributors"
var locationLon: String? = ""
var locationLat: String? = ""
var locationName: String? = ""
var locationGeoLink: String? = ""
@JvmField
@BindView(R.id.locationText)
@ -49,9 +55,10 @@ class LocationMessageViewHolder(incomingView: View) : MessageHolders
)
}
@SuppressLint("SetTextI18n", "SetJavaScriptEnabled")
@SuppressLint("SetTextI18n", "SetJavaScriptEnabled", "ClickableViewAccessibility")
override fun onBind(message: ChatMessage) {
super.onBind(message)
sharedApplication!!.componentApplication.inject(this)
// if (message.messageType == ChatMessage.MessageType.SINGLE_NC_GEOLOCATION_MESSAGE) {
// Log.d(TAG, "handle geolocation here")
// messageText!!.text = "geolocation..."
@ -60,11 +67,10 @@ class LocationMessageViewHolder(incomingView: View) : MessageHolders
for (key in message.messageParameters.keys) {
val individualHashMap: Map<String, String> = message.messageParameters[key]!!
if (individualHashMap["type"] == "geo-location") {
lon = individualHashMap["longitude"]
lat = individualHashMap["latitude"]
name = individualHashMap["name"]
id = individualHashMap["id"]
Log.d(TAG, "lon $lon lat $lat name $name id $id")
locationLon = individualHashMap["longitude"]
locationLat = individualHashMap["latitude"]
locationName = individualHashMap["name"]
locationGeoLink = individualHashMap["id"]
}
}
}
@ -74,7 +80,8 @@ class LocationMessageViewHolder(incomingView: View) : MessageHolders
webview?.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
return if (url != null && (url.startsWith("http://") || url.startsWith("https://"))
) {
view?.context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
true
} else {
@ -84,15 +91,38 @@ class LocationMessageViewHolder(incomingView: View) : MessageHolders
}
val urlStringBuffer = StringBuffer("file:///android_asset/leafletMapMessagePreview.html")
urlStringBuffer.append("?mapProviderUrl=" + URLEncoder.encode("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}" +
".png"))
urlStringBuffer.append("&mapProviderAttribution=" + URLEncoder.encode("<a href=\"https://www.openstreetmap" +
".org/copyright\">OpenStreetMap</a> contributors"))
urlStringBuffer.append("&lat=" + URLEncoder.encode(lat))
urlStringBuffer.append("&lon=" + URLEncoder.encode(lon))
urlStringBuffer.append("&name=" + URLEncoder.encode(name))
urlStringBuffer.append("?mapProviderUrl=" + URLEncoder.encode(mapProviderUrl))
urlStringBuffer.append("&mapProviderAttribution=" + URLEncoder.encode(mapProviderAttribution))
urlStringBuffer.append("&locationLat=" + URLEncoder.encode(locationLat))
urlStringBuffer.append("&locationLon=" + URLEncoder.encode(locationLon))
urlStringBuffer.append("&locationName=" + URLEncoder.encode(locationName))
urlStringBuffer.append("&locationGeoLink=" + URLEncoder.encode(locationGeoLink))
webview?.loadUrl(urlStringBuffer.toString())
webview?.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_UP -> openGeoLink()
}
return v?.onTouchEvent(event) ?: true
}
})
}
private fun openGeoLink() {
if (!locationGeoLink.isNullOrEmpty()) {
val geoLinkWithMarker = addMarkerToGeoLink(locationGeoLink!!)
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(geoLinkWithMarker))
context!!.startActivity(browserIntent)
} else {
Toast.makeText(context, R.string.nc_common_error_sorry, Toast.LENGTH_LONG).show()
Log.e(TAG, "locationGeoLink was null or empty")
}
}
private fun addMarkerToGeoLink(locationGeoLink: String): String {
return locationGeoLink.replace("geo:", "geo:0,0?q=")
}
}