Skip to content

Commit da384b0

Browse files
committed
Merge branch 'fix/assemble-party-orient' into 'master'
Oprava dialogů při rotacích displeje a dalších změnách konfigurace See merge request fmasa/pv239-project!68
2 parents 28e2e22 + 6f0bef5 commit da384b0

27 files changed

+301
-202
lines changed

app/src/main/java/cz/muni/fi/rpg/di/container.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,13 @@ val appModule = module {
144144
viewModel { (characterId: CharacterId) -> SpellsViewModel(characterId, get()) }
145145
viewModel { (characterId: CharacterId) -> TalentsViewModel(characterId, get()) }
146146
viewModel { AuthenticationViewModel(get()) }
147+
viewModel { JoinPartyViewModel(get()) }
147148

148149
/**
149150
* Fragments
150151
*/
151152
fragment { CharacterFragment(get()) }
152-
fragment { GameMasterFragment(get()) }
153+
fragment { GameMasterFragment() }
153154
fragment { NavHostFragment() }
154155
fragment { PartyListFragment(get()) }
155156
fragment { CharacterEditFragment(get()) }
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package cz.muni.fi.rpg.model.domain.party
22

3+
import android.os.Parcelable
4+
import kotlinx.android.parcel.Parcelize
35
import java.util.UUID
46

7+
@Parcelize
58
data class Invitation(
69
val partyId: UUID,
710
val partyName: String,
811
val accessCode: String
9-
)
12+
) : Parcelable

app/src/main/java/cz/muni/fi/rpg/ui/character/CharacterMiscFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.lifecycle.observe
99
import cz.muni.fi.rpg.R
1010
import cz.muni.fi.rpg.model.domain.character.CharacterId
1111
import cz.muni.fi.rpg.ui.common.ChangeAmbitionsDialog
12+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1213
import cz.muni.fi.rpg.viewModels.CharacterMiscViewModel
1314
import kotlinx.android.synthetic.main.dialog_xp.view.*
1415
import kotlinx.android.synthetic.main.fragment_character_misc.*
@@ -30,9 +31,8 @@ internal class CharacterMiscFragment : Fragment(R.layout.fragment_character_misc
3031
}
3132
}
3233

33-
private val viewModel: CharacterMiscViewModel by viewModel {
34-
parametersOf(requireArguments().getParcelable<CharacterId>(ARGUMENT_CHARACTER_ID))
35-
}
34+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
35+
private val viewModel: CharacterMiscViewModel by viewModel { parametersOf(characterId) }
3636

3737
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3838
super.onViewCreated(view, savedInstanceState)

app/src/main/java/cz/muni/fi/rpg/ui/character/CharacterSpellsFragment.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import cz.muni.fi.rpg.model.domain.character.CharacterId
1111
import cz.muni.fi.rpg.model.domain.spells.Spell
1212
import cz.muni.fi.rpg.ui.character.spells.SpellDialog
1313
import cz.muni.fi.rpg.ui.character.spells.adapter.SpellAdapter
14+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1415
import cz.muni.fi.rpg.ui.common.toggleVisibility
1516
import cz.muni.fi.rpg.viewModels.SpellsViewModel
1617
import kotlinx.android.synthetic.main.fragment_character_spells.*
@@ -32,10 +33,7 @@ class CharacterSpellsFragment : Fragment(R.layout.fragment_character_spells),
3233
}
3334
}
3435

35-
private val characterId: CharacterId by lazy {
36-
requireArguments().getParcelable<CharacterId>(ARGUMENT_CHARACTER_ID)
37-
?: error("Character ID not set")
38-
}
36+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
3937

4038
private val viewModel: SpellsViewModel by viewModel { parametersOf(characterId) }
4139

app/src/main/java/cz/muni/fi/rpg/ui/character/CharacterStatsFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import cz.muni.fi.rpg.R
1010
import cz.muni.fi.rpg.model.domain.character.CharacterId
1111
import cz.muni.fi.rpg.model.domain.character.Points
1212
import cz.muni.fi.rpg.model.right
13+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1314
import cz.muni.fi.rpg.ui.views.CharacterPoint
1415
import cz.muni.fi.rpg.viewModels.CharacterStatsViewModel
1516
import kotlinx.android.synthetic.main.fragment_character_stats.*
@@ -28,9 +29,8 @@ class CharacterStatsFragment : Fragment(R.layout.fragment_character_stats),
2829
}
2930
}
3031

