Skip to content
This repository was archived by the owner on Dec 16, 2023. It is now read-only.

Commit b88c6ff

Browse files
committed
Add delete account feature
1 parent 395169b commit b88c6ff

14 files changed

Lines changed: 101 additions & 12 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.marknkamau.justjava.data.network
2+
3+
import com.google.android.gms.auth.api.signin.GoogleSignInClient
4+
import com.marknjunge.core.data.network.GoogleSignInClientStub
5+
import kotlinx.coroutines.tasks.await
6+
7+
class GoogleSignInClientStubImpl(private val googleSignInClient: GoogleSignInClient) : GoogleSignInClientStub {
8+
override suspend fun signOut() {
9+
googleSignInClient.signOut().await()
10+
}
11+
}

app/src/main/java/com/marknkamau/justjava/di/Modules.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import com.google.android.gms.auth.api.signin.GoogleSignIn
55
import com.google.android.gms.auth.api.signin.GoogleSignInClient
66
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
77
import com.marknjunge.core.data.local.PreferencesRepository
8+
import com.marknjunge.core.data.network.GoogleSignInClientStub
89
import com.marknkamau.justjava.BuildConfig
910
import com.marknkamau.justjava.data.db.AppDatabase
1011
import com.marknkamau.justjava.data.db.DbRepository
1112
import com.marknkamau.justjava.data.db.DbRepositoryImpl
1213
import com.marknkamau.justjava.data.network.AppFirebaseService
1314
import com.marknkamau.justjava.data.network.FirebaseService
15+
import com.marknkamau.justjava.data.network.GoogleSignInClientStubImpl
1416
import com.marknkamau.justjava.data.preferences.PreferencesRepositoryImpl
1517
import com.marknkamau.justjava.ui.addressBook.AddressBookViewModel
1618
import com.marknkamau.justjava.ui.cart.CartViewModel
@@ -44,6 +46,8 @@ val appModule = module {
4446
GoogleSignIn.getClient(androidContext(), gso)
4547
}
4648

49+
single<GoogleSignInClientStub> { GoogleSignInClientStubImpl(get()) }
50+
4751
single<FirebaseService> { AppFirebaseService() }
4852
}
4953

app/src/main/java/com/marknkamau/justjava/ui/BaseActivity.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@ import com.marknkamau.justjava.utils.toast
1717
import kotlinx.coroutines.CoroutineScope
1818
import kotlinx.coroutines.Dispatchers
1919
import kotlinx.coroutines.launch
20-
import kotlinx.coroutines.tasks.await
2120
import org.koin.android.ext.android.inject
2221

