Correction des graphiques d'affichage d'humidité et température

This commit is contained in:
arussac
2025-03-13 09:31:21 +01:00
parent 03d1f9fb20
commit f1655d2713
6 changed files with 76 additions and 31 deletions

6
.idea/AndroidProjectSystem.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

View File

@@ -13,9 +13,6 @@
</DropdownSelection> </DropdownSelection>
<DialogSelection /> <DialogSelection />
</SelectionState> </SelectionState>
<SelectionState runConfigName="ProjectActivity">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates> </selectionStates>
</component> </component>
</project> </project>

2
.idea/gradle.xml generated
View File

@@ -4,6 +4,7 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" /> <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules"> <option name="modules">
@@ -12,7 +13,6 @@
<option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/app" />
</set> </set>
</option> </option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

1
.idea/misc.xml generated
View File

@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">

17
.idea/runConfigurations.xml generated Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

View File

@@ -8,13 +8,14 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.StaggeredGridLayoutManager
import com.dreamteam.timelapse.data.ApiService import com.dreamteam.timelapse.data.ApiService
import com.dreamteam.timelapse.data.Measurement import com.dreamteam.timelapse.data.Measurement
import com.dreamteam.timelapse.data.Project import com.dreamteam.timelapse.data.Project
import com.dreamteam.timelapse.data.ProjectRepository import com.dreamteam.timelapse.data.ProjectRepository
import com.dreamteam.timelapse.data.VideoRepository import com.dreamteam.timelapse.data.VideoRepository
import com.dreamteam.timelapse.databinding.ProjectBinding import com.dreamteam.timelapse.databinding.ProjectBinding
import com.github.mikephil.charting.components.Legend
import com.github.mikephil.charting.components.XAxis
import com.github.mikephil.charting.data.Entry import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.data.LineData
import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.data.LineDataSet
@@ -124,55 +125,78 @@ class ProjectActivity : AppCompatActivity() {
} }
} }
fun initGraph(lm : List<Measurement>){ fun initGraph(lm: List<Measurement>) {
val temperatureHumidityChart = this.binding.temperatureHumidityChart val temperatureHumidityChart = this.binding.temperatureHumidityChart
val temperatures = lm.sortedBy { p -> p.order_id } // Sort measurements by order_id and map to pairs of value and timestamp
.map { m -> Pair(m.temperature, m.timestamp) } val temperatures = lm.sortedBy { it.order_id }
val humidities = lm.sortedBy { p -> p.order_id } .map { m -> Pair(m.temperature, m.order_id) }
.map { m -> Pair(m.humidity, m.timestamp) } val humidities = lm.sortedBy { it.order_id }
.map { m -> Pair(m.humidity, m.order_id) }
// Ajouter des points de données (exemples) // Create entries for temperature and humidity using timestamps
val temperatureEntries = temperatures.map { pair -> val temperatureEntries = temperatures.mapIndexed { index, pair ->
Entry((pair.second.time).toFloat(), pair.first) // (timestamp, température) Entry(index.toFloat(), pair.first) // Use index for order, but display timestamp
} }
val humidityEntries = humidities.map { pair -> val humidityEntries = humidities.mapIndexed { index, pair ->
Entry((pair.second.time).toFloat(), pair.first) // (timestamp, humidité) Entry(index.toFloat(), pair.first) // Use index for order, but display timestamp
} }
// Créer des LineDataSet pour chaque série de données // Create LineDataSet for each data series
val temperatureDataSet = LineDataSet(temperatureEntries, "Température") val temperatureDataSet = LineDataSet(temperatureEntries, "Température").apply {
val humidityDataSet = LineDataSet(humidityEntries, "Hygrométrie") color = Color.RED // Keep color red
Log.i("ProjectActivity", temperatureEntries.toString()) valueTextColor = Color.BLACK
val minX = temperatureEntries.minOf { it.x } // La valeur minimale de x valueTextSize = 12f
val maxX = temperatureEntries.maxOf { it.x } // La valeur maximale de x }
val humidityDataSet = LineDataSet(humidityEntries, "Hygrométrie").apply {
color = Color.BLUE // Keep color blue
valueTextColor = Color.BLACK
valueTextSize = 12f
}
// Set up the x-axis to display timestamps
val xAxis = temperatureHumidityChart.xAxis val xAxis = temperatureHumidityChart.xAxis
xAxis.valueFormatter = object : ValueFormatter() { xAxis.valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String { override fun getFormattedValue(value: Float): String {
val date = Date(value.toLong()) // Map the index back to the corresponding timestamp
val sdf = SimpleDateFormat("hh:mm", Locale.getDefault()) val timestamp = lm.sortedBy { it.order_id }[value.toInt()].timestamp
val date = Date(timestamp.time)
val sdf = SimpleDateFormat("dd/MM/yyyy:HH:mm:ss", Locale.getDefault())
return sdf.format(date) return sdf.format(date)
} }
} }
// Set the minimum and maximum x-axis values based on indices
val minX = 0f
val maxX = (lm.size - 1).toFloat()
xAxis.axisMinimum = minX xAxis.axisMinimum = minX
xAxis.axisMaximum = maxX xAxis.axisMaximum = maxX
// Ajouter les datasets au graphique xAxis.granularity = 1f // Ensure each index is plotted
xAxis.labelRotationAngle = -90f
xAxis.position = XAxis.XAxisPosition.BOTTOM
// Add datasets to the chart
val dataSets: MutableList<ILineDataSet> = ArrayList() val dataSets: MutableList<ILineDataSet> = ArrayList()
dataSets.add(temperatureDataSet) dataSets.add(temperatureDataSet)
dataSets.add(humidityDataSet) dataSets.add(humidityDataSet)
// val lineData = LineData(temperatureDataSet, humidityDataSet)
//Log.e("Graph", lineData.getDataSetByIndex(0).entryCount.toString())
temperatureHumidityChart.data = LineData(dataSets) temperatureHumidityChart.data = LineData(dataSets)
val description = temperatureHumidityChart.description
description.text = " "
// Customize the legend
val legend: Legend = temperatureHumidityChart.legend
legend.textColor = Color.BLACK
legend.textSize = 12f
// Personnaliser le graphique (par exemple, couleur, légende, etc.) // Refresh the chart
temperatureDataSet.color = Color.RED temperatureHumidityChart.invalidate()
humidityDataSet.color = Color.BLUE
temperatureHumidityChart.invalidate() // Rafraîchir le graphique
} }
fun initProjectInfo(){ fun initProjectInfo(){
val nameview = findViewById<TextView>(R.id.project_name) val nameview = findViewById<TextView>(R.id.project_name)
val descriptionview = findViewById<TextView>(R.id.project_description) val descriptionview = findViewById<TextView>(R.id.project_description)