From 4bb6c57c38c497480d8aeeb4285ef797d99e233c Mon Sep 17 00:00:00 2001 From: erik-everardo Date: Sun, 21 Jan 2024 19:07:58 -0600 Subject: [PATCH] feature: cerrar sesion --- .../main/java/com/isolaatti/MainActivity.kt | 2 ++ .../java/com/isolaatti/login/LogInActivity.kt | 16 +++++++---- .../AccountSettingsRepositoryImpl.kt | 3 +- .../presentation/AccountSettingsViewModel.kt | 28 +++++++++++++++++++ .../settings/ui/AccountSettingsFragment.kt | 19 ++++++++++++- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/isolaatti/settings/presentation/AccountSettingsViewModel.kt diff --git a/app/src/main/java/com/isolaatti/MainActivity.kt b/app/src/main/java/com/isolaatti/MainActivity.kt index 1a49a52..04a494f 100644 --- a/app/src/main/java/com/isolaatti/MainActivity.kt +++ b/app/src/main/java/com/isolaatti/MainActivity.kt @@ -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() } } diff --git a/app/src/main/java/com/isolaatti/login/LogInActivity.kt b/app/src/main/java/com/isolaatti/login/LogInActivity.kt index 1cc5caf..839f159 100644 --- a/app/src/main/java/com/isolaatti/login/LogInActivity.kt +++ b/app/src/main/java/com/isolaatti/login/LogInActivity.kt @@ -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) diff --git a/app/src/main/java/com/isolaatti/settings/data/repository/AccountSettingsRepositoryImpl.kt b/app/src/main/java/com/isolaatti/settings/data/repository/AccountSettingsRepositoryImpl.kt index 7239bf4..67b46d6 100644 --- a/app/src/main/java/com/isolaatti/settings/data/repository/AccountSettingsRepositoryImpl.kt +++ b/app/src/main/java/com/isolaatti/settings/data/repository/AccountSettingsRepositoryImpl.kt @@ -18,7 +18,7 @@ class AccountSettingsRepositoryImpl @Inject constructor( private val accountSettingsApi: AccountSettingsApi ) : AccountSettingsRepository { override fun logout(): Flow> = 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)) diff --git a/app/src/main/java/com/isolaatti/settings/presentation/AccountSettingsViewModel.kt b/app/src/main/java/com/isolaatti/settings/presentation/AccountSettingsViewModel.kt new file mode 100644 index 0000000..9bd601c --- /dev/null +++ b/app/src/main/java/com/isolaatti/settings/presentation/AccountSettingsViewModel.kt @@ -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 = MutableLiveData() + fun logout() { + viewModelScope.launch { + accountSettingsRepository.logout().onEach { + loggedOut.postValue(true) + }.flowOn(Dispatchers.IO).launchIn(this) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/settings/ui/AccountSettingsFragment.kt b/app/src/main/java/com/isolaatti/settings/ui/AccountSettingsFragment.kt index 80de1fa..a36b500 100644 --- a/app/src/main/java/com/isolaatti/settings/ui/AccountSettingsFragment.kt +++ b/app/src/main/java/com/isolaatti/settings/ui/AccountSettingsFragment.kt @@ -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()