Skip to content

Commit

Permalink
RC1 bugfixes, fixes #124, fixes #125, fixes #126
Browse files Browse the repository at this point in the history
  • Loading branch information
NikM3 committed Apr 7, 2023
1 parent f6e43c8 commit d990234
Show file tree
Hide file tree
Showing 15 changed files with 140 additions and 55 deletions.
15 changes: 10 additions & 5 deletions app/src/main/java/com/symphony/mrfit/data/login/LoginRepository.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
/*
* Created by Team Symphony on 2/24/23, 11:21 PM
* Created by Team Symphony on 4/7/23, 7:13 PM
* Copyright (c) 2023 . All rights reserved.
* Last modified 2/24/23, 11:20 PM
* Last modified 4/7/23, 7:13 PM
*/

package com.symphony.mrfit.data.login

import android.app.Activity
import android.content.ContentValues.TAG
import android.net.Uri
import android.util.Log
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
Expand Down Expand Up @@ -101,17 +102,20 @@ class LoginRepository {
/**
* Say goodbye to our lovely user. Remove them from Auth and Database
*/
fun delete(){
suspend fun delete() {
val user = firebaseAuth.currentUser!!

userRepository.removeUser()

user.delete()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d(TAG, "User account deleted.")
}
}
.addOnFailureListener { e ->
Log.d(TAG, "Account deletion failed: $e")
}

userRepository.removeUser()
}

/**
Expand Down Expand Up @@ -147,6 +151,7 @@ class LoginRepository {
private suspend fun addNewUser(user: User) {
Log.d(TAG, "Telling repo to add ${currentUser?.name} to the database")
userRepository.addNewUser(user)
userRepository.changeProfilePicture(Uri.parse("android.resource://com.symphony.mrfit/drawable/placeholder_profile_picture"))
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Created by Team Symphony on 4/2/23, 9:44 PM
* Created by Team Symphony on 4/7/23, 7:13 PM
* Copyright (c) 2023 . All rights reserved.
* Last modified 4/2/23, 9:42 PM
* Last modified 4/7/23, 7:13 PM
*/

