Merge pull request #3252 from remychantenay/android-fix-add-link--state

android: fix AddLinkSheet state management
This commit is contained in:
Jackson Harper
2023-12-15 17:06:16 +08:00
committed by GitHub
4 changed files with 29 additions and 21 deletions

View File

@ -29,7 +29,7 @@ import app.omnivore.omnivore.ui.save.SaveViewModel
@Composable
fun AddLinkSheetContent(
saveViewModel: SaveViewModel,
viewModel: SaveViewModel,
onCancel: () -> Unit,
onLinkAdded: () -> Unit
) {
@ -50,11 +50,11 @@ fun AddLinkSheetContent(
).show()
}
val saveState: SaveState by saveViewModel.saveState.observeAsState(SaveState.NONE)
val saveState: SaveState by viewModel.state.observeAsState(SaveState.DEFAULT)
val isSaving = MutableLiveData(false)
when (saveState) {
SaveState.NONE -> {
SaveState.DEFAULT -> {
isSaving.value = false
}
SaveState.SAVING -> {
@ -62,23 +62,26 @@ fun AddLinkSheetContent(
}
SaveState.ERROR -> {
isSaving.value = false
showToast(context.getString(R.string.add_link_sheet_save_url_error))
showToast(viewModel.message ?: context.getString(R.string.add_link_sheet_save_url_error))
viewModel.resetState()
}
SaveState.SAVED -> {
isSaving.value = false
showToast(context.getString(R.string.add_link_sheet_save_url_success))
showToast(viewModel.message ?: context.getString(R.string.add_link_sheet_save_url_success))
onLinkAdded()
viewModel.resetState()
}
}
fun addLink(url: String) {
if (!saveViewModel.validateUrl(url)) {
if (!viewModel.validateUrl(url)) {
showToast(context.getString(R.string.add_link_sheet_invalid_url_error))
return
}
saveViewModel.saveURL(url)
viewModel.saveURL(url)
}
Surface(

View File

@ -164,14 +164,14 @@ fun BottomSheetContent(libraryViewModel: LibraryViewModel,
} else if (showAddLinkSheet) {
BottomSheetUI {
AddLinkSheetContent(
saveViewModel = saveViewModel,
viewModel = saveViewModel,
onCancel = {
libraryViewModel.showAddLinkSheetLiveData.value = false
saveViewModel.saveState.value = SaveState.NONE
saveViewModel.state.value = SaveState.DEFAULT
},
onLinkAdded = {
libraryViewModel.showAddLinkSheetLiveData.value = false
saveViewModel.saveState.value = SaveState.NONE
saveViewModel.state.value = SaveState.DEFAULT
}
)
}

View File

@ -81,12 +81,12 @@ abstract class SaveSheetActivityBase : AppCompatActivity() {
}
setContent {
val saveState: SaveState by viewModel.saveState.observeAsState(SaveState.NONE)
val saveState: SaveState by viewModel.state.observeAsState(SaveState.DEFAULT)
val scaffoldState: ScaffoldState = rememberScaffoldState()
val message = when (saveState) {
SaveState.NONE -> ""
SaveState.DEFAULT -> ""
SaveState.SAVING -> "Saved to Omnivore"
SaveState.ERROR -> "Error Saving Article"
SaveState.SAVED -> "Saved to Omnivore"

View File

@ -27,7 +27,7 @@ import java.util.regex.Pattern
import javax.inject.Inject
enum class SaveState {
NONE(),
DEFAULT(),
SAVING(),
ERROR(),
SAVED()
@ -38,7 +38,7 @@ class SaveViewModel @Inject constructor(
private val datastoreRepo: DatastoreRepository,
private val resourceProvider: ResourceProvider
) : ViewModel() {
val saveState = MutableLiveData(SaveState.NONE)
val state = MutableLiveData(SaveState.DEFAULT)
var isLoading by mutableStateOf(false)
private set
@ -76,7 +76,7 @@ class SaveViewModel @Inject constructor(
viewModelScope.launch {
isLoading = true
message = resourceProvider.getString(R.string.save_view_model_msg)
saveState.postValue(SaveState.SAVING)
state.postValue(SaveState.SAVING)
val authToken = getAuthToken()
@ -115,17 +115,22 @@ class SaveViewModel @Inject constructor(
isLoading = false
val success = (response.data?.saveUrl?.onSaveSuccess?.url != null)
message = if (success) {
resourceProvider.getString(R.string.save_view_model_page_saved_success)
if (success) {
message = resourceProvider.getString(R.string.save_view_model_page_saved_success)
state.postValue(SaveState.SAVED)
} else {
resourceProvider.getString(R.string.save_view_model_page_saved_error)
message = resourceProvider.getString(R.string.save_view_model_page_saved_error)
state.postValue(SaveState.ERROR)
}
saveState.postValue(SaveState.SAVED)
Log.d(ContentValues.TAG, "Saved URL?: $success")
} catch (e: java.lang.Exception) {
message = resourceProvider.getString(R.string.save_view_model_page_saved_error)
state.postValue(SaveState.ERROR)
isLoading = false
}
}
}
fun resetState() {
state.postValue(SaveState.DEFAULT)
}
}