Skip to content

Commit

Permalink
[feat/#135] ReviewFriendSelectFragment
Browse files Browse the repository at this point in the history
  • Loading branch information
kkk5474096 committed Feb 12, 2024
1 parent ed40f56 commit df6c01b
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 62 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.teumteum.teumteum.presentation.group.review

import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.teumteum.base.BindingFragment
import com.teumteum.base.util.extension.deepCopyList
import com.teumteum.base.util.extension.setOnSingleClickListener
import com.teumteum.domain.entity.Friend
import com.teumteum.domain.entity.ReviewFriend
import com.teumteum.teumteum.R
import com.teumteum.teumteum.databinding.FragmentReviewFriendSelectBinding
import kotlin.reflect.typeOf
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json


class ReviewFriendSelectFragment: BindingFragment<FragmentReviewFriendSelectBinding>(R.layout.fragment_review_friend_select) {
private val viewModel by activityViewModels<ReviewViewModel>()
private var adapter: ReviewFriendListAdapter? = null

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

initView()
initEvent()
observe()
}

private fun initView() {
adapter = ReviewFriendListAdapter { friend ->
val currentList = Gson().toJson(adapter?.currentList)
val newCurrentList = Gson().fromJson<List<ReviewFriend>>(currentList, object : TypeToken<List<ReviewFriend>>() {}.type)

newCurrentList?.forEach {
if(it.id == friend.id) {
it.isSelected = !it.isSelected
}
}
adapter?.submitList(newCurrentList)
binding.btnReview.isEnabled = newCurrentList.any { it.isSelected }
}
binding.rvUser.run {
itemAnimator = null
adapter = this@ReviewFriendSelectFragment.adapter
}
viewModel.getReviewFriendList()
}

private fun initEvent() {
binding.btnReview.setOnSingleClickListener {

}
}

private fun observe() {
viewModel.moimFriendList.flowWithLifecycle(lifecycle)
.onEach {
if (it.isNotEmpty()) {
adapter?.submitList(it)
}
}.launchIn(lifecycleScope)
}

override fun onDestroyView() {
adapter = null
super.onDestroyView()
}
}
2 changes: 2 additions & 0 deletions app/src/main/res/drawable/selector_check_box.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_check_box_select" android:state_checked="true" />
<item android:drawable="@drawable/ic_check_box_select" android:state_selected="true" />
<item android:drawable="@drawable/ic_check_box_default" android:state_checked="false" />
<item android:drawable="@drawable/ic_check_box_default" android:state_selected="false" />
</selector>
120 changes: 64 additions & 56 deletions app/src/main/res/layout/fragment_review_friend_select.xml
Original file line number Diff line number Diff line change
@@ -1,60 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:text="@string/review_select_title"
android:textAppearance="@style/ta.headline.3"
android:textColor="@color/text_headline_primary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/review_select_sub_title"
android:textAppearance="@style/ta.body.1"
android:textColor="@color/text_body_quaternary"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_user"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="33dp"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/view_division"
app:layout_constraintTop_toBottomOf="@id/tv_content"
tools:listitem="@layout/item_review_user" />

<View
android:id="@+id/view_division"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="12dp"
android:background="#D6D6D6"
app:layout_constraintBottom_toTopOf="@id/btn_review" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_review"
style="@style/Component_Button_primary_Fill_4dp"
xmlns:tools="http://schemas.android.com/tools">

<data>

</data>

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="10dp"
android:text="@string/review_btn_text"
app:layout_constraintBottom_toBottomOf="parent" />
android:layout_height="match_parent">

<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:text="@string/review_select_title"
android:textAppearance="@style/ta.headline.3"
android:textColor="@color/text_headline_primary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/review_select_sub_title"
android:textAppearance="@style/ta.body.1"
android:textColor="@color/text_body_quaternary"
app:layout_constraintStart_toStartOf="@id/tv_title"
app:layout_constraintTop_toBottomOf="@id/tv_title" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_user"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="33dp"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/view_division"
app:layout_constraintTop_toBottomOf="@id/tv_content"
tools:listitem="@layout/item_review_user" />

<View
android:id="@+id/view_division"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="12dp"
android:background="#D6D6D6"
app:layout_constraintBottom_toTopOf="@id/btn_review" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_review"
style="@style/Component_Button_primary_Fill_4dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="10dp"
android:enabled="false"
android:text="@string/review_btn_text"
app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
10 changes: 4 additions & 6 deletions app/src/main/res/layout/item_review_user.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,13 @@
app:layout_constraintStart_toStartOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_name" />

<CheckBox
<ImageView
android:id="@+id/iv_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selector_check_box"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginEnd="20dp"
android:minHeight="0dp"
android:minWidth="0dp"
android:button="@null"
android:background="@drawable/selector_check_box" />
android:layout_marginEnd="20dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

0 comments on commit df6c01b

Please sign in to comment.