11package com.example.politi_cal.screens
22
3+ import android.widget.Toast
34import androidx.compose.foundation.layout.*
45import androidx.compose.foundation.lazy.LazyColumn
5- import androidx.compose.material.ButtonDefaults
6- import androidx.compose.material.MaterialTheme
7- import androidx.compose.material.Text
8- import androidx.compose.material.TextButton
9- import androidx.compose.runtime.Composable
6+ import androidx.compose.foundation.text.KeyboardActions
7+ import androidx.compose.foundation.text.KeyboardOptions
8+ import androidx.compose.material.*
9+ import androidx.compose.runtime.*
1010import androidx.compose.ui.Alignment
1111import androidx.compose.ui.Modifier
1212import androidx.compose.ui.platform.LocalContext
13+ import androidx.compose.ui.text.input.ImeAction
14+ import androidx.compose.ui.text.input.KeyboardType
15+ import androidx.compose.ui.text.input.PasswordVisualTransformation
16+ import androidx.compose.ui.text.input.VisualTransformation
1317import androidx.compose.ui.unit.dp
1418import androidx.navigation.NavController
1519import com.example.politi_cal.DBObjects.UserVoteDBObj
1620import com.example.politi_cal.Screen
1721import com.example.politi_cal.isAdminState
1822import com.example.politi_cal.models.User
23+ import com.example.politi_cal.userCollectionRef
24+ import com.google.firebase.auth.EmailAuthProvider
1925import com.google.firebase.auth.FirebaseAuth
26+ import com.google.firebase.auth.ktx.auth
27+ import com.google.firebase.ktx.Firebase
2028
2129@Composable
2230fun UserProfileScreen (
2331 navController : NavController , auth : FirebaseAuth , user : User
2432) {
33+ var password by remember { mutableStateOf(" " ) }
34+ var isPasswordVisiable by remember {
35+ mutableStateOf(false )
36+ }
37+
2538 LazyColumn (content = {
2639
2740 item {
@@ -78,7 +91,12 @@ fun UserProfileScreen(
7891 onClick = {
7992 var DBobj = UserVoteDBObj (context)
8093 DBobj .deleteAllVotesByUserID(user.email.toString())
81- navController.navigate(Screen .SwipeScreen .route)
94+ // toast all votes deleted
95+ Toast .makeText(
96+ context,
97+ " All votes deleted" ,
98+ Toast .LENGTH_SHORT
99+ ).show()
82100
83101
84102 },
@@ -93,6 +111,71 @@ fun UserProfileScreen(
93111 ) {
94112 Text (text = " Delete My Votes" )
95113 }
114+ OutlinedTextField (
115+ value = password,
116+ onValueChange = {
117+ password = it
118+ },
119+ label = { Text (text = " Enter Password" ) },
120+ modifier = Modifier
121+ .fillMaxWidth()
122+ .padding(8 .dp),
123+ singleLine = true ,
124+ keyboardOptions = KeyboardOptions (
125+ keyboardType = KeyboardType .Password , imeAction = ImeAction .Done
126+ ),
127+ visualTransformation = if (isPasswordVisiable) VisualTransformation .None else PasswordVisualTransformation ()
128+ )
129+ // delete user button and write on him "delete user " and navigate to login screen
130+ TextButton (
131+ onClick = {
132+ val userToDeleteNow = Firebase .auth.currentUser!!
133+ // get email user
134+ val credential = EmailAuthProvider
135+ .getCredential(userToDeleteNow.email.toString(), password)
136+ userToDeleteNow.reauthenticate(credential)
137+ .addOnCompleteListener {
138+ if (it.isSuccessful) {
139+ var DBobj = UserVoteDBObj (context)
140+ DBobj .deleteAllVotesByUserID(user.email.toString())
141+ userCollectionRef.document(userToDeleteNow.email.toString())
142+ .delete()
143+ .addOnSuccessListener {
144+ userToDeleteNow.delete()
145+ .addOnSuccessListener {
146+ navController.navigate(Screen .LoginScreen .route)
147+ }
148+ .addOnFailureListener {
149+ // An error happened.
150+ }
151+ }
152+ .addOnFailureListener {
153+ // An error happened.
154+ }
155+
156+
157+
158+ userToDeleteNow.delete()
159+ .addOnCompleteListener { task ->
160+ if (task.isSuccessful) {
161+ navController.navigate(Screen .LoginScreen .route)
162+ }
163+ }
164+ }
165+ }
166+
167+ },
168+ modifier = Modifier
169+ .fillMaxWidth()
170+ .padding(8 .dp),
171+ colors = ButtonDefaults .buttonColors(
172+ backgroundColor = MaterialTheme .colors.primary
173+ )) {
174+ Text (text = " Delete User" )
175+ }
176+
177+
178+
96179 }
97180 }
98181 }
0 commit comments