This commit is contained in:
Raphael
2025-03-13 10:20:07 +01:00
7 changed files with 105 additions and 32 deletions

View File

@@ -9,7 +9,7 @@ variables:
image: ubuntu:20.04 image: ubuntu:20.04
before_script: before_script:
# Installer Java, SDK tools et dépendances # Installer Java, SDK tools et dépendances SANS
- apt-get update -qq && apt-get install -qq -y openjdk-17-jdk wget unzip - apt-get update -qq && apt-get install -qq -y openjdk-17-jdk wget unzip
- wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O android-commandlinetools.zip - wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O android-commandlinetools.zip
- mkdir -p $ANDROID_SDK_ROOT/cmdline-tools - mkdir -p $ANDROID_SDK_ROOT/cmdline-tools

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
@@ -127,52 +128,103 @@ 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
// Configure the left y-axis
val leftYAxis = temperatureHumidityChart.axisLeft
leftYAxis.labelCount = 6 // Set the number of labels
leftYAxis.setLabelCount(6, true)
leftYAxis.setDrawLabels(true)
leftYAxis.setDrawAxisLine(true)
leftYAxis.setDrawGridLines(true)
leftYAxis.valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return "${value.toInt()}" // Append "C°" to the temperature values
}
}
// Configure the right y-axis
val rightYAxis = temperatureHumidityChart.axisRight
rightYAxis.labelCount = 6 // Set the number of labels
rightYAxis.axisMinimum = 0f // Set minimum value if needed
rightYAxis.axisMaximum = 100f // Set maximum value to 100%
rightYAxis.setLabelCount(6, true)
rightYAxis.setDrawLabels(true)
rightYAxis.setDrawAxisLine(true)
rightYAxis.setDrawGridLines(false)
rightYAxis.valueFormatter = object : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return "${value.toInt()} %" // Append "%" to the humidity values
}
}
// 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)