31-
private val viewModel: CharacterStatsViewModel by viewModel {
32-
parametersOf(arguments?.getParcelable(ARGUMENT_CHARACTER_ID))
33-
}
32+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
33+
private val viewModel: CharacterStatsViewModel by viewModel { parametersOf(characterId) }
3434

3535
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3636
super.onViewCreated(view, savedInstanceState)

app/src/main/java/cz/muni/fi/rpg/ui/character/InventoryFragment.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import cz.muni.fi.rpg.model.domain.inventory.InventoryItem
1313
import cz.muni.fi.rpg.ui.character.adapter.InventoryAdapter
1414
import cz.muni.fi.rpg.ui.character.inventory.InventoryItemDialog
1515
import cz.muni.fi.rpg.ui.character.inventory.TransactionDialog
16+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1617
import cz.muni.fi.rpg.viewModels.InventoryViewModel
1718
import kotlinx.android.synthetic.main.fragment_inventory.*
1819
import kotlinx.coroutines.*
@@ -29,13 +30,8 @@ class InventoryFragment : Fragment(R.layout.fragment_inventory),
2930
}
3031
}
3132

32-
private val characterId: CharacterId by lazy {
33-
requireNotNull(requireArguments().getParcelable<CharacterId>(ARGUMENT_CHARACTER_ID))
34-
}
35-
36-
private val viewModel: InventoryViewModel by viewModel {
37-
parametersOf(arguments?.getParcelable(ARGUMENT_CHARACTER_ID))
38-
}
33+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
34+
private val viewModel: InventoryViewModel by viewModel { parametersOf(characterId) }
3935

