From bece95b5ccfcd01bc20337ee0a08d6b1ea946d1d Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 11:14:37 +0100 Subject: [PATCH 01/30] Added OkHttp and retrofit2 to dependencies --- .idea/.gitignore | 5 +++++ app/build.gradle.kts | 7 +++++++ gradle/libs.versions.toml | 7 ++++++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c2d908a..8964957 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -39,6 +39,13 @@ dependencies { implementation(libs.material) implementation(libs.androidx.activity) implementation(libs.androidx.constraintlayout) + + // Networking: OkHttp + Retrofit + implementation("com.squareup.okhttp3:okhttp:4.11.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.11.0") + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:converter-gson:2.9.0") + testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 35aebf5..7244788 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,8 @@ appcompat = "1.7.1" material = "1.13.0" activity = "1.12.2" constraintlayout = "2.2.1" +okhttp = "4.11.0" +retrofit = "2.9.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -18,7 +20,10 @@ androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version material = { group = "com.google.android.material", name = "material", version.ref = "material" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } +okhttp-logging-interceptor = { group = "com.squareup.okhttp3", name = "logging-interceptor", version.ref = "okhttp" } +retrofit = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" } +retrofit-converter-gson = { group = "com.squareup.retrofit2", name = "converter-gson", version.ref = "retrofit" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } - From 0a2f234bfb7bd3007569f37ced989f5170276cc0 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 11:15:03 +0100 Subject: [PATCH 02/30] Added network permissions and allowes cleartextTraffic --- app/src/main/AndroidManifest.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 26642ca..8034159 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + android:theme="@style/Theme.KanbanCloneAndroid" + android:usesCleartextTraffic="true" + > From a91258ff05cafd1fb66de1cd6853710d77915523 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 11:38:52 +0100 Subject: [PATCH 03/30] Created base classes and RetroFit objects (idk if im gonna use the base classes tho) --- .../KanbanCloneAndroid/kanban/Project.kt | 27 +++++++++++++ .../edbole/KanbanCloneAndroid/kanban/Task.kt | 38 ++++++++++++++++++ .../edbole/KanbanCloneAndroid/kanban/User.kt | 40 +++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt create mode 100644 app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt create mode 100644 app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt new file mode 100644 index 0000000..2fb3a32 --- /dev/null +++ b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt @@ -0,0 +1,27 @@ +package com.campusaula.edbole.KanbanCloneAndroid.kanban + +import com.google.gson.annotations.SerializedName + +class Project{ + val id: Int = 0 + val name: String = "" + val description: String = "" + val users: List = emptyList() + val tasks: List = emptyList() +} + +data class ProjectBase( + @SerializedName("id") + val id : Int, + @SerializedName("name") + val name : String, + @SerializedName("description") + val description : String +) + +data class ProjectCreate( + @SerializedName("name") + val name : String, + @SerializedName("description") + val description : String +) diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt new file mode 100644 index 0000000..3681057 --- /dev/null +++ b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt @@ -0,0 +1,38 @@ +package com.campusaula.edbole.KanbanCloneAndroid.kanban + +import com.google.gson.annotations.SerializedName + +enum class TaskStatus { + @SerializedName("PENDING") + PENDING, + @SerializedName("IN_PROGRESS") + IN_PROGRESS, + @SerializedName("COMPLETED") + COMPLETED, + @SerializedName("FAILED") + FAILED, + @SerializedName("STASHED") + STASHED +} + +class Task { + val id: Int = 0 + val title: String = "" + val description: String = "" + val status: TaskStatus = TaskStatus.PENDING + val project: Project? = null +} + +data class TaskBase( + @SerializedName("id") + val id : Int, + + @SerializedName("title") + val title : String, + + @SerializedName("description") + val description : String, + + @SerializedName("status") + val status: TaskStatus +) diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt new file mode 100644 index 0000000..2721009 --- /dev/null +++ b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt @@ -0,0 +1,40 @@ +package com.campusaula.edbole.KanbanCloneAndroid.kanban + +import com.google.gson.annotations.SerializedName + +class User { + val id: Int = 0 + val email: String = "" + val password: String = "" + val projects: List = emptyList() +} + +data class UserBase ( + @SerializedName("id") + val id: Int, + @SerializedName("email") + val email: String +) + +data class ProjectUser( + @SerializedName("id") + val id: Int, + @SerializedName("email") + val email: String, + @SerializedName("projects") + val projects: List +) + +data class UserLogin ( + @SerializedName("email") + val email: String, + @SerializedName("password") + val password: String +) + +data class UserUpdatePassword( + @SerializedName("password") + val password: String, + @SerializedName("new_password") + val newPassword: String +) From dd5fd26b5671dec24939a03f79907511d31f24e6 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 11:57:31 +0100 Subject: [PATCH 04/30] Corrected User class and models to have name member --- .../edbole/KanbanCloneAndroid/kanban/User.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt index 2721009..d4b8597 100644 --- a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt +++ b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName class User { val id: Int = 0 + val name : String = "" val email: String = "" val password: String = "" val projects: List = emptyList() @@ -12,6 +13,8 @@ class User { data class UserBase ( @SerializedName("id") val id: Int, + @SerializedName("name") + val name: String, @SerializedName("email") val email: String ) @@ -19,6 +22,8 @@ data class UserBase ( data class ProjectUser( @SerializedName("id") val id: Int, + @SerializedName("name") + val name: String, @SerializedName("email") val email: String, @SerializedName("projects") @@ -32,9 +37,19 @@ data class UserLogin ( val password: String ) +data class UserCreate ( + @SerializedName("name") + val name: String, + @SerializedName("email") + val email: String, + @SerializedName("password") + val password: String +) + data class UserUpdatePassword( @SerializedName("password") val password: String, @SerializedName("new_password") val newPassword: String ) + From 540eeb2fa5dc2746b3eca5fb9fe580f897dc0578 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 12:31:36 +0100 Subject: [PATCH 05/30] Created Login activity --- app/src/main/AndroidManifest.xml | 33 ++++++++++--------- .../KanbanCloneAndroid/LoginActivity.kt | 20 +++++++++++ app/src/main/res/layout/activity_login.xml | 10 ++++++ 3 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/LoginActivity.kt create mode 100644 app/src/main/res/layout/activity_login.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8034159..2c134d0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,23 +1,26 @@ + xmlns:tools="http://schemas.android.com/tools" > + + + - - + android:allowBackup="true" + android:dataExtractionRules="@xml/data_extraction_rules" + android:fullBackupContent="@xml/backup_rules" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:roundIcon="@mipmap/ic_launcher_round" + android:supportsRtl="true" + android:theme="@style/Theme.KanbanCloneAndroid" + android:usesCleartextTraffic="true" > + android:name=".LoginActivity" + android:exported="false" /> + diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/LoginActivity.kt b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/LoginActivity.kt new file mode 100644 index 0000000..44c6b77 --- /dev/null +++ b/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/LoginActivity.kt @@ -0,0 +1,20 @@ +package com.campusaula.edbole.KanbanCloneAndroid + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class LoginActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_login) + 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/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..99aaaf2 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file From 22c7fe8722f5c140ab5bfab0f13c2745a872ea52 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Wed, 4 Feb 2026 12:53:00 +0100 Subject: [PATCH 06/30] renamed package to follow kotlin naming conventions --- app/build.gradle.kts | 2 +- .../ExampleInstrumentedTest.kt | 2 +- app/src/main/AndroidManifest.xml | 4 +- .../MainActivity.kt | 2 +- .../kanban/Project.kt | 2 +- .../kanban/Task.kt | 2 +- .../kanban/User.kt | 2 +- app/src/main/res/layout/activity_login.xml | 50 ++++++++++++++++++- app/src/main/res/layout/activity_main.xml | 2 +- .../ExampleUnitTest.kt | 2 +- 10 files changed, 59 insertions(+), 11 deletions(-) rename app/src/androidTest/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/ExampleInstrumentedTest.kt (92%) rename app/src/main/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/MainActivity.kt (93%) rename app/src/main/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/kanban/Project.kt (90%) rename app/src/main/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/kanban/Task.kt (92%) rename app/src/main/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/kanban/User.kt (95%) rename app/src/test/java/com/campusaula/edbole/{KanbanCloneAndroid => kanban_clone_android}/ExampleUnitTest.kt (86%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8964957..f383972 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } android { - namespace = "com.campusaula.edbole.KanbanCloneAndroid" + namespace = "com.campusaula.edbole.kanban_clone_android" compileSdk { version = release(36) } diff --git a/app/src/androidTest/java/com/campusaula/edbole/KanbanCloneAndroid/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/campusaula/edbole/kanban_clone_android/ExampleInstrumentedTest.kt similarity index 92% rename from app/src/androidTest/java/com/campusaula/edbole/KanbanCloneAndroid/ExampleInstrumentedTest.kt rename to app/src/androidTest/java/com/campusaula/edbole/kanban_clone_android/ExampleInstrumentedTest.kt index 1548188..d6c0fca 100644 --- a/app/src/androidTest/java/com/campusaula/edbole/KanbanCloneAndroid/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/campusaula/edbole/kanban_clone_android/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.campusaula.edbole.KanbanCloneAndroid +package com.campusaula.edbole.kanban_clone_android import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c134d0..a595186 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,10 +16,10 @@ android:theme="@style/Theme.KanbanCloneAndroid" android:usesCleartextTraffic="true" > diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/MainActivity.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt similarity index 93% rename from app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/MainActivity.kt rename to app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt index 4a9ba34..87828e1 100644 --- a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/MainActivity.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/MainActivity.kt @@ -1,4 +1,4 @@ -package com.campusaula.edbole.KanbanCloneAndroid +package com.campusaula.edbole.kanban_clone_android import android.os.Bundle import androidx.activity.enableEdgeToEdge diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt similarity index 90% rename from app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt rename to app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt index 2fb3a32..f0a25b8 100644 --- a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Project.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Project.kt @@ -1,4 +1,4 @@ -package com.campusaula.edbole.KanbanCloneAndroid.kanban +package com.campusaula.edbole.kanban_clone_android.kanban import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Task.kt similarity index 92% rename from app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt rename to app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Task.kt index 3681057..aea0031 100644 --- a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/Task.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/Task.kt @@ -1,4 +1,4 @@ -package com.campusaula.edbole.KanbanCloneAndroid.kanban +package com.campusaula.edbole.kanban_clone_android.kanban import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/User.kt similarity index 95% rename from app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt rename to app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/User.kt index d4b8597..3c4496c 100644 --- a/app/src/main/java/com/campusaula/edbole/KanbanCloneAndroid/kanban/User.kt +++ b/app/src/main/java/com/campusaula/edbole/kanban_clone_android/kanban/User.kt @@ -1,4 +1,4 @@ -package com.campusaula.edbole.KanbanCloneAndroid.kanban +package com.campusaula.edbole.kanban_clone_android.kanban import com.google.gson.annotations.SerializedName diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 99aaaf2..4330ddd 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -5,6 +5,54 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".LoginActivity"> + tools:context="com.campusaula.edbole.kanban_clone_android.LoginActivity"> + + + + +