2322
abstract class BaseActivity : AppCompatActivity() {
2423

2524
private val authRepository: AuthRepository by inject()
2625
private val preferencesRepository: PreferencesRepository by inject()
27-
private val googleSignInClient: GoogleSignInClient by inject()
2826
private val coroutineScope by lazy { CoroutineScope(Dispatchers.Main) }
2927

3028
override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -73,15 +71,9 @@ abstract class BaseActivity : AppCompatActivity() {
7371
}
7472

7573
private fun logout() {
76-
val signedInWithGoogle = preferencesRepository.user!!.signInMethod == "GOOGLE"
77-
7874
coroutineScope.launch {
7975
when (val resource = authRepository.signOut()) {
8076
is Resource.Success -> {
81-
if (signedInWithGoogle) {
82-
googleSignInClient.signOut().await()
83-
}
84-
8577
// If this is ProfileActivity, leave it
8678
(this@BaseActivity as? ProfileActivity)?.finish()
8779
toast("Logged out")

app/src/main/java/com/marknkamau/justjava/ui/profile/ProfileActivity.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.marknkamau.justjava.ui.profile
33
import android.content.Intent
44
import android.os.Bundle
55
import android.view.View
6+
import androidx.appcompat.app.AlertDialog
67
import androidx.lifecycle.Observer
78
import androidx.transition.TransitionManager
89
import com.marknjunge.core.data.model.Resource
@@ -51,6 +52,14 @@ class ProfileActivity : BaseActivity() {
5152
llOrders.setOnClickListener {
5253
startActivity(Intent(this, OrdersActivity::class.java))
5354
}
55+
btnDeleteAccount.setOnClickListener {
56+
AlertDialog.Builder(this)
57+
.setTitle("Delete account")
58+
.setMessage("Are you sure you want to delete your account?")
59+
.setPositiveButton("Delete") { _, _ -> deleteAccount() }
60+
.setNegativeButton("Cancel") { dialog, _ -> dialog.dismiss() }
61+
.show()
62+
}
5463

5564
profileViewModel.getCurrentUser()
5665
}
@@ -114,6 +123,19 @@ class ProfileActivity : BaseActivity() {
114123
})
115124
}
116125

126+
private fun deleteAccount() {
127+
profileViewModel.deleteAccount().observe(this, Observer { resource ->
128+
when (resource) {
129+
is Resource.Success -> {
130+
finish()
131+
}
132+
is Resource.Failure -> {
133+
toast(resource.message)
134+
}
135+
}
136+
})
137+
}
138+
117139
private fun isValid(): Boolean {
118140
var valid = true
119141

app/src/main/java/com/marknkamau/justjava/ui/profile/ProfileViewModel.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,16 @@ class ProfileViewModel(private val usersRepository: UsersRepository) : ViewModel
3636

3737
return livedata
3838
}
39+
40+
fun deleteAccount():LiveData<Resource<Unit>>{
41+
val livedata = MutableLiveData<Resource<Unit>>()
42+
43+
viewModelScope.launch {
44+
_loading.value = true
45+
livedata.value = usersRepository.deleteUser()
46+
_loading.value = false
47+
}
48+
49+
return livedata
50+
}
3951
}

app/src/main/res/layout/activity_profile.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,4 +241,15 @@
241241
app:layout_constraintStart_toStartOf="parent"
242242
app:layout_constraintTop_toBottomOf="@+id/llOrders" />
243243

244+
<com.google.android.material.button.MaterialButton
245+
android:id="@+id/btnDeleteAccount"
246+
style="@style/AppTheme.Button.Danger"
247+
android:layout_width="wrap_content"
248+
android:layout_height="wrap_content"
249+
android:layout_marginStart="16dp"
250+
android:layout_marginTop="16dp"
251+
android:text="Delete Account"
252+
app:layout_constraintStart_toStartOf="parent"
253+
app:layout_constraintTop_toBottomOf="@+id/view5" />
254+
244255
</androidx.constraintlayout.widget.ConstraintLayout>

app/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
<color name="colorTextTertiary">#E0E0E0</color>
1010
<color name="colorDisabled">#CCCCCC</color>
1111
<color name="colorDisabledText">#888888</color>
12+
<color name="colorDanger">#E53E3E</color>
1213
</resources>

app/src/main/res/values/styles.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@
106106
<item name="android:textColor">@color/color_states_button</item>
107107
</style>
108108

109+
<style name="AppTheme.Button.Danger" parent="Widget.MaterialComponents.Button.OutlinedButton">
110+
<item name="strokeColor">@color/colorDanger</item>
111+
<item name="android:textColor">@color/colorDanger</item>
112+
<item name="rippleColor">@color/colorDanger</item>
113+
</style>
114+
109115
<style name="AppTheme.InputField" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
110116

111117
</style>

core/src/main/java/com/marknjunge/core/data/model/User.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ data class User(
2929
@SerialName("fcmToken")
3030
val fcmToken: String?,
3131

32+
// TODO Use enum
3233
@SerialName("signInMethod")
3334
val signInMethod: String,
3435

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.marknjunge.core.data.network
2+
3+
interface GoogleSignInClientStub {
4+
suspend fun signOut()
5+
}

0 commit comments

Comments
 (0)