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