4036
private fun setViewVisibility(view: View, visible: Boolean) {
4137
view.visibility = if (visible) View.VISIBLE else View.GONE
@@ -58,7 +54,7 @@ class InventoryFragment : Fragment(R.layout.fragment_inventory),
5854
viewModel.money.observe(viewLifecycleOwner, characterMoney::setValue)
5955

6056
characterMoney.setOnClickListener {
61-
TransactionDialog(viewModel).show(parentFragmentManager, "TransactionDialog")
57+
TransactionDialog.newInstance(characterId).show(parentFragmentManager, null)
6258
}
6359

6460
view.addNewInventoryItemButton.setOnClickListener { showDialog(null) }

app/src/main/java/cz/muni/fi/rpg/ui/character/inventory/InventoryItemDialog.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import cz.muni.fi.rpg.model.domain.character.CharacterId
1212
import cz.muni.fi.rpg.model.domain.inventory.InventoryItem
1313
import cz.muni.fi.rpg.model.domain.inventory.InventoryItemId
1414
import cz.muni.fi.rpg.ui.common.forms.Form
15+
import cz.muni.fi.rpg.ui.common.optionalParcelableArgument
16+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1517
import cz.muni.fi.rpg.viewModels.InventoryViewModel
1618
import kotlinx.android.synthetic.main.inventory_item_edit_dialog.view.*
1719
import kotlinx.coroutines.CoroutineScope
@@ -24,15 +26,6 @@ import timber.log.Timber
2426

2527
class InventoryItemDialog : DialogFragment(),
2628
CoroutineScope by CoroutineScope(Dispatchers.Default) {
27-
private val existingItem: InventoryItem? by lazy {
28-
requireArguments().getParcelable<InventoryItem>(ARGUMENT_ITEM)
29-
}
30-
private val characterId: CharacterId by lazy {
31-
requireNotNull(requireArguments().getParcelable<CharacterId>(ARGUMENT_CHARACTER_ID))
32-
}
33-
34-
private val viewModel: InventoryViewModel by viewModel { parametersOf(characterId) }
35-
3629
companion object {
3730
private const val ARGUMENT_ITEM = "item"
3831
private const val ARGUMENT_CHARACTER_ID = "characterId"
@@ -48,6 +41,11 @@ class InventoryItemDialog : DialogFragment(),
4841
}
4942
}
5043

44+
private val existingItem: InventoryItem? by optionalParcelableArgument(ARGUMENT_ITEM)
45+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
46+
47+
private val viewModel: InventoryViewModel by viewModel { parametersOf(characterId) }
48+
5149
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
5250
val activity = requireActivity()
5351
val view = activity.layoutInflater.inflate(R.layout.inventory_item_edit_dialog, null)

app/src/main/java/cz/muni/fi/rpg/ui/character/inventory/TransactionDialog.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,35 @@ import android.os.Bundle
55
import android.view.View
66
import android.widget.ArrayAdapter
77
import androidx.appcompat.app.AlertDialog
8+
import androidx.core.os.bundleOf
89
import androidx.fragment.app.DialogFragment
910
import cz.muni.fi.rpg.R
11+
import cz.muni.fi.rpg.model.domain.character.CharacterId
1012
import cz.muni.fi.rpg.model.domain.character.NotEnoughMoney
1113
import cz.muni.fi.rpg.model.domain.common.Money
1214
import cz.muni.fi.rpg.ui.common.adapters.SpinnerAdapterWithWidthMatchingSelectedItem
15+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1316
import cz.muni.fi.rpg.ui.views.TextInput
1417
import cz.muni.fi.rpg.viewModels.InventoryViewModel
1518
import kotlinx.android.synthetic.main.dialog_transaction.view.*
1619
import kotlinx.coroutines.CoroutineScope
1720
import kotlinx.coroutines.Dispatchers
1821
import kotlinx.coroutines.launch
1922
import kotlinx.coroutines.withContext
23+
import org.koin.android.viewmodel.ext.android.viewModel
24+
import org.koin.core.parameter.parametersOf
2025

21-
class TransactionDialog(
22-
private val viewModel: InventoryViewModel
23-
) : DialogFragment(),
24-
CoroutineScope by CoroutineScope(Dispatchers.Default) {
26+
class TransactionDialog : DialogFragment(), CoroutineScope by CoroutineScope(Dispatchers.Default) {
27+
companion object {
28+
const val ARGUMENT_CHARACTER_ID = "characterId"
29+
30+
fun newInstance(characterId: CharacterId) = TransactionDialog().apply {
31+
arguments = bundleOf(ARGUMENT_CHARACTER_ID to characterId)
32+
}
33+
}
34+
35+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
36+
private val viewModel: InventoryViewModel by viewModel { parametersOf(characterId) }
2537

2638
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
2739
val activity = requireActivity()

app/src/main/java/cz/muni/fi/rpg/ui/character/skills/CharacterSkillsFragment.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ import cz.muni.fi.rpg.model.right
1414
import cz.muni.fi.rpg.ui.character.skills.adapter.SkillAdapter
1515
import cz.muni.fi.rpg.ui.character.skills.talents.TalentsFragment
1616
import cz.muni.fi.rpg.ui.common.CombinedLiveData
17+
import cz.muni.fi.rpg.ui.common.parcelableArgument
1718
import cz.muni.fi.rpg.viewModels.CharacterViewModel
1819
import cz.muni.fi.rpg.viewModels.SkillsViewModel
1920
import kotlinx.android.synthetic.main.fragment_character_skills.*
2021
import org.koin.android.viewmodel.ext.android.viewModel
2122
import kotlinx.coroutines.CoroutineScope
2223
import kotlinx.coroutines.Dispatchers
2324
import kotlinx.coroutines.launch
24-
import kotlinx.coroutines.withContext
2525
import org.koin.core.parameter.parametersOf
2626

2727
class CharacterSkillsFragment : Fragment(R.layout.fragment_character_skills),
@@ -34,9 +34,7 @@ class CharacterSkillsFragment : Fragment(R.layout.fragment_character_skills),
3434
}
3535
}
3636

37-
private val characterId: CharacterId by lazy {
38-
requireNotNull(arguments?.getParcelable<CharacterId>(ARGUMENT_CHARACTER_ID))
39-
}
37+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
4038

4139
private val characterVm: CharacterViewModel by viewModel { parametersOf(characterId) }
4240
private val viewModel: SkillsViewModel by viewModel { parametersOf(characterId) }
@@ -84,13 +82,6 @@ class CharacterSkillsFragment : Fragment(R.layout.fragment_character_skills),
8482
}
8583

8684
private fun openSkillDialog(existingSkill: Skill?) {
87-
val dialog = SkillDialog.newInstance(existingSkill)
88-
dialog.setOnSuccessListener { skill ->
89-
launch {
90-
viewModel.saveSkill(skill)
91-
92-
withContext(Dispatchers.Main) { dialog.dismiss() }
93-
}
94-
}.show(childFragmentManager, "SkillDialog")
85+
SkillDialog.newInstance(characterId, existingSkill).show(childFragmentManager, null)
9586
}
9687
}

