Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

teams: add plan (fixes #5259) #5261

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
134 changes: 109 additions & 25 deletions app/src/main/java/org/ole/planet/myplanet/ui/team/PlanFragment.kt
Original file line number Diff line number Diff line change
@@ -1,52 +1,136 @@
package org.ole.planet.myplanet.ui.team

import android.app.AlertDialog
import android.content.Context
import android.os.Bundle
import android.text.Html
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.FragmentActivity
import io.realm.Realm
import org.ole.planet.myplanet.R
import org.ole.planet.myplanet.databinding.AlertCreateTeamBinding
import org.ole.planet.myplanet.databinding.FragmentPlanBinding
import org.ole.planet.myplanet.model.RealmMyTeam
import org.ole.planet.myplanet.model.RealmNews
import org.ole.planet.myplanet.service.UserProfileDbHandler
import org.ole.planet.myplanet.utilities.TimeUtils.formatDate
import org.ole.planet.myplanet.utilities.Utilities

class PlanFragment : BaseTeamFragment() {
private lateinit var fragmentPlanBinding: FragmentPlanBinding
private var missionText: String? = null
private var servicesText: String? = null
private var rulesText = ""

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
fragmentPlanBinding = FragmentPlanBinding.inflate(inflater, container, false)
return fragmentPlanBinding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (TextUtils.equals(team?.type, "enterprise")) {
missionText = if (team?.description?.trim { it <= ' ' }?.isEmpty() == true) {
""
} else {
"<b>" + getString(R.string.entMission) + "</b><br/>" + team?.description + "<br/><br/>"
}
servicesText = if (team?.services?.trim { it <= ' ' }?.isEmpty() == true) {
""
} else {
"<b>" + getString(R.string.entServices) + "</b><br/>" + team?.services + "<br/><br/>"
}
rulesText = if (team?.rules?.trim { it <= ' ' }?.isEmpty() == true) {
""
} else {
"<b>" + getString(R.string.entRules) + "</b><br/>" + team?.rules
}
fragmentPlanBinding.tvDescription.text = Html.fromHtml(missionText + servicesText + rulesText, Html.FROM_HTML_MODE_LEGACY)
if (fragmentPlanBinding.tvDescription.text.toString().isEmpty()) {
fragmentPlanBinding.tvDescription.text = Html.fromHtml("<br/>" + getString(R.string.entEmptyDescription) + "<br/>", Html.FROM_HTML_MODE_LEGACY)
updateUIWithTeamData(team)

fragmentPlanBinding.btnAddPlan.setOnClickListener {
editTeam()
}
}

private fun editTeam() {
if (!isAdded) {
return
}
team?.let {
showCreateTeamDialog(requireContext(), requireActivity(), mRealm, it)
}
}

private fun showCreateTeamDialog(context: Context, activity: FragmentActivity, realm: Realm, team: RealmMyTeam) {

val alertCreateTeamBinding = AlertCreateTeamBinding.inflate(LayoutInflater.from(context))
setupDialogFields(alertCreateTeamBinding, context, team)

val dialog = AlertDialog.Builder(activity, R.style.AlertDialogTheme)
.setTitle("${context.getString(R.string.enter)} ${team.type} ${context.getString(R.string.detail)}")
.setView(alertCreateTeamBinding.root)
.setPositiveButton(context.getString(R.string.save), null)
.setNegativeButton(context.getString(R.string.cancel), null)
.create()

dialog.setOnShowListener {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
handleSaveButtonClick(alertCreateTeamBinding, activity, context, realm, team, dialog)
}
}
dialog.show()
}

private fun setupDialogFields(binding: AlertCreateTeamBinding, context: Context, team: RealmMyTeam) {
val isEnterprise = team.type == "enterprise"
binding.spnTeamType.visibility = if (isEnterprise) View.GONE else View.VISIBLE
binding.etServices.visibility = if (isEnterprise) View.VISIBLE else View.GONE
binding.etRules.visibility = if (isEnterprise) View.VISIBLE else View.GONE

binding.etDescription.hint = context.getString(if (isEnterprise) R.string.entMission else R.string.what_is_your_team_s_plan)
binding.etName.hint = context.getString(if (isEnterprise) R.string.enter_enterprise_s_name else R.string.enter_team_s_name)

binding.etServices.setText(team.services)
binding.etRules.setText(team.rules)
binding.etDescription.setText(team.description)
binding.etName.setText(team.name)
}

private fun handleSaveButtonClick(
binding: AlertCreateTeamBinding,
activity: FragmentActivity,
context: Context,
realm: Realm,
team: RealmMyTeam,
dialog: AlertDialog
) {
val name = binding.etName.text.toString().trim()
if (name.isEmpty()) {
Utilities.toast(activity, context.getString(R.string.name_is_required))
binding.etName.error = context.getString(R.string.please_enter_a_name)
return
}

val userId = UserProfileDbHandler(activity).userModel?._id
realm.executeTransaction {
team.name = name
team.services = binding.etServices.text.toString()
team.rules = binding.etRules.text.toString()
team.description = binding.etDescription.text.toString()
team.createdBy = userId
team.updated = true
}
updateUIWithTeamData(team)
Utilities.toast(activity, context.getString(R.string.added_successfully))
dialog.dismiss()
}

private fun updateUIWithTeamData(updatedTeam: RealmMyTeam?) {
if (updatedTeam == null) return

val missionText = formatTeamDetail(updatedTeam.description, getString(R.string.entMission))
val servicesText = formatTeamDetail(updatedTeam.services, getString(R.string.entServices))
val rulesText = formatTeamDetail(updatedTeam.rules, getString(R.string.entRules))

val finalText = if (missionText.isEmpty() && servicesText.isEmpty() && rulesText.isEmpty()) {
"<br/>${getString(R.string.entEmptyDescription)}<br/>"
} else {
fragmentPlanBinding.tvDescription.text = team?.description
missionText + servicesText + rulesText
}
fragmentPlanBinding.tvDate.text = getString(R.string.two_strings, getString(R.string.created_on), team?.createdDate?.let { formatDate(it) })

fragmentPlanBinding.tvDescription.text = Html.fromHtml(finalText, Html.FROM_HTML_MODE_LEGACY)
fragmentPlanBinding.tvDate.text = getString(
R.string.two_strings,
getString(R.string.created_on),
updatedTeam.createdDate?.let { formatDate(it) }
)
}

private fun formatTeamDetail(detail: String?, title: String): String {
return if (detail?.trim().isNullOrEmpty()) "" else "<b>$title</b><br/>$detail<br/><br/>"
}

override fun onNewsItemClick(news: RealmNews?) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class TeamFragment : Fragment(), AdapterTeamList.OnClickTeamItem {
return fragmentTeamBinding.root
}

private fun createTeamAlert(team: RealmMyTeam?) {
fun createTeamAlert(team: RealmMyTeam?) {
alertCreateTeamBinding = AlertCreateTeamBinding.inflate(LayoutInflater.from(context))
if (TextUtils.equals(type, "enterprise")) {
alertCreateTeamBinding.spnTeamType.visibility = View.GONE
Expand Down
9 changes: 8 additions & 1 deletion app/src/main/res/layout/fragment_plan.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
android:padding="@dimen/padding_normal"
android:textColor="@color/daynight_textColor"
android:textSize="@dimen/text_size_large" />
<Button
android:id="@+id/btn_add_plan"
style="@style/YellowButtons"
android:background="@drawable/buttonyellow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Plan" />
<TextView
android:id="@+id/tv_date"
android:layout_width="match_parent"
Expand All @@ -26,4 +33,4 @@
android:textColor="@color/daynight_textColor"
android:textSize="@dimen/text_size_mid" />
</LinearLayout>
</FrameLayout>
</FrameLayout>
Loading