package com.symphony.mrfit.data.profile
Expand All @@ -19,6 +19,7 @@ import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StorageReference
import com.google.firebase.storage.ktx.storage
import com.symphony.mrfit.data.login.LoginRepository
import com.symphony.mrfit.data.model.Goal
import com.symphony.mrfit.data.model.History
import com.symphony.mrfit.data.model.Notification
Expand Down Expand Up @@ -52,7 +53,14 @@ class UserRepository {
Log.d(TAG, "Retrieving User ${auth.currentUser!!.uid} from Firestore")
val doc = auth.currentUser!!.uid
val docRef = database.collection(USER_COLLECTION).document(doc)
return try { val snapshot = docRef.get().await()
return try {
val snapshot = docRef.get().await()
// Something wrong happened when deleting this user, fix it
if (snapshot.get("userID") == null) {
LoginRepository().delete()
LoginRepository().logout()
User("delete")
}
snapshot.toObject<User>()
} catch (e: java.lang.Exception) {
Log.w(TAG, "Error getting document", e)
Expand Down Expand Up @@ -87,13 +95,17 @@ class UserRepository {
/**
* Only called when a user is being deleted, remove their document from Firestore
*/
fun removeUser() {
suspend fun removeUser() {
val user = auth.currentUser!!
Log.d(TAG, "Removing User ${user.uid} from Firestore")
database.collection(USER_COLLECTION).document(user.uid)
.delete()
.addOnSuccessListener { Log.d(TAG, "DocumentSnapshot successfully deleted!") }
.addOnFailureListener { e -> Log.w(TAG, "Error deleting document", e) }
try {
database.collection(USER_COLLECTION).document(user.uid)
.delete()
.await()
Log.d(TAG, "DocumentSnapshot successfully deleted!")
} catch (e: java.lang.Exception) {
Log.w(TAG, "Error deleting document", e)
}
}

/**
Expand Down
34 changes: 29 additions & 5 deletions app/src/main/java/com/symphony/mrfit/ui/HomeActivity.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Created by Team Symphony on 4/2/23, 10:27 PM
* Created by Team Symphony on 4/7/23, 7:13 PM
* Copyright (c) 2023 . All rights reserved.
* Last modified 4/2/23, 10:22 PM
* Last modified 4/7/23, 7:13 PM
*/

package com.symphony.mrfit.ui
Expand All @@ -11,13 +11,15 @@ import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.signature.ObjectKey
import com.google.firebase.auth.FirebaseAuth
import com.symphony.mrfit.R
import com.symphony.mrfit.data.exercise.HistoryAdapter
import com.symphony.mrfit.data.profile.ProfileViewModel
Expand All @@ -29,18 +31,29 @@ class HomeActivity : AppCompatActivity() {
private var layoutManager: RecyclerView.LayoutManager? = null
private lateinit var profileViewModel: ProfileViewModel
private lateinit var binding: ActivityHomeBinding
private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
val firebaseUser = firebaseAuth.currentUser
if (firebaseUser == null) {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
}
}
private val firebaseAuth = FirebaseAuth.getInstance()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = ActivityHomeBinding.inflate(layoutInflater)
setContentView(binding.root)
profileViewModel = ViewModelProvider(
this, ProfileViewModelFactory())[ProfileViewModel::class.java]
this, ProfileViewModelFactory()
)[ProfileViewModel::class.java]
}

override fun onStart() {
super.onStart()
// Return to the login screen if the User is somehow not logged in
firebaseAuth.addAuthStateListener(this.authStateListener)

val screen = binding.homeScreenView
val spinner = binding.loadingSpinner
Expand All @@ -51,7 +64,6 @@ class HomeActivity : AppCompatActivity() {
val startWorkout = binding.workoutButton
val historyList = binding.historyList

// Hide the screen till loading is done
screen.visibility = View.GONE
spinner.visibility = View.VISIBLE

Expand All @@ -65,9 +77,16 @@ class HomeActivity : AppCompatActivity() {
historyList.layoutManager = layoutManager

profileViewModel.loggedInUser.observe(this, Observer {
Log.d(ContentValues.TAG, "Filling in username")
val loggedInUser = it ?: return@Observer

if (loggedInUser.userID == "delete") {
Toast.makeText(
this,
"We're sorry! There was an error in your account and it had to be reset. Please log back in.",
Toast.LENGTH_LONG
).show()
}

Glide.with(this)
.load(profileViewModel.getProfilePicture())
.placeholder(R.drawable.placeholder_profile_picture)
Expand Down Expand Up @@ -102,6 +121,11 @@ class HomeActivity : AppCompatActivity() {
}
}

override fun onStop() {
super.onStop()
firebaseAuth.removeAuthStateListener(this.authStateListener)
}

override fun onSupportNavigateUp(): Boolean {
onBackPressedDispatcher.onBackPressed()
return true
Expand Down
31 changes: 28 additions & 3 deletions app/src/main/java/com/symphony/mrfit/ui/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Created by Team Symphony on 3/18/23, 1:06 PM
* Created by Team Symphony on 4/7/23, 7:13 PM
* Copyright (c) 2023 . All rights reserved.
* Last modified 3/18/23, 1:02 PM
* Last modified 4/7/23, 7:13 PM
*/

package com.symphony.mrfit.ui
Expand All @@ -10,6 +10,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import com.symphony.mrfit.R
Expand All @@ -19,16 +20,40 @@ import com.symphony.mrfit.R
*/

class MainActivity : AppCompatActivity() {

private val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
val firebaseUser = firebaseAuth.currentUser
if (firebaseUser != null) {
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
finish()
}
}
private val firebaseAuth = FirebaseAuth.getInstance()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

override fun onStart() {
super.onStart()
// If User is already logged in, skip to Home screen
// firebaseAuth.addAuthStateListener(this.authStateListener)
val user = Firebase.auth.currentUser
if (user != null) {
// User is signed in
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
finish()
} else {
// No user is signed in
}
setContentView(R.layout.activity_main)
}

override fun onStop() {
super.onStop()
firebaseAuth.removeAuthStateListener(this.authStateListener)
}

override fun onTouchEvent(event: MotionEvent): Boolean {
Expand Down
11 changes: 9 additions & 2 deletions app/src/main/java/com/symphony/mrfit/ui/UserProfileActivity.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Created by Team Symphony on 4/2/23, 10:27 PM
* Created by Team Symphony on 4/7/23, 7:13 PM
* Copyright (c) 2023 . All rights reserved.
* Last modified 4/2/23, 10:22 PM
* Last modified 4/7/23, 7:13 PM
*/

package com.symphony.mrfit.ui
Expand All @@ -25,6 +25,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide
import com.bumptech.glide.signature.ObjectKey
import com.google.android.gms.auth.api.identity.Identity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
Expand Down Expand Up @@ -195,6 +196,9 @@ class UserProfileActivity : AppCompatActivity() {
}

logout.setOnClickListener {
// Attempt to log out of google if User signed in with it
val signInClient = Identity.getSignInClient(this)
signInClient.signOut()
loginViewModel.logout()
val intent = Intent(this, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Expand Down Expand Up @@ -319,6 +323,9 @@ class UserProfileActivity : AppCompatActivity() {
}

private fun deleteAccount() {
// Attempt to log out of google if User signed in with it
val signInClient = Identity.getSignInClient(this)
signInClient.signOut()
loginViewModel.delete()
val intent = Intent(this, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/res/layout/activity_exercise.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Created by Team Symphony on 4/1/23, 4:23 AM
~ Created by Team Symphony on 4/7/23, 7:13 PM
~ Copyright (c) 2023 . All rights reserved.
~ Last modified 4/1/23, 4:20 AM
~ Last modified 4/7/23, 7:12 PM
-->

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
Expand Down Expand Up @@ -58,6 +58,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_exercise_search"
android:inputType="textLongMessage|textMultiLine|text"
tools:ignore="VisualLintTextFieldSize" />
</com.google.android.material.textfield.TextInputLayout>

Expand Down
6 changes: 3 additions & 3 deletions app/src/main/res/layout/activity_home.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Created by Team Symphony on 4/2/23, 8:15 PM
~ Created by Team Symphony on 4/7/23, 7:13 PM
~ Copyright (c) 2023 . All rights reserved.
~ Last modified 4/2/23, 8:11 PM
~ Last modified 4/7/23, 1:44 PM
-->

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
Expand Down Expand Up @@ -43,7 +43,7 @@
android:layout_margin="6dp"
android:layout_weight="0"
android:contentDescription="@string/profile_picture"
app:srcCompat="@drawable/cactuar" />
app:srcCompat="@drawable/placeholder_profile_picture" />

<LinearLayout
android:layout_width="match_parent"
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/res/layout/activity_notification.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Created by Team Symphony on 4/2/23, 4:25 AM
~ Created by Team Symphony on 4/7/23, 7:13 PM
~ Copyright (c) 2023 . All rights reserved.
~ Last modified 4/2/23, 4:24 AM
~ Last modified 4/7/23, 6:43 PM
-->

<LinearLayout
Expand Down Expand Up @@ -34,6 +34,7 @@
android:layout_height="wrap_content"
android:gravity="start"
android:hint="Message"
android:inputType="text"
android:minHeight="100dp" />

</com.google.android.material.textfield.TextInputLayout>
Expand Down
7 changes: 5 additions & 2 deletions app/src/main/res/layout/activity_register.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Created by Team Symphony on 3/30/23, 5:52 PM
~ Created by Team Symphony on 4/7/23, 7:13 PM
~ Copyright (c) 2023 . All rights reserved.
~ Last modified 3/30/23, 4:31 PM
~ Last modified 4/7/23, 6:43 PM
-->

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
Expand Down Expand Up @@ -54,6 +54,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_email"
android:inputType="textEmailAddress"
android:minHeight="48dp" />
</com.google.android.material.textfield.TextInputLayout>

Expand All @@ -68,6 +69,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:minHeight="48dp" />
</com.google.android.material.textfield.TextInputLayout>

Expand All @@ -82,6 +84,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_confirm_password"
android:inputType="textPassword"
android:minHeight="48dp" />
</com.google.android.material.textfield.TextInputLayout>

Expand Down
Loading

0 comments on commit d990234

Please sign in to comment.