From 110f356d78691c40bef775ca6d6ecf3bddc88cd8 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Fri, 6 Feb 2026 13:49:39 +0100 Subject: [PATCH] Started working on rendering project details in ProjectDetailActivity.kt --- .../kanban_clone_android/kanban/Project.kt | 5 ++ .../ui/ProjectDetailActivity.kt | 71 +++++++++++++++++++ .../ui/ProjectItemAdapter.kt | 2 +- .../res/layout/activity_project_detail.xml | 46 ++++++++++++ app/src/main/res/layout/item_project.xml | 50 ++++++------- 5 files changed, 149 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt index f0a25b8..70c8c21 100644 --- a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt @@ -8,6 +8,11 @@ class Project{ val description: String = "" val users: List = emptyList() val tasks: List = emptyList() + + + override fun toString(): String { + return "Project(id=$id, name='$name', description='$description', users=$users, tasks=$tasks)" + } } data class ProjectBase( diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectDetailActivity.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectDetailActivity.kt index ebeb5c5..5790ade 100644 --- a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectDetailActivity.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectDetailActivity.kt @@ -1,13 +1,32 @@ package com.campusaula.edbole.kanban_clone_android.ui +import android.health.connect.datatypes.units.Percentage import android.os.Bundle +import android.util.Log +import android.widget.TextView import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.lifecycleScope import com.campusaula.edbole.kanban_clone_android.R +import com.campusaula.edbole.kanban_clone_android.kanban.Project +import com.campusaula.edbole.kanban_clone_android.kanban.Task +import com.campusaula.edbole.kanban_clone_android.kanban.TaskStatus +import com.campusaula.edbole.kanban_clone_android.network.ApiService +import com.campusaula.edbole.kanban_clone_android.network.RetrofitInstance +import com.google.android.material.floatingactionbutton.FloatingActionButton +import kotlinx.coroutines.launch class ProjectDetailActivity : AppCompatActivity() { + + private lateinit var api: ApiService + + private lateinit var projectTitleText : TextView + private lateinit var projectDescriptionText : TextView + private lateinit var completedPercentageText: TextView + private lateinit var returnActionButton: FloatingActionButton + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -17,5 +36,57 @@ class ProjectDetailActivity : AppCompatActivity() { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } + api = RetrofitInstance.getRetrofit(applicationContext).create(ApiService::class.java) + projectTitleText = findViewById(R.id.projectTitleText) + projectDescriptionText = findViewById(R.id.projectDescriptionText) + completedPercentageText = findViewById(R.id.completedPercentageText) + returnActionButton = findViewById(R.id.returnActionButton) + returnActionButton.setOnClickListener { finish() } + + val projectId : Int = intent.getIntExtra("project_id", -1) + + if (projectId > 0) { + Log.d("ProjectDetailActivity", "Received project ID: $projectId") + lifecycleScope.launch { + try { + val projectResponse = api.getProjectById(projectId) + + if (projectResponse.isSuccessful && projectResponse.body() != null) { + Log.d("ProjectDetailActivity", "Fetched project: ${projectResponse.body()!!.name}") + val project = projectResponse.body()!! + + + Log.d("ProjectDetailActivity", "Displaying project details for: $project") + + projectTitleText.text = project.name + projectDescriptionText.text = project.description + + var percentageFinished = 0.0; + val tasks: List = project.tasks + val totalTasks: Int = tasks.size + val perTaskPercentage = if (totalTasks > 0) (1.0 / totalTasks)*100 else 0.0 + + for (task in tasks) { + if (task.status == TaskStatus.COMPLETED) { + percentageFinished += perTaskPercentage + } + } + completedPercentageText.text = "Completed: ${"%.2f".format(percentageFinished * 100)}%" + + + } else { + Log.e("ProjectDetailActivity", "Failed to fetch project: ${projectResponse.code()} - ${projectResponse.message()}") + finish() + } + } catch (e: Exception) { + Log.e("ProjectDetailActivity", "Error fetching project", e) + finish() + } + } + } else { + Log.e("ProjectDetailActivity", "No project ID found in intent") + finish() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectItemAdapter.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectItemAdapter.kt index 194cdfd..53856b0 100644 --- a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectItemAdapter.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/ProjectItemAdapter.kt @@ -37,7 +37,7 @@ class ProjectItemAdapter( private val descTv: TextView = itemView.findViewById(R.id.projectDescription) fun bind(project: Project) { - nameTv.text = project.name + nameTv.text = project.id.toString() + " " + project.name descTv.text = project.description } } diff --git a/app/src/main/res/layout/activity_project_detail.xml b/app/src/main/res/layout/activity_project_detail.xml index a136292..4b45b8c 100644 --- a/app/src/main/res/layout/activity_project_detail.xml +++ b/app/src/main/res/layout/activity_project_detail.xml @@ -7,4 +7,50 @@ android:layout_height="match_parent" tools:context=".ui.ProjectDetailActivity"> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_project.xml b/app/src/main/res/layout/item_project.xml index 7a6f251..b921820 100644 --- a/app/src/main/res/layout/item_project.xml +++ b/app/src/main/res/layout/item_project.xml @@ -1,32 +1,34 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_margin="8dp"> + android:id="@+id/projectName" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:text="Project name" + android:textStyle="bold" + android:textSize="16sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:id="@+id/projectDescription" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:text="Project description" + android:textSize="14sp" + android:ellipsize="end" + android:maxLines="2" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/projectName" + android:layout_marginTop="4dp" />