Skip to content
Snippets Groups Projects
Verified Commit fcaf7e1c authored by Beowulf's avatar Beowulf
Browse files

Swapped units on rain graph

parent d5c67a32
Branches
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ import android.util.AttributeSet
import android.util.TypedValue
import android.view.View
import de.beowulf.wetter.R
import java.text.DecimalFormat
import kotlin.math.abs
......@@ -17,6 +18,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
private val dataSet = mutableListOf<DataPoint>()
private val dataSet2 = mutableListOf<DataPoint>()
private val dataSet3 = mutableListOf<DataPoint>()
private var factor = 1
private var xMin = 0
private var xMax = 0f
private var yMin = 0
......@@ -28,6 +30,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
private val dm = resources.displayMetrics
private val radius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 5f, dm)
private var rainUnit = ""
val df = DecimalFormat("#.#")
private val dataPointPaint = Paint().apply {
context.theme.resolveAttribute(R.attr.colorAccent, typedValue, true)
......@@ -99,7 +102,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
var i = 0
while (i <= yMax) {
if (i != yNull && (i.toRealY() + (height / 12) - textHeight) + yMax.toRealY() > 0) {
canvas.drawText(realY.toString(), 1.5f, i.toRealY() + textHeight, paintYAxis)
canvas.drawText(df.format(realY.toFloat().div(factor)), 1.5f, i.toRealY() + textHeight, paintYAxis)
//horizontal grid lines
if (dataSet.size == 8) {
canvas.drawLine(0.toRealX() / 3, i.toRealY(), width.toFloat(), i.toRealY(), paintDataGrid)
......@@ -213,7 +216,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
canvas.save()
}
fun setData(newDataSet: List<DataPoint>, secondDataSet: List<DataPoint>?, thirdDataSet: List<DataPoint>?, Rain: String?) {
fun setData(newDataSet: List<DataPoint>, secondDataSet: List<DataPoint>?, thirdDataSet: Amount?) {
xMin = newDataSet.minByOrNull { it.xVal }?.xVal ?: 0
xMax = newDataSet.maxByOrNull { it.xVal }?.xVal?.toFloat() ?: 0f
yMin = newDataSet.minByOrNull { it.yVal }?.yVal ?: 0
......@@ -231,7 +234,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
} else if (yMin > 0) {
realY = 0
//When value is very high (e.g. Kelvin usage), don't set Minimum to 0
if (yMin > 50 && Rain == null) {
if (yMin > 50 && thirdDataSet == null) {
yMin -= 10
yMax -= yMin
realY = yMin
......@@ -240,7 +243,7 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
}
}
if (Rain != null) {
if (thirdDataSet != null) {
yMax = 120
} else {
yMax += abs(yMax / 4)
......@@ -253,11 +256,12 @@ class TempGraphAdapter(context: Context, attributeSet: AttributeSet) : View(cont
dataSet2.clear()
if (secondDataSet != null)
dataSet2.addAll(secondDataSet)
if (Rain != null)
rainUnit = Rain
dataSet3.clear()
if (thirdDataSet != null)
dataSet3.addAll(thirdDataSet)
if (thirdDataSet != null) {
dataSet3.addAll(thirdDataSet.dataPoint)
factor = thirdDataSet.factor
rainUnit = thirdDataSet.unit
}
invalidate()
}
......@@ -270,3 +274,9 @@ data class DataPoint(
val yVal: Int,
val xValue: String?
)
data class Amount(
val dataPoint: List<DataPoint>,
val factor: Int,
val unit: String
)
\ No newline at end of file
......@@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import de.beowulf.wetter.GlobalFunctions
import de.beowulf.wetter.R
import de.beowulf.wetter.adapter.Amount
import de.beowulf.wetter.adapter.DataPoint
import de.beowulf.wetter.databinding.FragmentGraphBinding
import java.text.SimpleDateFormat
......@@ -34,8 +35,8 @@ class GraphDayFragment : Fragment() {
val tempTitle: String = getString(R.string.temperature) + gf.unitTemp()
binding.TempTitle.text = tempTitle
binding.graphView.setData(temp("min"), temp("max"), null, null)
binding.graphView2.setData(precipitation(), null, amount(), gf.unitRain())
binding.graphView.setData(temp("min"), temp("max"), null)
binding.graphView2.setData(precipitation(), null, rainAmount())
return view
}
......@@ -71,7 +72,7 @@ class GraphDayFragment : Fragment() {
}
}
private fun amount(): List<DataPoint> {
private fun rainAmount(): Amount {
val jsonObj = gf.result()
for (i: Int in 0..7) {
......@@ -88,20 +89,24 @@ class GraphDayFragment : Fragment() {
}
}
}
var factor: Int = 100.div(amount.maxByOrNull { it?:0.0 }?:0.0).toInt() / 5 * 5
var factor: Int = 100.div(amount.maxByOrNull { it?:0.0 }?:0.0).toInt() / 10 * 10
if (factor > 200 || factor == 0)
factor = 1
//set title with correct factor
val rainTitle: String = if (factor != 1) {
getString(R.string.rain) + " (% | $factor*${gf.unitRain()})"
getString(R.string.rain) + " (${gf.unitRain()} | %/$factor)"
} else {
getString(R.string.rain) + " (% | ${gf.unitRain()})"
getString(R.string.rain) + " (${gf.unitRain()} | %)"
}
binding.RainTitle.text = rainTitle
for (i: Int in 0..7)
amount[i] = amount[i]?.times(factor)
return (0..7).map {
return Amount(
(0..7).map {
DataPoint(it, amount[it]!!.toInt(), day[it])
}
},
factor,
gf.unitRain()
)
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import de.beowulf.wetter.GlobalFunctions
import de.beowulf.wetter.R
import de.beowulf.wetter.adapter.Amount
import de.beowulf.wetter.adapter.DataPoint
import de.beowulf.wetter.databinding.FragmentGraphBinding
import java.text.SimpleDateFormat
......@@ -34,8 +35,8 @@ class GraphHourFragment : Fragment() {
val tempTitle: String = getString(R.string.temperature) + gf.unitTemp()
binding.TempTitle.text = tempTitle
binding.graphView.setData(temp(), null, null, null)
binding.graphView2.setData(precipitation(), null , amount(), gf.unitRain())
binding.graphView.setData(temp(), null, null)
binding.graphView2.setData(precipitation(), null , rainAmount())
return view
}
......@@ -70,7 +71,7 @@ class GraphHourFragment : Fragment() {
}
}
private fun amount(): List<DataPoint> {
private fun rainAmount(): Amount {
val jsonObj = gf.result()
for (i: Int in 0..15) {
......@@ -87,20 +88,24 @@ class GraphHourFragment : Fragment() {
}
}
}
var factor: Int = 100.div(amount.maxByOrNull { it?:0.0 }?:0.0).toInt() / 5 * 5
var factor: Int = 100.div(amount.maxByOrNull { it?:0.0 }?:0.0).toInt() / 10 * 10
if (factor > 200 || factor == 0)
factor = 1
//set title with correct factor
val rainTitle: String = if (factor != 1) {
getString(R.string.rain) + " (% | $factor*${gf.unitRain()})"
getString(R.string.rain) + " (${gf.unitRain()} | %/$factor)"
} else {
getString(R.string.rain) + " (% | ${gf.unitRain()})"
getString(R.string.rain) + " (${gf.unitRain()} | %)"
}
binding.RainTitle.text = rainTitle
for (i: Int in 0..15)
amount[i] = amount[i]?.times(factor)
return (0..15).map {
return Amount(
(0..15).map {
DataPoint(it, amount[it]!!.toInt(), hour[it])
}
},
factor,
gf.unitRain()
)
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment