Add some comments.
This commit is contained in:
parent
9a75af4045
commit
33af724fbf
|
@ -7,6 +7,17 @@ import com.google.gson.Gson
|
|||
import com.google.gson.JsonObject
|
||||
import org.json.JSONObject
|
||||
|
||||
/**
|
||||
* General POST request aimed at a protected endpoint of the API. The token can be retrieved
|
||||
* via a [LoginRequest], or, if you've made it past the login screen, via Shared Preferences.
|
||||
*
|
||||
* @param value the value to send as JSON to the API.
|
||||
* @param baseUrl the base URL of the API.
|
||||
* @param apiEndpoint the API endpoint to send the request to.
|
||||
* @param token the token to use to authenticate with the API.
|
||||
* @param listener the listener to be called when a response is received.
|
||||
* @param error the error handler to be called if a request fails.
|
||||
*/
|
||||
open class AuthenticatedPostRequest<T>(
|
||||
private val value: T,
|
||||
baseUrl: String,
|
||||
|
|
|
@ -3,6 +3,18 @@ package com.danilafe.fencelessgrazing.requests.authenticated
|
|||
import com.android.volley.Response
|
||||
import com.danilafe.fencelessgrazing.model.CollarPos
|
||||
|
||||
/**
|
||||
* Request to the API's `/collar/<id>/boundary/set` endpoint, used to update a collar's
|
||||
* valid grazing area. Note that although this request takes an arbitrary number of points,
|
||||
* the collar itself only supports at most 10 vertices.
|
||||
*
|
||||
* @param baseUrl the base URl of the API.
|
||||
* @param token the API token used for authentication.
|
||||
* @param identifier the collar whose boundary is being set.
|
||||
* @param coordinates the list of coordinates representing, in order, the new grazing boundary's vertices.
|
||||
* @param listener the listener to be called when an OK response is received.
|
||||
* @param error the error listener.
|
||||
*/
|
||||
class SetBoundaryRequest(
|
||||
baseUrl: String,
|
||||
token: String,
|
||||
|
|
|
@ -18,15 +18,42 @@ import org.osmdroid.views.MapView
|
|||
import org.osmdroid.views.overlay.Marker
|
||||
import org.osmdroid.views.overlay.Polygon
|
||||
|
||||
/**
|
||||
* Activity used to update a grazing boundary for a particular collar.
|
||||
*/
|
||||
class BoundaryEditorActivity : AppCompatActivity(),
|
||||
Marker.OnMarkerDragListener,
|
||||
Marker.OnMarkerClickListener {
|
||||
|
||||
/**
|
||||
* The map displaying the boundary vertices and polygon.
|
||||
*/
|
||||
private lateinit var map: MapView
|
||||
|
||||
/**
|
||||
* The list of markers representing the new grazing boundary's edges.
|
||||
*/
|
||||
private val markers: MutableList<Marker> = mutableListOf()
|
||||
|
||||
/**
|
||||
* The polygon used to display the grazing area on the [map].
|
||||
*/
|
||||
private lateinit var polygon: GrazingPolygon
|
||||
|
||||
/**
|
||||
* The center around which the [map] was originally centered,
|
||||
* used also for creating new vertices.
|
||||
*/
|
||||
private lateinit var center: GeoPoint
|
||||
|
||||
/**
|
||||
* The identifier of the collar whose boundary is being changed.
|
||||
*/
|
||||
private var identifier: Int = -1
|
||||
|
||||
/**
|
||||
* The Volley queue used for sending API requests.
|
||||
*/
|
||||
private lateinit var queue: RequestQueue
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -45,6 +72,9 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
|||
map.controller.setCenter(center)
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a marker from the [map].
|
||||
*/
|
||||
private fun removeMarker(m: Marker) {
|
||||
markers.remove(m)
|
||||
map.overlays.remove(m)
|
||||
|
@ -52,6 +82,10 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
|||
map.invalidate()
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the current list of points to the API endpoint, closing
|
||||
* the activity if successful.
|
||||
*/
|
||||
fun sendBoundary(v: View) {
|
||||
val request = SetBoundaryRequest(
|
||||
getString(R.string.apiUrl),
|
||||
|
@ -72,6 +106,10 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
|||
queue.add(request)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new marker to the [map], starting it at the previously-configured
|
||||
* [center].
|
||||
*/
|
||||
fun addMarker(v : View) {
|
||||
if(markers.size >= 10) {
|
||||
Toast.makeText(
|
||||
|
@ -92,6 +130,11 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
|||
map.invalidate()
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the polygon's vertices are synchronized
|
||||
* with the user-placed markers, making it so that the
|
||||
* grazing area is visible to the user.
|
||||
*/
|
||||
private fun updatePolygon() {
|
||||
polygon.points.clear()
|
||||
if(markers.isEmpty()) return
|
||||
|
|
|
@ -202,6 +202,9 @@ class CollarDetailActivity : AppCompatActivity() {
|
|||
queue.add(detailRequest)
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the [BoundaryEditorActivity] to edit the current collar's grazing boundary.
|
||||
*/
|
||||
fun changeGrazingBoundary(v : View) {
|
||||
startActivity(Intent(this, BoundaryEditorActivity::class.java).apply {
|
||||
val center = dataPoints.lastOrNull()?.let {
|
||||
|
|
|
@ -4,6 +4,9 @@ import android.graphics.Color
|
|||
import org.osmdroid.views.MapView
|
||||
import org.osmdroid.views.overlay.Polygon
|
||||
|
||||
/**
|
||||
* OpenStreetMaps polygon with some default visual settings for the Fenceless Grazing System.
|
||||
*/
|
||||
class GrazingPolygon(map: MapView) : Polygon(map) {
|
||||
init {
|
||||
fillPaint.color = Color.parseColor("#32a852")
|
||||
|
|
Loading…
Reference in New Issue
Block a user