diff --git a/Examples/MapTilerMobileDemo/app/src/main/java/com/maptilerdemo/maptilermobiledemo/MainActivity.kt b/Examples/MapTilerMobileDemo/app/src/main/java/com/maptilerdemo/maptilermobiledemo/MainActivity.kt
index c980222..3cf9294 100644
--- a/Examples/MapTilerMobileDemo/app/src/main/java/com/maptilerdemo/maptilermobiledemo/MainActivity.kt
+++ b/Examples/MapTilerMobileDemo/app/src/main/java/com/maptilerdemo/maptilermobiledemo/MainActivity.kt
@@ -7,6 +7,12 @@ import androidx.activity.enableEdgeToEdge
import androidx.compose.material3.MaterialTheme
import com.maptiler.maptilersdk.MTConfig
+// Classic Map View Imports
+// import com.maptiler.maptilersdk.map.MTMapOptions
+// import com.maptiler.maptilersdk.map.MTMapViewClassic
+// import com.maptiler.maptilersdk.map.MTMapViewController
+// import com.maptiler.maptilersdk.map.style.MTMapReferenceStyle
+
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -20,4 +26,21 @@ class MainActivity : ComponentActivity() {
}
}
}
+
+ // Classic Map View Example using XML Layout
+ // Implementing main_activity_layout.xml
+
+// private lateinit var mapView: MTMapViewClassic
+//
+// override fun onCreate(savedInstanceState: Bundle?) {
+// super.onCreate(savedInstanceState)
+//
+// MTConfig.setAPIKey(BuildConfig.MAPTILER_API_KEY)
+// val mapController = MTMapViewController(baseContext)
+// enableEdgeToEdge()
+// setContentView(R.layout.main_activity_layout)
+//
+// mapView = findViewById(R.id.classicMapView)
+// mapView.initialize(MTMapReferenceStyle.SATELLITE, MTMapOptions(), mapController)
+// }
}
diff --git a/Examples/MapTilerMobileDemo/app/src/main/res/layout/main_activity_layout.xml b/Examples/MapTilerMobileDemo/app/src/main/res/layout/main_activity_layout.xml
new file mode 100644
index 0000000..4e38498
--- /dev/null
+++ b/Examples/MapTilerMobileDemo/app/src/main/res/layout/main_activity_layout.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewClassic.kt b/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewClassic.kt
new file mode 100644
index 0000000..e9fd4e1
--- /dev/null
+++ b/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewClassic.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2025, MapTiler
+ * All rights reserved.
+ * SPDX-License-Identifier: BSD 3-Clause
+ */
+
+package com.maptiler.maptilersdk.map
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.webkit.WebChromeClient
+import android.webkit.WebSettings
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import android.widget.FrameLayout
+import com.maptiler.maptilersdk.R
+import com.maptiler.maptilersdk.bridge.MTBridge
+import com.maptiler.maptilersdk.bridge.WebViewExecutor.Constants
+import com.maptiler.maptilersdk.logging.MTLogType
+import com.maptiler.maptilersdk.logging.MTLogger
+import com.maptiler.maptilersdk.map.style.MTMapReferenceStyle
+import com.maptiler.maptilersdk.map.style.MTMapStyleVariant
+import com.maptiler.maptilersdk.map.style.MTStyle
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+class MTMapViewClassic(
+ context: Context,
+ attrs: AttributeSet,
+) : FrameLayout(context, attrs) {
+ private lateinit var webView: WebView
+
+ @Suppress("PropertyName")
+ private lateinit var _referenceStyle: MTMapReferenceStyle
+
+ @Suppress("PropertyName")
+ private lateinit var _controller: MTMapViewController
+
+ @Suppress("PropertyName")
+ private lateinit var _options: MTMapOptions
+
+ @Suppress("PropertyName")
+ private var _styleVariant: MTMapStyleVariant? = null
+
+ val scope = CoroutineScope(Dispatchers.Default)
+
+ internal var bridge: MTBridge? = null
+
+ fun initialize(
+ referenceStyle: MTMapReferenceStyle,
+ options: MTMapOptions,
+ controller: MTMapViewController,
+ styleVariant: MTMapStyleVariant? = null,
+ ) {
+ this._referenceStyle = referenceStyle
+ this._options = options
+ this._controller = controller
+ this._styleVariant = styleVariant
+
+ _controller.bind(scope)
+ _controller.options = options
+
+ val style = MTStyle(referenceStyle, styleVariant)
+ _controller.style = style
+
+ val rootView = LayoutInflater.from(context).inflate(R.layout.mtmapview_layout, this, true)
+ webView = rootView.findViewById(R.id.map)
+
+ webView.apply {
+ settings.javaScriptEnabled = true
+ settings.allowFileAccess = true
+ settings.domStorageEnabled = true
+ settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
+ settings.useWideViewPort = true
+ settings.loadWithOverviewMode = true
+
+ isVerticalScrollBarEnabled = false
+
+ webChromeClient = WebChromeClient()
+ webViewClient =
+ object : WebViewClient() {
+ override fun onPageFinished(
+ view: WebView?,
+ url: String?,
+ ) {
+ scope.launch(Dispatchers.Main) {
+ try {
+ _controller.initializeMap()
+ } catch (error: Exception) {
+ MTLogger.log("Map Init error $error", MTLogType.ERROR)
+ }
+ }
+ }
+ }
+
+ loadUrl("file:///android_asset/${Constants.JSResources.MAPTILER_MAP}.${Constants.JSResources.HTML_EXTENSION}")
+ }
+
+ _controller.setWebView(webView)
+ }
+}
diff --git a/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt b/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt
index 1a38b22..c75af39 100644
--- a/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt
+++ b/MapTilerSDK/src/main/java/com/maptiler/maptilersdk/map/MTMapViewController.kt
@@ -74,7 +74,7 @@ class MTMapViewController(
bridge = MTBridge(webViewExecutor)
}
- private suspend fun initializeMap() {
+ internal suspend fun initializeMap() {
val apiKey = MTConfig.getAPIKey()
if (options != null) {
@@ -101,17 +101,21 @@ class MTMapViewController(
navigableWorker = NavigableWorker(bridge!!, coroutineScope!!)
}
- fun bind(scope: CoroutineScope) {
+ internal fun bind(scope: CoroutineScope) {
coroutineScope = scope
gestureService = MTGestureService.create(coroutineScope!!, bridge!!, this)
initializeWorkers()
}
- fun destroy() {
+ internal fun destroy() {
webViewExecutor?.destroy()
}
+ internal fun setWebView(webView: WebView) {
+ webViewExecutor?.setWebView(webView)
+ }
+
internal fun getAttachableWebView(): WebView = webViewExecutor?.getAttachableWebView()!!
override fun onNavigationFinished(url: String) {
diff --git a/MapTilerSDK/src/main/res/layout/mtmapview_layout.xml b/MapTilerSDK/src/main/res/layout/mtmapview_layout.xml
new file mode 100644
index 0000000..6c02ab2
--- /dev/null
+++ b/MapTilerSDK/src/main/res/layout/mtmapview_layout.xml
@@ -0,0 +1,10 @@
+
+
+
+
+