瀏覽代碼

change password API integrated

Khubaib 1 年之前
父節點
當前提交
c7831dcb60

+ 8 - 0
app/src/main/java/com/vpn/fastestvpnservice/retrofit/Api.kt

@@ -74,4 +74,12 @@ interface Api {
         @Field("email") email: String?
     ): Call<Any>
 
+    @FormUrlEncoded
+    @POST("update-password")
+    fun changePassword(
+        @Field("current_password") current_password: String?,
+        @Field("new_password") new_password: String?,
+        @Field("confirm_password") confirm_password: String?
+    ): Call<Any>
+
 }

+ 10 - 2
app/src/main/java/com/vpn/fastestvpnservice/screens/ForgotPassword.kt

@@ -69,6 +69,7 @@ fun ForgotPassword(navHostController: NavHostController) {
     val focusManager = LocalFocusManager.current
     val loginViewModel: LoginViewModel = viewModel()
     val snackBarState = remember { SnackbarHostState() }
+    val snackBarStateRed = remember { SnackbarHostState() }
     val coroutineScope = rememberCoroutineScope()
 
     Box(
@@ -93,6 +94,7 @@ fun ForgotPassword(navHostController: NavHostController) {
 
     ) {
         ShowCustomSnackBar(snackBarState, R.color.yellow_text, R.color.dark_blue_gray_text)
+        ShowCustomSnackBar(snackBarStateRed, R.color.Red, R.color.white)
 
         Column (
             modifier = Modifier
@@ -249,8 +251,14 @@ fun ForgotPassword(navHostController: NavHostController) {
                 forgotPasswordResponse.value?.let { data ->
                     Log.d("forgotPassword: ","forgotPassword Screen: ${data.status} ${data.message}")
 
-                    coroutineScope.launch {
-                        data.message?.let { snackBarState.showSnackbar(it) }
+                    if (data.status) {
+                        coroutineScope.launch {
+                            data.message?.let { snackBarState.showSnackbar(it) }
+                        }
+                    } else {
+                        coroutineScope.launch {
+                            data.message?.let { snackBarStateRed.showSnackbar(it) }
+                        }
                     }
                     loginViewModel.mutableLiveDataForgotPassword.value = null
                 }

+ 58 - 6
app/src/main/java/com/vpn/fastestvpnservice/screens/accountScreensAll/ChangePasswordScreen.kt

@@ -32,12 +32,15 @@ import androidx.compose.material3.AlertDialog
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
 import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.SnackbarHostState
 import androidx.compose.material3.TextField
 import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -59,17 +62,29 @@ import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.lifecycle.viewmodel.compose.viewModel
 import androidx.navigation.NavHostController
 import androidx.navigation.compose.rememberNavController
 import com.vpn.fastestvpnservice.R
 import com.vpn.fastestvpnservice.beans.subscriptionPackageList
 import com.vpn.fastestvpnservice.customItems.getSelectedPosition
 import com.vpn.fastestvpnservice.ui.theme.customTypography2
+import com.vpn.fastestvpnservice.viewmodels.AccountViewModel
+import com.vpn.fastestvpnservice.views.ShowCustomSnackBar
+import kotlinx.coroutines.launch
 
 @Composable
 fun ChangePassword(navHostController: NavHostController) {
     val keyboardController = LocalSoftwareKeyboardController.current
     val focusManager = LocalFocusManager.current
+    val accountViewModel: AccountViewModel = viewModel()
+    val snackBarState = remember { SnackbarHostState() }
+    val snackBarStateRed = remember { SnackbarHostState() }
+    val coroutineScope = rememberCoroutineScope()
+
+    var currentPassword by remember { mutableStateOf("") }
+    var newPassword by remember { mutableStateOf("") }
+    var confirmPassword by remember { mutableStateOf("") }
 
     Box(
         modifier = Modifier
@@ -82,6 +97,9 @@ fun ChangePassword(navHostController: NavHostController) {
                 }
             }
     ) {
+        ShowCustomSnackBar(snackBarState, R.color.yellow_text, R.color.dark_blue_gray_text)
+        ShowCustomSnackBar(snackBarStateRed, R.color.Red, R.color.white)
+
         HeaderRowCP(navHostController = navHostController)
 
         Column(
@@ -93,15 +111,26 @@ fun ChangePassword(navHostController: NavHostController) {
                 .background(Color.Transparent)
 
         ) {
-            TextFieldCurrPass()
+            TextFieldCurrPass() {
+                currentPassword = it
+            }
             Spacer(modifier = Modifier.height(25.dp))
-            TextFieldNewPass()
+            TextFieldNewPass() {
+                newPassword = it
+            }
             Spacer(modifier = Modifier.height(25.dp))
-            TextFieldReWriteNewPass()
+            TextFieldReWriteNewPass() {
+                confirmPassword = it
+            }
 
             Button(
                 onClick = {
                     Log.d("test_button", "onClick")
+                    Log.d("ChangePassword: ","TextFieldCurrPass = $currentPassword $newPassword $confirmPassword")
+
+                    accountViewModel.changePassword(
+                        currentPassword, newPassword, confirmPassword
+                    )
                 },
                 modifier = Modifier
                     .padding(
@@ -128,13 +157,33 @@ fun ChangePassword(navHostController: NavHostController) {
                         fontStyle = FontStyle.Normal
                     )
                 )
+
+                val changePasswordResponse = accountViewModel.liveDataChangePassword.observeAsState()
+                changePasswordResponse.value?.let { data ->
+                    Log.d("ChangePassword: ","ChangePassword Response F_API: ${data.status} ${data.message}")
+
+                    if (data.status) {
+                        coroutineScope.launch {
+                            data.message?.let { it1 -> snackBarState.showSnackbar(it1) }
+                        }
+//                        currentPassword = ""
+//                        newPassword = ""
+//                        confirmPassword = ""
+                    } else {
+                        coroutineScope.launch {
+                            data.message?.let { it1 -> snackBarStateRed.showSnackbar(it1) }
+                        }
+                    }
+
+                    accountViewModel.mutableLiveDataChangePassword.value = null
+                }
             }
         }
     }
 }
 
 @Composable
-fun ColumnScope.TextFieldCurrPass() {
+fun ColumnScope.TextFieldCurrPass(currentPassword: (String) -> Unit) {
     val keyboardController = LocalSoftwareKeyboardController.current
     val focusManager = LocalFocusManager.current
 
@@ -150,6 +199,7 @@ fun ColumnScope.TextFieldCurrPass() {
         onValueChange = {
             Log.d("onClick_test", "onValueChange -> ")
             passwordChanged = it
+            currentPassword(passwordChanged)
         },
 
         textStyle = customTextStyle,
@@ -249,7 +299,7 @@ fun ColumnScope.TextFieldCurrPass() {
 }
 
 @Composable
-fun ColumnScope.TextFieldNewPass() {
+fun ColumnScope.TextFieldNewPass(newPassword: (String) -> Unit) {
     val keyboardController = LocalSoftwareKeyboardController.current
     val focusManager = LocalFocusManager.current
 
@@ -264,6 +314,7 @@ fun ColumnScope.TextFieldNewPass() {
         onValueChange = {
             Log.d("onClick_test", "onValueChange -> ")
             passwordChanged = it
+            newPassword(passwordChanged)
         },
 
         textStyle = customTextStyle,
@@ -365,7 +416,7 @@ fun ColumnScope.TextFieldNewPass() {
 }
 
 @Composable
-fun ColumnScope.TextFieldReWriteNewPass() {
+fun ColumnScope.TextFieldReWriteNewPass(confirmPassword: (String) -> Unit) {
     val keyboardController = LocalSoftwareKeyboardController.current
     val focusManager = LocalFocusManager.current
 
@@ -380,6 +431,7 @@ fun ColumnScope.TextFieldReWriteNewPass() {
         onValueChange = {
             Log.d("onClick_test", "onValueChange -> ")
             passwordChanged = it
+            confirmPassword(passwordChanged)
         },
 
         textStyle = customTextStyle,

+ 33 - 0
app/src/main/java/com/vpn/fastestvpnservice/viewmodels/AccountViewModel.kt

@@ -25,6 +25,9 @@ class AccountViewModel: ViewModel() {
     var mutableLiveDataDeleteStatus = MutableLiveData<Boolean>(false)
     var liveDataDeleteStatus: LiveData<Boolean> = mutableLiveDataDeleteStatus
 
+    var mutableLiveDataChangePassword = MutableLiveData<DataResponse<Objects>?>()
+    var liveDataChangePassword: LiveData<DataResponse<Objects>?> = mutableLiveDataChangePassword
+
     fun logout(){
         WebServiceFactory.getInstance().logout().enqueue(
             RetrofitNetworkHandling<Any>(
@@ -97,4 +100,34 @@ class AccountViewModel: ViewModel() {
         mutableLiveDataDeleteStatus.value = status
     }
 
+    fun changePassword(current_password: String, new_password: String, confirm_password: String) {
+        Log.d("ChangePassword: ","email = $current_password $new_password $confirm_password")
+        WebServiceFactory.getInstance()
+            .changePassword(current_password, new_password, confirm_password).enqueue(
+                RetrofitNetworkHandling<Any>(object :
+                    RetrofitNetworkHandling.ResponseCallback<Any> {
+                    override fun onSuccess(call: Call<Any>?, response: Any?) {
+                        try {
+                            val gson = Gson()
+                            val jsonString = gson.toJson(response)
+                            val type = object : TypeToken<DataResponse<Objects>>() {}.type
+                            val data = gson.fromJson<DataResponse<Objects>>(jsonString, type)
+                            mutableLiveDataChangePassword.value = data
+
+                            Log.d("ChangePassword: ","ChangePassword Response: ${data.status} ${data.message}")
+
+                        } catch (ex: Exception) {
+                        }
+                    }
+
+                    override fun onFail(call: Call<Any>?, response: Any?) {
+                        mutableLiveDataChangePassword.value = null
+                    }
+
+                    override fun onError(call: Call<Any>?, response: Any?) {
+                        mutableLiveDataChangePassword.value = null
+                    }
+                })
+            )
+    }
 }