map kinda works

This commit is contained in:
geeksville 2020-03-30 11:56:59 -07:00
parent 4e7d59f775
commit ecef170004
4 changed files with 75 additions and 16 deletions

View file

@ -45,7 +45,7 @@ android {
composeOptions { composeOptions {
kotlinCompilerVersion "1.3.61-dev-withExperimentalGoogleExtensions-20200129" kotlinCompilerVersion "1.3.61-dev-withExperimentalGoogleExtensions-20200129"
kotlinCompilerExtensionVersion "0.1.0-dev06" kotlinCompilerExtensionVersion "0.1.0-dev07"
} }
} }

View file

@ -23,7 +23,6 @@ import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import androidx.annotation.LayoutRes import androidx.annotation.LayoutRes
import androidx.compose.Composable import androidx.compose.Composable
import androidx.ui.core.ContextAmbient
/** /**
* Composes an Android [View] given a layout resource [resId]. The method handles the inflation * Composes an Android [View] given a layout resource [resId]. The method handles the inflation
@ -36,14 +35,7 @@ import androidx.ui.core.ContextAmbient
@Composable @Composable
// TODO(popam): support modifiers here // TODO(popam): support modifiers here
fun AndroidView(@LayoutRes resId: Int, postInflationCallback: (View) -> Unit = { _ -> }) { fun AndroidView(@LayoutRes resId: Int, postInflationCallback: (View) -> Unit = { _ -> }) {
val context = ContextAmbient.current AndroidViewHolder(postInflationCallback = postInflationCallback, resId = resId)
val r = AndroidViewHolder(context)
r.postInflationCallback = postInflationCallback
r.resId = resId
// Hmm - how is merely creating an AndroidViewHolder sufficient to have it end up in the
// activities view hierarchy?
} }

View file

@ -1,8 +1,11 @@
package com.geeksville.mesh.ui package com.geeksville.mesh.ui
import android.app.Activity
import android.app.Application
import android.os.Bundle
import androidx.compose.Composable import androidx.compose.Composable
import androidx.compose.onCommit
import androidx.ui.core.ContextAmbient import androidx.ui.core.ContextAmbient
import androidx.ui.core.Text
import androidx.ui.fakeandroidview.AndroidView import androidx.ui.fakeandroidview.AndroidView
import androidx.ui.layout.Column import androidx.ui.layout.Column
import androidx.ui.material.MaterialTheme import androidx.ui.material.MaterialTheme
@ -11,9 +14,49 @@ import com.geeksville.android.Logging
import com.geeksville.mesh.R import com.geeksville.mesh.R
import com.geeksville.mesh.model.UIState import com.geeksville.mesh.model.UIState
import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.Style
object mapLog : Logging object mapLog : Logging
/**
* 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()
}
}
@Composable @Composable
fun MapContent() { fun MapContent() {
analyticsScreen(name = "map") analyticsScreen(name = "map")
@ -21,13 +64,30 @@ fun MapContent() {
val typography = MaterialTheme.typography() val typography = MaterialTheme.typography()
val context = ContextAmbient.current val context = ContextAmbient.current
onCommit(AppStatus.currentScreen) {
onDispose {
// We no longer care about activity lifecycle
(context.applicationContext as Application).unregisterActivityLifecycleCallbacks(
mapLifecycleCallbacks
)
mapLifecycleCallbacks.view = null
}
}
Column { Column {
Text("hi")
AndroidView(R.layout.map_view) { view -> AndroidView(R.layout.map_view) { view ->
view as MapView view as MapView
view.onCreate(UIState.savedInstanceState) view.onCreate(UIState.savedInstanceState)
view.getMapAsync {
mapLog.info("In getmap") 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
}
} }
} }
} }

View file

@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.mapbox.mapboxsdk.maps.MapView android:id="@+id/mapView"
<com.mapbox.mapboxsdk.maps.MapView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" /> mapbox:mapbox_uiZoomGestures="true"
mapbox:mapbox_uiScrollGestures="true"
mapbox:mapbox_cameraTargetLat="-32.557013"
mapbox:mapbox_cameraTargetLng="-56.149056"
mapbox:mapbox_cameraZoom="5.526846"></com.mapbox.mapboxsdk.maps.MapView>