From 35b6120ebed7ba4a2a1cd6d12911967b5d26838e Mon Sep 17 00:00:00 2001 From: Raphael Date: Mon, 10 Mar 2025 23:59:22 +0100 Subject: [PATCH] =?UTF-8?q?fix=20#5=20#4=20#8,=20en=20gros=20j'ai=20avanc?= =?UTF-8?q?=C3=A9=20les=20videos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 3 +- app/src/main/AndroidManifest.xml | 4 +- .../dreamteam/timelapse/ProjectActivity.kt | 23 ++++- .../com/dreamteam/timelapse/VideoAdapter.kt | 86 +++++++++++++++++++ .../java/com/dreamteam/timelapse/VideoFrag.kt | 51 +++++------ .../timelapse/VideoPlayerActivity.kt | 55 ++++++++++++ .../dreamteam/timelapse/data/ApiService.kt | 4 + .../timelapse/data/ProjectRepository.kt | 19 ++++ .../com/dreamteam/timelapse/data/VideoDTO.kt | 24 ++++++ .../timelapse/data/VideoRepository.kt | 43 ++++++++++ .../main/res/layout/activity_video_player.xml | 11 +++ app/src/main/res/layout/fragment_videos.xml | 59 ++++++++++--- app/src/main/res/layout/item_video.xml | 47 ++++++++++ app/src/main/res/layout/project.xml | 14 ++- gradle/libs.versions.toml | 2 + 15 files changed, 401 insertions(+), 44 deletions(-) create mode 100644 app/src/main/java/com/dreamteam/timelapse/VideoAdapter.kt create mode 100644 app/src/main/java/com/dreamteam/timelapse/VideoPlayerActivity.kt create mode 100644 app/src/main/java/com/dreamteam/timelapse/data/VideoDTO.kt create mode 100644 app/src/main/java/com/dreamteam/timelapse/data/VideoRepository.kt create mode 100644 app/src/main/res/layout/activity_video_player.xml create mode 100644 app/src/main/res/layout/item_video.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f936d55..b64cb85 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -71,9 +71,10 @@ dependencies { implementation("com.squareup.retrofit2:retrofit:2.9.0") //internet, api etc... implementation("com.squareup.retrofit2:converter-gson:2.9.0") // Si tu veux utiliser Gson pour la sérialisation implementation("com.squareup.okhttp3:logging-interceptor:4.9.0") // Pour le logging - implementation("com.github.bumptech.glide:glide:4.15.1") // Pour curl des images d'internet en gros + implementation("com.github.bumptech.glide:glide:4.15.1") kapt("com.github.bumptech.glide:compiler:4.15.1") implementation("com.github.PhilJay:MPAndroidChart:v3.1.0") + implementation("com.google.android.exoplayer:exoplayer:2.18.1") testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dbc90d1..9dcd198 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,10 +21,12 @@ android:theme="@style/Theme.Timelapse"> - + + + = emptyList() // Déclare une liste de projets vide private var project: Project? = null @@ -50,7 +53,8 @@ class ProjectActivity : AppCompatActivity() { .addConverterFactory(GsonConverterFactory.create()) .build() apiService = retrofit.create(ApiService::class.java) // Crée une instance d'ApiService - projectRepository = ProjectRepository(apiService) // Tu initialises ton repository + projectRepository = ProjectRepository(apiService) + videoRepository = VideoRepository(apiService) this.project = intent.getParcelableExtra("PROJECT") // -1 est la valeur par défaut si l'ID n'est pas trouvé Log.d("project", "La project activity "+this.project?.id+" est créée") @@ -67,6 +71,7 @@ class ProjectActivity : AppCompatActivity() { fetchMeasuresAndRebuildGraph() Log.d("ProjetsFrag", "Actualisation des projets") } + fetchVideos() @@ -80,7 +85,19 @@ class ProjectActivity : AppCompatActivity() { // } } - + fun fetchVideos(){ + this.project?.let{ + videoRepository.fetchVideosOfProject(it.id, onSuccess = { videos -> + val adapter = VideoAdapter(false, videos, null) //ImageAdapter(imageUrls) + binding.videosList.layoutManager = GridLayoutManager(this.baseContext, 2, GridLayoutManager.HORIZONTAL, false) + binding.videosList.addItemDecoration(GridSpacingItemDecoration(16)) // 16px spacing + binding.videosList.adapter = adapter + }, onError = {errorMessage -> + Log.e("ProjectActivity", errorMessage) + fetchVideos() + }) + } + } fun fetchMeasuresAndRebuildGraph(){ this.project?.let{ projectRepository.fetchMeasurementsOfProject(it.id, @@ -91,7 +108,7 @@ class ProjectActivity : AppCompatActivity() { initGraph(this.measures) val adapter = ImageAdapter(this.measures.map { m-> "https://timelapse.kerboul.me/api/images/${m.project_id}/${m.order_id}"}) //ImageAdapter(imageUrls) - binding.imagesList.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL) + binding.imagesList.layoutManager = GridLayoutManager(this.baseContext, 2, GridLayoutManager.HORIZONTAL, false) binding.imagesList.addItemDecoration(GridSpacingItemDecoration(16)) // 16px spacing binding.imagesList.adapter = adapter diff --git a/app/src/main/java/com/dreamteam/timelapse/VideoAdapter.kt b/app/src/main/java/com/dreamteam/timelapse/VideoAdapter.kt new file mode 100644 index 0000000..70913e7 --- /dev/null +++ b/app/src/main/java/com/dreamteam/timelapse/VideoAdapter.kt @@ -0,0 +1,86 @@ +package com.dreamteam.timelapse + +import android.annotation.SuppressLint +import android.content.Intent +import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.dreamteam.timelapse.data.ApiService +import com.dreamteam.timelapse.data.ProjectRepository +import com.dreamteam.timelapse.data.Video +import com.dreamteam.timelapse.data.VideoRepository +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class VideoAdapter( + public val withProjectNames : Boolean, + private val videos: List