diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index f2d236a..16435b7 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -58,6 +58,8 @@ kotlin {
dependencies {
implementation(libs.androidx.core.ktx)
+ implementation(libs.androidx.lifecycle.livedata)
+ implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.constraintlayout)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a43457f..27e3837 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+ if (currentSessionUid() != userId) return@addOnSuccessListener
val categories = mutableListOf()
for (document in result) {
val name = document.getString("name") ?: ""
@@ -111,13 +110,14 @@ class Categories : AppCompatActivity() {
"timeSpent" to 0L // Consider if you need this field
)
- val userId = auth.currentUser?.uid
+ val userId = currentSessionUid()
if (userId != null) {
firestore.collection("users")
.document(userId)
.collection("categories")
.add(categoryData)
.addOnSuccessListener { documentReference ->
+ if (currentSessionUid() != userId) return@addOnSuccessListener
Log.d("Categories", "Category added with ID: ${documentReference.id}")
Toast.makeText(this, "Category added: $categoryName", Toast.LENGTH_SHORT).show()
// Clear input fields
@@ -144,7 +144,7 @@ class Categories : AppCompatActivity() {
// Function to delete a category (add this inside the Categories activity)
private fun deleteCategory(category: Category) {
- val userId = auth.currentUser?.uid
+ val userId = currentSessionUid()
if (userId != null) {
firestore.collection("users")
@@ -153,6 +153,7 @@ class Categories : AppCompatActivity() {
.document(category.documentId) // Use category.documentId
.delete()
.addOnSuccessListener {
+ if (currentSessionUid() != userId) return@addOnSuccessListener
Log.d("Categories", "Category deleted with ID: ${category.documentId}")
Toast.makeText(this, "Category deleted: ${category.name}", Toast.LENGTH_SHORT).show()
fetchDataFromFirestore()
diff --git a/app/src/main/java/com/example/acetimetracker/EditProfileActivity.kt b/app/src/main/java/com/example/acetimetracker/EditProfileActivity.kt
index 42831dc..05942c3 100644
--- a/app/src/main/java/com/example/acetimetracker/EditProfileActivity.kt
+++ b/app/src/main/java/com/example/acetimetracker/EditProfileActivity.kt
@@ -2,183 +2,62 @@ package com.example.acetimetracker
import android.app.Activity
import android.content.Intent
-import android.net.Uri
import android.os.Bundle
-import android.util.Log
import android.view.View
-import android.view.WindowManager
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
-import android.widget.Toast
+import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
-import androidx.appcompat.app.AppCompatActivity
-import com.airbnb.lottie.LottieAnimationView
-import com.airbnb.lottie.LottieDrawable
+import androidx.core.widget.doAfterTextChanged
+import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CircleCrop
-import com.google.firebase.auth.FirebaseAuth
-import com.google.firebase.firestore.FirebaseFirestore
-import com.google.firebase.firestore.SetOptions
-import com.google.firebase.storage.FirebaseStorage
-import java.util.UUID
+import com.example.acetimetracker.account.*
-class EditProfileActivity : AppCompatActivity() {
-
- private lateinit var auth: FirebaseAuth
- private lateinit var firestore: FirebaseFirestore
- private lateinit var storage: FirebaseStorage
- private var selectedImageUri: Uri? = null
- private lateinit var profilePictureUrl: String
- private lateinit var profileImageView: ImageView
- private lateinit var profilePictureLoadingAnimation: LottieAnimationView
-
- // Use an ActivityResultLauncher for the image picker
- private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
- if (result.resultCode == Activity.RESULT_OK) {
- selectedImageUri = result.data?.data
- if (selectedImageUri != null) {
- uploadImageToFirebaseStorage(selectedImageUri)
- }
- }
+class EditProfileActivity : AccountActivity() {
+ private val model by lazy { ViewModelProvider(this, AccountViewModelFactory(accounts))[ProfileViewModel::class.java] }
+ private var displayedPhoto: String? = null
+ private val picker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == Activity.RESULT_OK && currentSessionUid() != null) result.data?.data?.let(model::upload)
}
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ if (!sessionReady) return
setContentView(R.layout.activity_edit_profile)
-
- auth = FirebaseAuth.getInstance()
- firestore = FirebaseFirestore.getInstance()
- storage = FirebaseStorage.getInstance()
-
- val editDisplayNameEditText = findViewById(R.id.editDisplayNameEditText)
- val editEmailEditText = findViewById(R.id.editEmailEditText)
- val uploadProfilePictureButton = findViewById