mirror of
https://github.com/bitwarden/android.git
synced 2025-12-12 00:08:00 -06:00
PM-24690: Use ToastManager in MainViewModel (#5685)
This commit is contained in:
parent
694865c213
commit
1e2bc4aa70
@ -7,7 +7,6 @@ import android.os.Bundle
|
|||||||
import android.view.KeyEvent
|
import android.view.KeyEvent
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
@ -186,12 +185,6 @@ class MainActivity : AppCompatActivity() {
|
|||||||
is MainEvent.CompleteAutofill -> handleCompleteAutofill(event)
|
is MainEvent.CompleteAutofill -> handleCompleteAutofill(event)
|
||||||
MainEvent.Recreate -> handleRecreate()
|
MainEvent.Recreate -> handleRecreate()
|
||||||
MainEvent.NavigateToDebugMenu -> navController.navigateToDebugMenuScreen()
|
MainEvent.NavigateToDebugMenu -> navController.navigateToDebugMenuScreen()
|
||||||
is MainEvent.ShowToast -> {
|
|
||||||
Toast
|
|
||||||
.makeText(baseContext, event.message.invoke(resources), Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
is MainEvent.UpdateAppLocale -> {
|
is MainEvent.UpdateAppLocale -> {
|
||||||
AppCompatDelegate.setApplicationLocales(
|
AppCompatDelegate.setApplicationLocales(
|
||||||
LocaleListCompat.forLanguageTags(event.localeName),
|
LocaleListCompat.forLanguageTags(event.localeName),
|
||||||
|
|||||||
@ -4,11 +4,10 @@ import android.content.Intent
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.lifecycle.SavedStateHandle
|
import androidx.lifecycle.SavedStateHandle
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.bitwarden.core.data.manager.toast.ToastManager
|
||||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||||
import com.bitwarden.ui.util.Text
|
|
||||||
import com.bitwarden.ui.util.asText
|
|
||||||
import com.bitwarden.vault.CipherView
|
import com.bitwarden.vault.CipherView
|
||||||
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManager
|
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManager
|
||||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||||
@ -84,6 +83,7 @@ class MainViewModel @Inject constructor(
|
|||||||
private val savedStateHandle: SavedStateHandle,
|
private val savedStateHandle: SavedStateHandle,
|
||||||
private val appResumeManager: AppResumeManager,
|
private val appResumeManager: AppResumeManager,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
|
private val toastManager: ToastManager,
|
||||||
) : BaseViewModel<MainState, MainEvent, MainAction>(
|
) : BaseViewModel<MainState, MainEvent, MainAction>(
|
||||||
initialState = MainState(
|
initialState = MainState(
|
||||||
theme = settingsRepository.appTheme,
|
theme = settingsRepository.appTheme,
|
||||||
@ -433,16 +433,15 @@ class MainViewModel @Inject constructor(
|
|||||||
)
|
)
|
||||||
when (emailTokenResult) {
|
when (emailTokenResult) {
|
||||||
is EmailTokenResult.Error -> {
|
is EmailTokenResult.Error -> {
|
||||||
sendEvent(
|
emailTokenResult
|
||||||
MainEvent.ShowToast(
|
.message
|
||||||
message = emailTokenResult
|
?.let { toastManager.show(message = it) }
|
||||||
.message
|
?: run {
|
||||||
?.asText()
|
toastManager.show(
|
||||||
?: BitwardenString
|
messageId = BitwardenString
|
||||||
.there_was_an_issue_validating_the_registration_token
|
.there_was_an_issue_validating_the_registration_token,
|
||||||
.asText(),
|
)
|
||||||
),
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EmailTokenResult.Expired -> {
|
EmailTokenResult.Expired -> {
|
||||||
@ -585,11 +584,6 @@ sealed class MainEvent {
|
|||||||
*/
|
*/
|
||||||
data object NavigateToDebugMenu : MainEvent()
|
data object NavigateToDebugMenu : MainEvent()
|
||||||
|
|
||||||
/**
|
|
||||||
* Show a toast with the given [message].
|
|
||||||
*/
|
|
||||||
data class ShowToast(val message: Text) : MainEvent()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that the app language has been updated.
|
* Indicates that the app language has been updated.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -8,13 +8,13 @@ import androidx.credentials.provider.ProviderCreateCredentialRequest
|
|||||||
import androidx.credentials.provider.ProviderGetCredentialRequest
|
import androidx.credentials.provider.ProviderGetCredentialRequest
|
||||||
import androidx.lifecycle.SavedStateHandle
|
import androidx.lifecycle.SavedStateHandle
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
|
import com.bitwarden.core.data.manager.toast.ToastManager
|
||||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||||
import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
|
import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
|
||||||
import com.bitwarden.data.repository.model.Environment
|
import com.bitwarden.data.repository.model.Environment
|
||||||
import com.bitwarden.ui.platform.base.BaseViewModelTest
|
import com.bitwarden.ui.platform.base.BaseViewModelTest
|
||||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||||
import com.bitwarden.ui.util.asText
|
|
||||||
import com.bitwarden.vault.CipherView
|
import com.bitwarden.vault.CipherView
|
||||||
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
|
import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus
|
||||||
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManagerImpl
|
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManagerImpl
|
||||||
@ -160,6 +160,10 @@ class MainViewModelTest : BaseViewModelTest() {
|
|||||||
mockk<GetPublicKeyCredentialOption>(relaxed = true),
|
mockk<GetPublicKeyCredentialOption>(relaxed = true),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
private val toastManager: ToastManager = mockk {
|
||||||
|
every { show(message = any(), duration = any()) } just runs
|
||||||
|
every { show(messageId = any(), duration = any()) } just runs
|
||||||
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
fun setup() {
|
fun setup() {
|
||||||
@ -592,18 +596,11 @@ class MainViewModelTest : BaseViewModelTest() {
|
|||||||
authRepository.validateEmailToken(email = intentEmail, token = token)
|
authRepository.validateEmailToken(email = intentEmail, token = token)
|
||||||
} returns EmailTokenResult.Error(message = null, error = Throwable("Fail!"))
|
} returns EmailTokenResult.Error(message = null, error = Throwable("Fail!"))
|
||||||
|
|
||||||
viewModel.eventFlow.test {
|
viewModel.trySendAction(MainAction.ReceiveFirstIntent(intent = mockIntent))
|
||||||
// We skip the first 2 events because they are the default appTheme and appLanguage
|
|
||||||
awaitItem()
|
|
||||||
awaitItem()
|
|
||||||
|
|
||||||
viewModel.trySendAction(MainAction.ReceiveFirstIntent(intent = mockIntent))
|
verify(exactly = 1) {
|
||||||
assertEquals(
|
toastManager.show(
|
||||||
MainEvent.ShowToast(
|
BitwardenString.there_was_an_issue_validating_the_registration_token,
|
||||||
BitwardenString.there_was_an_issue_validating_the_registration_token
|
|
||||||
.asText(),
|
|
||||||
),
|
|
||||||
awaitItem(),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -629,16 +626,10 @@ class MainViewModelTest : BaseViewModelTest() {
|
|||||||
authRepository.validateEmailToken(email = intentEmail, token = token)
|
authRepository.validateEmailToken(email = intentEmail, token = token)
|
||||||
} returns EmailTokenResult.Error(message = expectedMessage, error = null)
|
} returns EmailTokenResult.Error(message = expectedMessage, error = null)
|
||||||
|
|
||||||
viewModel.eventFlow.test {
|
viewModel.trySendAction(MainAction.ReceiveFirstIntent(intent = mockIntent))
|
||||||
// We skip the first 2 events because they are the default appTheme and appLanguage
|
|
||||||
awaitItem()
|
|
||||||
awaitItem()
|
|
||||||
|
|
||||||
viewModel.trySendAction(MainAction.ReceiveFirstIntent(intent = mockIntent))
|
verify(exactly = 1) {
|
||||||
assertEquals(
|
toastManager.show(message = expectedMessage)
|
||||||
MainEvent.ShowToast(expectedMessage.asText()),
|
|
||||||
awaitItem(),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1157,6 +1148,7 @@ class MainViewModelTest : BaseViewModelTest() {
|
|||||||
set(SPECIAL_CIRCUMSTANCE_KEY, initialSpecialCircumstance)
|
set(SPECIAL_CIRCUMSTANCE_KEY, initialSpecialCircumstance)
|
||||||
},
|
},
|
||||||
appResumeManager = appResumeManager,
|
appResumeManager = appResumeManager,
|
||||||
|
toastManager = toastManager,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user