mirror of
https://github.com/bitwarden/android.git
synced 2025-02-16 11:59:57 +03:00
BIT-2207: Move Give Feedback form to About screen (#1227)
This commit is contained in:
parent
b7536b2484
commit
365e3d2e98
8 changed files with 54 additions and 55 deletions
|
@ -71,6 +71,10 @@ fun AboutScreen(
|
|||
|
||||
AboutEvent.NavigateBack -> onNavigateBack.invoke()
|
||||
|
||||
AboutEvent.NavigateToFeedbackForm -> {
|
||||
intentManager.launchUri("https://livefrontinc.typeform.com/to/irgrRu4a".toUri())
|
||||
}
|
||||
|
||||
AboutEvent.NavigateToHelpCenter -> {
|
||||
intentManager.launchUri("https://bitwarden.com/help".toUri())
|
||||
}
|
||||
|
@ -126,6 +130,9 @@ fun AboutScreen(
|
|||
onRateTheAppClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AboutAction.RateAppClick) }
|
||||
},
|
||||
onGiveFeedbackClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AboutAction.GiveFeedbackClick) }
|
||||
},
|
||||
onSubmitCrashLogsCheckedChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(AboutAction.SubmitCrashLogsClick(it)) }
|
||||
},
|
||||
|
@ -147,6 +154,7 @@ private fun ContentColumn(
|
|||
onPrivacyPolicyClick: () -> Unit,
|
||||
onLearnAboutOrgsClick: () -> Unit,
|
||||
onRateTheAppClick: () -> Unit,
|
||||
onGiveFeedbackClick: () -> Unit,
|
||||
onSubmitCrashLogsCheckedChange: (Boolean) -> Unit,
|
||||
onVersionClick: () -> Unit,
|
||||
onWebVaultClick: () -> Unit,
|
||||
|
@ -208,6 +216,12 @@ private fun ContentColumn(
|
|||
dialogTitle = stringResource(id = R.string.continue_to_app_store),
|
||||
dialogMessage = stringResource(id = R.string.rate_app_description_long),
|
||||
)
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(R.string.give_feedback),
|
||||
onConfirmClick = onGiveFeedbackClick,
|
||||
dialogTitle = stringResource(R.string.continue_to_give_feedback),
|
||||
dialogMessage = stringResource(R.string.continue_to_provide_feedback),
|
||||
)
|
||||
CopyRow(
|
||||
text = state.version,
|
||||
onClick = onVersionClick,
|
||||
|
|
|
@ -49,6 +49,7 @@ class AboutViewModel @Inject constructor(
|
|||
|
||||
override fun handleAction(action: AboutAction): Unit = when (action) {
|
||||
AboutAction.BackClick -> handleBackClick()
|
||||
AboutAction.GiveFeedbackClick -> handleGiveFeedbackClick()
|
||||
AboutAction.HelpCenterClick -> handleHelpCenterClick()
|
||||
AboutAction.PrivacyPolicyClick -> handlePrivacyPolicyClick()
|
||||
AboutAction.LearnAboutOrganizationsClick -> handleLearnAboutOrganizationsClick()
|
||||
|
@ -66,6 +67,10 @@ class AboutViewModel @Inject constructor(
|
|||
sendEvent(AboutEvent.NavigateToHelpCenter)
|
||||
}
|
||||
|
||||
private fun handleGiveFeedbackClick() {
|
||||
sendEvent(AboutEvent.NavigateToFeedbackForm)
|
||||
}
|
||||
|
||||
private fun handlePrivacyPolicyClick() {
|
||||
sendEvent(AboutEvent.NavigateToPrivacyPolicy)
|
||||
}
|
||||
|
@ -139,6 +144,11 @@ sealed class AboutEvent {
|
|||
*/
|
||||
data object NavigateBack : AboutEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the feedback form.
|
||||
*/
|
||||
data object NavigateToFeedbackForm : AboutEvent()
|
||||
|
||||
/**
|
||||
* Navigates to the help center.
|
||||
*/
|
||||
|
@ -174,6 +184,11 @@ sealed class AboutAction {
|
|||
*/
|
||||
data object BackClick : AboutAction()
|
||||
|
||||
/**
|
||||
* User clicked the give feedback row.
|
||||
*/
|
||||
data object GiveFeedbackClick : AboutAction()
|
||||
|
||||
/**
|
||||
* User clicked the helper center row.
|
||||
*/
|
||||
|
|
|
@ -29,7 +29,6 @@ import androidx.compose.ui.res.stringResource
|
|||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.semantics.testTag
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.net.toUri
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.data.platform.repository.model.ClearClipboardFrequency
|
||||
|
@ -42,7 +41,6 @@ import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenSelectionDialo
|
|||
import com.x8bit.bitwarden.ui.platform.components.dialog.BitwardenTwoButtonDialog
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.LoadingDialogState
|
||||
import com.x8bit.bitwarden.ui.platform.components.dialog.row.BitwardenSelectionRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenExternalLinkRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.row.BitwardenTextRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.scaffold.BitwardenScaffold
|
||||
import com.x8bit.bitwarden.ui.platform.components.toggle.BitwardenWideSwitch
|
||||
|
@ -64,9 +62,6 @@ fun OtherScreen(
|
|||
EventsEffect(viewModel = viewModel) { event ->
|
||||
when (event) {
|
||||
OtherEvent.NavigateBack -> onNavigateBack.invoke()
|
||||
OtherEvent.NavigateToFeedbackForm -> {
|
||||
intentManager.launchUri("https://livefrontinc.typeform.com/to/irgrRu4a".toUri())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -166,16 +161,6 @@ fun OtherScreen(
|
|||
.semantics { testTag = "AllowScreenCaptureSwitch" }
|
||||
.padding(horizontal = 16.dp),
|
||||
)
|
||||
|
||||
BitwardenExternalLinkRow(
|
||||
text = stringResource(R.string.give_feedback),
|
||||
onConfirmClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(OtherAction.GiveFeedbackClick) }
|
||||
},
|
||||
dialogTitle = stringResource(R.string.continue_to_give_feedback),
|
||||
dialogMessage = stringResource(R.string.continue_to_provide_feedback),
|
||||
withDivider = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,6 @@ class OtherViewModel @Inject constructor(
|
|||
is OtherAction.AllowSyncToggle -> handleAllowSyncToggled(action)
|
||||
OtherAction.BackClick -> handleBackClicked()
|
||||
is OtherAction.ClearClipboardFrequencyChange -> handleClearClipboardFrequencyChanged(action)
|
||||
OtherAction.GiveFeedbackClick -> handleGiveFeedbackClicked()
|
||||
OtherAction.SyncNowButtonClick -> handleSyncNowButtonClicked()
|
||||
is OtherAction.Internal -> handleInternalAction(action)
|
||||
}
|
||||
|
@ -88,10 +87,6 @@ class OtherViewModel @Inject constructor(
|
|||
settingsRepo.clearClipboardFrequency = action.clearClipboardFrequency
|
||||
}
|
||||
|
||||
private fun handleGiveFeedbackClicked() {
|
||||
sendEvent(OtherEvent.NavigateToFeedbackForm)
|
||||
}
|
||||
|
||||
private fun handleSyncNowButtonClicked() {
|
||||
mutableStateFlow.update {
|
||||
it.copy(dialogState = OtherState.DialogState.Loading(R.string.syncing.asText()))
|
||||
|
@ -151,11 +146,6 @@ sealed class OtherEvent {
|
|||
* Navigate back.
|
||||
*/
|
||||
data object NavigateBack : OtherEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the feedback form.
|
||||
*/
|
||||
data object NavigateToFeedbackForm : OtherEvent()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -188,11 +178,6 @@ sealed class OtherAction {
|
|||
val clearClipboardFrequency: ClearClipboardFrequency,
|
||||
) : OtherAction()
|
||||
|
||||
/**
|
||||
* Indicates that the user clicked the Give feedback button.
|
||||
*/
|
||||
data object GiveFeedbackClick : OtherAction()
|
||||
|
||||
/**
|
||||
* Indicates that the user clicked the Sync Now button.
|
||||
*/
|
||||
|
|
|
@ -72,6 +72,22 @@ class AboutScreenTest : BaseComposeTest() {
|
|||
verify { viewModel.trySendAction(AboutAction.BackClick) }
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `on give feedback click should display confirmation dialog and confirm click should emit GiveFeedbackClick`() {
|
||||
composeTestRule.onNode(isDialog()).assertDoesNotExist()
|
||||
composeTestRule.onNodeWithText("Give Feedback").performScrollTo().performClick()
|
||||
composeTestRule.onNode(isDialog()).assertExists()
|
||||
composeTestRule
|
||||
.onAllNodesWithText("Continue")
|
||||
.filterToOne(hasAnyAncestor(isDialog()))
|
||||
.performClick()
|
||||
composeTestRule.onNode(isDialog()).assertDoesNotExist()
|
||||
verify {
|
||||
viewModel.trySendAction(AboutAction.GiveFeedbackClick)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `on bitwarden help center click should display confirmation dialog and confirm click should emit HelpCenterClick`() {
|
||||
|
|
|
@ -44,6 +44,15 @@ class AboutViewModelTest : BaseViewModelTest() {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on GiveFeedbackClick should emit NavigateToFeedbackForm`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(AboutAction.GiveFeedbackClick)
|
||||
assertEquals(AboutEvent.NavigateToFeedbackForm, awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on HelpCenterClick should emit NavigateToHelpCenter`() = runTest {
|
||||
val viewModel = createViewModel(DEFAULT_ABOUT_STATE)
|
||||
|
|
|
@ -149,22 +149,6 @@ class OtherScreenTest : BaseComposeTest() {
|
|||
.assertIsDisplayed()
|
||||
.assert(hasAnyAncestor(isDialog()))
|
||||
}
|
||||
|
||||
@Suppress("MaxLineLength")
|
||||
@Test
|
||||
fun `on give feedback click should display confirmation dialog and confirm click should emit GiveFeedbackClick`() {
|
||||
composeTestRule.onNode(isDialog()).assertDoesNotExist()
|
||||
composeTestRule.onNodeWithText("Give Feedback").performClick()
|
||||
composeTestRule.onNode(isDialog()).assertExists()
|
||||
composeTestRule
|
||||
.onAllNodesWithText("Continue")
|
||||
.filterToOne(hasAnyAncestor(isDialog()))
|
||||
.performClick()
|
||||
composeTestRule.onNode(isDialog()).assertDoesNotExist()
|
||||
verify {
|
||||
viewModel.trySendAction(OtherAction.GiveFeedbackClick)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val DEFAULT_STATE = OtherState(
|
||||
|
|
|
@ -108,15 +108,6 @@ class OtherViewModelTest : BaseViewModelTest() {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on GiveFeedbackClick should emit NavigateToFeedbackForm`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(OtherAction.GiveFeedbackClick)
|
||||
assertEquals(OtherEvent.NavigateToFeedbackForm, awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on ClearClipboardFrequencyChange should update state`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
|
|
Loading…
Add table
Reference in a new issue