2020-03-11 14:45:49 -07:00
|
|
|
package com.geeksville.mesh.ui
|
|
|
|
|
|
2020-03-30 11:56:59 -07:00
|
|
|
import android.app.Activity
|
|
|
|
|
import android.app.Application
|
|
|
|
|
import android.os.Bundle
|
2020-03-11 14:45:49 -07:00
|
|
|
import androidx.compose.Composable
|
2020-03-30 11:56:59 -07:00
|
|
|
import androidx.compose.onCommit
|
2020-03-11 14:45:49 -07:00
|
|
|
import androidx.ui.core.ContextAmbient
|
2020-03-30 10:26:16 -07:00
|
|
|
import androidx.ui.fakeandroidview.AndroidView
|
|
|
|
|
import androidx.ui.layout.Column
|
2020-03-11 14:45:49 -07:00
|
|
|
import androidx.ui.material.MaterialTheme
|
|
|
|
|
import androidx.ui.tooling.preview.Preview
|
2020-03-30 10:26:16 -07:00
|
|
|
import com.geeksville.android.Logging
|
2020-03-11 18:13:44 -07:00
|
|
|
import com.geeksville.mesh.R
|
2020-03-30 10:26:16 -07:00
|
|
|
import com.geeksville.mesh.model.UIState
|
|
|
|
|
import com.mapbox.mapboxsdk.maps.MapView
|
2020-03-30 11:56:59 -07:00
|
|
|
import com.mapbox.mapboxsdk.maps.Style
|
2020-03-11 14:45:49 -07:00
|
|
|
|
2020-03-30 10:26:16 -07:00
|
|
|
object mapLog : Logging
|
2020-03-11 14:45:49 -07:00
|
|
|
|
2020-03-30 11:56:59 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* mapbox requires this, until compose has a nicer way of doing it, do it here
|
|
|
|
|
*/
|
|
|
|
|
private val mapLifecycleCallbacks = object : Application.ActivityLifecycleCallbacks {
|
|
|
|
|
var view: MapView? = null
|
|
|
|
|
|
|
|
|
|
override fun onActivityPaused(activity: Activity) {
|
|
|
|
|
view!!.onPause()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onActivityStarted(activity: Activity) {
|
|
|
|
|
view!!.onStart()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onActivityDestroyed(activity: Activity) {
|
|
|
|
|
view!!.onDestroy()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
|
|
|
|
|
view!!.onSaveInstanceState(outState)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onActivityStopped(activity: Activity) {
|
|
|
|
|
view!!.onStop()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Called when the Activity calls [super.onCreate()][Activity.onCreate].
|
|
|
|
|
*/
|
|
|
|
|
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onActivityResumed(activity: Activity) {
|
|
|
|
|
view!!.onResume()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2020-03-11 14:45:49 -07:00
|
|
|
@Composable
|
|
|
|
|
fun MapContent() {
|
2020-03-11 18:13:44 -07:00
|
|
|
analyticsScreen(name = "map")
|
2020-03-11 14:45:49 -07:00
|
|
|
|
|
|
|
|
val typography = MaterialTheme.typography()
|
|
|
|
|
val context = ContextAmbient.current
|
|
|
|
|
|
2020-03-30 11:56:59 -07:00
|
|
|
onCommit(AppStatus.currentScreen) {
|
|
|
|
|
onDispose {
|
|
|
|
|
// We no longer care about activity lifecycle
|
|
|
|
|
(context.applicationContext as Application).unregisterActivityLifecycleCallbacks(
|
|
|
|
|
mapLifecycleCallbacks
|
|
|
|
|
)
|
|
|
|
|
mapLifecycleCallbacks.view = null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-30 10:26:16 -07:00
|
|
|
Column {
|
|
|
|
|
AndroidView(R.layout.map_view) { view ->
|
|
|
|
|
view as MapView
|
|
|
|
|
view.onCreate(UIState.savedInstanceState)
|
2020-03-30 11:56:59 -07:00
|
|
|
|
|
|
|
|
mapLifecycleCallbacks.view = view
|
|
|
|
|
(context.applicationContext as Application).registerActivityLifecycleCallbacks(
|
|
|
|
|
mapLifecycleCallbacks
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
view.getMapAsync { map ->
|
|
|
|
|
map.setStyle(Style.OUTDOORS) {
|
|
|
|
|
// Map is set up and the style has loaded. Now you can add data or make other map adjustments
|
|
|
|
|
}
|
2020-03-30 10:26:16 -07:00
|
|
|
}
|
|
|
|
|
}
|
2020-03-11 14:45:49 -07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Preview
|
|
|
|
|
@Composable
|
|
|
|
|
fun previewMap() {
|
|
|
|
|
// another bug? It seems modaldrawerlayout not yet supported in preview
|
|
|
|
|
MaterialTheme(colors = palette) {
|
|
|
|
|
MapContent()
|
|
|
|
|
}
|
|
|
|
|
}
|