Merge pull request #3252 from remychantenay/android-fix-add-link--state
android: fix AddLinkSheet state management
This commit is contained in:
@ -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(
|
||||
|
||||
@ -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
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user