From 23dba7e1d0c656cd4690e2272a328965da9a8c85 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Fri, 6 Feb 2026 10:57:02 +0100 Subject: [PATCH] Made MainActivity.kt get list of projects from logged-in user --- app/build.gradle.kts | 1 + .../kanban_clone_android/MainActivity.kt | 20 ----- .../network/ApiService.kt | 2 +- .../kanban_clone_android/ui/MainActivity.kt | 80 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 29 ++++++- gradle/libs.versions.toml | 2 + 6 files changed, 110 insertions(+), 24 deletions(-) delete mode 100644 app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt create mode 100644 app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/MainActivity.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a63b20c..5d7a6cb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -51,6 +51,7 @@ dependencies { implementation("com.squareup.retrofit2:converter-gson:2.9.0") implementation("com.auth0.android:jwtdecode:2.0.1") + implementation(libs.androidx.recyclerview) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt deleted file mode 100644 index 87828e1..0000000 --- a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.campusaula.edbole.kanban_clone_android - -import android.os.Bundle -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat - -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - setContentView(R.layout.activity_main) - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> - val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) - insets - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/network/ApiService.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/network/ApiService.kt index e79377c..6d9184b 100644 --- a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/network/ApiService.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/network/ApiService.kt @@ -11,7 +11,7 @@ interface ApiService { @POST("auth/login/") suspend fun login(@Body userLogin: UserLogin): Response - @POST("me/logout/") + @GET("me/logout/") suspend fun logout(): Response @DELETE("me/delete-me/") diff --git a/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/MainActivity.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/MainActivity.kt new file mode 100644 index 0000000..bd5cf8c --- /dev/null +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/ui/MainActivity.kt @@ -0,0 +1,80 @@ +package com.campusaula.edbole.kanban_clone_android.ui + +import android.content.Intent +import android.os.Bundle +import android.widget.Button +import android.widget.TextView +import android.widget.Toast +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.network.ApiService +import com.campusaula.edbole.kanban_clone_android.network.RetrofitInstance +import kotlinx.coroutines.launch + +class MainActivity : AppCompatActivity() { + + private lateinit var api: ApiService + private lateinit var projectList : List + private lateinit var loggedInAs: TextView; + private lateinit var logoutButton: Button; + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_main) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + api = RetrofitInstance.getRetrofit(applicationContext).create(ApiService::class.java) + projectList = emptyList() + + /* Activity components */ + loggedInAs = findViewById(R.id.loggedInAs) + logoutButton = findViewById(R.id.logoutButton) + + /* Getting the logged-in user info */ + lifecycleScope.launch{ + + val getMe = api.getMe() + if (getMe.isSuccessful){ + val user = getMe.body() + loggedInAs.text = "Logged in as: ${user?.name}" + } else { + val intent = Intent(this@MainActivity, LoginActivity::class.java) + startActivity(intent) + } + + } + + logoutButton.setOnClickListener { + lifecycleScope.launch { + val logoutResponse = api.logout() + if (logoutResponse.isSuccessful) { + // Clear cookies for the API host + RetrofitInstance.clearCookiesForHost( + "10.0.2.2:8000" + ) + // Navigate back to the login screen + val intent = + Intent(this@MainActivity, LoginActivity::class.java) + startActivity(intent) + finish() // Optional: close the MainActivity so it's removed from the back stack + } else { + Toast.makeText( + this@MainActivity, + "Logout failed", + Toast.LENGTH_SHORT + ).show() + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c98e755..5d909a1 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,15 +5,38 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context="com.campusaula.edbole.kanban_clone_android.MainActivity"> + tools:context="com.campusaula.edbole.kanban_clone_android.ui.MainActivity"> + app:layout_constraintTop_toTopOf="parent" + android:id="@+id/loggedInAs" + android:textAlignment="textStart" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintVertical_bias="0.0" + android:layout_marginTop="16dp" + android:layout_marginStart="16dp" /> + +