Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ class LiteGoogleMapImpl(context: Context, var options: GoogleMapOptions) : Abstr
PropertyFactory.lineCap(Property.LINE_CAP_ROUND)
)
).withSource(
GeoJsonSource(polyline.id, polyline.annotationOptions.geometry)
GeoJsonSource(polyline.id, polyline.baseAnnotationOptions.geometry)
)
}

Expand All @@ -281,7 +281,7 @@ class LiteGoogleMapImpl(context: Context, var options: GoogleMapOptions) : Abstr
withProperties(PropertyFactory.linePattern(name))
styleBuilder.withImage(name, it.makeBitmap(circle.strokeColor, circle.strokeWidth, dpi))
}
}).withSource(GeoJsonSource("${circle.id}s", circle.line.annotationOptions.geometry))
}).withSource(GeoJsonSource("${circle.id}s", circle.line.annotations.first().options.geometry))
}

// Add markers
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.microg.gms.maps.mapbox.model

import com.mapbox.mapboxsdk.plugins.annotation.Annotation
import com.mapbox.mapboxsdk.plugins.annotation.Options

data class AnnotationTracker<T : Annotation<*>, S : Options<T>>(
var options: S,
var annotation: T? = null
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.microg.gms.maps.mapbox.model

enum class AnnotationType {
LINE,
FILL,
SYMBOL
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import android.util.Log
import com.google.android.gms.dynamic.IObjectWrapper
import com.google.android.gms.dynamic.ObjectWrapper
import com.google.android.gms.dynamic.unwrap
import com.google.android.gms.maps.model.Dash
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.PatternItem
import com.google.android.gms.maps.model.internal.ICircleDelegate
Expand All @@ -36,9 +35,11 @@ import com.mapbox.turf.TurfMeta
import com.mapbox.turf.TurfTransformation
import org.microg.gms.maps.mapbox.GoogleMapImpl
import org.microg.gms.maps.mapbox.LiteGoogleMapImpl
import org.microg.gms.maps.mapbox.utils.toPoint
import org.microg.gms.maps.mapbox.getName
import org.microg.gms.maps.mapbox.makeBitmap
import org.microg.gms.maps.mapbox.model.AnnotationType.FILL
import org.microg.gms.maps.mapbox.model.AnnotationType.LINE
import org.microg.gms.maps.mapbox.utils.toPoint
import com.google.android.gms.maps.model.CircleOptions as GmsCircleOptions

val NORTH_POLE: Point = Point.fromLngLat(0.0, 90.0)
Expand All @@ -64,31 +65,31 @@ abstract class AbstractCircle(
internal var tag: Any? = null

internal val line: Markup<Line, LineOptions> = object : Markup<Line, LineOptions> {
override var annotation: Line? = null
override val annotationOptions: LineOptions
get() = LineOptions()
.withGeometry(
LineString.fromLngLats(
makeOutlineLatLngs()
)
).withLineWidth(strokeWidth / dpiFactor())
.withLineColor(ColorUtils.colorToRgbaString(strokeColor))
.withLineOpacity(if (visible) 1f else 0f)
.apply {
strokePattern?.let {
withLinePattern(it.getName(strokeColor, strokeWidth))
}
}
override var annotations: List<AnnotationTracker<Line, LineOptions>> = listOf(
AnnotationTracker(
LineOptions()
.withGeometry(
LineString.fromLngLats(
makeOutlineLatLngs()
)
).withLineWidth(strokeWidth / dpiFactor())
.withLineColor(ColorUtils.colorToRgbaString(strokeColor))
.withLineOpacity(if (visible) 1f else 0f)
.apply {
strokePattern?.let {
withLinePattern(it.getName(strokeColor, strokeWidth))
}
})
)

override var removed: Boolean = false
}

val annotationOptions: FillOptions
get() =
FillOptions()
.withGeometry(makePolygon())
.withFillColor(ColorUtils.colorToRgbaString(fillColor))
.withFillOpacity(if (visible && !wrapsAroundPoles()) 1f else 0f)
get() = FillOptions()
.withGeometry(makePolygon())
.withFillColor(ColorUtils.colorToRgbaString(fillColor))
.withFillOpacity(if (visible && !wrapsAroundPoles()) 1f else 0f)

internal abstract fun update()

Expand Down Expand Up @@ -262,9 +263,13 @@ abstract class AbstractCircle(
class CircleImpl(private val map: GoogleMapImpl, private val id: String, options: GmsCircleOptions) :
AbstractCircle(id, options, { map.dpiFactor }), Markup<Fill, FillOptions> {

override var annotation: Fill? = null
override var annotations =
listOf(AnnotationTracker<Fill, FillOptions>(annotationOptions))
override var removed: Boolean = false

private val annotation: Fill?
get() = annotations.firstOrNull()?.annotation

override fun update() {
val polygon = makePolygon()

Expand All @@ -275,7 +280,7 @@ class CircleImpl(private val map: GoogleMapImpl, private val id: String, options
it.fillOpacity = if (visible && !wrapsAroundPoles()) 1f else 0f
}

line.annotation?.let {
line.annotations.firstOrNull()?.annotation?.let {
it.latLngs = makeOutlineLatLngs().map { point ->
com.mapbox.mapboxsdk.geometry.LatLng(
point.latitude(),
Expand All @@ -288,22 +293,22 @@ class CircleImpl(private val map: GoogleMapImpl, private val id: String, options
(strokePattern ?: emptyList()).let { pattern ->
val bitmapName = pattern.getName(strokeColor, strokeWidth)
map.addBitmap(bitmapName, pattern.makeBitmap(strokeColor, strokeWidth))
line.annotation?.linePattern = bitmapName
line.annotations.firstOrNull()?.annotation?.linePattern = bitmapName
}
map.lineManager?.let { line.update(it) }
map.getManagerForZIndex<Line, LineOptions>(LINE, zIndex)?.let { line.update(it) }

it.setLineColor(strokeColor)
}

map.fillManager?.let { update(it) }
map.lineManager?.let { line.update(it) }
map.getManagerForZIndex<Fill, FillOptions>(FILL, zIndex)?.let { update(it) }
map.getManagerForZIndex<Line, LineOptions>(LINE, zIndex)?.let { line.update(it) }
}

override fun remove() {
removed = true
line.removed = true
map.fillManager?.let { update(it) }
map.lineManager?.let { line.update(it) }
map.getManagerForZIndex<Fill, FillOptions>(FILL, zIndex)?.let { update(it) }
map.getManagerForZIndex<Line, LineOptions>(LINE, zIndex)?.let { line.update(it) }
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ import android.os.Parcel
import android.util.Log
import com.google.android.gms.dynamic.IObjectWrapper
import com.google.android.gms.dynamic.ObjectWrapper
import com.google.android.gms.dynamic.unwrap
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
import com.google.android.gms.maps.model.internal.IMarkerDelegate
import com.mapbox.mapboxsdk.plugins.annotation.AnnotationManager
import com.mapbox.mapboxsdk.plugins.annotation.Symbol
import com.mapbox.mapboxsdk.plugins.annotation.SymbolOptions
import com.google.android.gms.dynamic.unwrap
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import org.microg.gms.maps.mapbox.AbstractGoogleMap
import org.microg.gms.maps.mapbox.GoogleMapImpl
import org.microg.gms.maps.mapbox.LiteGoogleMapImpl
import org.microg.gms.maps.mapbox.model.AnnotationType.SYMBOL
import org.microg.gms.maps.mapbox.utils.toMapbox

abstract class AbstractMarker(
Expand Down Expand Up @@ -170,12 +170,15 @@ class MarkerImpl(private val map: GoogleMapImpl, private val id: String, options
internal var rotation: Float = options.rotation
override var draggable: Boolean = options.isDraggable

override var annotation: Symbol? = null
override var annotations = listOf(AnnotationTracker<Symbol, SymbolOptions>(annotationOptions))
override var removed: Boolean = false

private val annotation: Symbol?
get() = annotations.firstOrNull()?.annotation

override fun remove() {
removed = true
map.symbolManager?.let { update(it) }
map.getManagerForZIndex<Symbol, SymbolOptions>(SYMBOL, zIndex)?.let { update(it) }
}

override fun update() {
Expand All @@ -186,7 +189,7 @@ class MarkerImpl(private val map: GoogleMapImpl, private val id: String, options
it.symbolSortKey = zIndex
icon?.applyTo(it, anchor, map.dpiFactor)
}
map.symbolManager?.let { update(it) }
map.getManagerForZIndex<Symbol, SymbolOptions>(SYMBOL, zIndex)?.let { update(it) }
}

override fun update(manager: AnnotationManager<*, Symbol, SymbolOptions, *, *, *>) {
Expand Down Expand Up @@ -233,7 +236,7 @@ class MarkerImpl(private val map: GoogleMapImpl, private val id: String, options

override fun setDraggable(draggable: Boolean) {
this.draggable = draggable
map.symbolManager?.let { update(it) }
map.getManagerForZIndex<Symbol, SymbolOptions>(SYMBOL, zIndex)?.let { update(it) }
}

override fun isDraggable(): Boolean = draggable
Expand Down Expand Up @@ -269,7 +272,7 @@ class MarkerImpl(private val map: GoogleMapImpl, private val id: String, options
override fun setRotation(rotation: Float) {
this.rotation = rotation
annotation?.iconRotate = rotation
map.symbolManager?.let { update(it) }
map.getManagerForZIndex<Symbol, SymbolOptions>(SYMBOL, zIndex)?.let { update(it) }
map.currentInfoWindow?.update()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@

package org.microg.gms.maps.mapbox.model

import android.util.Log
import com.mapbox.mapboxsdk.plugins.annotation.Annotation
import com.mapbox.mapboxsdk.plugins.annotation.AnnotationManager
import com.mapbox.mapboxsdk.plugins.annotation.Options

interface Markup<T : Annotation<*>, S : Options<T>> {
var annotation: T?
val annotationOptions: S
var annotations: List<AnnotationTracker<T, S>>
var removed: Boolean

fun update(manager: AnnotationManager<*, T, S, *, *, *>) {
synchronized(this) {
if (removed && annotation != null) {
manager.delete(annotation)
annotation = null
} else if (annotation != null) {
manager.update(annotation)
} else if (!removed) {
annotation = manager.create(annotationOptions)
for (tracker in annotations) {
if (removed && tracker.annotation != null) {
manager.delete(tracker.annotation)
tracker.annotation = null
} else if (tracker.annotation != null) {
manager.update(tracker.annotation)
} else if (!removed) {
tracker.annotation = manager.create(tracker.options)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.mapbox.mapboxsdk.plugins.annotation.FillOptions
import com.mapbox.mapboxsdk.utils.ColorUtils
import org.microg.gms.maps.mapbox.GoogleMapImpl
import org.microg.gms.maps.mapbox.LiteGoogleMapImpl
import org.microg.gms.maps.mapbox.model.AnnotationType.FILL
import org.microg.gms.maps.mapbox.utils.toMapbox
import org.microg.gms.utils.warnOnTransactionIssues

Expand Down Expand Up @@ -203,12 +204,16 @@ class PolygonImpl(private val map: GoogleMapImpl, id: String, options: PolygonOp
)
}).toMutableList()

override var annotation: Fill? = null
override var annotations =
listOf(AnnotationTracker<Fill, FillOptions>(annotationOptions))
override var removed: Boolean = false

protected val annotation: Fill?
get() = annotations[0].annotation

override fun remove() {
removed = true
map.fillManager?.let { update(it) }
map.getManagerForZIndex<Fill, FillOptions>(FILL, zIndex)?.let { update(it) }
super.remove()
}

Expand All @@ -219,7 +224,7 @@ class PolygonImpl(private val map: GoogleMapImpl, id: String, options: PolygonOp
it.fillOpacity = if (visible) 1f else 0f
it.latLngs = mutableListOf(points.map { it.toMapbox() }).plus(this.holes.map { it.map { it.toMapbox() } })
}
map.fillManager?.let { update(it) }
map.getManagerForZIndex<Fill, FillOptions>(FILL, zIndex)?.let { update(it) }
}

override fun addPolyline(id: String, options: PolylineOptions) {
Expand Down
Loading