app/src/main/java/cz/muni/fi/rpg/ui/character/skills/SkillDialog.kt

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,39 @@ import androidx.appcompat.app.AlertDialog
1010
import androidx.core.os.bundleOf
1111
import androidx.fragment.app.DialogFragment
1212
import cz.muni.fi.rpg.R
13-
import cz.muni.fi.rpg.common.EntityListener
13+
import cz.muni.fi.rpg.model.domain.character.CharacterId
1414
import cz.muni.fi.rpg.model.domain.skills.Skill
1515
import cz.muni.fi.rpg.model.domain.skills.SkillCharacteristic
1616
import cz.muni.fi.rpg.ui.common.forms.Form
17+
import cz.muni.fi.rpg.ui.common.optionalParcelableArgument
18+
import cz.muni.fi.rpg.ui.common.parcelableArgument
19+
import cz.muni.fi.rpg.viewModels.SkillsViewModel
1720
import kotlinx.android.synthetic.main.dialog_skill.view.*
21+
import kotlinx.coroutines.CoroutineScope
22+
import kotlinx.coroutines.Dispatchers
23+
import kotlinx.coroutines.launch
24+
import kotlinx.coroutines.withContext
25+
import org.koin.android.viewmodel.ext.android.viewModel
26+
import org.koin.core.parameter.parametersOf
1827
import java.util.UUID
1928

20-
class SkillDialog : DialogFragment() {
21-
private var onSuccessListener: EntityListener<Skill> = {}
22-
29+
class SkillDialog : DialogFragment(), CoroutineScope by CoroutineScope(Dispatchers.Default) {
2330
companion object {
24-
fun newInstance(existingSkill: Skill?): SkillDialog {
25-
val fragment = SkillDialog()
26-
27-
fragment.arguments = bundleOf("skill" to existingSkill)
31+
const val ARGUMENT_CHARACTER_ID = "characterId"
32+
const val ARGUMENT_SKILL = "skill"
2833

29-
return fragment
34+
fun newInstance(characterId: CharacterId, existingSkill: Skill?) = SkillDialog().apply {
35+
arguments = bundleOf(
36+
ARGUMENT_CHARACTER_ID to characterId,
37+
ARGUMENT_SKILL to existingSkill
38+
)
3039
}
3140
}
3241

33-
val skill: Skill? by lazy { arguments?.getParcelable<Skill>("skill") }
34-
35-
fun setOnSuccessListener(listener: EntityListener<Skill>): SkillDialog {
36-
onSuccessListener = listener
42+
private val characterId: CharacterId by parcelableArgument(ARGUMENT_CHARACTER_ID)
43+
val skill: Skill? by optionalParcelableArgument(ARGUMENT_SKILL)
3744

38-
return this
39-
}
45+
private val viewModel: SkillsViewModel by viewModel { parametersOf(characterId)}
4046

4147
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
4248
val activity = requireActivity()
@@ -85,7 +91,7 @@ class SkillDialog : DialogFragment() {
8591
.setView(view)
8692
.setTitle(if (skill != null) null else getString(R.string.title_addSkill))
8793
.setPositiveButton(R.string.button_save) { _, _ -> }
88-
.setNegativeButton(R.string.button_cancel) { _, _ ->}
94+
.setNegativeButton(R.string.button_cancel) { _, _ -> }
8995
.create()
9096

9197
dialog.setOnShowListener {
@@ -118,16 +124,19 @@ class SkillDialog : DialogFragment() {
118124
dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = false
119125
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).isEnabled = false
120126

121-
onSuccessListener(
122-
Skill(
123-
this.skill?.id ?: UUID.randomUUID(),
124-
view.skillAdvanced.isChecked,
125-
selectedCharacteristic(view),
126-
name,
127-
description,
128-
view.advancesInput.getValue().toInt()
129-
)
127+
val skill = Skill(
128+
this.skill?.id ?: UUID.randomUUID(),
129+
view.skillAdvanced.isChecked,
130+
selectedCharacteristic(view),
131+
name,
132+
description,
133+
view.advancesInput.getValue().toInt()
130134
)
135+
136+
launch {
137+
viewModel.saveSkill(skill)
138+
withContext(Dispatchers.Main) { dismiss() }
139+
}
131140
}
132141

133142
private fun selectedCharacteristic(view: View): SkillCharacteristic {

0 commit comments

Comments
 (0)