Skip to content

Commit

Permalink
Process data handling form submission.
Browse files Browse the repository at this point in the history
  • Loading branch information
pcraciunoiu committed Mar 27, 2024
1 parent 082da72 commit 600a3b5
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ fun DataHandlingScreen(
}

is DataHandlingScreenViewModel.UiAction.ShowDataDownloaded -> {
Toast.makeText(context, "Request received! An email containing your data will be sent.", Toast.LENGTH_SHORT).show()
Toast.makeText(context, R.string.toast_download_my_data, Toast.LENGTH_SHORT).show()
}
}
})
Expand Down
12 changes: 10 additions & 2 deletions app/src/main/java/org/mozilla/tiktokreporter/email/EmailScreen.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.mozilla.tiktokreporter.email

import android.widget.Toast
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -17,6 +18,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
Expand Down Expand Up @@ -48,6 +50,7 @@ enum class EmailScreenMode {
fun EmailScreen(
viewModel: EmailScreenViewModel = hiltViewModel(), mode: EmailScreenMode = EmailScreenMode.ONBOARDING, onNextScreen: () -> Unit, onNavigateBack: () -> Unit
) {
val context = LocalContext.current
DialogContainer { dialogState ->

val state by viewModel.state.collectAsStateWithLifecycle()
Expand All @@ -60,6 +63,9 @@ fun EmailScreen(
if (mode == EmailScreenMode.ONBOARDING) onNextScreen()
else onNavigateBack()
}
EmailScreenViewModel.UiAction.ShowDataDownloaded -> {
Toast.makeText(context, R.string.toast_download_my_data, Toast.LENGTH_SHORT).show()
}

is EmailScreenViewModel.UiAction.ShowError -> {
when (action.error) {
Expand Down Expand Up @@ -116,7 +122,7 @@ fun EmailScreen(
@Composable
private fun EmailScreenContent(
state: EmailScreenViewModel.State,
onFormFieldValueChanged: (formFieldId: String, value: Any) -> Unit,
onFormFieldValueChanged: (formFieldId: String, value: Any, mode: EmailScreenMode) -> Unit,
onNavigateBack: () -> Unit,
onSaveEmail: () -> Unit,
onNextScreen: () -> Unit,
Expand Down Expand Up @@ -167,7 +173,9 @@ private fun EmailScreenContent(
style = MozillaTypography.H3
)
formComponentsItems(
formFields = formFields, onFormFieldValueChanged = onFormFieldValueChanged
formFields = formFields, onFormFieldValueChanged = fun(formFieldId, value) {
onFormFieldValueChanged(formFieldId, value, mode)
}
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.mozilla.tiktokreporter.GleanMetrics.DownloadData
import org.mozilla.tiktokreporter.GleanMetrics.Email
import org.mozilla.tiktokreporter.GleanMetrics.Pings
import org.mozilla.tiktokreporter.TikTokReporterError
Expand All @@ -20,6 +21,7 @@ import org.mozilla.tiktokreporter.common.FormFieldUiComponent
import org.mozilla.tiktokreporter.common.toUiComponents
import org.mozilla.tiktokreporter.data.model.Form
import org.mozilla.tiktokreporter.data.model.StudyDetails
import org.mozilla.tiktokreporter.datahandling.DataHandlingScreenViewModel
import org.mozilla.tiktokreporter.toTikTokReporterError
import java.util.UUID
import javax.inject.Inject
Expand Down Expand Up @@ -100,11 +102,13 @@ class EmailScreenViewModel @Inject constructor(

fun onFormFieldValueChanged(
formFieldId: String,
value: Any
value: Any,
mode: EmailScreenMode
) {
viewModelScope.launch(Dispatchers.Unconfined) {
val fieldIndex = state.value.formFields.indexOfFirst { it.id == formFieldId }
val newField = when (val field = state.value.formFields[fieldIndex]) {
val formFields = if (mode == EmailScreenMode.SETTINGS_DATA_HANDLING) state.value.dataFormFields else state.value.formFields
val fieldIndex = formFields.indexOfFirst { it.id == formFieldId }
val newField = when (val field = formFields[fieldIndex]) {
is FormFieldUiComponent.TextField -> {
field.copy(
value = value as String
Expand All @@ -122,13 +126,21 @@ class EmailScreenViewModel @Inject constructor(
}
}

val newFields = state.value.formFields.toMutableList()
val newFields = formFields.toMutableList()
newFields[fieldIndex] = newField

_state.update {
it.copy(
formFields = newFields
)
if (mode == EmailScreenMode.SETTINGS_DATA_HANDLING) {
_state.update {
it.copy(
dataFormFields = newFields
)
}
} else {
_state.update {
it.copy(
formFields = newFields
)
}
}
}
}
Expand All @@ -155,10 +167,10 @@ class EmailScreenViewModel @Inject constructor(
if (email.isNotBlank()) {
tikTokReporterRepository.saveUserEmail(email)

Email.identifier.set(UUID.fromString(state.value.studyDetails?.id))
Email.email.set(email)
Pings.email.submit()

DownloadData.identifier.set(UUID.fromString(tikTokReporterRepository.selectedStudyId))
DownloadData.email.set(email)
Pings.downloadData.submit()
_uiAction.send(UiAction.ShowDataDownloaded)
_uiAction.send(UiAction.EmailSaved)
} else {
// TODO: update state to show error on form field,
Expand All @@ -182,6 +194,7 @@ class EmailScreenViewModel @Inject constructor(
sealed class UiAction {
data object GoToReportForm: UiAction()
data object EmailSaved: UiAction()
data object ShowDataDownloaded: UiAction()
data class ShowError(
val error: TikTokReporterError
): UiAction()
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<string name="save">Save</string>
<string name="button_trim_recording">Trim Recording</string>
<string name="done_editing">I\'m done editing</string>
<string name="toast_download_my_data">Request received! An email containing your data will be sent.</string>
<string name="button_download_my_data">Download My Data</string>
<string name="button_delete_my_data">Delete My Data</string>
<string name="label_recorded_video">Recorded Video</string>
Expand Down

0 comments on commit 600a3b5

Please sign in to comment.