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
162 changes: 138 additions & 24 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,166 @@
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.core.view.isVisible
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 = ""
private var isEnterprise: Boolean = false


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
updateUIWithTeamData(team)

val isMyTeam = RealmMyTeam.isTeamLeader(team?._id, user?.id, mRealm)
isEnterprise = team?.type?.equals("enterprise", ignoreCase = true) == true


fragmentPlanBinding.btnAddPlan.text = if (isEnterprise) "Edit Mission and Services"
else getString(R.string.edit_plan)

fragmentPlanBinding.btnAddPlan.isVisible = isMyTeam
fragmentPlanBinding.btnAddPlan.isEnabled = isMyTeam

fragmentPlanBinding.btnAddPlan.setOnClickListener {
if (isMyTeam) {
editTeam()
}
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)
}
}


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, 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, team: RealmMyTeam) {
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 = requireContext().getString(
if (isEnterprise) R.string.entMission else R.string.what_is_your_team_s_plan
)
binding.etName.hint = requireContext().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
isEnterprise= team?.type?.equals("enterprise", ignoreCase = true) == true

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

val finalText = if (missionText.isEmpty() && servicesText.isEmpty() && rulesText.isEmpty()) {
"<br/>" + (if (isEnterprise) getString(R.string.entEmptyDescription) else "This Team has no description defined") + "<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
8 changes: 7 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,12 @@
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" />
<TextView
android:id="@+id/tv_date"
android:layout_width="match_parent"
Expand All @@ -26,4 +32,4 @@
android:textColor="@color/daynight_textColor"
android:textSize="@dimen/text_size_mid" />
</LinearLayout>
</FrameLayout>
</FrameLayout>
1 change: 1 addition & 0 deletions app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">انتقل إلى مكتبتي</string>
<string name="choose_an_option">اختر خيارًا</string>
<string name="welcome_back">مرحبًا بعودتك %1$s</string>
<string name="edit_plan">تعديل الخطة</string>
<string name="show_additional_fields">عرض الحقول الإضافية</string>
<string name="hide_additional_fields">إخفاء الحقول الإضافية</string>
<string name="age">العمر</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">Ir a Mi Biblioteca</string>
<string name="choose_an_option">Elige una opción</string>
<string name="welcome_back">Bienvenido de nuevo %1$s</string>
<string name="edit_plan">Editar plan</string>
<string name="show_additional_fields">mostrar campos adicionales</string>
<string name="hide_additional_fields">ocultar campos adicionales</string>
<string name="age">Edad</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">Aller à Ma Bibliothèque</string>
<string name="choose_an_option">Choisissez une option</string>
<string name="welcome_back">Bienvenue %1$s</string>
<string name="edit_plan">Modifier le plan</string>
<string name="show_additional_fields">afficher les champs supplémentaires</string>
<string name="hide_additional_fields">masquer les champs supplémentaires</string>
<string name="age">Âge</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ne/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">मेरो पुस्तकालयमा जानुहोस्</string>
<string name="choose_an_option">एउटा विकल्प छान्नुहोस्</string>
<string name="welcome_back">स्वागतम् %1$s</string>
<string name="edit_plan">योजना सम्पादन गर्नुहोस्</string>
<string name="show_additional_fields">थप क्षेत्रहरू देखाउनुहोस्</string>
<string name="hide_additional_fields">थप क्षेत्रहरू लुकाउनुहोस्</string>
<string name="age">उमेर</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-so/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">Tag Maktabaddayda</string>
<string name="choose_an_option">Dooro ikhtiyaar</string>
<string name="welcome_back">Soo dhawoow %1$s</string>
<string name="edit_plan">Wax ka beddel qorshaha</string>
<string name="show_additional_fields">muuji beeraha dheeraadka ah</string>
<string name="hide_additional_fields">qari beeraha dheeraadka ah</string>
<string name="age">Da\'da</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,7 @@
<string name="go_to_mylibrary">Go To MyLibrary</string>
<string name="choose_an_option">Choose an option</string>
<string name="welcome_back">Welcome back %1$s !</string>
<string name="edit_plan">Edit Plan</string>
<string name="show_additional_fields">show additional fields</string>
<string name="hide_additional_fields">hide additional fields</string>
<string name="age">Age</string>
Expand Down
Loading