Skip to content

Commit

Permalink
handle team todo details fragment
Browse files Browse the repository at this point in the history
  • Loading branch information
YaseenOmar committed Apr 18, 2023
1 parent cd31228 commit a9b3caf
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 28 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.red_velvet_cake.dailytodo.ui.team_todo_details

import com.red_velvet_cake.dailytodo.data.model.UpdateTeamTodoStatusResponse
import com.red_velvet_cake.dailytodo.data.remote.TodoServiceImpl
import com.red_velvet_cake.dailytodo.utils.Constants
import com.red_velvet_cake.dailytodo.utils.TodoStatus
import java.io.IOException

class TeamTODOStatusPresenter(
private val view: TeamTodoDetailsView,
) {
private val todoServiceImpl = TodoServiceImpl()

fun setTodoStatus(status: TodoStatus, todoId: String) {
view.showTodoStatusUpdatedLoading(true)
when (status) {
TodoStatus.Todo -> updateTeamTODOStatus(Constants.TODO, todoId)
TodoStatus.InProgress -> updateTeamTODOStatus(Constants.IN_PROGRESS, todoId)
TodoStatus.Done -> updateTeamTODOStatus(Constants.DONE, todoId)
}
}

private fun updateTeamTODOStatus(
newTodoStatus: Int,
todoId: String,
) {
todoServiceImpl.updateTeamTodoStatus(
todoId,
newTodoStatus,
::onUpdateTeamTodoStatusSuccess,
::onUpdateTeamTodoStatusFailure
)
}

private fun onUpdateTeamTodoStatusSuccess(updateTeamStatusResponse: UpdateTeamTodoStatusResponse) {
view.showTodoStatusUpdatedLoading(!updateTeamStatusResponse.isSuccess)
view.showTodoStatusUpdatedSuccessfully()
}

private fun onUpdateTeamTodoStatusFailure(exception: IOException) {
view.showTodoStatusUpdatedLoading(false)
view.showTodoStatusUpdatedFailure(exception)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,121 @@ package com.red_velvet_cake.dailytodo.ui.team_todo_details

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import com.red_velvet_cake.dailytodo.data.model.TeamTodo
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.core.view.isVisible
import com.red_velvet_cake.dailytodo.R
import com.red_velvet_cake.dailytodo.databinding.FragmentTeamTodoDetailsBinding
import com.red_velvet_cake.dailytodo.ui.base.BaseFragment
import com.red_velvet_cake.dailytodo.utils.Constants
import com.red_velvet_cake.dailytodo.utils.TodoStatus
import java.io.IOException

class TeamTodoDetailsFragment : BaseFragment<FragmentTeamTodoDetailsBinding>() {
override val inflater: (LayoutInflater, ViewGroup?, Boolean) -> FragmentTeamTodoDetailsBinding =
FragmentTeamTodoDetailsBinding::inflate
class TeamTodoDetailsFragment : BaseFragment<FragmentTeamTodoDetailsBinding>(),
TeamTodoDetailsView {
override val inflater: (LayoutInflater, ViewGroup?, Boolean) -> FragmentTeamTodoDetailsBinding
get() = FragmentTeamTodoDetailsBinding::inflate
private lateinit var presenter: TeamTODOStatusPresenter

override fun setUp() {
val teamTodoDetails: TeamTodo? = arguments?.getParcelable(KEY)
initSpinner()
setArgs()
}

private fun initSpinner() {
val status = listOf("Todo", "In progress", "Done")
val spinnerAdapter =
ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, status)
spinnerAdapter.setDropDownViewResource(android.R.layout.select_dialog_multichoice)

binding.spinnerTodoStatus.apply {
adapter = spinnerAdapter
}

}

override fun addCallBacks() {
binding.spinnerTodoStatus.onItemSelectedListener =
object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
when (position) {
Constants.TODO -> {
presenter.setTodoStatus(TodoStatus.Todo, "details.id")
}

Constants.IN_PROGRESS -> {
presenter.setTodoStatus(TodoStatus.InProgress, "details.id")
}

Constants.DONE -> {
presenter.setTodoStatus(TodoStatus.Done, "details.id")
}
}
}

override fun onNothingSelected(parent: AdapterView<*>?) {
Toast.makeText(requireContext(), "Nothing Selected ", Toast.LENGTH_SHORT).show()
}

}
}

private fun setArgs() {
val teamTodoDetails: TeamTodo? = arguments?.getParcelable(KEY_DETAILS_PARAM)
with(binding) {
textViewTodoTitle.text = teamTodoDetails?.title
textViewTodoDetails.text= teamTodoDetails?.description
textViewAssigneName.text= teamTodoDetails?.assignee
textViewTodoDescription.text = teamTodoDetails?.description
textViewAssigneName.text = teamTodoDetails?.assignee
textViewCreationDate.text = teamTodoDetails?.creationTime?.substring(0..9)
textViewTodoCreationTime.text = teamTodoDetails?.creationTime?.substring(11..15)
}
}

private fun makeToast(errorMessage: String) {
Toast.makeText(requireContext(), errorMessage, Toast.LENGTH_SHORT).show()
}

private fun setProgressBarVisibility(visibility: Boolean) {
binding.progress.isVisible = visibility
}

override fun showTodoStatusUpdatedLoading(isLoading: Boolean) {
requireActivity().runOnUiThread {
setProgressBarVisibility(isLoading)
}
}

override fun showTodoStatusUpdatedSuccessfully() {

requireActivity().runOnUiThread {
makeToast(getString(R.string.update_succeeded))
}
}

override fun addCallBacks() {}
override fun showTodoStatusUpdatedFailure(exception: IOException) {
requireActivity().runOnUiThread {
makeToast(exception.message.toString())
}
}

companion object {
const val KEY = "team_todo"
fun newInstance(teamTodo: TeamTodo) =
TeamTodoDetailsFragment.apply {
val arguments = Bundle().apply {
putParcelable(KEY, teamTodo)
}
}
private const val KEY_DETAILS_PARAM = "team todo details"

fun newInstance(teamTodo: TeamTodo): TeamTodoDetailsFragment {
val bundle = Bundle()
bundle.putParcelable(KEY_DETAILS_PARAM, teamTodo)
val fragment = TeamTodoDetailsFragment()
fragment.arguments = bundle
return fragment
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.red_velvet_cake.dailytodo.ui.team_todo_details

import java.io.IOException

interface TeamTodoDetailsView {
fun showTodoStatusUpdatedLoading(isLoading:Boolean)
fun showTodoStatusUpdatedSuccessfully()
fun showTodoStatusUpdatedFailure(exception: IOException)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@ package com.red_velvet_cake.dailytodo.utils
object Constants {
const val HOST = "team-todo-62dmq.ondigitalocean.app"
const val SCHEME = "https"
const val TODO = 0
const val IN_PROGRESS = 1
const val DONE = 2
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.red_velvet_cake.dailytodo.utils

enum class TodoStatus {
Done, InProgress, Todo
}
48 changes: 35 additions & 13 deletions app/src/main/res/layout/fragment_team_todo_details.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,6 @@
app:title="@string/details" />
</com.google.android.material.appbar.AppBarLayout>

<TextView
android:id="@+id/text_view_assigne_name"
style="@style/TextViewInTodoDetails"
android:layout_width="wrap_content"
android:layout_height="@dimen/_12dp"
android:layout_marginStart="@dimen/_16dp"
android:layout_marginTop="@dimen/_12dp"
android:fontFamily="@font/poppins"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_todo_title"
tools:text="Yaseen Zaqut" />

<TextView
android:id="@+id/text_view_todo_title"
Expand All @@ -46,7 +35,29 @@
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/appbar"
tools:ignore="RtlSymmetry"
tools:text="UX UI Studio Meeting " />
<TextView
android:id="@+id/text_view_assigne_name"
style="@style/TextViewInTodoDetails"
android:layout_width="wrap_content"
android:layout_height="@dimen/_12dp"
android:layout_marginStart="@dimen/_16dp"
android:layout_marginTop="@dimen/_12dp"
android:fontFamily="@font/poppins"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_todo_title"
tools:text="Yaseen Zaqut" />

<Spinner
android:id="@+id/spinner_todo_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/_16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/text_view_todo_title"
tools:ignore="RtlSymmetry" />


<TextView
android:id="@+id/text_view_creation_date"
Expand Down Expand Up @@ -74,14 +85,25 @@
tools:text="21:30" />

<TextView
android:id="@+id/text_view_todo_details"
android:id="@+id/text_view_todo_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/_16dp"
android:layout_marginVertical="@dimen/_18dp"
android:fontFamily="@font/poppins"
android:paddingHorizontal="@dimen/_16dp"
android:textColor="@color/secondary_text"
app:layout_constraintTop_toBottomOf="@id/text_view_creation_date"
tools:text="@string/details_todos" />


<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit a9b3caf

Please sign in to comment.