Remove public fields from SwipeChooserViewModel.kt

Extras are retrieved directly from the Activity's Intent and values are
set by a function now

MAILAND-2573
This commit is contained in:
Davide Farella 2022-01-12 15:59:35 +01:00 committed by Davide Giuseppe Farella
parent 8f31f93171
commit 63fe71daee
3 changed files with 27 additions and 32 deletions

View File

@ -28,7 +28,6 @@ import androidx.activity.viewModels
import ch.protonmail.android.R
import ch.protonmail.android.activities.BaseActivity
import ch.protonmail.android.settings.data.toMailSwipeAction
import ch.protonmail.android.utils.extensions.app
import dagger.hilt.android.AndroidEntryPoint
import ch.protonmail.android.adapters.swipe.SwipeAction as MailSwipeAction
import me.proton.core.mailsettings.domain.entity.SwipeAction as CoreSwipeAction
@ -60,22 +59,14 @@ class SwipeChooserActivity : BaseActivity() {
val elevation = resources.getDimension(R.dimen.action_bar_elevation)
actionBar?.elevation = elevation
if (swipeChooserViewModel.swipeId == SwipeType.LEFT) {
actionBar?.title = getString(R.string.settings_swipe_right_to_left)
} else if (swipeChooserViewModel.swipeId == SwipeType.RIGHT) {
actionBar?.title = getString(R.string.settings_swipe_left_to_right)
val titleRes = when (intent.getSerializableExtra(EXTRA_SWIPE_ID) as SwipeType) {
SwipeType.LEFT -> R.string.settings_swipe_right_to_left
SwipeType.RIGHT -> R.string.settings_swipe_left_to_right
}
createActions()
}
actionBar?.title = getString(titleRes)
override fun onStart() {
super.onStart()
app.bus.register(this)
}
override fun onStop() {
super.onStop()
app.bus.unregister(this)
val currentAction = intent.getSerializableExtra(EXTRA_CURRENT_ACTION) as CoreSwipeAction
createActions(currentAction.toMailSwipeAction())
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
@ -100,7 +91,7 @@ class SwipeChooserActivity : BaseActivity() {
saveAndFinish()
}
private fun createActions() {
private fun createActions(currentAction: MailSwipeAction) {
val availableActions = arrayOf(
MailSwipeAction.MARK_READ,
@ -112,12 +103,12 @@ class SwipeChooserActivity : BaseActivity() {
for (index in availableActions.indices) {
val swipeAction = availableActions[index]
if (swipeChooserViewModel.currentAction.toMailSwipeAction() == swipeAction) {
if (currentAction == swipeAction) {
(swipeRadioGroup.getChildAt(index) as RadioButton).isChecked = true
}
}
swipeRadioGroup?.setOnCheckedChangeListener { _, _ ->
swipeChooserViewModel.currentAction = when (swipeRadioGroup.checkedRadioButtonId) {
val action = when (swipeRadioGroup.checkedRadioButtonId) {
R.id.read_unread -> CoreSwipeAction.MarkRead
R.id.star_unstar -> CoreSwipeAction.Star
R.id.trash -> CoreSwipeAction.Trash
@ -125,6 +116,7 @@ class SwipeChooserActivity : BaseActivity() {
R.id.move_to_spam -> CoreSwipeAction.Spam
else -> throw IllegalArgumentException("Unknown button id")
}
swipeChooserViewModel.setAction(action)
}
}

View File

@ -37,24 +37,27 @@ class SwipeChooserViewModel @Inject constructor(
private var updateSwipeActions: UpdateSwipeActions
) : ViewModel() {
var currentAction: SwipeAction =
savedStateHandle.get<SwipeAction>(EXTRA_CURRENT_ACTION) ?: SwipeAction.Trash
val swipeId: SwipeType = savedStateHandle.get<SwipeType>(EXTRA_SWIPE_ID) ?: SwipeType.RIGHT
private var actionToSave: SwipeAction? = null
private val swipeType: SwipeType =
requireNotNull(savedStateHandle.get<SwipeType>(EXTRA_SWIPE_ID)) {
"Extra 'EXTRA_SWIPE_ID' is required"
}
fun setAction(swipeAction: SwipeAction) {
actionToSave = swipeAction
}
fun onSaveClicked() {
actionToSave ?: return
viewModelScope.launch {
accountManager.getPrimaryUserId().first()?.let { userId ->
if (swipeId == SwipeType.LEFT) {
updateSwipeActions.invoke(
userId,
swipeLeft = currentAction
)
} else {
updateSwipeActions.invoke(
userId,
swipeRight = currentAction
)
val result = when (swipeType) {
SwipeType.LEFT -> updateSwipeActions(userId, swipeLeft = actionToSave)
SwipeType.RIGHT -> updateSwipeActions(userId, swipeRight = actionToSave)
}
// TODO handle result
}
}
}

View File

@ -1,4 +1,4 @@
# 2022-01-11T15:39:48.918859
# 2022-01-12T15:40:12.450208
# Integrity check *
# Default excluded files are `` ['**/test/**', '**/**Test/**', '**/gradle/**', '**/buildSrc/**'] ``