11package com.ghstudios.android.features.armorsetbuilder.armorselect
22
3+ import android.content.Context
34import android.view.LayoutInflater
45import android.view.View
56import android.view.ViewGroup
7+ import android.widget.ArrayAdapter
68import android.widget.BaseExpandableListAdapter
79import com.ghstudios.android.AssetLoader
10+ import com.ghstudios.android.adapter.common.BasicListDelegationAdapter
811import com.ghstudios.android.data.classes.Armor
912import com.ghstudios.android.data.classes.ArmorSkillPoints
1013import com.ghstudios.android.data.classes.Rank
@@ -13,11 +16,40 @@ import com.ghstudios.android.util.setImageAsset
1316import kotlinx.android.synthetic.main.listitem_armor_header.view.*
1417import kotlinx.android.synthetic.main.listitem_armor_piece.view.*
1518
19+ /* *
20+ * A list of armor grouped by rarity.
21+ */
1622class ArmorGroup (
1723 val rarity : Int ,
1824 val armor : List <ArmorSkillPoints >
1925)
2026
27+ /* *
28+ * Internal helper to bind armor skill points to a view.
29+ */
30+ private fun bindArmorView (view : View , armorWithSkill : ArmorSkillPoints ) {
31+ val armor = armorWithSkill.armor
32+ val skills = armorWithSkill.skills
33+
34+ view.icon.setImageAsset(armor)
35+ view.name.text = armor.name
36+ view.slots.setSlots(armor.numSlots, 0 )
37+
38+ val skillsTvs = arrayOf(view.skill_1, view.skill_2, view.skill_3, view.skill_4)
39+
40+ // init skill views to invisible (in case this gets moved to a recycling view
41+ for (subView in skillsTvs) {
42+ subView.visibility = View .GONE
43+ }
44+
45+ for ((i, skill) in skills.withIndex()) {
46+ skillsTvs[i]?.visibility = View .VISIBLE
47+ val points = skill.points
48+ val skillString = skill.skillTree.name + if (points> 0 ) " +$points " else points
49+ skillsTvs[i]?.text = skillString
50+ }
51+ }
52+
2153/* *
2254 * Creates an adapter to display a collapsible list of armor.
2355 * Uses ListView instead of RecyclerView as the BaseExpandableListAdapter class we're using
@@ -60,34 +92,39 @@ class ArmorExpandableListAdapter(val armorGroups: List<ArmorGroup>) : BaseExpand
6092 override fun getChildView (groupPosition : Int , childPosition : Int , isLastChild : Boolean , convertView : View ? , parent : ViewGroup ? ): View {
6193 val inflater = LayoutInflater .from(parent?.context)
6294 val view = convertView ? : inflater.inflate(R .layout.listitem_armor_piece, parent, false )
63-
6495 val armorWithSkill = getChild(groupPosition, childPosition)
65- val armor = armorWithSkill.armor
66- val skills = armorWithSkill.skills
6796
68- view.icon.setImageAsset(armor)
69- view.name.text = armor.name
70- view.slots.setSlots(armor.numSlots, 0 )
97+ bindArmorView(view, armorWithSkill)
98+ view.setOnClickListener {
99+ onArmorSelected?.invoke(armorWithSkill.armor)
100+ }
71101
72- val skillsTvs = arrayOf(view.skill_1, view.skill_2, view.skill_3, view.skill_4)
102+ return view
103+ }
104+ }
73105
74- // init skill views to invisible (in case this gets moved to a recycling view
75- for (subView in skillsTvs) {
76- subView.visibility = View .GONE
77- }
106+ /* *
107+ * Adapter used to display the armor pieces in a list view
108+ */
109+ class ArmorListAdapter (
110+ ctx : Context ,
111+ val armor : List <ArmorSkillPoints >
112+ ): ArrayAdapter<ArmorSkillPoints>(ctx, R .layout.listitem_armor_header, armor) {
113+ /* *
114+ * Sets the on armor selection callback
115+ */
116+ var onArmorSelected: ((Armor ) -> Unit )? = null
78117
79- for ((i, skill) in skills.withIndex()) {
80- skillsTvs[i]?.visibility = View .VISIBLE
81- val points = skill.points
82- val skillString = skill.skillTree.name + if (points> 0 ) " +$points " else points
83- skillsTvs[i]?.text = skillString
84- }
118+ override fun getView (position : Int , convertView : View ? , parent : ViewGroup ? ): View {
119+ val inflater = LayoutInflater .from(parent?.context)
120+ val view = convertView ? : inflater.inflate(R .layout.listitem_armor_piece, parent, false )
121+ val armorWithSkill = getItem(position)
122+ bindArmorView(view, armorWithSkill)
85123
86124 view.setOnClickListener {
87- onArmorSelected?.invoke(armor)
125+ onArmorSelected?.invoke(armorWithSkill. armor)
88126 }
89127
90128 return view
91129 }
92-
93130}
0 commit comments