@@ -33,6 +33,7 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
33
33
lateinit var mRealm: Realm
34
34
private var submissions: RealmSubmission ? = null
35
35
var userModel: RealmUserModel ? = null
36
+ var shouldHideElements: Boolean? = null
36
37
37
38
override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View {
38
39
fragmentUserInformationBinding = FragmentUserInformationBinding .inflate(inflater, container, false )
@@ -41,41 +42,48 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
41
42
if (! TextUtils .isEmpty(id)) {
42
43
submissions = mRealm.where(RealmSubmission ::class .java).equalTo(" id" , id).findFirst()
43
44
}
45
+ shouldHideElements = arguments?.getBoolean(" shouldHideElements" ) == true
44
46
initViews()
45
47
return fragmentUserInformationBinding.root
46
48
}
47
49
48
50
private fun initViews () {
49
- val langArray = resources.getStringArray(R .array.language).toMutableList()
50
- val levelArray = resources.getStringArray(R .array.level).toMutableList()
51
- val adapterLang = ArrayAdapter (requireContext(), R .layout.spinner_item_white, langArray)
52
- val adapterLevel = ArrayAdapter (requireContext(), R .layout.spinner_item_white, levelArray)
53
- adapterLang.setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
54
- adapterLevel.setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
55
- fragmentUserInformationBinding.spnLang.adapter = adapterLang
56
- fragmentUserInformationBinding.spnLevel.adapter = adapterLevel
57
- fragmentUserInformationBinding.spnLang.post {
58
- val selectedView = fragmentUserInformationBinding.spnLang.selectedView as ? TextView
59
- selectedView?.setTextColor(ContextCompat .getColor(requireContext(), R .color.daynight_textColor))
60
- }
61
- fragmentUserInformationBinding.spnLevel.post {
62
- val selectedView = fragmentUserInformationBinding.spnLevel.selectedView as ? TextView
63
- selectedView?.setTextColor(ContextCompat .getColor(requireContext(), R .color.daynight_textColor))
64
- }
51
+ if (shouldHideElements == true ) {
52
+ fragmentUserInformationBinding.btnAdditionalFields.visibility = View .VISIBLE
53
+ fragmentUserInformationBinding.btnAdditionalFields.setOnClickListener(this )
54
+ fragmentUserInformationBinding.ltAge.visibility = View .VISIBLE
55
+ fragmentUserInformationBinding.llNames.visibility = View .GONE
56
+ fragmentUserInformationBinding.llEmailLang.visibility = View .GONE
57
+ fragmentUserInformationBinding.llPhoneDob.visibility = View .GONE
58
+ fragmentUserInformationBinding.llLevel.visibility = View .GONE
59
+ } else {
60
+ val langArray = resources.getStringArray(R .array.language).toMutableList()
61
+ val levelArray = resources.getStringArray(R .array.level).toMutableList()
62
+ val adapterLang = ArrayAdapter (requireContext(), R .layout.spinner_item_white, langArray)
63
+ val adapterLevel = ArrayAdapter (requireContext(), R .layout.spinner_item_white, levelArray)
64
+ adapterLang.setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
65
+ adapterLevel.setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
66
+ fragmentUserInformationBinding.spnLang.adapter = adapterLang
67
+ fragmentUserInformationBinding.spnLevel.adapter = adapterLevel
68
+ fragmentUserInformationBinding.spnLang.post {
69
+ val selectedView = fragmentUserInformationBinding.spnLang.selectedView as ? TextView
70
+ selectedView?.setTextColor(ContextCompat .getColor(requireContext(), R .color.daynight_textColor))
71
+ }
72
+ fragmentUserInformationBinding.spnLevel.post {
73
+ val selectedView = fragmentUserInformationBinding.spnLevel.selectedView as ? TextView
74
+ selectedView?.setTextColor(ContextCompat .getColor(requireContext(), R .color.daynight_textColor))
75
+ }
65
76
// fragmentUserInformationBinding.etEmail.setText(getString(R.string.message_placeholder, userModel?.email))
66
77
// fragmentUserInformationBinding.etFname.setText(getString(R.string.message_placeholder, userModel?.firstName))
67
78
// fragmentUserInformationBinding.etLname.setText(getString(R.string.message_placeholder, userModel?.lastName))
68
79
// fragmentUserInformationBinding.etPhone.setText(getString(R.string.message_placeholder, userModel?.phoneNumber))
69
80
// fragmentUserInformationBinding.txtDob.text = getString(R.string.message_placeholder, userModel?.dob)
70
81
// dob = userModel?.dob
71
- if (teamId != null ) {
72
- fragmentUserInformationBinding.btnCancel.visibility = View .GONE
73
- } else {
74
- fragmentUserInformationBinding.btnCancel.setOnClickListener(this )
82
+ fragmentUserInformationBinding.txtDob.setOnClickListener(this )
75
83
}
76
84
85
+ fragmentUserInformationBinding.btnCancel.setOnClickListener(this )
77
86
fragmentUserInformationBinding.btnSubmit.setOnClickListener(this )
78
- fragmentUserInformationBinding.txtDob.setOnClickListener(this )
79
87
}
80
88
81
89
override fun onClick (view : View ) {
@@ -85,61 +93,107 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
85
93
}
86
94
R .id.btn_submit -> submitForm()
87
95
R .id.txt_dob -> showDatePickerDialog()
96
+ R .id.btnAdditionalFields -> toggleAdditionalFields()
88
97
}
89
98
}
90
99
100
+ private fun toggleAdditionalFields () {
101
+ val isAdditionalFieldsVisible = fragmentUserInformationBinding.llNames.visibility == View .VISIBLE
102
+
103
+ fragmentUserInformationBinding.btnAdditionalFields.text = if (isAdditionalFieldsVisible) getString(R .string.show_additional_fields) else getString(R .string.hide_additional_fields)
104
+ fragmentUserInformationBinding.llNames.visibility = if (isAdditionalFieldsVisible) View .GONE else View .VISIBLE
105
+ fragmentUserInformationBinding.llEmailLang.visibility = if (isAdditionalFieldsVisible) View .GONE else View .VISIBLE
106
+ fragmentUserInformationBinding.llPhoneDob.visibility = if (isAdditionalFieldsVisible) View .GONE else View .VISIBLE
107
+ fragmentUserInformationBinding.llLevel.visibility = if (isAdditionalFieldsVisible) View .GONE else View .VISIBLE
108
+ fragmentUserInformationBinding.ltAge.visibility = if (isAdditionalFieldsVisible) View .VISIBLE else View .GONE
109
+ }
110
+
91
111
private fun submitForm () {
92
- val fname = " ${fragmentUserInformationBinding.etFname.text} " .trim { it <= ' ' }
93
- val lname = " ${fragmentUserInformationBinding.etLname.text} " .trim { it <= ' ' }
94
- val mName = " ${fragmentUserInformationBinding.etMname.text} " .trim { it <= ' ' }
95
- val phone = " ${fragmentUserInformationBinding.etPhone.text} " .trim { it <= ' ' }
96
- val email = " ${fragmentUserInformationBinding.etEmail.text} " .trim { it <= ' ' }
97
- var gender = " "
98
- val rbSelected = requireView().findViewById<RadioButton >(fragmentUserInformationBinding.rbGender.checkedRadioButtonId)
99
- if (rbSelected != null ) {
100
- gender = rbSelected.text.toString()
112
+ var fname = " "
113
+ var lname = " "
114
+ var mName = " "
115
+ var age = " "
116
+
117
+ if (fragmentUserInformationBinding.llNames.visibility == View .VISIBLE ) {
118
+ fname = fragmentUserInformationBinding.etFname.text.toString().trim()
119
+ lname = fragmentUserInformationBinding.etLname.text.toString().trim()
120
+ mName = fragmentUserInformationBinding.etMname.text.toString().trim()
121
+ }
122
+
123
+ val user = JsonObject ()
124
+
125
+ if (fragmentUserInformationBinding.ltAge.visibility == View .VISIBLE ) {
126
+ age = fragmentUserInformationBinding.etAge.text.toString().trim()
127
+
128
+ if (age.isNotEmpty()) {
129
+ user.addProperty(" age" , age)
130
+ }
131
+ }
132
+
133
+
134
+ if (fname.isNotEmpty() || lname.isNotEmpty()) {
135
+ user.addProperty(" name" , " $fname $lname " )
136
+ }
137
+ if (fname.isNotEmpty()) user.addProperty(" firstName" , fname)
138
+ if (lname.isNotEmpty()) user.addProperty(" lastName" , lname)
139
+ if (mName.isNotEmpty()) user.addProperty(" middleName" , mName)
140
+
141
+ if (fragmentUserInformationBinding.llPhoneDob.visibility == View .VISIBLE ) {
142
+ val phone = fragmentUserInformationBinding.etPhone.text.toString().trim()
143
+ if (phone.isNotEmpty()) user.addProperty(" phoneNumber" , phone)
144
+
145
+ if (! dob.isNullOrEmpty()) user.addProperty(" birthDate" , dob)
101
146
}
102
- val level = " ${fragmentUserInformationBinding.spnLevel.selectedItem} "
103
- val lang = " ${fragmentUserInformationBinding.spnLang.selectedItem} "
147
+
148
+ if (fragmentUserInformationBinding.llEmailLang.visibility == View .VISIBLE ) {
149
+ val email = fragmentUserInformationBinding.etEmail.text.toString().trim()
150
+ val lang = fragmentUserInformationBinding.spnLang.selectedItem.toString()
151
+
152
+ if (email.isNotEmpty()) user.addProperty(" email" , email)
153
+ if (lang.isNotEmpty()) user.addProperty(" language" , lang)
154
+ }
155
+
156
+ if (fragmentUserInformationBinding.llLevel.visibility == View .VISIBLE ) {
157
+ val level = fragmentUserInformationBinding.spnLevel.selectedItem.toString()
158
+ if (level.isNotEmpty()) user.addProperty(" level" , level)
159
+ }
160
+
161
+ if (fragmentUserInformationBinding.rbGender.visibility == View .VISIBLE ) {
162
+ val rbSelected = requireView().findViewById<RadioButton >(fragmentUserInformationBinding.rbGender.checkedRadioButtonId)
163
+ if (rbSelected != null ) {
164
+ user.addProperty(" gender" , rbSelected.text.toString())
165
+ }
166
+ }
167
+
104
168
if (TextUtils .isEmpty(id)) {
105
169
val userId = userModel?.id
106
- val finalGender = gender
107
- mRealm.executeTransactionAsync({ realm: Realm ->
170
+ mRealm.executeTransactionAsync({ realm ->
108
171
val model = realm.where(RealmUserModel ::class .java).equalTo(" id" , userId).findFirst()
109
172
if (model != null ) {
110
- if (! TextUtils .isEmpty(fname)) model.firstName = fname
111
- if (! TextUtils .isEmpty(lname)) model.lastName = lname
112
- if (! TextUtils .isEmpty(email)) model.email = email
113
- if (! TextUtils .isEmpty(lang)) model.language = lang
114
- if (! TextUtils .isEmpty(phone)) model.phoneNumber = phone
115
- if (! TextUtils .isEmpty(dob)) model.birthPlace = dob
116
- if (! TextUtils .isEmpty(level)) model.level = level
117
- if (! TextUtils .isEmpty(finalGender)) model.gender = finalGender
173
+ user.keySet().forEach { key ->
174
+ when (key) {
175
+ " firstName" -> model.firstName = user.get(key).asString
176
+ " lastName" -> model.lastName = user.get(key).asString
177
+ " middleName" -> model.middleName = user.get(key).asString
178
+ " email" -> model.email = user.get(key).asString
179
+ " language" -> model.language = user.get(key).asString
180
+ " phoneNumber" -> model.phoneNumber = user.get(key).asString
181
+ " birthDate" -> model.birthPlace = user.get(key).asString
182
+ " level" -> model.level = user.get(key).asString
183
+ " gender" -> model.gender = user.get(key).asString
184
+ " age" -> model.age = user.get(key).asString
185
+ }
186
+ }
118
187
model.isUpdated = true
119
188
}
120
189
}, {
121
190
Utilities .toast(MainApplication .context, getString(R .string.user_profile_updated))
122
- if (isAdded) {
123
- dialog?.dismiss()
124
- }
191
+ if (isAdded) dialog?.dismiss()
125
192
}) {
126
193
Utilities .toast(MainApplication .context, getString(R .string.unable_to_update_user))
127
- if (isAdded) {
128
- dialog?.dismiss()
129
- }
194
+ if (isAdded) dialog?.dismiss()
130
195
}
131
196
} else {
132
- val user = JsonObject ()
133
- user.addProperty(" name" , " $fname $lname " )
134
- user.addProperty(" firstName" , fname)
135
- user.addProperty(" middleName" , mName)
136
- user.addProperty(" lastName" , lname)
137
- user.addProperty(" email" , email)
138
- user.addProperty(" language" , lang)
139
- user.addProperty(" phoneNumber" , phone)
140
- user.addProperty(" birthDate" , dob)
141
- user.addProperty(" gender" , gender)
142
- user.addProperty(" level" , level)
143
197
saveSubmission(user)
144
198
}
145
199
}
@@ -188,16 +242,17 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
188
242
get() = " sub_id"
189
243
190
244
companion object {
191
- fun getInstance (id : String? , teamId : String? ): UserInformationFragment {
245
+ fun getInstance (id : String? , teamId : String? , shouldHideElements : Boolean ): UserInformationFragment {
192
246
val f = UserInformationFragment ()
193
- setArgs(f, id, teamId)
247
+ setArgs(f, id, teamId, shouldHideElements )
194
248
return f
195
249
}
196
250
197
- private fun setArgs (f : UserInformationFragment , id : String? , teamId : String? ) {
251
+ private fun setArgs (f : UserInformationFragment , id : String? , teamId : String? , shouldHideElements : Boolean ) {
198
252
val b = Bundle ()
199
253
b.putString(" sub_id" , id)
200
254
b.putString(" teamId" , teamId)
255
+ b.putBoolean(" shouldHideElements" , shouldHideElements)
201
256
f.arguments = b
202
257
}
203
258
}
0 commit comments