Skip to content

Commit ea52c67

Browse files
Okuro3499dogi
andauthored
teams: smoother survey submissions (fixes #5348) (#5349)
Co-authored-by: dogi <[email protected]>
1 parent 5828d72 commit ea52c67

File tree

12 files changed

+210
-96
lines changed

12 files changed

+210
-96
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
applicationId "org.ole.planet.myplanet"
1111
minSdkVersion 26
1212
targetSdkVersion 34
13-
versionCode 2332
14-
versionName "0.23.32"
13+
versionCode 2333
14+
versionName "0.23.33"
1515
ndkVersion '21.3.6528147'
1616
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1717
vectorDrawables.useSupportLibrary = true

app/src/main/java/org/ole/planet/myplanet/model/RealmUserModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ open class RealmUserModel : RealmObject() {
4848
var gender: String? = null
4949
var salt: String? = null
5050
var dob: String? = null
51+
var age: String? = null
5152
var birthPlace: String? = null
5253
var userImage: String? = null
5354
var key: String? = null
@@ -87,6 +88,7 @@ open class RealmUserModel : RealmObject() {
8788
jsonObject.addProperty("gender", gender)
8889
jsonObject.addProperty("phoneNumber", phoneNumber)
8990
jsonObject.addProperty("birthDate", dob)
91+
jsonObject.addProperty("age", age)
9092
try {
9193
jsonObject.addProperty("iterations", iterations?.toInt())
9294
} catch (e: Exception) {
@@ -263,6 +265,7 @@ open class RealmUserModel : RealmObject() {
263265
salt = JsonUtils.getString("salt", jsonDoc)
264266
dob = JsonUtils.getString("birthDate", jsonDoc)
265267
birthPlace = JsonUtils.getString("birthPlace", jsonDoc)
268+
age = JsonUtils.getString("age", jsonDoc)
266269
gender = JsonUtils.getString("gender", jsonDoc)
267270
language = JsonUtils.getString("language", jsonDoc)
268271
level = JsonUtils.getString("level", jsonDoc)

app/src/main/java/org/ole/planet/myplanet/ui/dashboard/BaseDashboardFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ open class BaseDashboardFragment : BaseDashboardFragmentPlugin(), NotificationCa
7373
v.findViewById<LinearLayout>(R.id.ll_prompt).visibility = View.VISIBLE
7474
v.findViewById<LinearLayout>(R.id.ll_prompt).setOnClickListener {
7575
if (!childFragmentManager.isStateSaved) {
76-
UserInformationFragment.getInstance("", "").show(childFragmentManager, "")
76+
UserInformationFragment.getInstance("", "", false).show(childFragmentManager, "")
7777
}
7878
}
7979
} else {

app/src/main/java/org/ole/planet/myplanet/ui/exam/BaseExamFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ abstract class BaseExamFragment : Fragment(), ImageCaptureCallback {
151151

152152
private fun showUserInfoDialog() {
153153
if (!isMySurvey && !exam?.isFromNation!!) {
154-
UserInformationFragment.getInstance(sub?.id, teamId).show(childFragmentManager, "")
154+
UserInformationFragment.getInstance(sub?.id, teamId, !isMySurvey && !exam?.isFromNation!!).show(childFragmentManager, "")
155155
} else {
156156
if (!mRealm.isInTransaction) mRealm.beginTransaction()
157157
sub?.status = "complete"

app/src/main/java/org/ole/planet/myplanet/ui/exam/UserInformationFragment.kt

Lines changed: 117 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
3333
lateinit var mRealm: Realm
3434
private var submissions: RealmSubmission? = null
3535
var userModel: RealmUserModel? = null
36+
var shouldHideElements: Boolean? = null
3637

3738
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
3839
fragmentUserInformationBinding = FragmentUserInformationBinding.inflate(inflater, container, false)
@@ -41,41 +42,48 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
4142
if (!TextUtils.isEmpty(id)) {
4243
submissions = mRealm.where(RealmSubmission::class.java).equalTo("id", id).findFirst()
4344
}
45+
shouldHideElements = arguments?.getBoolean("shouldHideElements") == true
4446
initViews()
4547
return fragmentUserInformationBinding.root
4648
}
4749

4850
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+
}
6576
// fragmentUserInformationBinding.etEmail.setText(getString(R.string.message_placeholder, userModel?.email))
6677
// fragmentUserInformationBinding.etFname.setText(getString(R.string.message_placeholder, userModel?.firstName))
6778
// fragmentUserInformationBinding.etLname.setText(getString(R.string.message_placeholder, userModel?.lastName))
6879
// fragmentUserInformationBinding.etPhone.setText(getString(R.string.message_placeholder, userModel?.phoneNumber))
6980
// fragmentUserInformationBinding.txtDob.text = getString(R.string.message_placeholder, userModel?.dob)
7081
// 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)
7583
}
7684

85+
fragmentUserInformationBinding.btnCancel.setOnClickListener(this)
7786
fragmentUserInformationBinding.btnSubmit.setOnClickListener(this)
78-
fragmentUserInformationBinding.txtDob.setOnClickListener(this)
7987
}
8088

8189
override fun onClick(view: View) {
@@ -85,61 +93,107 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
8593
}
8694
R.id.btn_submit -> submitForm()
8795
R.id.txt_dob -> showDatePickerDialog()
96+
R.id.btnAdditionalFields -> toggleAdditionalFields()
8897
}
8998
}
9099

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+
91111
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)
101146
}
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+
104168
if (TextUtils.isEmpty(id)) {
105169
val userId = userModel?.id
106-
val finalGender = gender
107-
mRealm.executeTransactionAsync({ realm: Realm ->
170+
mRealm.executeTransactionAsync({ realm ->
108171
val model = realm.where(RealmUserModel::class.java).equalTo("id", userId).findFirst()
109172
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+
}
118187
model.isUpdated = true
119188
}
120189
}, {
121190
Utilities.toast(MainApplication.context, getString(R.string.user_profile_updated))
122-
if (isAdded) {
123-
dialog?.dismiss()
124-
}
191+
if (isAdded) dialog?.dismiss()
125192
}) {
126193
Utilities.toast(MainApplication.context, getString(R.string.unable_to_update_user))
127-
if (isAdded) {
128-
dialog?.dismiss()
129-
}
194+
if (isAdded) dialog?.dismiss()
130195
}
131196
} 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)
143197
saveSubmission(user)
144198
}
145199
}
@@ -188,16 +242,17 @@ class UserInformationFragment : BaseDialogFragment(), View.OnClickListener {
188242
get() = "sub_id"
189243

190244
companion object {
191-
fun getInstance(id: String?, teamId: String?): UserInformationFragment {
245+
fun getInstance(id: String?, teamId: String?, shouldHideElements: Boolean): UserInformationFragment {
192246
val f = UserInformationFragment()
193-
setArgs(f, id, teamId)
247+
setArgs(f, id, teamId, shouldHideElements)
194248
return f
195249
}
196250

197-
private fun setArgs(f: UserInformationFragment, id: String?, teamId: String?) {
251+
private fun setArgs(f: UserInformationFragment, id: String?, teamId: String?, shouldHideElements: Boolean) {
198252
val b = Bundle()
199253
b.putString("sub_id", id)
200254
b.putString("teamId", teamId)
255+
b.putBoolean("shouldHideElements", shouldHideElements)
201256
f.arguments = b
202257
}
203258
}

0 commit comments

Comments
 (0)