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) val homeActivityIntent = Intent(this@MainActivity, HomeActivity::class.java)
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(homeActivityIntent) startActivity(homeActivityIntent)
} else {
finish()
} }
} }

View File

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

View File

@ -18,7 +18,7 @@ class AccountSettingsRepositoryImpl @Inject constructor(
private val accountSettingsApi: AccountSettingsApi private val accountSettingsApi: AccountSettingsApi
) : AccountSettingsRepository { ) : AccountSettingsRepository {
override fun logout(): Flow<Resource<Boolean>> = flow { override fun logout(): Flow<Resource<Boolean>> = flow {
tokenStorage.removeToken()
try { try {
val response = accountSettingsApi.signOut().awaitResponse() val response = accountSettingsApi.signOut().awaitResponse()
if(response.isSuccessful) { if(response.isSuccessful) {
@ -26,6 +26,7 @@ class AccountSettingsRepositoryImpl @Inject constructor(
} else { } else {
emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) emit(Resource.Error(Resource.Error.mapErrorCode(response.code())))
} }
tokenStorage.removeToken()
} catch (exception: Exception) { } catch (exception: Exception) {
emit(Resource.Error(Resource.Error.ErrorType.NetworkError)) 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 package com.isolaatti.settings.ui
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.isolaatti.MainActivity
import com.isolaatti.R import com.isolaatti.R
import com.isolaatti.databinding.FragmentAccountSettingsBinding import com.isolaatti.databinding.FragmentAccountSettingsBinding
import com.isolaatti.settings.presentation.AccountSettingsViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AccountSettingsFragment : Fragment() { class AccountSettingsFragment : Fragment() {
private lateinit var binding: FragmentAccountSettingsBinding private lateinit var binding: FragmentAccountSettingsBinding
private val viewModel: AccountSettingsViewModel by viewModels()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -41,6 +48,16 @@ class AccountSettingsFragment : Fragment() {
binding.logOutButton.setOnClickListener { binding.logOutButton.setOnClickListener {
logout() 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() { private fun logout() {
@ -48,7 +65,7 @@ class AccountSettingsFragment : Fragment() {
.setTitle("Log out?") .setTitle("Log out?")
.setMessage("You will be taken to log in screen...") .setMessage("You will be taken to log in screen...")
.setPositiveButton("Yes, log out") { _, _ -> .setPositiveButton("Yes, log out") { _, _ ->
viewModel.logout()
} }
.setNegativeButton(R.string.no, null) .setNegativeButton(R.string.no, null)
.show() .show()