Merge branch 'master' of https://gitea.kerboul.me/timelapse/timelapse-android
This commit is contained in:
@@ -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
6
.idea/AndroidProjectSystem.xml
generated
Normal 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>
|
||||||
3
.idea/deploymentTargetSelector.xml
generated
3
.idea/deploymentTargetSelector.xml
generated
@@ -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
2
.idea/gradle.xml
generated
@@ -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
1
.idea/misc.xml
generated
@@ -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
17
.idea/runConfigurations.xml
generated
Normal 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>
|
||||||
@@ -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()} C°" // 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user