blob: 06893f4de1cfdac8a66d7795bfdf414f24004113 [file] [log] [blame]
package org.apache.fineract.ui.online.groups.grouptasks
import android.app.Dialog
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import butterknife.ButterKnife
import butterknife.OnClick
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.android.synthetic.main.fragment_group_tasks_bottom_sheet.view.*
import org.apache.fineract.R
import org.apache.fineract.data.Status
import org.apache.fineract.data.models.Group
import org.apache.fineract.data.models.customer.Command
import org.apache.fineract.ui.base.FineractBaseActivity
import org.apache.fineract.ui.base.FineractBaseBottomSheetDialogFragment
import org.apache.fineract.ui.base.Toaster
import org.apache.fineract.ui.online.groups.grouplist.GroupViewModel
import org.apache.fineract.ui.online.groups.grouplist.GroupViewModelFactory
import javax.inject.Inject
/**
* Created by Ahmad Jawid Muhammadi on 04/April/2020
*/
class GroupTasksBottomSheetFragment(val group: Group) : FineractBaseBottomSheetDialogFragment() {
lateinit var rootView: View
private var command = Command()
lateinit var behavior: BottomSheetBehavior<*>
private lateinit var viewModel: GroupViewModel
@Inject
lateinit var viewModelFactory: GroupViewModelFactory
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
rootView = View.inflate(context, R.layout.fragment_group_tasks_bottom_sheet, null)
dialog.setContentView(rootView)
behavior = BottomSheetBehavior.from(rootView.parent as View)
(activity as FineractBaseActivity).activityComponent.inject(this)
ButterKnife.bind(this, rootView)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(GroupViewModel::class.java)
setDataOnViews()
subscribeUI()
return dialog
}
private fun subscribeUI() {
viewModel.status.observe(this, Observer { status ->
when (status) {
Status.LOADING -> {
showMifosProgressDialog(getString(R.string.please_wait_updating_group_status))
}
Status.ERROR -> {
hideMifosProgressDialog()
Toaster.show(rootView, R.string.error_while_updating_group_status, Toast.LENGTH_SHORT)
}
Status.DONE -> {
Toaster.show(rootView, getString(R.string.group_identifier_updated_successfully, group.identifier), Toast.LENGTH_SHORT)
hideMifosProgressDialog()
dismiss()
}
}
})
}
private fun setDataOnViews() {
when (group.status) {
Group.Status.ACTIVE -> {
rootView.iv_task.setImageDrawable(
ContextCompat.getDrawable(activity!!, R.drawable.ic_close_black_24dp))
rootView.iv_task.setColorFilter(ContextCompat.getColor(activity!!, R.color.red_dark))
rootView.tv_task.text = getString(R.string.close)
}
Group.Status.PENDING -> {
rootView.iv_task.setImageDrawable(ContextCompat.getDrawable(activity!!,
R.drawable.ic_check_circle_black_24dp))
rootView.iv_task.setColorFilter(ContextCompat.getColor(activity!!, R.color.status))
rootView.tv_task.text = getString(R.string.activate)
}
Group.Status.CLOSED -> {
rootView.iv_task.setImageDrawable(ContextCompat.getDrawable(activity!!,
R.drawable.ic_check_circle_black_24dp))
rootView.iv_task.setColorFilter(ContextCompat.getColor(activity!!, R.color.status))
rootView.tv_task.text = getString(R.string.reopen)
}
}
}
@OnClick(R.id.iv_task)
fun onTaskImageViewClicked() {
when (group.status) {
Group.Status.ACTIVE -> {
command.action = Command.Action.CLOSE
rootView.tv_header.text = getString(R.string.close)
rootView.tv_sub_header.text = getString(R.string.please_verify_following_group_task, getString(R.string.lock))
rootView.btn_submit_task.text = getString(R.string.close)
}
Group.Status.PENDING -> {
command.action = Command.Action.ACTIVATE
rootView.tv_header.text = getString(R.string.activate)
rootView.tv_sub_header.text = getString(R.string.please_verify_following_group_task, getString(R.string.activate))
rootView.btn_submit_task.text = getString(R.string.activate)
}
Group.Status.CLOSED -> {
command.action = Command.Action.REOPEN
rootView.tv_header.text = getString(R.string.reopen)
rootView.tv_sub_header.text = getString(R.string.please_verify_following_group_task, getString(R.string.reopen))
rootView.btn_submit_task.text = getString(R.string.reopen)
}
}
rootView.ll_task_list.visibility = View.GONE
rootView.ll_task_form.visibility = View.VISIBLE
}
@OnClick(R.id.btn_submit_task)
fun submitTask() {
command.comment = rootView.et_comment.text.toString().trim { it <= ' ' }
rootView.et_comment.isEnabled = false
group.identifier?.let {
viewModel.changeGroupStatus(it, group, command)
}
}
@OnClick(R.id.btn_cancel)
fun onCancel() {
dismiss()
}
override fun onStart() {
super.onStart()
behavior.state = BottomSheetBehavior.STATE_EXPANDED
}
override fun onDestroy() {
super.onDestroy()
hideMifosProgressBar()
}
}