@@ -5,6 +5,9 @@ import android.text.Editable
5
5
import android.text.InputType
6
6
import android.text.SpannableStringBuilder
7
7
import android.text.TextWatcher
8
+ import android.view.View
9
+ import android.widget.AdapterView
10
+ import android.widget.ArrayAdapter
8
11
import androidx.core.view.isVisible
9
12
import com.google.android.material.textfield.TextInputEditText
10
13
import com.google.android.material.textfield.TextInputLayout
@@ -45,15 +48,18 @@ import kotlinx.android.synthetic.main.item_attendee.view.homeAddress
45
48
import kotlinx.android.synthetic.main.item_attendee.view.cityLayout
46
49
import kotlinx.android.synthetic.main.item_attendee.view.city
47
50
import kotlinx.android.synthetic.main.item_attendee.view.genderLayout
48
- import kotlinx.android.synthetic.main.item_attendee.view.gender
51
+ import kotlinx.android.synthetic.main.item_attendee.view.genderText
52
+ import kotlinx.android.synthetic.main.item_attendee.view.genderSpinner
49
53
import kotlinx.android.synthetic.main.item_attendee.view.company
50
54
import kotlinx.android.synthetic.main.item_attendee.view.companyLayout
51
55
import kotlinx.android.synthetic.main.item_attendee.view.countryLayout
52
56
import kotlinx.android.synthetic.main.item_attendee.view.country
53
57
import kotlinx.android.synthetic.main.item_attendee.view.jobTitleLayout
54
58
import kotlinx.android.synthetic.main.item_attendee.view.jobTitle
59
+ import org.fossasia.openevent.general.R
55
60
import org.fossasia.openevent.general.attendees.forms.CustomForm
56
61
import org.fossasia.openevent.general.attendees.forms.FormIdentifier
62
+ import org.fossasia.openevent.general.data.Resource
57
63
import org.fossasia.openevent.general.databinding.ItemAttendeeBinding
58
64
import org.fossasia.openevent.general.event.EventId
59
65
import org.fossasia.openevent.general.ticket.Ticket
@@ -66,6 +72,7 @@ import org.fossasia.openevent.general.utils.setRequired
66
72
import org.fossasia.openevent.general.utils.nullToEmpty
67
73
68
74
class AttendeeViewHolder (private val binding : ItemAttendeeBinding ) : RecyclerView.ViewHolder(binding.root) {
75
+ private val resource = Resource ()
69
76
private val requiredList = mutableListOf<TextInputEditText >()
70
77
var onAttendeeDetailChanged: AttendeeDetailChangeListener ? = null
71
78
@@ -101,39 +108,15 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
101
108
}
102
109
val textWatcher = object : TextWatcher {
103
110
override fun afterTextChanged (s : Editable ? ) {
104
- val newAttendee = Attendee (
105
- id = attendee.id,
106
- firstname = itemView.firstName.text.toString(),
107
- lastname = itemView.lastName.text.toString(),
108
- email = itemView.email.text.toString(),
109
- address = itemView.address.text.toString().emptyToNull(),
110
- city = itemView.city.text.toString().emptyToNull(),
111
- state = itemView.state.text.toString().emptyToNull(),
112
- country = itemView.country.text.toString().emptyToNull(),
113
- jobTitle = itemView.jobTitle.text.toString().emptyToNull(),
114
- phone = itemView.phone.text.toString().emptyToNull(),
115
- taxBusinessInfo = itemView.taxBusinessInfo.text.toString().emptyToNull(),
116
- billingAddress = itemView.attendeeBillingAddress.text.toString().emptyToNull(),
117
- homeAddress = itemView.homeAddress.text.toString().emptyToNull(),
118
- shippingAddress = itemView.shippingAddress.text.toString().emptyToNull(),
119
- company = itemView.company.text.toString().emptyToNull(),
120
- workAddress = itemView.workAddress.text.toString().emptyToNull(),
121
- workPhone = itemView.workPhone.text.toString().emptyToNull(),
122
- website = itemView.website.text.toString().emptyToNull(),
123
- blog = itemView.blog.text.toString().emptyToNull(),
124
- twitter = itemView.twitter.text.toString().emptyToNull(),
125
- facebook = itemView.facebook.text.toString().emptyToNull(),
126
- github = itemView.github.text.toString().emptyToNull(),
127
- gender = itemView.gender.text.toString().emptyToNull(),
128
- ticket = TicketId (ticket.id.toLong()),
129
- event = EventId (eventId))
111
+ val newAttendee = getAttendeeInformation(attendee.id, ticket, eventId)
130
112
onAttendeeDetailChanged?.onAttendeeDetailChanged(newAttendee, position)
131
113
}
132
114
133
115
override fun beforeTextChanged (s : CharSequence? , start : Int , count : Int , after : Int ) { /* Do nothing*/ }
134
116
override fun onTextChanged (s : CharSequence? , start : Int , before : Int , count : Int ) { /* Do nothing*/ }
135
117
}
136
118
requiredList.clear()
119
+ setupGendersSpinner(attendee, ticket, eventId, position)
137
120
customForm.forEach { form ->
138
121
setupCustomFormWithFields(form, textWatcher)
139
122
}
@@ -183,12 +166,36 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
183
166
setupField(itemView.companyLayout, itemView.company, form.isRequired, textWatcher)
184
167
FormIdentifier .GITHUB ->
185
168
setupField(itemView.githubLayout, itemView.github, form.isRequired, textWatcher)
186
- FormIdentifier .GENDER ->
187
- setupField(itemView.genderLayout, itemView.gender, form.isRequired, textWatcher)
169
+ FormIdentifier .GENDER -> {
170
+ itemView.genderLayout.isVisible = true
171
+ if (form.isRequired) {
172
+ itemView.genderText.text = " ${resource.getString(R .string.gender)} *"
173
+ }
174
+ }
188
175
else -> return
189
176
}
190
177
}
191
178
179
+ private fun setupGendersSpinner (attendee : Attendee , ticket : Ticket , eventId : Long , position : Int ) {
180
+ val genders = mutableListOf (resource.getString(R .string.male),
181
+ resource.getString(R .string.female), resource.getString(R .string.others))
182
+ itemView.genderSpinner.adapter =
183
+ ArrayAdapter (itemView.context, android.R .layout.simple_spinner_dropdown_item, genders)
184
+
185
+ val genderSelected = genders.indexOf(attendee.gender)
186
+ if (genderSelected != - 1 )
187
+ itemView.genderSpinner.setSelection(genderSelected)
188
+
189
+ itemView.genderSpinner.onItemSelectedListener = object : AdapterView .OnItemSelectedListener {
190
+ override fun onNothingSelected (parent : AdapterView <* >? ) { /* Do Nothing */ }
191
+
192
+ override fun onItemSelected (parent : AdapterView <* >? , view : View ? , p : Int , id : Long ) {
193
+ val newAttendee = getAttendeeInformation(attendee.id, ticket, eventId)
194
+ onAttendeeDetailChanged?.onAttendeeDetailChanged(newAttendee, position)
195
+ }
196
+ }
197
+ }
198
+
192
199
private fun setupField (
193
200
layout : TextInputLayout ,
194
201
editText : TextInputEditText ,
@@ -217,4 +224,33 @@ class AttendeeViewHolder(private val binding: ItemAttendeeBinding) : RecyclerVie
217
224
}
218
225
return true
219
226
}
227
+
228
+ private fun getAttendeeInformation (id : Long , ticket : Ticket , eventId : Long ): Attendee {
229
+ return Attendee (
230
+ id = id,
231
+ firstname = itemView.firstName.text.toString(),
232
+ lastname = itemView.lastName.text.toString(),
233
+ email = itemView.email.text.toString(),
234
+ address = itemView.address.text.toString().emptyToNull(),
235
+ city = itemView.city.text.toString().emptyToNull(),
236
+ state = itemView.state.text.toString().emptyToNull(),
237
+ country = itemView.country.text.toString().emptyToNull(),
238
+ jobTitle = itemView.jobTitle.text.toString().emptyToNull(),
239
+ phone = itemView.phone.text.toString().emptyToNull(),
240
+ taxBusinessInfo = itemView.taxBusinessInfo.text.toString().emptyToNull(),
241
+ billingAddress = itemView.attendeeBillingAddress.text.toString().emptyToNull(),
242
+ homeAddress = itemView.homeAddress.text.toString().emptyToNull(),
243
+ shippingAddress = itemView.shippingAddress.text.toString().emptyToNull(),
244
+ company = itemView.company.text.toString().emptyToNull(),
245
+ workAddress = itemView.workAddress.text.toString().emptyToNull(),
246
+ workPhone = itemView.workPhone.text.toString().emptyToNull(),
247
+ website = itemView.website.text.toString().emptyToNull(),
248
+ blog = itemView.blog.text.toString().emptyToNull(),
249
+ twitter = itemView.twitter.text.toString().emptyToNull(),
250
+ facebook = itemView.facebook.text.toString().emptyToNull(),
251
+ github = itemView.github.text.toString().emptyToNull(),
252
+ gender = itemView.genderSpinner.selectedItem.toString(),
253
+ ticket = TicketId (ticket.id.toLong()),
254
+ event = EventId (eventId))
255
+ }
220
256
}
0 commit comments