Untitled
unknown
plain_text
a year ago
11 kB
12
Indexable
package com.example.safety.activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import com.example.safety.api.RetrofitInstance
import com.example.safety.common.Constants
import com.example.safety.common.SharedPrefFile
import com.example.safety.databinding.ActivityLoginUserBinding
import com.example.safety.models.APIResponseModel
import com.example.safety.models.ForgotPasswordRequest
import com.example.safety.models.LoginInfoModel
import com.example.safety.models.VerifiedUserModel
import org.json.JSONObject
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
/**
* LoginUserActivity
*
* This activity handles user login functionality.
* It provides UI for users to enter their credentials and authenticate themselves.
*/
class LoginUserActivity : AppCompatActivity() {
private val TAG = "LoginUserActivity" // Tag for logging
private lateinit var binding: ActivityLoginUserBinding // View binding for activity layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Initialize Retrofit instance for network calls
val retrofit = RetrofitInstance.initialize()
// Initialize shared preferences for storing user data
val sharedpref = SharedPrefFile
sharedpref.init(this)
// Set up view binding for activity layout
binding = ActivityLoginUserBinding.inflate(layoutInflater)
setContentView(binding.root)
// Handle back button press to finish activity
val callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finish()
}
}
this.onBackPressedDispatcher.addCallback(this, callback)
// Navigate to registration screen when 'New User? Register' is clicked
binding.tVNewUserRegister.setOnClickListener {
val intent = Intent(this, RegisterUserActivity::class.java)
startActivity(intent)
}
binding.apply {
forgetPassword.setOnClickListener {
forgotPasswordLL.isVisible = true
loginLL.isVisible = false
}
cancelBtnFP.setOnClickListener {
forgotPasswordLL.isVisible = false
loginLL.isVisible = true
}
}
// Handle login button click
binding.loginBtn.setOnClickListener {
val email = binding.tilemailLogin.editText?.text.toString()
val password = binding.tilpasswordLogin.editText?.text.toString()
// Check if email or password fields are empty
if (email.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "Enter email and password", Toast.LENGTH_SHORT).show()
} else {
// Show progress bar before navigating to main screen
binding.progressBar.visibility = View.VISIBLE
binding.mainContent.visibility = View.GONE
// Make API call to verify user credentials
retrofit.verifyUser(LoginInfoModel(email, password))
.enqueue(object : Callback<VerifiedUserModel> {
override fun onResponse(
call: Call<VerifiedUserModel>,
response: Response<VerifiedUserModel>,
) {
Log.d("Rupam $TAG", "Response: ${response.body()?.userData}")
try {
if (response.isSuccessful) { // Handles 200-299
// Successful login
sharedpref.putLoggedInfo(Constants.SP_LOGGED_INFO, true)
sharedpref.putUserData(
Constants.SP_USERDATA,
response.body()!!.userData
)
startActivity(Intent(baseContext, MainActivity::class.java))
} else { // Handles 400, 404, 500
val errorMessage = JSONObject(
response.errorBody()?.string().toString()
).getString("status") ?: "Unknown error"
Toast.makeText(baseContext, errorMessage, Toast.LENGTH_SHORT)
.show()
Log.e("${Constants.TAG} Login User",errorMessage)
}
} catch (e: Exception) {
Log.e(
"${Constants.TAG} ProfileFragment",
"Error processing response: ${e.message}"
)
Toast.makeText(
baseContext,
"Something went wrong!",
Toast.LENGTH_SHORT
).show()
}
}
override fun onFailure(call: Call<VerifiedUserModel>, t: Throwable) {
Log.e(
"Rupam $TAG",
"Response: ${t.message}"
) // Log error on API failure
}
})
}
binding.progressBar.postDelayed({
binding.progressBar.visibility = View.GONE
binding.mainContent.visibility = View.VISIBLE
}, 3000)
}
binding.apply {
resetPasswordBtnFP.setOnClickListener {
val emailOrPhone = emailOrPhoneFP.editText?.text.toString()
val securityPIN = securityPINFP.editText?.text.toString()
val newPassword = newPasswordFP.editText?.text.toString()
if (emailOrPhone.isBlank() || securityPIN.isBlank() || newPassword.isBlank()) {
Toast.makeText(baseContext, "Enter all the details", Toast.LENGTH_SHORT).show()
} else {
val forgotPassword = ForgotPasswordRequest(
emailOrPhone = emailOrPhone,
securityPIN = securityPIN,
newPassword = newPassword
)
retrofit.forgotPassword(forgotPassword)
.enqueue(object : Callback<APIResponseModel> {
override fun onResponse(
call: Call<APIResponseModel>,
response: Response<APIResponseModel>,
) {
Log.d("${Constants.TAG} ForgotPassword ", " ${response}")
when (response.code()) {
200 -> {
Toast.makeText(
baseContext,
"Password reset successful",
Toast.LENGTH_SHORT
).show()
finish()
startActivity(
Intent(
baseContext,
LoginUserActivity::class.java
)
)
}
404 -> {
Toast.makeText(
baseContext,
"User not found",
Toast.LENGTH_SHORT
).show()
finish()
startActivity(
Intent(
baseContext,
LoginUserActivity::class.java
)
)
}
401 -> {
Toast.makeText(
baseContext,
"Invalid Email or PIN",
Toast.LENGTH_SHORT
).show()
finish()
startActivity(
Intent(
baseContext,
LoginUserActivity::class.java
)
)
}
else -> {
Toast.makeText(
baseContext,
"Error in response",
Toast.LENGTH_SHORT
).show()
}
}
}
override fun onFailure(call: Call<APIResponseModel>, t: Throwable) {
Log.d(
"${Constants.TAG} ForgotPassword ",
"API Call Failed: ${t.message}"
)
}
})
}
}
}
}
}
Editor is loading...
Leave a Comment