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 com.google.gson.JsonObject
|
||||||
import org.json.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>(
|
open class AuthenticatedPostRequest<T>(
|
||||||
private val value: T,
|
private val value: T,
|
||||||
baseUrl: String,
|
baseUrl: String,
|
||||||
|
|
|
@ -3,6 +3,18 @@ package com.danilafe.fencelessgrazing.requests.authenticated
|
||||||
import com.android.volley.Response
|
import com.android.volley.Response
|
||||||
import com.danilafe.fencelessgrazing.model.CollarPos
|
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(
|
class SetBoundaryRequest(
|
||||||
baseUrl: String,
|
baseUrl: String,
|
||||||
token: String,
|
token: String,
|
||||||
|
|
|
@ -18,15 +18,42 @@ import org.osmdroid.views.MapView
|
||||||
import org.osmdroid.views.overlay.Marker
|
import org.osmdroid.views.overlay.Marker
|
||||||
import org.osmdroid.views.overlay.Polygon
|
import org.osmdroid.views.overlay.Polygon
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activity used to update a grazing boundary for a particular collar.
|
||||||
|
*/
|
||||||
class BoundaryEditorActivity : AppCompatActivity(),
|
class BoundaryEditorActivity : AppCompatActivity(),
|
||||||
Marker.OnMarkerDragListener,
|
Marker.OnMarkerDragListener,
|
||||||
Marker.OnMarkerClickListener {
|
Marker.OnMarkerClickListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The map displaying the boundary vertices and polygon.
|
||||||
|
*/
|
||||||
private lateinit var map: MapView
|
private lateinit var map: MapView
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of markers representing the new grazing boundary's edges.
|
||||||
|
*/
|
||||||
private val markers: MutableList<Marker> = mutableListOf()
|
private val markers: MutableList<Marker> = mutableListOf()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The polygon used to display the grazing area on the [map].
|
||||||
|
*/
|
||||||
private lateinit var polygon: GrazingPolygon
|
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
|
private lateinit var center: GeoPoint
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifier of the collar whose boundary is being changed.
|
||||||
|
*/
|
||||||
private var identifier: Int = -1
|
private var identifier: Int = -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Volley queue used for sending API requests.
|
||||||
|
*/
|
||||||
private lateinit var queue: RequestQueue
|
private lateinit var queue: RequestQueue
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
@ -45,6 +72,9 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
||||||
map.controller.setCenter(center)
|
map.controller.setCenter(center)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a marker from the [map].
|
||||||
|
*/
|
||||||
private fun removeMarker(m: Marker) {
|
private fun removeMarker(m: Marker) {
|
||||||
markers.remove(m)
|
markers.remove(m)
|
||||||
map.overlays.remove(m)
|
map.overlays.remove(m)
|
||||||
|
@ -52,6 +82,10 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
||||||
map.invalidate()
|
map.invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the current list of points to the API endpoint, closing
|
||||||
|
* the activity if successful.
|
||||||
|
*/
|
||||||
fun sendBoundary(v: View) {
|
fun sendBoundary(v: View) {
|
||||||
val request = SetBoundaryRequest(
|
val request = SetBoundaryRequest(
|
||||||
getString(R.string.apiUrl),
|
getString(R.string.apiUrl),
|
||||||
|
@ -72,6 +106,10 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
||||||
queue.add(request)
|
queue.add(request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new marker to the [map], starting it at the previously-configured
|
||||||
|
* [center].
|
||||||
|
*/
|
||||||
fun addMarker(v : View) {
|
fun addMarker(v : View) {
|
||||||
if(markers.size >= 10) {
|
if(markers.size >= 10) {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
|
@ -92,6 +130,11 @@ class BoundaryEditorActivity : AppCompatActivity(),
|
||||||
map.invalidate()
|
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() {
|
private fun updatePolygon() {
|
||||||
polygon.points.clear()
|
polygon.points.clear()
|
||||||
if(markers.isEmpty()) return
|
if(markers.isEmpty()) return
|
||||||
|
|
|
@ -202,6 +202,9 @@ class CollarDetailActivity : AppCompatActivity() {
|
||||||
queue.add(detailRequest)
|
queue.add(detailRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the [BoundaryEditorActivity] to edit the current collar's grazing boundary.
|
||||||
|
*/
|
||||||
fun changeGrazingBoundary(v : View) {
|
fun changeGrazingBoundary(v : View) {
|
||||||
startActivity(Intent(this, BoundaryEditorActivity::class.java).apply {
|
startActivity(Intent(this, BoundaryEditorActivity::class.java).apply {
|
||||||
val center = dataPoints.lastOrNull()?.let {
|
val center = dataPoints.lastOrNull()?.let {
|
||||||
|
|
|
@ -4,6 +4,9 @@ import android.graphics.Color
|
||||||
import org.osmdroid.views.MapView
|
import org.osmdroid.views.MapView
|
||||||
import org.osmdroid.views.overlay.Polygon
|
import org.osmdroid.views.overlay.Polygon
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenStreetMaps polygon with some default visual settings for the Fenceless Grazing System.
|
||||||
|
*/
|
||||||
class GrazingPolygon(map: MapView) : Polygon(map) {
|
class GrazingPolygon(map: MapView) : Polygon(map) {
|
||||||
init {
|
init {
|
||||||
fillPaint.color = Color.parseColor("#32a852")
|
fillPaint.color = Color.parseColor("#32a852")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user