feature: cerrar sesion

This commit is contained in:
erik-everardo 2024-01-21 19:07:58 -06:00
parent 484f92e531
commit 4bb6c57c38
5 changed files with 61 additions and 7 deletions

View File

@ -22,6 +22,8 @@ class MainActivity : ComponentActivity() {
val homeActivityIntent = Intent(this@MainActivity, HomeActivity::class.java)
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(homeActivityIntent)
} else {
finish()
}
}

View File

@ -1,36 +1,42 @@
package com.isolaatti.login
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.isolaatti.BuildConfig
import com.isolaatti.R
import com.isolaatti.common.IsolaattiBaseActivity
import com.isolaatti.databinding.ActivityLoginBinding
import com.isolaatti.home.HomeActivity
import com.isolaatti.sign_up.ui.SignUpActivity
import com.isolaatti.utils.Resource
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class LogInActivity: AppCompatActivity() {
class LogInActivity : AppCompatActivity() {
lateinit var viewBinding: ActivityLoginBinding
private val viewModel: LogInViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
setResult(RESULT_CANCELED)
finish()
}
})
viewBinding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(viewBinding.root)

View File

@ -18,7 +18,7 @@ class AccountSettingsRepositoryImpl @Inject constructor(
private val accountSettingsApi: AccountSettingsApi
) : AccountSettingsRepository {
override fun logout(): Flow<Resource<Boolean>> = flow {
tokenStorage.removeToken()
try {
val response = accountSettingsApi.signOut().awaitResponse()
if(response.isSuccessful) {
@ -26,6 +26,7 @@ class AccountSettingsRepositoryImpl @Inject constructor(
} else {
emit(Resource.Error(Resource.Error.mapErrorCode(response.code())))
}
tokenStorage.removeToken()
} catch (exception: Exception) {
emit(Resource.Error(Resource.Error.ErrorType.NetworkError))

View File

@ -0,0 +1,28 @@
package com.isolaatti.settings.presentation
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.isolaatti.settings.domain.AccountSettingsRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class AccountSettingsViewModel @Inject constructor(
private val accountSettingsRepository: AccountSettingsRepository
) : ViewModel() {
val loggedOut: MutableLiveData<Boolean> = MutableLiveData()
fun logout() {
viewModelScope.launch {
accountSettingsRepository.logout().onEach {
loggedOut.postValue(true)
}.flowOn(Dispatchers.IO).launchIn(this)
}
}
}

View File

@ -1,17 +1,24 @@
package com.isolaatti.settings.ui
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.isolaatti.MainActivity
import com.isolaatti.R
import com.isolaatti.databinding.FragmentAccountSettingsBinding
import com.isolaatti.settings.presentation.AccountSettingsViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AccountSettingsFragment : Fragment() {
private lateinit var binding: FragmentAccountSettingsBinding
private val viewModel: AccountSettingsViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
@ -41,6 +48,16 @@ class AccountSettingsFragment : Fragment() {
binding.logOutButton.setOnClickListener {
logout()
}
viewModel.loggedOut.observe(viewLifecycleOwner) {
if(it) {
val loginIntent = Intent(requireContext(), MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
startActivity(loginIntent)
viewModel.loggedOut.value = false
}
}
}
private fun logout() {
@ -48,7 +65,7 @@ class AccountSettingsFragment : Fragment() {
.setTitle("Log out?")
.setMessage("You will be taken to log in screen...")
.setPositiveButton("Yes, log out") { _, _ ->
viewModel.logout()
}
.setNegativeButton(R.string.no, null)
.show()