From 942691b1b56aa1a78ac0dbf5acf26d7c979d906c Mon Sep 17 00:00:00 2001 From: Yerin Date: Thu, 27 Jul 2023 11:22:40 +0900 Subject: [PATCH 01/32] =?UTF-8?q?feat:=20StudyManagement=20=EC=9D=98=20int?= =?UTF-8?q?ent=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index f957c04f3..d6067911b 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -1,5 +1,7 @@ package com.created.team201.presentation.studyManagement +import android.content.Context +import android.content.Intent import android.os.Bundle import android.view.MenuItem import com.created.team201.R @@ -26,4 +28,14 @@ class StudyManagementActivity : } return super.onOptionsItemSelected(item) } + + companion object { + private const val KEY_STUDY_ID = "KEY_STUDY_ID" + private const val KEY_ROUND_ID = "KEY_ROUND_ID" + fun getIntent(context: Context, studyId: Long, roundId: Long): Intent = + Intent(context, StudyManagementActivity::class.java).apply { + putExtra(KEY_STUDY_ID, studyId) + putExtra(KEY_ROUND_ID, roundId) + } + } } From dd94c599fa6a7a5d29e18ff4578e2f1bc24bf92f Mon Sep 17 00:00:00 2001 From: Yerin Date: Thu, 27 Jul 2023 13:23:16 +0900 Subject: [PATCH 02/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EA=B8=B0=20=EB=B7=B0=EC=9D=98=20UiM?= =?UTF-8?q?odel=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/model/RoundUiModel.kt | 6 ++++++ .../studyManagement/model/StudyMemberUiModel.kt | 8 ++++++++ .../model/StudyRoundDetailUiModel.kt | 13 +++++++++++++ .../main/java/com/created/domain/model/Round.kt | 15 +++++++++++++++ .../java/com/created/domain/model/StudyMember.kt | 8 ++++++++ 5 files changed, 50 insertions(+) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/RoundUiModel.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt create mode 100644 android/domain/src/main/java/com/created/domain/model/Round.kt create mode 100644 android/domain/src/main/java/com/created/domain/model/StudyMember.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/RoundUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/RoundUiModel.kt new file mode 100644 index 000000000..2cab1674f --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/RoundUiModel.kt @@ -0,0 +1,6 @@ +package com.created.team201.presentation.studyManagement.model + +data class RoundUiModel( + val id: Long, + val number: Int, +) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt new file mode 100644 index 000000000..c6f00c4e5 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt @@ -0,0 +1,8 @@ +package com.created.team201.presentation.studyManagement.model + +data class StudyMemberUiModel( + val id: Long, + val nickname: String, + val profileImageUrl: String, + val isDone: Boolean, +) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt new file mode 100644 index 000000000..dbe676e48 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt @@ -0,0 +1,13 @@ +package com.created.team201.presentation.studyManagement.model + +import com.created.domain.model.Role +import com.created.team201.presentation.home.model.TodoUiModel + +data class StudyRoundDetailUiModel( + val id: Long, + val masterId: Int, + val role: Role, + val necessaryTodo: TodoUiModel, + val optionalTodos: List, + val studyMembers: List, +) diff --git a/android/domain/src/main/java/com/created/domain/model/Round.kt b/android/domain/src/main/java/com/created/domain/model/Round.kt new file mode 100644 index 000000000..31cbe650e --- /dev/null +++ b/android/domain/src/main/java/com/created/domain/model/Round.kt @@ -0,0 +1,15 @@ +package com.created.domain.model + +data class Round(val id: Long, val number: Int) { + init { + validateOverMinValue() + } + + private fun validateOverMinValue() { + require(number > MIN_VALUE) + } + + companion object { + private const val MIN_VALUE = 0 + } +} diff --git a/android/domain/src/main/java/com/created/domain/model/StudyMember.kt b/android/domain/src/main/java/com/created/domain/model/StudyMember.kt new file mode 100644 index 000000000..8c9ce4fa3 --- /dev/null +++ b/android/domain/src/main/java/com/created/domain/model/StudyMember.kt @@ -0,0 +1,8 @@ +package com.created.domain.model + +data class StudyMember( + val id: Long, + val nickname: String, + val profileImageUrl: String, + val isDone: Boolean, +) From 9a19b54d4810abd1888c458cdc982cdf09526375 Mon Sep 17 00:00:00 2001 From: Yerin Date: Thu, 27 Jul 2023 14:20:29 +0900 Subject: [PATCH 03/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EB=9D=BC=EC=9A=B4=EB=93=9C=EB=A5=BC=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 13 +++++++++ .../StudyManagementViewModel.kt | 27 +++++++++++++++++++ .../model/StudyRoundsUiModel.kt | 5 ++++ 3 files changed, 45 insertions(+) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index d6067911b..2f5a48cd5 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -4,16 +4,21 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.MenuItem +import androidx.activity.viewModels import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity class StudyManagementActivity : BindingActivity(R.layout.activity_study_management) { + + private val studyManagementViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initActionBar() + initStudyRounds() } private fun initActionBar() { @@ -22,6 +27,13 @@ class StudyManagementActivity : supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_back) } + private fun initStudyRounds() { + val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) + val roundId = intent.getLongExtra(KEY_ROUND_ID, KEY_ERROR) + studyManagementViewModel.getRounds(studyId) + studyManagementViewModel.getStudyRounds(studyId, roundId) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() @@ -30,6 +42,7 @@ class StudyManagementActivity : } companion object { + private const val KEY_ERROR = 0L private const val KEY_STUDY_ID = "KEY_STUDY_ID" private const val KEY_ROUND_ID = "KEY_ROUND_ID" fun getIntent(context: Context, studyId: Long, roundId: Long): Intent = diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt new file mode 100644 index 000000000..d32b3f956 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -0,0 +1,27 @@ +package com.created.team201.presentation.studyManagement + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.created.domain.model.Round +import com.created.team201.presentation.studyManagement.model.StudyRoundsUiModel + +class StudyManagementViewModel : ViewModel() { + private val rounds: MutableLiveData> = MutableLiveData() + private val _studyRounds: MutableLiveData = MutableLiveData() + val studyRounds: LiveData + get() = _studyRounds + + fun getRounds(studyId: Long) { + rounds.value = listOf() + } + + fun getStudyRounds(studyId: Long, currentRoundId: Long) { + // getStudyRoundDetail() + // _studyRounds.value = listOf() + } + + private fun getStudyRoundDetail(studyId: Long, roundId: Long) { + // 서버 통신으로 round 정보 가져옴 + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt new file mode 100644 index 000000000..c8dcda5eb --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt @@ -0,0 +1,5 @@ +package com.created.team201.presentation.studyManagement.model + +data class StudyRoundsUiModel( + val studyRoundDetails: List, +) From 58a5511201a50ddbe4a4fff535ce9b7b363c1d2a Mon Sep 17 00:00:00 2001 From: Yerin Date: Thu, 27 Jul 2023 14:42:02 +0900 Subject: [PATCH 04/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EA=B8=B0=20=EB=B7=B0=20=ED=99=80?= =?UTF-8?q?=EB=8D=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementViewHolder.kt | 22 +++++++++++++++++++ .../model/StudyRoundDetailUiModel.kt | 2 +- .../main/res/layout/item_study_management.xml | 10 ++++++--- .../java/com/created/domain/model/Role.kt | 2 ++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt new file mode 100644 index 000000000..a73ac6734 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -0,0 +1,22 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.created.team201.databinding.ItemStudyManagementBinding +import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel + +class StudyManagementViewHolder(val binding: ItemStudyManagementBinding) : + RecyclerView.ViewHolder(binding.root) { + + fun bind(studyManagementUIModel: StudyRoundDetailUiModel) { + binding.studyManagement = studyManagementUIModel + } + + companion object { + fun getBinding(parent: ViewGroup): ItemStudyManagementBinding { + val inflater = LayoutInflater.from(parent.context) + return ItemStudyManagementBinding.inflate(inflater, parent, false) + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt index dbe676e48..59c3e3a9c 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt @@ -5,7 +5,7 @@ import com.created.team201.presentation.home.model.TodoUiModel data class StudyRoundDetailUiModel( val id: Long, - val masterId: Int, + val masterId: Long, val role: Role, val necessaryTodo: TodoUiModel, val optionalTodos: List, diff --git a/android/app/src/main/res/layout/item_study_management.xml b/android/app/src/main/res/layout/item_study_management.xml index 2f932be3a..e4807f258 100644 --- a/android/app/src/main/res/layout/item_study_management.xml +++ b/android/app/src/main/res/layout/item_study_management.xml @@ -5,9 +5,11 @@ + + + name="studyManagement" + type="com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel" /> @@ -36,7 +38,7 @@ android:textAppearance="@style/text_r12" android:textColor="@color/white" app:drawableStartCompat="@drawable/ic_edit_12" - app:isVisible="@{isMaster}" + app:isVisible="@{Role.Companion.isMaster(studyManagement.role)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/tv_item_study_management_essential_todo" /> @@ -52,10 +54,12 @@ app:layout_constraintTop_toBottomOf="@id/tv_item_study_management_essential_todo"> Date: Thu, 27 Jul 2023 14:51:42 +0900 Subject: [PATCH 05/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EA=B8=B0=20=EB=B7=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A0=80=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementViewModel.kt | 6 ++-- .../adapter/StudyManagementAdapter.kt | 32 +++++++++++++++++++ .../model/StudyRoundsUiModel.kt | 5 --- 3 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt delete mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index d32b3f956..09a2cd80a 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -4,12 +4,12 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.created.domain.model.Round -import com.created.team201.presentation.studyManagement.model.StudyRoundsUiModel +import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel class StudyManagementViewModel : ViewModel() { private val rounds: MutableLiveData> = MutableLiveData() - private val _studyRounds: MutableLiveData = MutableLiveData() - val studyRounds: LiveData + private val _studyRounds: MutableLiveData> = MutableLiveData() + val studyRounds: LiveData> get() = _studyRounds fun getRounds(studyId: Long) { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt new file mode 100644 index 000000000..7e46ec01d --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt @@ -0,0 +1,32 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel + +class StudyManagementAdapter : + ListAdapter(diffCallback) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyManagementViewHolder { + return StudyManagementViewHolder(StudyManagementViewHolder.getBinding(parent)) + } + + override fun onBindViewHolder(holder: StudyManagementViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + companion object { + private val diffCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: StudyRoundDetailUiModel, + newItem: StudyRoundDetailUiModel, + ): Boolean = oldItem.id == newItem.id + + override fun areContentsTheSame( + oldItem: StudyRoundDetailUiModel, + newItem: StudyRoundDetailUiModel, + ): Boolean = oldItem == newItem + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt deleted file mode 100644 index c8dcda5eb..000000000 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundsUiModel.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.created.team201.presentation.studyManagement.model - -data class StudyRoundsUiModel( - val studyRoundDetails: List, -) From 7dd275fcbbdccb386d9fade5f2e8ea11b0fe681d Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 00:08:24 +0900 Subject: [PATCH 06/32] =?UTF-8?q?refactor:=20id=EB=A5=BC=20long=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team201/data/datasource/remote/HomeDataSource.kt | 2 +- .../team201/data/datasource/remote/HomeDataSourceImpl.kt | 2 +- .../java/com/created/team201/data/remote/api/HomeService.kt | 2 +- .../created/team201/data/remote/response/TodoResponseDto.kt | 2 +- .../com/created/team201/presentation/home/HomeFragment.kt | 2 +- .../com/created/team201/presentation/home/HomeViewModel.kt | 6 +++--- .../created/team201/presentation/home/model/TodoUiModel.kt | 2 +- .../studyManage/adapter/StudyManageViewHolder.kt | 2 -- android/app/src/main/res/layout/item_study_management.xml | 6 ++++-- .../domain/src/main/java/com/created/domain/model/Todo.kt | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSource.kt b/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSource.kt index bb2a1370d..679441e9e 100644 --- a/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSource.kt +++ b/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSource.kt @@ -7,5 +7,5 @@ interface HomeDataSource { suspend fun getUserStudies(): UserStudiesResponseDto - suspend fun patchTodo(studyId: Int, todoId: Int, todoRequestDto: TodoRequestDto) + suspend fun patchTodo(studyId: Int, todoId: Long, todoRequestDto: TodoRequestDto) } diff --git a/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSourceImpl.kt b/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSourceImpl.kt index 4293df382..6a0500585 100644 --- a/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSourceImpl.kt +++ b/android/app/src/main/java/com/created/team201/data/datasource/remote/HomeDataSourceImpl.kt @@ -11,7 +11,7 @@ class HomeDataSourceImpl( return homeService.getUserStudies() } - override suspend fun patchTodo(studyId: Int, todoId: Int, todoRequestDto: TodoRequestDto) { + override suspend fun patchTodo(studyId: Int, todoId: Long, todoRequestDto: TodoRequestDto) { homeService.patchTodo( studyId = studyId, todoId = todoId, diff --git a/android/app/src/main/java/com/created/team201/data/remote/api/HomeService.kt b/android/app/src/main/java/com/created/team201/data/remote/api/HomeService.kt index 1ce49c3d7..06918c4b8 100644 --- a/android/app/src/main/java/com/created/team201/data/remote/api/HomeService.kt +++ b/android/app/src/main/java/com/created/team201/data/remote/api/HomeService.kt @@ -15,7 +15,7 @@ interface HomeService { @PATCH("/v1/studies/{studyId}/todos/{todoId}") suspend fun patchTodo( @Path("studyId") studyId: Int, - @Path("todoId") todoId: Int, + @Path("todoId") todoId: Long, @Body todoRequestDto: TodoRequestDto, ) } diff --git a/android/app/src/main/java/com/created/team201/data/remote/response/TodoResponseDto.kt b/android/app/src/main/java/com/created/team201/data/remote/response/TodoResponseDto.kt index 9320f9bab..605262ba9 100644 --- a/android/app/src/main/java/com/created/team201/data/remote/response/TodoResponseDto.kt +++ b/android/app/src/main/java/com/created/team201/data/remote/response/TodoResponseDto.kt @@ -8,7 +8,7 @@ data class TodoResponseDto( @SerialName("content") val content: String, @SerialName("id") - val id: Int, + val id: Long, @SerialName("isDone") val isDone: Boolean, ) diff --git a/android/app/src/main/java/com/created/team201/presentation/home/HomeFragment.kt b/android/app/src/main/java/com/created/team201/presentation/home/HomeFragment.kt index 2f55a8774..17d9955fc 100644 --- a/android/app/src/main/java/com/created/team201/presentation/home/HomeFragment.kt +++ b/android/app/src/main/java/com/created/team201/presentation/home/HomeFragment.kt @@ -19,7 +19,7 @@ class HomeFragment : BindingFragment(R.layout.fragment_home } private fun implementClickListener() = object : HomeClickListener { - override fun clickOnTodo(id: Int, isDone: Boolean) { + override fun clickOnTodo(id: Long, isDone: Boolean) { homeViewModel.updateTodo(id, !isDone) } diff --git a/android/app/src/main/java/com/created/team201/presentation/home/HomeViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/home/HomeViewModel.kt index 4ef6c0aa9..2a7e10578 100644 --- a/android/app/src/main/java/com/created/team201/presentation/home/HomeViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/home/HomeViewModel.kt @@ -48,7 +48,7 @@ class HomeViewModel( } } - fun updateTodo(todoId: Int, isDone: Boolean) { + fun updateTodo(todoId: Long, isDone: Boolean) { val studies = userStudies.value ?: throw IllegalArgumentException() val isNecessary = studies.any { it.necessaryTodo.todoId == todoId } val study: StudyUiModel @@ -83,7 +83,7 @@ class HomeViewModel( } } - private fun updateNecessaryTodoCheck(studies: List, id: Int, isDone: Boolean) { + private fun updateNecessaryTodoCheck(studies: List, id: Long, isDone: Boolean) { _userStudies.value = studies.map { studyUiModel -> studyUiModel.takeIf { it.necessaryTodo.todoId != id } ?: studyUiModel.copy( necessaryTodo = studyUiModel.necessaryTodo.copy(isDone = isDone), @@ -91,7 +91,7 @@ class HomeViewModel( } } - private fun updateOptionalTodoCheck(studies: List, id: Int, isDone: Boolean) { + private fun updateOptionalTodoCheck(studies: List, id: Long, isDone: Boolean) { _userStudies.value = studies.map { studyUiModel -> studyUiModel.takeIf { todoUiModel -> !todoUiModel.optionalTodos.any { it.todoId == id } } ?: studyUiModel.copy( diff --git a/android/app/src/main/java/com/created/team201/presentation/home/model/TodoUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/home/model/TodoUiModel.kt index 7af4d47cd..cbe4bc83e 100644 --- a/android/app/src/main/java/com/created/team201/presentation/home/model/TodoUiModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/home/model/TodoUiModel.kt @@ -1,7 +1,7 @@ package com.created.team201.presentation.home.model data class TodoUiModel( - val todoId: Int, + val todoId: Long, val content: String, val isDone: Boolean, ) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManage/adapter/StudyManageViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManage/adapter/StudyManageViewHolder.kt index 6dfe454e4..e8d956a1d 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManage/adapter/StudyManageViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManage/adapter/StudyManageViewHolder.kt @@ -1,6 +1,5 @@ package com.created.team201.presentation.studyManage.adapter -import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import android.widget.LinearLayout.VERTICAL @@ -42,7 +41,6 @@ class StudyManageViewHolder( } fun bind(item: MyStudiesUiModel) { - Log.d("hello", item.studySummariesUiModel.toString()) studyListAdapter.submitList(item.studySummariesUiModel) } } diff --git a/android/app/src/main/res/layout/item_study_management.xml b/android/app/src/main/res/layout/item_study_management.xml index e4807f258..411ecaa71 100644 --- a/android/app/src/main/res/layout/item_study_management.xml +++ b/android/app/src/main/res/layout/item_study_management.xml @@ -5,7 +5,9 @@ - + diff --git a/android/domain/src/main/java/com/created/domain/model/Todo.kt b/android/domain/src/main/java/com/created/domain/model/Todo.kt index 2cc3e4dc2..ed449c4bb 100644 --- a/android/domain/src/main/java/com/created/domain/model/Todo.kt +++ b/android/domain/src/main/java/com/created/domain/model/Todo.kt @@ -1,7 +1,7 @@ package com.created.domain.model data class Todo( - val todoId: Int, + val todoId: Long, val content: String, val isDone: Boolean, ) From 2e0e529f89efc09dc545532dc806fecc866c034f Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 00:10:00 +0900 Subject: [PATCH 07/32] =?UTF-8?q?feat:=20todo=ED=81=B4=EB=A6=AD=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=EB=84=88=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team201/presentation/common/TodoClickListener.kt | 6 ++++++ .../created/team201/presentation/home/HomeClickListener.kt | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/common/TodoClickListener.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/common/TodoClickListener.kt b/android/app/src/main/java/com/created/team201/presentation/common/TodoClickListener.kt new file mode 100644 index 000000000..48a65629b --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/common/TodoClickListener.kt @@ -0,0 +1,6 @@ +package com.created.team201.presentation.common + +interface TodoClickListener { + + fun clickOnTodo(id: Long, isDone: Boolean) +} diff --git a/android/app/src/main/java/com/created/team201/presentation/home/HomeClickListener.kt b/android/app/src/main/java/com/created/team201/presentation/home/HomeClickListener.kt index 2e8065f93..8b610ccd9 100644 --- a/android/app/src/main/java/com/created/team201/presentation/home/HomeClickListener.kt +++ b/android/app/src/main/java/com/created/team201/presentation/home/HomeClickListener.kt @@ -1,8 +1,10 @@ package com.created.team201.presentation.home -interface HomeClickListener { +import com.created.team201.presentation.common.TodoClickListener - fun clickOnTodo(id: Int, isDone: Boolean) +interface HomeClickListener : TodoClickListener { + + override fun clickOnTodo(id: Long, isDone: Boolean) fun clickOnStudyCard(studyId: Long) } From 1ac089568d1a29a6214f94aa3ea695e8bf75ad8d Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 00:57:02 +0900 Subject: [PATCH 08/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=ED=95=98=EA=B8=B0=20=EB=B7=B0=20=EB=82=B4?= =?UTF-8?q?=EC=9D=98=20=ED=81=B4=EB=A6=AD=EB=A6=AC=EC=8A=A4=EB=84=88=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 9 ++- .../StudyManagementViewModel.kt | 66 +++++++++++++++++-- 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index 2f5a48cd5..c518c9a83 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -8,6 +8,7 @@ import androidx.activity.viewModels import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity +import com.created.team201.presentation.common.TodoClickListener class StudyManagementActivity : BindingActivity(R.layout.activity_study_management) { @@ -30,10 +31,16 @@ class StudyManagementActivity : private fun initStudyRounds() { val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) val roundId = intent.getLongExtra(KEY_ROUND_ID, KEY_ERROR) - studyManagementViewModel.getRounds(studyId) studyManagementViewModel.getStudyRounds(studyId, roundId) } + private val todoClickListener = object : TodoClickListener { + override fun clickOnTodo(id: Long, isDone: Boolean) { + val currentItemId = binding.vpStudyManagement.currentItem + studyManagementViewModel.updateTodo(currentItemId, id, !isDone) + } + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index 09a2cd80a..96cdb0138 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.created.domain.model.Round +import com.created.team201.presentation.home.model.TodoUiModel import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel class StudyManagementViewModel : ViewModel() { @@ -12,16 +13,71 @@ class StudyManagementViewModel : ViewModel() { val studyRounds: LiveData> get() = _studyRounds - fun getRounds(studyId: Long) { - rounds.value = listOf() - } - fun getStudyRounds(studyId: Long, currentRoundId: Long) { - // getStudyRoundDetail() + getRounds(studyId) + // getStudyRoundDetail() 여러번 // _studyRounds.value = listOf() } + private fun getRounds(studyId: Long) { + rounds.value = listOf() + } + private fun getStudyRoundDetail(studyId: Long, roundId: Long) { // 서버 통신으로 round 정보 가져옴 } + + fun updateTodo(currentItemId: Int, todoId: Long, isDone: Boolean) { + val studyDetails = studyRounds.value ?: throw IllegalStateException() + val currentStudy = studyRounds.value?.get(currentItemId) ?: throw IllegalStateException() + val isNecessary = currentStudy.necessaryTodo.todoId == todoId + val study: StudyRoundDetailUiModel + val todo: TodoUiModel + when (isNecessary) { + true -> { + updateNecessaryTodoCheck(studyDetails, todoId, isDone) + study = studyDetails.find { it.necessaryTodo.todoId == todoId }!! + todo = study.necessaryTodo + } + + false -> { + updateOptionalTodoCheck(studyDetails, todoId, isDone) + study = studyDetails.find { it.optionalTodos.any { it.todoId == todoId } }!! + todo = study.optionalTodos.find { it.todoId == todoId }!! + } + } + + patchTodo(todo, study, isNecessary) + } + + private fun patchTodo(todo: TodoUiModel, study: StudyRoundDetailUiModel, isNecessary: Boolean) { + // 서버 통신으로 update + } + + private fun updateNecessaryTodoCheck( + studyDetails: List, + id: Long, + isDone: Boolean, + ) { + _studyRounds.value = studyDetails.map { studyDetailUiModel -> + studyDetailUiModel.takeIf { it.necessaryTodo.todoId != id } ?: studyDetailUiModel.copy( + necessaryTodo = studyDetailUiModel.necessaryTodo.copy(isDone = isDone), + ) + } + } + + private fun updateOptionalTodoCheck( + studyDetails: List, + id: Long, + isDone: Boolean, + ) { + _studyRounds.value = studyDetails.map { studyDetailUiModel -> + studyDetailUiModel.takeIf { todoUiModel -> !todoUiModel.optionalTodos.any { it.todoId == id } } + ?: studyDetailUiModel.copy( + optionalTodos = studyDetailUiModel.optionalTodos.map { + it.takeUnless { it.todoId == id } ?: it.copy(isDone = isDone) + }, + ) + } + } } From 2efaa29bd21937d39bcc7533b8a2c363249e44f5 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 13:39:31 +0900 Subject: [PATCH 09/32] =?UTF-8?q?feat:=20view=20pager=20=EC=96=B4=EB=8C=91?= =?UTF-8?q?=ED=84=B0=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 16 ++++++++++++++++ .../adapter/StudyManagementAdapter.kt | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index c518c9a83..05427c15b 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -9,17 +9,23 @@ import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity import com.created.team201.presentation.common.TodoClickListener +import com.created.team201.presentation.studyManagement.adapter.StudyManagementAdapter class StudyManagementActivity : BindingActivity(R.layout.activity_study_management) { private val studyManagementViewModel by viewModels() + private val studyManagementAdapter: StudyManagementAdapter by lazy { + StudyManagementAdapter(todoClickListener) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initActionBar() initStudyRounds() + initAdapter() + observeStudyManagement() } private fun initActionBar() { @@ -34,6 +40,16 @@ class StudyManagementActivity : studyManagementViewModel.getStudyRounds(studyId, roundId) } + private fun initAdapter() { + binding.vpStudyManagement.adapter = studyManagementAdapter + } + + private fun observeStudyManagement() { + studyManagementViewModel.studyRounds.observe(this) { studyRoundDetails -> + studyManagementAdapter.submitList(studyRoundDetails) + } + } + private val todoClickListener = object : TodoClickListener { override fun clickOnTodo(id: Long, isDone: Boolean) { val currentItemId = binding.vpStudyManagement.currentItem diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt index 7e46ec01d..0bbfb2d29 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt @@ -3,9 +3,10 @@ package com.created.team201.presentation.studyManagement.adapter import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter +import com.created.team201.presentation.common.TodoClickListener import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel -class StudyManagementAdapter : +class StudyManagementAdapter(todoClickListener: TodoClickListener) : ListAdapter(diffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyManagementViewHolder { From 9e55c2635ed71f8dbc614e9fbea07cf12a417dba Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 15:15:45 +0900 Subject: [PATCH 10/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EB=A9=A4=EB=B2=84=20=EC=96=B4=EB=8C=91=ED=84=B0=EC=99=80=20?= =?UTF-8?q?=EB=B7=B0=ED=99=80=EB=8D=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementMemberAdapter.kt | 41 +++++++++++++++++++ .../StudyManagementMemberViewHolder.kt | 36 ++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt new file mode 100644 index 000000000..4562c2ba2 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt @@ -0,0 +1,41 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import com.created.team201.presentation.studyManagement.StudyMemberClickListener +import com.created.team201.presentation.studyManagement.model.StudyMemberUiModel + +class StudyManagementMemberAdapter( + private val memberClickListener: StudyMemberClickListener, +) : + ListAdapter(diffCallback) { + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): StudyManagementMemberViewHolder { + return StudyManagementMemberViewHolder( + StudyManagementMemberViewHolder.getBinding(parent), + memberClickListener, + ) + } + + override fun onBindViewHolder(holder: StudyManagementMemberViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + companion object { + private val diffCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: StudyMemberUiModel, + newItem: StudyMemberUiModel, + ): Boolean = oldItem.id == newItem.id + + override fun areContentsTheSame( + oldItem: StudyMemberUiModel, + newItem: StudyMemberUiModel, + ): Boolean = oldItem == newItem + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt new file mode 100644 index 000000000..a5c0e9fb2 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt @@ -0,0 +1,36 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.created.team201.R +import com.created.team201.databinding.ItemStudyManagementStudyMemberBinding +import com.created.team201.presentation.studyManagement.StudyMemberClickListener +import com.created.team201.presentation.studyManagement.model.StudyMemberUiModel + +class StudyManagementMemberViewHolder( + private val binding: ItemStudyManagementStudyMemberBinding, + memberClickListener: StudyMemberClickListener, +) : RecyclerView.ViewHolder(binding.root) { + + init { + binding.onClickMember = memberClickListener + } + + fun bind(item: StudyMemberUiModel) { + binding.studyMember = item + binding.tvItemStudyManagementStudyMemberEssentialTodoDone.text = + if (item.isDone) { + binding.root.context.getString(R.string.item_study_management_todo_done) + } else { + binding.root.context.getString(R.string.item_study_management_todo_undone) + } + } + + companion object { + fun getBinding(parent: ViewGroup): ItemStudyManagementStudyMemberBinding { + val inflater = LayoutInflater.from(parent.context) + return ItemStudyManagementStudyMemberBinding.inflate(inflater, parent, false) + } + } +} From a5a64fbdc1db8528c1bf1785ea25669c3d7319e5 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 15:16:32 +0900 Subject: [PATCH 11/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94=20?= =?UTF-8?q?=EB=A9=A4=EB=B2=84=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 8 +++- .../StudyMemberClickListener.kt | 6 +++ .../adapter/StudyManagementAdapter.kt | 11 +++++- .../adapter/StudyManagementViewHolder.kt | 16 +++++++- .../model/StudyMemberUiModel.kt | 5 ++- .../item_study_management_study_member.xml | 37 ++++++++++++------- 6 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyMemberClickListener.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index 05427c15b..d94faf9b1 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -16,7 +16,7 @@ class StudyManagementActivity : private val studyManagementViewModel by viewModels() private val studyManagementAdapter: StudyManagementAdapter by lazy { - StudyManagementAdapter(todoClickListener) + StudyManagementAdapter(todoClickListener, memberClickListener) } override fun onCreate(savedInstanceState: Bundle?) { @@ -57,6 +57,12 @@ class StudyManagementActivity : } } + private val memberClickListener = object : StudyMemberClickListener { + override fun onClickMember(id: Long) { + // 프로필 페이지로 이동 + } + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyMemberClickListener.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyMemberClickListener.kt new file mode 100644 index 000000000..d8a78720f --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyMemberClickListener.kt @@ -0,0 +1,6 @@ +package com.created.team201.presentation.studyManagement + +interface StudyMemberClickListener { + + fun onClickMember(id: Long) +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt index 0bbfb2d29..269a1d9fa 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt @@ -4,13 +4,20 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import com.created.team201.presentation.common.TodoClickListener +import com.created.team201.presentation.studyManagement.StudyMemberClickListener import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel -class StudyManagementAdapter(todoClickListener: TodoClickListener) : +class StudyManagementAdapter( + private val todoClickListener: TodoClickListener, + private val studyMemberClickListener: StudyMemberClickListener, +) : ListAdapter(diffCallback) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyManagementViewHolder { - return StudyManagementViewHolder(StudyManagementViewHolder.getBinding(parent)) + return StudyManagementViewHolder( + StudyManagementViewHolder.getBinding(parent), + studyMemberClickListener, + ) } override fun onBindViewHolder(holder: StudyManagementViewHolder, position: Int) { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index a73ac6734..71adc3ff1 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -4,13 +4,25 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.created.team201.databinding.ItemStudyManagementBinding +import com.created.team201.presentation.studyManagement.StudyMemberClickListener import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel -class StudyManagementViewHolder(val binding: ItemStudyManagementBinding) : - RecyclerView.ViewHolder(binding.root) { +class StudyManagementViewHolder( + private val binding: ItemStudyManagementBinding, + private val studyMemberClickListener: StudyMemberClickListener, +) : RecyclerView.ViewHolder(binding.root) { + + private val studyManagementMemberAdapter: StudyManagementMemberAdapter by lazy { + StudyManagementMemberAdapter(studyMemberClickListener) + } + + init { + binding.rvItemStudyManagementStudyMember.adapter = studyManagementMemberAdapter + } fun bind(studyManagementUIModel: StudyRoundDetailUiModel) { binding.studyManagement = studyManagementUIModel + studyManagementMemberAdapter.submitList(studyManagementUIModel.studyMembers) } companion object { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt index c6f00c4e5..2a3873688 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyMemberUiModel.kt @@ -2,7 +2,10 @@ package com.created.team201.presentation.studyManagement.model data class StudyMemberUiModel( val id: Long, + val isMaster: Boolean, val nickname: String, val profileImageUrl: String, val isDone: Boolean, -) +) { + fun progressPercentage(): Int = if (isDone) 100 else 0 +} diff --git a/android/app/src/main/res/layout/item_study_management_study_member.xml b/android/app/src/main/res/layout/item_study_management_study_member.xml index c9025fcaa..bddde97b6 100644 --- a/android/app/src/main/res/layout/item_study_management_study_member.xml +++ b/android/app/src/main/res/layout/item_study_management_study_member.xml @@ -9,57 +9,66 @@ + + + + + android:background="@drawable/bg_rectangle_radius_5dp" + android:onClick="@{() -> onClickMember.onClickMember(studyMember.id)}"> From e7dca8900470d4afa9a2c9c22e12a1359e079a27 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 15:26:55 +0900 Subject: [PATCH 12/32] =?UTF-8?q?feat:=20=EB=A6=AC=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=81=B4=EB=9F=AC=EB=B7=B0=20=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/adapter/StudyManagementAdapter.kt | 8 ++++++++ .../adapter/StudyManagementMemberAdapter.kt | 8 ++++++++ .../adapter/StudyManagementViewHolder.kt | 10 +++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt index 269a1d9fa..08408a9ab 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt @@ -13,6 +13,14 @@ class StudyManagementAdapter( ) : ListAdapter(diffCallback) { + init { + setHasStableIds(true) + } + + override fun getItemId(position: Int): Long { + return getItem(position).id + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyManagementViewHolder { return StudyManagementViewHolder( StudyManagementViewHolder.getBinding(parent), diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt index 4562c2ba2..7fa744ee6 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberAdapter.kt @@ -11,6 +11,14 @@ class StudyManagementMemberAdapter( ) : ListAdapter(diffCallback) { + init { + setHasStableIds(true) + } + + override fun getItemId(position: Int): Long { + return getItem(position).id + } + override fun onCreateViewHolder( parent: ViewGroup, viewType: Int, diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 71adc3ff1..9a5dba6b1 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -17,7 +17,15 @@ class StudyManagementViewHolder( } init { - binding.rvItemStudyManagementStudyMember.adapter = studyManagementMemberAdapter + initStudyManagementStudyMember() + } + + private fun initStudyManagementStudyMember() { + binding.rvItemStudyManagementStudyMember.apply { + adapter = studyManagementMemberAdapter + itemAnimator = null + setHasFixedSize(true) + } } fun bind(studyManagementUIModel: StudyRoundDetailUiModel) { From 24d62f8352b789b136d75283cda8cd50fb4b3232 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 20:28:12 +0900 Subject: [PATCH 13/32] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=20=ED=88=AC?= =?UTF-8?q?=EB=91=90=20=EB=B7=B0=ED=99=80=EB=8D=94=EC=99=80=20=EC=96=B4?= =?UTF-8?q?=EB=8C=91=ED=84=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementOptionalTodoAdapter.kt | 45 ++++++++++++ ...tudyManagementOptionalTodoAddViewHolder.kt | 30 ++++++++ .../StudyManagementOptionalTodoViewHolder.kt | 23 ++++++ .../adapter/StudyOptionalTodoViewHolder.kt | 10 +++ .../model/OptionalTodoUiModel.kt | 15 ++++ .../model/StudyRoundDetailUiModel.kt | 2 +- ...tem_study_management_optional_todo_add.xml | 37 ++++++++++ .../item_study_management_optional_todos.xml | 70 +++++++++++-------- 8 files changed, 202 insertions(+), 30 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/OptionalTodoUiModel.kt create mode 100644 android/app/src/main/res/layout/item_study_management_optional_todo_add.xml diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt new file mode 100644 index 000000000..e39b346f4 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt @@ -0,0 +1,45 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import com.created.team201.presentation.studyManagement.StudyManagementClickListener +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel + +class StudyManagementOptionalTodoAdapter(private val studyManagementClickListener: StudyManagementClickListener) : + ListAdapter( + diffCallback, + ) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyOptionalTodoViewHolder { + return when (viewType) { + 1 -> StudyManagementOptionalTodoAddViewHolder.from(parent, studyManagementClickListener) + else -> StudyManagementOptionalTodoViewHolder.from(parent) + } + } + + override fun onBindViewHolder(holder: StudyOptionalTodoViewHolder, position: Int) { + when (getItemViewType(position)) { + 1 -> (holder as StudyManagementOptionalTodoAddViewHolder).bind(getItem(position)) + else -> (holder as StudyManagementOptionalTodoViewHolder).bind(getItem(position)) + } + } + + override fun getItemViewType(position: Int): Int { + return (getItem(position).viewType) + } + + companion object { + private val diffCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: OptionalTodoUiModel, + newItem: OptionalTodoUiModel, + ): Boolean = oldItem.todo.todoId == newItem.todo.todoId + + override fun areContentsTheSame( + oldItem: OptionalTodoUiModel, + newItem: OptionalTodoUiModel, + ): Boolean = oldItem == newItem + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt new file mode 100644 index 000000000..6c5ef13d7 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt @@ -0,0 +1,30 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.created.team201.databinding.ItemStudyManagementOptionalTodoAddBinding +import com.created.team201.presentation.studyManagement.StudyManagementClickListener +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel + +class StudyManagementOptionalTodoAddViewHolder( + binding: ItemStudyManagementOptionalTodoAddBinding, +) : StudyOptionalTodoViewHolder(binding) { + + override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { + TODO("Not yet implemented") + } + + companion object { + fun from( + parent: ViewGroup, + studyManagementClickListener: StudyManagementClickListener, + ): StudyManagementOptionalTodoAddViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ItemStudyManagementOptionalTodoAddBinding.inflate(inflater, parent, false) + binding.tvItemStudyManagementOptionalTodoAddButton.setOnClickListener { + studyManagementClickListener.onClickAddTodo(binding.etItemStudyManagementOptionalTodo.text.toString()) + } + return StudyManagementOptionalTodoAddViewHolder(binding) + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt new file mode 100644 index 000000000..69ef06801 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt @@ -0,0 +1,23 @@ +package com.created.team201.presentation.studyManagement.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.created.team201.databinding.ItemStudyManagementOptionalTodosBinding +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel + +class StudyManagementOptionalTodoViewHolder private constructor( + binding: ItemStudyManagementOptionalTodosBinding, +) : StudyOptionalTodoViewHolder(binding) { + + override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { + binding.optionalTodo = optionalTodoUiModel + } + + companion object { + fun from(parent: ViewGroup): StudyManagementOptionalTodoViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ItemStudyManagementOptionalTodosBinding.inflate(inflater, parent, false) + return StudyManagementOptionalTodoViewHolder(binding) + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt new file mode 100644 index 000000000..4fac773f1 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt @@ -0,0 +1,10 @@ +package com.created.team201.presentation.studyManagement.adapter + +import androidx.databinding.ViewDataBinding +import androidx.recyclerview.widget.RecyclerView +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel + +abstract class StudyOptionalTodoViewHolder(val binding: ViewDataBinding) : + RecyclerView.ViewHolder(binding.root) { + abstract fun bind(optionalTodoUiModel: OptionalTodoUiModel) +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/OptionalTodoUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/OptionalTodoUiModel.kt new file mode 100644 index 000000000..94faa1575 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/OptionalTodoUiModel.kt @@ -0,0 +1,15 @@ +package com.created.team201.presentation.studyManagement.model + +import com.created.team201.presentation.home.model.TodoUiModel + +data class OptionalTodoUiModel( + val todo: TodoUiModel, + val viewType: Int, +) { + companion object { + val ADD_TODO = OptionalTodoUiModel( + todo = TodoUiModel(0L, "", false), + viewType = 1, + ) + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt index 59c3e3a9c..15214e223 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt @@ -8,6 +8,6 @@ data class StudyRoundDetailUiModel( val masterId: Long, val role: Role, val necessaryTodo: TodoUiModel, - val optionalTodos: List, + val optionalTodos: List, val studyMembers: List, ) diff --git a/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml b/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml new file mode 100644 index 000000000..283e6aa85 --- /dev/null +++ b/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/layout/item_study_management_optional_todos.xml b/android/app/src/main/res/layout/item_study_management_optional_todos.xml index 32a1b0850..979fdfa49 100644 --- a/android/app/src/main/res/layout/item_study_management_optional_todos.xml +++ b/android/app/src/main/res/layout/item_study_management_optional_todos.xml @@ -1,33 +1,45 @@ - + xmlns:tools="http://schemas.android.com/tools"> - + - - + + + + + + + + + + From 5aa1d638df0af479f3bf70cbfc6cefddf1362ba6 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 20:29:41 +0900 Subject: [PATCH 14/32] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=20=ED=88=AC?= =?UTF-8?q?=EB=91=90=20=EC=99=84=EB=A3=8C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 9 ++- .../StudyManagementClickListener.kt | 10 ++++ .../StudyManagementViewModel.kt | 17 ++++-- .../adapter/StudyManagementAdapter.kt | 5 +- .../adapter/StudyManagementViewHolder.kt | 22 +++++++ .../presentation/studyManagement/dummy.kt | 58 +++++++++++++++++++ 6 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index d94faf9b1..d4ecbc935 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -8,7 +8,6 @@ import androidx.activity.viewModels import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity -import com.created.team201.presentation.common.TodoClickListener import com.created.team201.presentation.studyManagement.adapter.StudyManagementAdapter class StudyManagementActivity : @@ -16,7 +15,7 @@ class StudyManagementActivity : private val studyManagementViewModel by viewModels() private val studyManagementAdapter: StudyManagementAdapter by lazy { - StudyManagementAdapter(todoClickListener, memberClickListener) + StudyManagementAdapter(studyManagementClickListener, memberClickListener) } override fun onCreate(savedInstanceState: Bundle?) { @@ -50,11 +49,15 @@ class StudyManagementActivity : } } - private val todoClickListener = object : TodoClickListener { + private val studyManagementClickListener = object : StudyManagementClickListener { override fun clickOnTodo(id: Long, isDone: Boolean) { val currentItemId = binding.vpStudyManagement.currentItem studyManagementViewModel.updateTodo(currentItemId, id, !isDone) } + + override fun onClickAddTodo(todoContent: String) { + studyManagementViewModel.addOptionalTodo(todoContent) + } } private val memberClickListener = object : StudyMemberClickListener { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt new file mode 100644 index 000000000..a84ddf4ef --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt @@ -0,0 +1,10 @@ +package com.created.team201.presentation.studyManagement + +import com.created.team201.presentation.common.TodoClickListener + +interface StudyManagementClickListener : TodoClickListener { + + override fun clickOnTodo(id: Long, isDone: Boolean) + + fun onClickAddTodo(todoContent: String) +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index 96cdb0138..166090cce 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -14,6 +14,8 @@ class StudyManagementViewModel : ViewModel() { get() = _studyRounds fun getStudyRounds(studyId: Long, currentRoundId: Long) { + // to do : studyMaster id,와 비교해서 member에 isMaster 넣어줘야함 + _studyRounds.value = dummy getRounds(studyId) // getStudyRoundDetail() 여러번 // _studyRounds.value = listOf() @@ -42,8 +44,8 @@ class StudyManagementViewModel : ViewModel() { false -> { updateOptionalTodoCheck(studyDetails, todoId, isDone) - study = studyDetails.find { it.optionalTodos.any { it.todoId == todoId } }!! - todo = study.optionalTodos.find { it.todoId == todoId }!! + study = studyDetails.find { it.optionalTodos.any { it.todo.todoId == todoId } }!! + todo = study.optionalTodos.find { it.todo.todoId == todoId }!!.todo } } @@ -72,12 +74,19 @@ class StudyManagementViewModel : ViewModel() { isDone: Boolean, ) { _studyRounds.value = studyDetails.map { studyDetailUiModel -> - studyDetailUiModel.takeIf { todoUiModel -> !todoUiModel.optionalTodos.any { it.todoId == id } } + studyDetailUiModel.takeIf { todoUiModel -> !todoUiModel.optionalTodos.any { it.todo.todoId == id } } ?: studyDetailUiModel.copy( optionalTodos = studyDetailUiModel.optionalTodos.map { - it.takeUnless { it.todoId == id } ?: it.copy(isDone = isDone) + it.takeUnless { it.todo.todoId == id } + ?: it.copy(it.todo.copy(isDone = isDone)) }, ) } } + + fun addOptionalTodo(todoContent: String) { + // 뷰모델 내부에서 optional to do 추가 + + // 서버 통신 + } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt index 08408a9ab..5a5964070 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementAdapter.kt @@ -3,12 +3,12 @@ package com.created.team201.presentation.studyManagement.adapter import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter -import com.created.team201.presentation.common.TodoClickListener +import com.created.team201.presentation.studyManagement.StudyManagementClickListener import com.created.team201.presentation.studyManagement.StudyMemberClickListener import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel class StudyManagementAdapter( - private val todoClickListener: TodoClickListener, + private val studyManagementClickListener: StudyManagementClickListener, private val studyMemberClickListener: StudyMemberClickListener, ) : ListAdapter(diffCallback) { @@ -24,6 +24,7 @@ class StudyManagementAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyManagementViewHolder { return StudyManagementViewHolder( StudyManagementViewHolder.getBinding(parent), + studyManagementClickListener, studyMemberClickListener, ) } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 9a5dba6b1..555713b8f 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -4,11 +4,14 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.created.team201.databinding.ItemStudyManagementBinding +import com.created.team201.presentation.studyManagement.StudyManagementClickListener import com.created.team201.presentation.studyManagement.StudyMemberClickListener +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel class StudyManagementViewHolder( private val binding: ItemStudyManagementBinding, + private val studyManagementClickListener: StudyManagementClickListener, private val studyMemberClickListener: StudyMemberClickListener, ) : RecyclerView.ViewHolder(binding.root) { @@ -16,8 +19,19 @@ class StudyManagementViewHolder( StudyManagementMemberAdapter(studyMemberClickListener) } + private val studyManagementOptionalTodoAdapter: StudyManagementOptionalTodoAdapter by lazy { + StudyManagementOptionalTodoAdapter(studyManagementClickListener) + } + init { initStudyManagementStudyMember() + setClickAddTodo() + } + + private fun setClickAddTodo() { + binding.tvStudyManagementAddOptionalTodo.setOnClickListener { + studyManagementOptionalTodoAdapter.submitList(studyManagementOptionalTodoAdapter.currentList + OptionalTodoUiModel.ADD_TODO) + } } private fun initStudyManagementStudyMember() { @@ -26,11 +40,19 @@ class StudyManagementViewHolder( itemAnimator = null setHasFixedSize(true) } + + binding.rvItemStudyManagementOptionalTodos.apply { + adapter = studyManagementOptionalTodoAdapter + setHasFixedSize(true) + } } + // viewmodel에서 서버로부터 데이터를 가져오고 옵셔널 투두를 서브밋 리스트 해주는 과정 + // 에딧 텍스트 클릭리스너를 연결 해줘야함 fun bind(studyManagementUIModel: StudyRoundDetailUiModel) { binding.studyManagement = studyManagementUIModel studyManagementMemberAdapter.submitList(studyManagementUIModel.studyMembers) + studyManagementOptionalTodoAdapter.submitList(studyManagementUIModel.optionalTodos) } companion object { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt new file mode 100644 index 000000000..a76d26a8f --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt @@ -0,0 +1,58 @@ +package com.created.team201.presentation.studyManagement + +import com.created.domain.model.Role +import com.created.team201.presentation.home.model.TodoUiModel +import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel +import com.created.team201.presentation.studyManagement.model.StudyMemberUiModel +import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel + +val dummy: List = listOf( + StudyRoundDetailUiModel( + 1L, + 11L, + Role.MASTER, + TodoUiModel(1L, "책읽기 모두", true), + listOf( + OptionalTodoUiModel(TodoUiModel(2L, "블로그 정리", false), 0), + OptionalTodoUiModel(TodoUiModel(3L, "블로그 정리22", false), 0), + ), + listOf( + StudyMemberUiModel(1L, true, "반달", "", true), + StudyMemberUiModel(2L, false, "산군", "", false), + StudyMemberUiModel(3L, false, "써니", "", true), + StudyMemberUiModel(4L, false, "링링", "", true), + ), + ), + StudyRoundDetailUiModel( + 2L, + 11L, + Role.MASTER, + TodoUiModel(1L, "책읽기 모두", true), + listOf( + OptionalTodoUiModel(TodoUiModel(2L, "블로그 정리", false), 0), + OptionalTodoUiModel(TodoUiModel(3L, "블로그 정리22", false), 0), + ), + listOf( + StudyMemberUiModel(1L, true, "반달", "", true), + StudyMemberUiModel(2L, false, "산군", "", true), + StudyMemberUiModel(3L, false, "써니", "", true), + StudyMemberUiModel(4L, false, "링링", "", true), + ), + ), + StudyRoundDetailUiModel( + 3L, + 11L, + Role.MASTER, + TodoUiModel(1L, "책읽기 모두", true), + listOf( + OptionalTodoUiModel(TodoUiModel(2L, "블로그 정리", false), 0), + OptionalTodoUiModel(TodoUiModel(3L, "블로그 정리22", false), 0), + ), + listOf( + StudyMemberUiModel(1L, true, "반달", "", true), + StudyMemberUiModel(2L, false, "산군", "", true), + StudyMemberUiModel(3L, false, "써니", "", true), + StudyMemberUiModel(4L, false, "링링", "", true), + ), + ), +) From 8b18bfadc6984239bae55c1069aae82153a00033 Mon Sep 17 00:00:00 2001 From: Yerin Date: Fri, 28 Jul 2023 20:55:31 +0900 Subject: [PATCH 15/32] =?UTF-8?q?fix:=20=EC=84=A0=ED=83=9D=20=ED=88=AC?= =?UTF-8?q?=EB=91=90=20=EC=B0=B8=EC=A1=B0=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 4 +++- .../studyManagement/StudyManagementViewModel.kt | 8 +++++--- .../adapter/StudyManagementOptionalTodoAddViewHolder.kt | 1 - .../adapter/StudyManagementOptionalTodoViewHolder.kt | 2 +- .../studyManagement/adapter/StudyManagementViewHolder.kt | 1 - .../res/layout/item_study_management_optional_todos.xml | 1 + 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index d4ecbc935..8157afea9 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -56,7 +56,9 @@ class StudyManagementActivity : } override fun onClickAddTodo(todoContent: String) { - studyManagementViewModel.addOptionalTodo(todoContent) + val currentPage = binding.vpStudyManagement.currentItem + val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) + studyManagementViewModel.addOptionalTodo(studyId, currentPage, todoContent) } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index 166090cce..e2410d63f 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -84,9 +84,11 @@ class StudyManagementViewModel : ViewModel() { } } - fun addOptionalTodo(todoContent: String) { - // 뷰모델 내부에서 optional to do 추가 + fun addOptionalTodo(studyId: Long, currentPage: Int, todoContent: String) { + val currentStudy = studyRounds.value?.get(currentPage) - // 서버 통신 + // 서버 통신 -> 투두 추가 + + // 서버 통신 -> 다시 받아서 갈아끼워줘야함 } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt index 6c5ef13d7..11255c7f8 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt @@ -11,7 +11,6 @@ class StudyManagementOptionalTodoAddViewHolder( ) : StudyOptionalTodoViewHolder(binding) { override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { - TODO("Not yet implemented") } companion object { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt index 69ef06801..11c63638e 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt @@ -10,7 +10,7 @@ class StudyManagementOptionalTodoViewHolder private constructor( ) : StudyOptionalTodoViewHolder(binding) { override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { - binding.optionalTodo = optionalTodoUiModel + (binding as ItemStudyManagementOptionalTodosBinding).optionalTodo = optionalTodoUiModel } companion object { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 555713b8f..11799fb91 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -43,7 +43,6 @@ class StudyManagementViewHolder( binding.rvItemStudyManagementOptionalTodos.apply { adapter = studyManagementOptionalTodoAdapter - setHasFixedSize(true) } } diff --git a/android/app/src/main/res/layout/item_study_management_optional_todos.xml b/android/app/src/main/res/layout/item_study_management_optional_todos.xml index 979fdfa49..81014422b 100644 --- a/android/app/src/main/res/layout/item_study_management_optional_todos.xml +++ b/android/app/src/main/res/layout/item_study_management_optional_todos.xml @@ -8,6 +8,7 @@ + Date: Fri, 28 Jul 2023 22:59:09 +0900 Subject: [PATCH 16/32] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementViewHolder.kt | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 11799fb91..99d54aaee 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -24,7 +24,7 @@ class StudyManagementViewHolder( } init { - initStudyManagementStudyMember() + initStudyManagementAdapter() setClickAddTodo() } @@ -34,16 +34,9 @@ class StudyManagementViewHolder( } } - private fun initStudyManagementStudyMember() { - binding.rvItemStudyManagementStudyMember.apply { - adapter = studyManagementMemberAdapter - itemAnimator = null - setHasFixedSize(true) - } - - binding.rvItemStudyManagementOptionalTodos.apply { - adapter = studyManagementOptionalTodoAdapter - } + private fun initStudyManagementAdapter() { + binding.rvItemStudyManagementStudyMember.adapter = studyManagementMemberAdapter + binding.rvItemStudyManagementOptionalTodos.adapter = studyManagementOptionalTodoAdapter } // viewmodel에서 서버로부터 데이터를 가져오고 옵셔널 투두를 서브밋 리스트 해주는 과정 From f8278daeb0bb8a56fe4f1912c45443dccbd5c66b Mon Sep 17 00:00:00 2001 From: Bandal Date: Sun, 30 Jul 2023 19:13:07 +0900 Subject: [PATCH 17/32] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=B4=20=EC=A4=91=EB=B3=B5=EB=90=98?= =?UTF-8?q?=EB=8A=94=20title=20=EC=BB=A4=EC=8A=A4=ED=85=80=20attribute=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team201/presentation/createStudy/custom/SinglePicker.kt | 2 +- .../src/main/res/layout/fragment_people_count_bottom_sheet.xml | 2 +- .../app/src/main/res/layout/fragment_period_bottom_sheet.xml | 2 +- android/app/src/main/res/values/attrs.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/createStudy/custom/SinglePicker.kt b/android/app/src/main/java/com/created/team201/presentation/createStudy/custom/SinglePicker.kt index 5d004b803..29b5d27f5 100644 --- a/android/app/src/main/java/com/created/team201/presentation/createStudy/custom/SinglePicker.kt +++ b/android/app/src/main/java/com/created/team201/presentation/createStudy/custom/SinglePicker.kt @@ -28,7 +28,7 @@ class SinglePicker @JvmOverloads constructor( getInteger(R.styleable.SinglePicker_minValue, DEFAULT_VALUE) binding.npSinglePicker.maxValue = getInteger(R.styleable.SinglePicker_maxValue, DEFAULT_VALUE) - binding.tvSinglePicker.text = getString(R.styleable.SinglePicker_title) + binding.tvSinglePicker.text = getString(R.styleable.SinglePicker_singlePickerTitle) }.also { recycle() } diff --git a/android/app/src/main/res/layout/fragment_people_count_bottom_sheet.xml b/android/app/src/main/res/layout/fragment_people_count_bottom_sheet.xml index 7c6f32273..c593e3d51 100644 --- a/android/app/src/main/res/layout/fragment_people_count_bottom_sheet.xml +++ b/android/app/src/main/res/layout/fragment_people_count_bottom_sheet.xml @@ -48,7 +48,7 @@ app:layout_constraintTop_toBottomOf="@id/view_create_study_people_count" app:maxValue="8" app:minValue="2" - app:title="@string/single_picker_text_people_count" + app:singlePickerTitle="@string/single_picker_text_people_count" app:value="@{viewModel.peopleCount}" /> - + From ecc68176ccebccbad393162c6220b59d14fab26c Mon Sep 17 00:00:00 2001 From: Bandal Date: Sun, 30 Jul 2023 20:07:10 +0900 Subject: [PATCH 18/32] =?UTF-8?q?feat:=20=EC=8A=A4=ED=84=B0=EB=94=94?= =?UTF-8?q?=EC=9E=A5=EA=B3=BC=20=EC=8A=A4=ED=84=B0=EB=94=94=20=EB=A9=A4?= =?UTF-8?q?=EB=B2=84=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=8B=AC=EB=9D=BC?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EB=B7=B0=20=EB=B6=84=EA=B8=B0=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 7 +++++++ .../studyManagement/StudyManagementState.kt | 21 +++++++++++++++++++ .../StudyManagementViewModel.kt | 4 ++++ .../res/layout/activity_study_management.xml | 8 +++---- 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementState.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index 8157afea9..d1338df86 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -21,14 +21,21 @@ class StudyManagementActivity : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + initViewModel() initActionBar() initStudyRounds() initAdapter() observeStudyManagement() } + private fun initViewModel() { + binding.viewModel = studyManagementViewModel + binding.lifecycleOwner = this + } + private fun initActionBar() { setSupportActionBar(binding.tbStudyManagement) + supportActionBar?.setDisplayShowTitleEnabled(false) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_back) } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementState.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementState.kt new file mode 100644 index 000000000..45a7e671c --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementState.kt @@ -0,0 +1,21 @@ +package com.created.team201.presentation.studyManagement + +import androidx.annotation.StringRes +import com.created.team201.R + +sealed class StudyManagementState( + @StringRes + val title: Int, + @StringRes + val buttonText: Int, +) { + object Master : StudyManagementState( + R.string.study_management_app_bar_title_is_study_master, + R.string.study_management_end_button_is_study_master, + ) + + object Member : StudyManagementState( + R.string.study_management_app_bar_title_is_study_participant, + R.string.study_management_end_button_is_study_participant, + ) +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index e2410d63f..744d3c9b0 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -12,10 +12,14 @@ class StudyManagementViewModel : ViewModel() { private val _studyRounds: MutableLiveData> = MutableLiveData() val studyRounds: LiveData> get() = _studyRounds + private val _state: MutableLiveData = + MutableLiveData(StudyManagementState.Member) + val state: LiveData get() = _state fun getStudyRounds(studyId: Long, currentRoundId: Long) { // to do : studyMaster id,와 비교해서 member에 isMaster 넣어줘야함 _studyRounds.value = dummy + _state.value = StudyManagementState.Member // Role을 통해 현재 무슨 역할인지 분기처리 getRounds(studyId) // getStudyRoundDetail() 여러번 // _studyRounds.value = listOf() diff --git a/android/app/src/main/res/layout/activity_study_management.xml b/android/app/src/main/res/layout/activity_study_management.xml index eaf318c8c..0760f9356 100644 --- a/android/app/src/main/res/layout/activity_study_management.xml +++ b/android/app/src/main/res/layout/activity_study_management.xml @@ -6,8 +6,8 @@ + name="viewModel" + type="com.created.team201.presentation.studyManagement.StudyManagementViewModel" /> Date: Sun, 30 Jul 2023 20:22:06 +0900 Subject: [PATCH 19/32] =?UTF-8?q?feat:=20xml=EC=97=90=20=ED=88=AC=EB=91=90?= =?UTF-8?q?=20=ED=81=B4=EB=A6=AD=EB=A6=AC=EC=8A=A4=EB=84=88=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementOptionalTodoAdapter.kt | 2 +- .../adapter/StudyManagementOptionalTodoViewHolder.kt | 7 ++++++- .../studyManagement/adapter/StudyManagementViewHolder.kt | 4 +--- android/app/src/main/res/layout/item_study_management.xml | 8 +++++++- .../res/layout/item_study_management_optional_todos.xml | 5 +++++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt index e39b346f4..3c0636988 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt @@ -14,7 +14,7 @@ class StudyManagementOptionalTodoAdapter(private val studyManagementClickListene override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyOptionalTodoViewHolder { return when (viewType) { 1 -> StudyManagementOptionalTodoAddViewHolder.from(parent, studyManagementClickListener) - else -> StudyManagementOptionalTodoViewHolder.from(parent) + else -> StudyManagementOptionalTodoViewHolder.from(parent, studyManagementClickListener) } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt index 11c63638e..35ac69061 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt @@ -3,6 +3,7 @@ package com.created.team201.presentation.studyManagement.adapter import android.view.LayoutInflater import android.view.ViewGroup import com.created.team201.databinding.ItemStudyManagementOptionalTodosBinding +import com.created.team201.presentation.studyManagement.StudyManagementClickListener import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel class StudyManagementOptionalTodoViewHolder private constructor( @@ -14,9 +15,13 @@ class StudyManagementOptionalTodoViewHolder private constructor( } companion object { - fun from(parent: ViewGroup): StudyManagementOptionalTodoViewHolder { + fun from( + parent: ViewGroup, + studyManagementClickListener: StudyManagementClickListener, + ): StudyManagementOptionalTodoViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = ItemStudyManagementOptionalTodosBinding.inflate(inflater, parent, false) + binding.onClick = studyManagementClickListener return StudyManagementOptionalTodoViewHolder(binding) } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 99d54aaee..71ed388ed 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -18,7 +18,6 @@ class StudyManagementViewHolder( private val studyManagementMemberAdapter: StudyManagementMemberAdapter by lazy { StudyManagementMemberAdapter(studyMemberClickListener) } - private val studyManagementOptionalTodoAdapter: StudyManagementOptionalTodoAdapter by lazy { StudyManagementOptionalTodoAdapter(studyManagementClickListener) } @@ -35,12 +34,11 @@ class StudyManagementViewHolder( } private fun initStudyManagementAdapter() { + binding.onClick = studyManagementClickListener binding.rvItemStudyManagementStudyMember.adapter = studyManagementMemberAdapter binding.rvItemStudyManagementOptionalTodos.adapter = studyManagementOptionalTodoAdapter } - // viewmodel에서 서버로부터 데이터를 가져오고 옵셔널 투두를 서브밋 리스트 해주는 과정 - // 에딧 텍스트 클릭리스너를 연결 해줘야함 fun bind(studyManagementUIModel: StudyRoundDetailUiModel) { binding.studyManagement = studyManagementUIModel studyManagementMemberAdapter.submitList(studyManagementUIModel.studyMembers) diff --git a/android/app/src/main/res/layout/item_study_management.xml b/android/app/src/main/res/layout/item_study_management.xml index 411ecaa71..ab83f64b9 100644 --- a/android/app/src/main/res/layout/item_study_management.xml +++ b/android/app/src/main/res/layout/item_study_management.xml @@ -7,12 +7,16 @@ + type="com.created.domain.model.Role" /> + + diff --git a/android/app/src/main/res/layout/item_study_management_optional_todos.xml b/android/app/src/main/res/layout/item_study_management_optional_todos.xml index 81014422b..49b3fbd6d 100644 --- a/android/app/src/main/res/layout/item_study_management_optional_todos.xml +++ b/android/app/src/main/res/layout/item_study_management_optional_todos.xml @@ -5,6 +5,10 @@ + + @@ -36,6 +40,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/item_study_management_optional_todo_button" + android:onClick="@{()->onClick.clickOnTodo(optionalTodo.todo.todoId, optionalTodo.todo.done)}" android:padding="10dp" android:src="@drawable/ic_selector_home_check_btn" app:isSelected="@{optionalTodo.todo.done}" From e1414ac3abb3086993dba80419157245ec864093 Mon Sep 17 00:00:00 2001 From: Yerin Date: Sun, 30 Jul 2023 22:19:00 +0900 Subject: [PATCH 20/32] =?UTF-8?q?feat:=20=EB=B2=84=ED=8A=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=EC=9C=BC=EB=A1=9C=20=EB=B7=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A0=80=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 38 +++++++++++++++++++ .../StudyManagementViewModel.kt | 37 +++++++++++++++++- .../presentation/studyManagement/dummy.kt | 7 ++++ .../StudyManagementInformationUiModel.kt | 15 ++++++++ .../created/team201/util/BindingAdapter.kt | 6 +++ .../res/drawable/ic_selector_next_button.xml | 7 ++++ .../drawable/ic_selector_previous_button.xml | 7 ++++ .../res/layout/activity_study_management.xml | 6 +-- 8 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyManagementInformationUiModel.kt create mode 100644 android/app/src/main/res/drawable/ic_selector_next_button.xml create mode 100644 android/app/src/main/res/drawable/ic_selector_previous_button.xml diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index d1338df86..c0ae626b2 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.os.Bundle import android.view.MenuItem import androidx.activity.viewModels +import androidx.viewpager2.widget.ViewPager2 import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity @@ -23,8 +24,10 @@ class StudyManagementActivity : initViewModel() initActionBar() + initStudyInformation() initStudyRounds() initAdapter() + initPageButtonClickListener() observeStudyManagement() } @@ -40,6 +43,10 @@ class StudyManagementActivity : supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_back) } + private fun initStudyInformation() { + studyManagementViewModel.fetchStudyInformation() + } + private fun initStudyRounds() { val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) val roundId = intent.getLongExtra(KEY_ROUND_ID, KEY_ERROR) @@ -54,6 +61,23 @@ class StudyManagementActivity : studyManagementViewModel.studyRounds.observe(this) { studyRoundDetails -> studyManagementAdapter.submitList(studyRoundDetails) } + binding.vpStudyManagement.registerOnPageChangeCallback( + object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + + studyManagementViewModel.updateCurrentPage(position) + setPageChangeButtonEnabled() + } + }, + ) + } + + private fun setPageChangeButtonEnabled() { + binding.ivStudyManagementPreviousButton.isEnabled = + studyManagementViewModel.currentRound.value != 1 + binding.ivStudyManagementNextButton.isEnabled = + studyManagementViewModel.currentRound.value != studyManagementViewModel.studyInformation.totalRoundCount } private val studyManagementClickListener = object : StudyManagementClickListener { @@ -75,6 +99,20 @@ class StudyManagementActivity : } } + private fun initPageButtonClickListener() { + binding.ivStudyManagementPreviousButton.setOnClickListener { + val page = (binding.vpStudyManagement.currentItem - 1).coerceAtLeast(0) + binding.vpStudyManagement.setCurrentItem(page, true) + studyManagementViewModel.fetchRoundDetail(page) + } + binding.ivStudyManagementNextButton.setOnClickListener { + val page = + (binding.vpStudyManagement.currentItem + 1).coerceAtMost(studyManagementAdapter.itemCount - 1) + binding.vpStudyManagement.setCurrentItem(page, true) + studyManagementViewModel.fetchRoundDetail(page) + } + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { finish() diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index 744d3c9b0..19b56c40a 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -3,8 +3,10 @@ package com.created.team201.presentation.studyManagement import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.created.domain.model.Role import com.created.domain.model.Round import com.created.team201.presentation.home.model.TodoUiModel +import com.created.team201.presentation.studyManagement.model.StudyManagementInformationUiModel import com.created.team201.presentation.studyManagement.model.StudyRoundDetailUiModel class StudyManagementViewModel : ViewModel() { @@ -15,8 +17,21 @@ class StudyManagementViewModel : ViewModel() { private val _state: MutableLiveData = MutableLiveData(StudyManagementState.Member) val state: LiveData get() = _state + private val _currentRound: MutableLiveData = MutableLiveData(0) + val currentRound: LiveData get() = _currentRound + lateinit var studyInformation: StudyManagementInformationUiModel + + fun fetchStudyInformation() { + // dummy + studyInformation = StudyManagementInformationUiModel( + "자바 스터디", 1, 3, Role.MASTER, "2022.03.04", 3, "3d", 2, "설명입니다.", + ) + // 여기서 서버 호출해서 다 가지고 있게 하자 ~ + } fun getStudyRounds(studyId: Long, currentRoundId: Long) { + // current Round 초기화 + _currentRound.value = studyInformation.currentRound // to do : studyMaster id,와 비교해서 member에 isMaster 넣어줘야함 _studyRounds.value = dummy _state.value = StudyManagementState.Member // Role을 통해 현재 무슨 역할인지 분기처리 @@ -26,13 +41,33 @@ class StudyManagementViewModel : ViewModel() { } private fun getRounds(studyId: Long) { - rounds.value = listOf() + rounds.value = roundDummy } private fun getStudyRoundDetail(studyId: Long, roundId: Long) { // 서버 통신으로 round 정보 가져옴 } + fun updateCurrentPage(pageIndex: Int) { + val rounds = rounds.value ?: listOf() + val studyRounds = studyRounds.value ?: listOf() + + val round = rounds.find { + it.id == studyRounds[pageIndex].id + } ?: throw IllegalStateException("해당 스터디 없음") + + _currentRound.value = round.number + } + + fun fetchRoundDetail(pageIndex: Int) { + // currentRoundId 갱신 + updateCurrentPage(pageIndex) + // getStudyRoundDetail + // 서버 통신 + // 인덱스 0일때는 앞에거... + // 인덱스 마지막일때는.. 뒤에거.. + } + fun updateTodo(currentItemId: Int, todoId: Long, isDone: Boolean) { val studyDetails = studyRounds.value ?: throw IllegalStateException() val currentStudy = studyRounds.value?.get(currentItemId) ?: throw IllegalStateException() diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt index a76d26a8f..c570b95cc 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt @@ -1,6 +1,7 @@ package com.created.team201.presentation.studyManagement import com.created.domain.model.Role +import com.created.domain.model.Round import com.created.team201.presentation.home.model.TodoUiModel import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel import com.created.team201.presentation.studyManagement.model.StudyMemberUiModel @@ -56,3 +57,9 @@ val dummy: List = listOf( ), ), ) + +val roundDummy = listOf( + Round(1L, 1), + Round(2L, 2), + Round(3L, 3), +) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyManagementInformationUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyManagementInformationUiModel.kt new file mode 100644 index 000000000..3012198dc --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyManagementInformationUiModel.kt @@ -0,0 +1,15 @@ +package com.created.team201.presentation.studyManagement.model + +import com.created.domain.model.Role + +data class StudyManagementInformationUiModel( + val name: String, + val numberOfCurrentMembers: Int, + val numberOfMaximumMembers: Int, + val role: Role, + val startAt: String, + val totalRoundCount: Int, + val periodOfRound: String, + val currentRound: Int, + val introduction: String, +) diff --git a/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt b/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt index 1542c422c..cc07de552 100644 --- a/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt +++ b/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt @@ -29,4 +29,10 @@ object BindingAdapter { .load(image) .into(imageview) } + + @JvmStatic + @BindingAdapter("isEnabled") + fun isEnabled(view: View, isEnabled: Boolean) { + view.isEnabled = isEnabled + } } diff --git a/android/app/src/main/res/drawable/ic_selector_next_button.xml b/android/app/src/main/res/drawable/ic_selector_next_button.xml new file mode 100644 index 000000000..7385d1a48 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_selector_next_button.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/drawable/ic_selector_previous_button.xml b/android/app/src/main/res/drawable/ic_selector_previous_button.xml new file mode 100644 index 000000000..318c3ddc4 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_selector_previous_button.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_study_management.xml b/android/app/src/main/res/layout/activity_study_management.xml index 0760f9356..adb35aa57 100644 --- a/android/app/src/main/res/layout/activity_study_management.xml +++ b/android/app/src/main/res/layout/activity_study_management.xml @@ -44,7 +44,7 @@ android:layout_height="20dp" android:layout_marginEnd="26dp" android:contentDescription="@string/study_management_previous_button_description" - android:src="@drawable/ic_arrow_prev_active" + android:src="@drawable/ic_selector_previous_button" app:layout_constraintBottom_toBottomOf="@+id/tv_study_management_round" app:layout_constraintEnd_toStartOf="@+id/tv_study_management_round" app:layout_constraintTop_toTopOf="@+id/tv_study_management_round" /> @@ -54,7 +54,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" - android:text="@string/study_management_round" + android:text="@{@string/study_management_round(viewModel.currentRound)}" android:textAppearance="@style/subtitle_r15" android:textColor="@color/white" app:layout_constraintEnd_toEndOf="parent" @@ -69,7 +69,7 @@ android:layout_height="20dp" android:layout_marginStart="26dp" android:contentDescription="@string/study_management_next_button_description" - android:src="@drawable/ic_arrow_next_active" + android:src="@drawable/ic_selector_next_button" app:layout_constraintBottom_toBottomOf="@+id/tv_study_management_round" app:layout_constraintStart_toEndOf="@+id/tv_study_management_round" app:layout_constraintTop_toTopOf="@+id/tv_study_management_round" /> From b07d953bb3d0b035f3b79415f335b7dcef4669bd Mon Sep 17 00:00:00 2001 From: Yerin Date: Sun, 30 Jul 2023 22:24:39 +0900 Subject: [PATCH 21/32] =?UTF-8?q?rename:=20=ED=8C=8C=EC=9D=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team201/presentation/studyManagement/{dummy.kt => Dummy.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename android/app/src/main/java/com/created/team201/presentation/studyManagement/{dummy.kt => Dummy.kt} (100%) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/Dummy.kt similarity index 100% rename from android/app/src/main/java/com/created/team201/presentation/studyManagement/dummy.kt rename to android/app/src/main/java/com/created/team201/presentation/studyManagement/Dummy.kt From e84eee74517c97cd387e46fb4fc45419290af83d Mon Sep 17 00:00:00 2001 From: Yerin Date: Mon, 31 Jul 2023 17:24:42 +0900 Subject: [PATCH 22/32] =?UTF-8?q?refactor:=20PageIndex=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EB=A1=9C=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 16 +++++++++------- .../java/com/created/domain/model/PageIndex.kt | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 android/domain/src/main/java/com/created/domain/model/PageIndex.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index c0ae626b2..f1c25f0c7 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.view.MenuItem import androidx.activity.viewModels import androidx.viewpager2.widget.ViewPager2 +import com.created.domain.model.PageIndex import com.created.team201.R import com.created.team201.databinding.ActivityStudyManagementBinding import com.created.team201.presentation.common.BindingActivity @@ -75,7 +76,7 @@ class StudyManagementActivity : private fun setPageChangeButtonEnabled() { binding.ivStudyManagementPreviousButton.isEnabled = - studyManagementViewModel.currentRound.value != 1 + studyManagementViewModel.currentRound.value != FIRST_ROUND binding.ivStudyManagementNextButton.isEnabled = studyManagementViewModel.currentRound.value != studyManagementViewModel.studyInformation.totalRoundCount } @@ -101,15 +102,15 @@ class StudyManagementActivity : private fun initPageButtonClickListener() { binding.ivStudyManagementPreviousButton.setOnClickListener { - val page = (binding.vpStudyManagement.currentItem - 1).coerceAtLeast(0) - binding.vpStudyManagement.setCurrentItem(page, true) - studyManagementViewModel.fetchRoundDetail(page) + val page = PageIndex(binding.vpStudyManagement.currentItem).decrease() + binding.vpStudyManagement.setCurrentItem(page.number, true) + studyManagementViewModel.fetchRoundDetail(page.number) } binding.ivStudyManagementNextButton.setOnClickListener { val page = - (binding.vpStudyManagement.currentItem + 1).coerceAtMost(studyManagementAdapter.itemCount - 1) - binding.vpStudyManagement.setCurrentItem(page, true) - studyManagementViewModel.fetchRoundDetail(page) + PageIndex(binding.vpStudyManagement.currentItem).increase(studyManagementAdapter.itemCount - 1) + binding.vpStudyManagement.setCurrentItem(page.number, true) + studyManagementViewModel.fetchRoundDetail(page.number) } } @@ -121,6 +122,7 @@ class StudyManagementActivity : } companion object { + private const val FIRST_ROUND = 1 private const val KEY_ERROR = 0L private const val KEY_STUDY_ID = "KEY_STUDY_ID" private const val KEY_ROUND_ID = "KEY_ROUND_ID" diff --git a/android/domain/src/main/java/com/created/domain/model/PageIndex.kt b/android/domain/src/main/java/com/created/domain/model/PageIndex.kt new file mode 100644 index 000000000..15caa036c --- /dev/null +++ b/android/domain/src/main/java/com/created/domain/model/PageIndex.kt @@ -0,0 +1,15 @@ +package com.created.domain.model + +data class PageIndex( + val number: Int, +) { + fun increase(maxPage: Int): PageIndex = + PageIndex(number.coerceAtMost(maxPage)) + + fun decrease(): PageIndex = + PageIndex(number.coerceAtLeast(MIN_VIEW_PAGER_INDEX)) + + companion object { + private const val MIN_VIEW_PAGER_INDEX = 0 + } +} From fdbfbf6958f77393f08803986247b2a829cb8077 Mon Sep 17 00:00:00 2001 From: Yerin Date: Mon, 31 Jul 2023 18:03:29 +0900 Subject: [PATCH 23/32] =?UTF-8?q?refactor:=20OptionalTodoViewType=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementViewModel.kt | 5 ++--- .../adapter/OptionalTodoViewType.kt | 15 +++++++++++++++ .../adapter/StudyManagementOptionalTodoAdapter.kt | 14 ++++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/OptionalTodoViewType.kt diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index 19b56c40a..b308cc6ea 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -69,9 +69,8 @@ class StudyManagementViewModel : ViewModel() { } fun updateTodo(currentItemId: Int, todoId: Long, isDone: Boolean) { - val studyDetails = studyRounds.value ?: throw IllegalStateException() - val currentStudy = studyRounds.value?.get(currentItemId) ?: throw IllegalStateException() - val isNecessary = currentStudy.necessaryTodo.todoId == todoId + val studyDetails = studyRounds.value ?: listOf() + val isNecessary = studyRounds.value?.get(currentItemId)?.necessaryTodo?.todoId == todoId val study: StudyRoundDetailUiModel val todo: TodoUiModel when (isNecessary) { diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/OptionalTodoViewType.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/OptionalTodoViewType.kt new file mode 100644 index 000000000..dd608ca25 --- /dev/null +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/OptionalTodoViewType.kt @@ -0,0 +1,15 @@ +package com.created.team201.presentation.studyManagement.adapter + +import java.lang.IllegalArgumentException + +enum class OptionalTodoViewType(val viewType: Int) { + DISPLAY(0), ADD(1); + + companion object { + fun valueOf(viewType: Int): OptionalTodoViewType { + return values().find { + it.viewType == viewType + } ?: throw IllegalArgumentException("해당하는 뷰타입을 찾지 못했습니다.") + } + } +} diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt index 3c0636988..824fe11d5 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt @@ -4,6 +4,8 @@ import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import com.created.team201.presentation.studyManagement.StudyManagementClickListener +import com.created.team201.presentation.studyManagement.adapter.OptionalTodoViewType.ADD +import com.created.team201.presentation.studyManagement.adapter.OptionalTodoViewType.DISPLAY import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel class StudyManagementOptionalTodoAdapter(private val studyManagementClickListener: StudyManagementClickListener) : @@ -12,16 +14,16 @@ class StudyManagementOptionalTodoAdapter(private val studyManagementClickListene ) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StudyOptionalTodoViewHolder { - return when (viewType) { - 1 -> StudyManagementOptionalTodoAddViewHolder.from(parent, studyManagementClickListener) - else -> StudyManagementOptionalTodoViewHolder.from(parent, studyManagementClickListener) + return when (OptionalTodoViewType.valueOf(viewType)) { + ADD -> StudyManagementOptionalTodoAddViewHolder.from(parent, studyManagementClickListener) + DISPLAY -> StudyManagementOptionalTodoViewHolder.from(parent, studyManagementClickListener) } } override fun onBindViewHolder(holder: StudyOptionalTodoViewHolder, position: Int) { - when (getItemViewType(position)) { - 1 -> (holder as StudyManagementOptionalTodoAddViewHolder).bind(getItem(position)) - else -> (holder as StudyManagementOptionalTodoViewHolder).bind(getItem(position)) + when (OptionalTodoViewType.valueOf(getItemViewType(position))) { + ADD -> (holder as StudyManagementOptionalTodoAddViewHolder).bind(getItem(position)) + DISPLAY -> (holder as StudyManagementOptionalTodoViewHolder).bind(getItem(position)) } } From c16418ea98316d51b94c11b051563bffacffa728 Mon Sep 17 00:00:00 2001 From: Yerin Date: Mon, 31 Jul 2023 18:11:05 +0900 Subject: [PATCH 24/32] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20bind=20=ED=95=A8=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementOptionalTodoAdapter.kt | 2 +- .../adapter/StudyManagementOptionalTodoAddViewHolder.kt | 4 ---- .../adapter/StudyManagementOptionalTodoViewHolder.kt | 2 +- .../studyManagement/adapter/StudyOptionalTodoViewHolder.kt | 5 +---- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt index 824fe11d5..dcbee3b85 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAdapter.kt @@ -22,7 +22,7 @@ class StudyManagementOptionalTodoAdapter(private val studyManagementClickListene override fun onBindViewHolder(holder: StudyOptionalTodoViewHolder, position: Int) { when (OptionalTodoViewType.valueOf(getItemViewType(position))) { - ADD -> (holder as StudyManagementOptionalTodoAddViewHolder).bind(getItem(position)) + ADD -> Unit DISPLAY -> (holder as StudyManagementOptionalTodoViewHolder).bind(getItem(position)) } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt index 11255c7f8..2e1d904c5 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt @@ -4,15 +4,11 @@ import android.view.LayoutInflater import android.view.ViewGroup import com.created.team201.databinding.ItemStudyManagementOptionalTodoAddBinding import com.created.team201.presentation.studyManagement.StudyManagementClickListener -import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel class StudyManagementOptionalTodoAddViewHolder( binding: ItemStudyManagementOptionalTodoAddBinding, ) : StudyOptionalTodoViewHolder(binding) { - override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { - } - companion object { fun from( parent: ViewGroup, diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt index 35ac69061..14e79410d 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt @@ -10,7 +10,7 @@ class StudyManagementOptionalTodoViewHolder private constructor( binding: ItemStudyManagementOptionalTodosBinding, ) : StudyOptionalTodoViewHolder(binding) { - override fun bind(optionalTodoUiModel: OptionalTodoUiModel) { + fun bind(optionalTodoUiModel: OptionalTodoUiModel) { (binding as ItemStudyManagementOptionalTodosBinding).optionalTodo = optionalTodoUiModel } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt index 4fac773f1..5edbd0c67 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt @@ -2,9 +2,6 @@ package com.created.team201.presentation.studyManagement.adapter import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.RecyclerView -import com.created.team201.presentation.studyManagement.model.OptionalTodoUiModel abstract class StudyOptionalTodoViewHolder(val binding: ViewDataBinding) : - RecyclerView.ViewHolder(binding.root) { - abstract fun bind(optionalTodoUiModel: OptionalTodoUiModel) -} + RecyclerView.ViewHolder(binding.root) From ebf2c6e578ef7d09179db6cabfab5c59086027e0 Mon Sep 17 00:00:00 2001 From: Yerin Date: Mon, 31 Jul 2023 21:31:55 +0900 Subject: [PATCH 25/32] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=ED=88=AC?= =?UTF-8?q?=EB=91=90=204=EA=B0=9C=EA=B9=8C=EC=A7=80=ED=95=9C=20=ED=97=88?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 12 ++++++++++++ .../studyManagement/StudyManagementClickListener.kt | 2 ++ .../adapter/StudyManagementViewHolder.kt | 4 ++++ .../app/src/main/res/menu/menu_study_management.xml | 2 +- android/app/src/main/res/values/strings.xml | 3 ++- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index f1c25f0c7..d1513e683 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.MenuItem +import android.widget.Toast import androidx.activity.viewModels import androidx.viewpager2.widget.ViewPager2 import com.created.domain.model.PageIndex @@ -92,6 +93,16 @@ class StudyManagementActivity : val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) studyManagementViewModel.addOptionalTodo(studyId, currentPage, todoContent) } + + override fun onClickAddOptionalTodo(optionalTodoCount: Int) { + if (optionalTodoCount >= MAXIMUM_OPTIONAL_TODO_COUNT) { + Toast.makeText( + this@StudyManagementActivity, + getString(R.string.study_management_not_allowed_add_optional_todo), + Toast.LENGTH_SHORT, + ).show() + } + } } private val memberClickListener = object : StudyMemberClickListener { @@ -123,6 +134,7 @@ class StudyManagementActivity : companion object { private const val FIRST_ROUND = 1 + private const val MAXIMUM_OPTIONAL_TODO_COUNT = 4 private const val KEY_ERROR = 0L private const val KEY_STUDY_ID = "KEY_STUDY_ID" private const val KEY_ROUND_ID = "KEY_ROUND_ID" diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt index a84ddf4ef..3b8ba72f0 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementClickListener.kt @@ -7,4 +7,6 @@ interface StudyManagementClickListener : TodoClickListener { override fun clickOnTodo(id: Long, isDone: Boolean) fun onClickAddTodo(todoContent: String) + + fun onClickAddOptionalTodo(optionalTodoCount: Int) } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt index 71ed388ed..ad5797925 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementViewHolder.kt @@ -29,6 +29,10 @@ class StudyManagementViewHolder( private fun setClickAddTodo() { binding.tvStudyManagementAddOptionalTodo.setOnClickListener { + studyManagementClickListener.onClickAddOptionalTodo(studyManagementOptionalTodoAdapter.itemCount) + if (studyManagementOptionalTodoAdapter.currentList.last().viewType == OptionalTodoViewType.ADD.viewType || studyManagementOptionalTodoAdapter.itemCount >= 4) { + return@setOnClickListener + } studyManagementOptionalTodoAdapter.submitList(studyManagementOptionalTodoAdapter.currentList + OptionalTodoUiModel.ADD_TODO) } } diff --git a/android/app/src/main/res/menu/menu_study_management.xml b/android/app/src/main/res/menu/menu_study_management.xml index 700cf5dd0..7c6969001 100644 --- a/android/app/src/main/res/menu/menu_study_management.xml +++ b/android/app/src/main/res/menu/menu_study_management.xml @@ -5,6 +5,6 @@ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 1a8cc3aaf..9d961b017 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -67,6 +67,8 @@ 종료하기 이전 스터디 회차 다음 스터디 회차 + 스터디 정보 + 더이상 선택투두를 추가할 수 없습니다. 투두 체크박스 필수투두를 완료했어요! 필수투두를 하고있어요! @@ -119,5 +121,4 @@ 스터디 성공률 필수투두 완료횟수 - From 164dad24954ee764c7ce69d9789badf99869efe9 Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 14:07:38 +0900 Subject: [PATCH 26/32] =?UTF-8?q?fix:=20conflict=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/created/team201/util/BindingAdapter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt b/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt index 79119619b..70b7fe8b6 100644 --- a/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt +++ b/android/app/src/main/java/com/created/team201/util/BindingAdapter.kt @@ -34,7 +34,8 @@ object BindingAdapter { @BindingAdapter("isEnabled") fun isEnabled(view: View, isEnabled: Boolean) { view.isEnabled = isEnabled - + } + @JvmStatic @BindingAdapter("glideSrcUrl") fun glideSrcUrl(imageview: ImageView, imageUrl: String?) { @@ -45,4 +46,3 @@ object BindingAdapter { } } } - \ No newline at end of file From ead818182b03c56923f2477964427408b8cd4e59 Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 15:45:54 +0900 Subject: [PATCH 27/32] =?UTF-8?q?refactor:=20viewHolder=20=EC=B4=88?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EC=8B=9C=20clickListener=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementOptionalTodoAddViewHolder.kt | 14 +++++++++----- .../StudyManagementOptionalTodoViewHolder.kt | 10 +++++++--- .../adapter/StudyOptionalTodoViewHolder.kt | 7 +++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt index 2e1d904c5..9142b1fa3 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt @@ -7,7 +7,14 @@ import com.created.team201.presentation.studyManagement.StudyManagementClickList class StudyManagementOptionalTodoAddViewHolder( binding: ItemStudyManagementOptionalTodoAddBinding, -) : StudyOptionalTodoViewHolder(binding) { + studyManagementClickListener: StudyManagementClickListener, +) : StudyOptionalTodoViewHolder(binding, studyManagementClickListener) { + + init { + binding.tvItemStudyManagementOptionalTodoAddButton.setOnClickListener { + studyManagementClickListener.onClickAddTodo(binding.etItemStudyManagementOptionalTodo.text.toString()) + } + } companion object { fun from( @@ -16,10 +23,7 @@ class StudyManagementOptionalTodoAddViewHolder( ): StudyManagementOptionalTodoAddViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = ItemStudyManagementOptionalTodoAddBinding.inflate(inflater, parent, false) - binding.tvItemStudyManagementOptionalTodoAddButton.setOnClickListener { - studyManagementClickListener.onClickAddTodo(binding.etItemStudyManagementOptionalTodo.text.toString()) - } - return StudyManagementOptionalTodoAddViewHolder(binding) + return StudyManagementOptionalTodoAddViewHolder(binding, studyManagementClickListener) } } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt index 14e79410d..b4a79260c 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoViewHolder.kt @@ -8,7 +8,12 @@ import com.created.team201.presentation.studyManagement.model.OptionalTodoUiMode class StudyManagementOptionalTodoViewHolder private constructor( binding: ItemStudyManagementOptionalTodosBinding, -) : StudyOptionalTodoViewHolder(binding) { + studyManagementClickListener: StudyManagementClickListener, +) : StudyOptionalTodoViewHolder(binding, studyManagementClickListener) { + + init { + binding.onClick = studyManagementClickListener + } fun bind(optionalTodoUiModel: OptionalTodoUiModel) { (binding as ItemStudyManagementOptionalTodosBinding).optionalTodo = optionalTodoUiModel @@ -21,8 +26,7 @@ class StudyManagementOptionalTodoViewHolder private constructor( ): StudyManagementOptionalTodoViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = ItemStudyManagementOptionalTodosBinding.inflate(inflater, parent, false) - binding.onClick = studyManagementClickListener - return StudyManagementOptionalTodoViewHolder(binding) + return StudyManagementOptionalTodoViewHolder(binding, studyManagementClickListener) } } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt index 5edbd0c67..1b81ff78a 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyOptionalTodoViewHolder.kt @@ -2,6 +2,9 @@ package com.created.team201.presentation.studyManagement.adapter import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.RecyclerView +import com.created.team201.presentation.studyManagement.StudyManagementClickListener -abstract class StudyOptionalTodoViewHolder(val binding: ViewDataBinding) : - RecyclerView.ViewHolder(binding.root) +abstract class StudyOptionalTodoViewHolder( + val binding: ViewDataBinding, + studyManagementClickListener: StudyManagementClickListener, +) : RecyclerView.ViewHolder(binding.root) From 9a047245cde24fb202c5254814d593245f89d7e2 Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 15:59:05 +0900 Subject: [PATCH 28/32] =?UTF-8?q?refactor:=20=EB=B7=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20index=EB=A5=BC=20PageIndex=EB=A1=9C=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/StudyManagementActivity.kt | 6 +++--- .../studyManagement/StudyManagementViewModel.kt | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index d1513e683..ef63796ad 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -68,7 +68,7 @@ class StudyManagementActivity : override fun onPageSelected(position: Int) { super.onPageSelected(position) - studyManagementViewModel.updateCurrentPage(position) + studyManagementViewModel.updateCurrentPage(PageIndex(position)) setPageChangeButtonEnabled() } }, @@ -115,13 +115,13 @@ class StudyManagementActivity : binding.ivStudyManagementPreviousButton.setOnClickListener { val page = PageIndex(binding.vpStudyManagement.currentItem).decrease() binding.vpStudyManagement.setCurrentItem(page.number, true) - studyManagementViewModel.fetchRoundDetail(page.number) + studyManagementViewModel.fetchRoundDetail(page) } binding.ivStudyManagementNextButton.setOnClickListener { val page = PageIndex(binding.vpStudyManagement.currentItem).increase(studyManagementAdapter.itemCount - 1) binding.vpStudyManagement.setCurrentItem(page.number, true) - studyManagementViewModel.fetchRoundDetail(page.number) + studyManagementViewModel.fetchRoundDetail(page) } } diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt index b308cc6ea..0341c6a0f 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementViewModel.kt @@ -3,6 +3,7 @@ package com.created.team201.presentation.studyManagement import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.created.domain.model.PageIndex import com.created.domain.model.Role import com.created.domain.model.Round import com.created.team201.presentation.home.model.TodoUiModel @@ -48,18 +49,18 @@ class StudyManagementViewModel : ViewModel() { // 서버 통신으로 round 정보 가져옴 } - fun updateCurrentPage(pageIndex: Int) { + fun updateCurrentPage(pageIndex: PageIndex) { val rounds = rounds.value ?: listOf() val studyRounds = studyRounds.value ?: listOf() val round = rounds.find { - it.id == studyRounds[pageIndex].id + it.id == studyRounds[pageIndex.number].id } ?: throw IllegalStateException("해당 스터디 없음") _currentRound.value = round.number } - fun fetchRoundDetail(pageIndex: Int) { + fun fetchRoundDetail(pageIndex: PageIndex) { // currentRoundId 갱신 updateCurrentPage(pageIndex) // getStudyRoundDetail From dff97317e9f420e83804c12eebbffe995c89f39d Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 17:12:03 +0900 Subject: [PATCH 29/32] =?UTF-8?q?refactor:=20isMaster=ED=8C=90=EB=8B=A8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20StudyRoundDetailUiModel=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../studyManagement/model/StudyRoundDetailUiModel.kt | 5 ++++- .../app/src/main/res/layout/item_study_management.xml | 9 ++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt index 15214e223..0a019af67 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/model/StudyRoundDetailUiModel.kt @@ -10,4 +10,7 @@ data class StudyRoundDetailUiModel( val necessaryTodo: TodoUiModel, val optionalTodos: List, val studyMembers: List, -) +) { + + fun isMaster(): Boolean = role == Role.MASTER +} diff --git a/android/app/src/main/res/layout/item_study_management.xml b/android/app/src/main/res/layout/item_study_management.xml index ab83f64b9..2ff8d95f5 100644 --- a/android/app/src/main/res/layout/item_study_management.xml +++ b/android/app/src/main/res/layout/item_study_management.xml @@ -5,10 +5,6 @@ - - @@ -44,7 +40,7 @@ android:textAppearance="@style/text_r12" android:textColor="@color/white" app:drawableStartCompat="@drawable/ic_edit_12" - app:isVisible="@{role.Companion.isMaster(studyManagement.role)}" + app:isVisible="@{studyManagement.isMaster()}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/tv_item_study_management_essential_todo" /> @@ -104,12 +100,11 @@ android:id="@+id/tv_study_management_add_optional_todo" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:text="@string/study_management_add_todo" android:textAppearance="@style/text_r12" android:textColor="@color/white" - app:drawableStartCompat="@drawable/ic_add_personal_todo" + app:drawableStartCompat="@drawable/ic_add_todo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/tv_item_study_management_optional_todo" /> From 3275a4dd46e7d1ff4271482231487210f61639e7 Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 17:22:18 +0900 Subject: [PATCH 30/32] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=20=ED=88=AC?= =?UTF-8?q?=EB=91=90=20=EC=B6=94=EA=B0=80=20=EA=B8=80=EC=9E=90=20=EC=88=98?= =?UTF-8?q?=20=EC=A0=9C=ED=95=9C=20=EB=B0=8F=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StudyManagementActivity.kt | 12 +++++++++ ...tudyManagementOptionalTodoAddViewHolder.kt | 2 +- .../app/src/main/res/drawable/ic_add_todo.xml | 9 +++++++ .../main/res/drawable/ic_add_todo_button.xml | 27 +++++++++++++++++++ ...tem_study_management_optional_todo_add.xml | 22 ++++++++++----- .../item_study_management_optional_todos.xml | 2 ++ android/app/src/main/res/values/strings.xml | 3 +++ .../java/com/created/domain/model/Role.kt | 2 -- 8 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 android/app/src/main/res/drawable/ic_add_todo.xml create mode 100644 android/app/src/main/res/drawable/ic_add_todo_button.xml diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt index ef63796ad..fb75e4cca 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/StudyManagementActivity.kt @@ -89,6 +89,10 @@ class StudyManagementActivity : } override fun onClickAddTodo(todoContent: String) { + if (todoContent.isEmpty()) { + toastEmptyTodoInput() + return + } val currentPage = binding.vpStudyManagement.currentItem val studyId = intent.getLongExtra(KEY_STUDY_ID, KEY_ERROR) studyManagementViewModel.addOptionalTodo(studyId, currentPage, todoContent) @@ -105,6 +109,14 @@ class StudyManagementActivity : } } + private fun toastEmptyTodoInput() { + Toast.makeText( + this@StudyManagementActivity, + getString(R.string.study_management_not_allowed_empty_content), + Toast.LENGTH_SHORT, + ).show() + } + private val memberClickListener = object : StudyMemberClickListener { override fun onClickMember(id: Long) { // 프로필 페이지로 이동 diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt index 9142b1fa3..0ee28872b 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementOptionalTodoAddViewHolder.kt @@ -11,7 +11,7 @@ class StudyManagementOptionalTodoAddViewHolder( ) : StudyOptionalTodoViewHolder(binding, studyManagementClickListener) { init { - binding.tvItemStudyManagementOptionalTodoAddButton.setOnClickListener { + binding.ivItemStudyManagementOptionalTodoAddButton.setOnClickListener { studyManagementClickListener.onClickAddTodo(binding.etItemStudyManagementOptionalTodo.text.toString()) } } diff --git a/android/app/src/main/res/drawable/ic_add_todo.xml b/android/app/src/main/res/drawable/ic_add_todo.xml new file mode 100644 index 000000000..0ccfe6aec --- /dev/null +++ b/android/app/src/main/res/drawable/ic_add_todo.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/app/src/main/res/drawable/ic_add_todo_button.xml b/android/app/src/main/res/drawable/ic_add_todo_button.xml new file mode 100644 index 000000000..000fa5fd1 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_add_todo_button.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml b/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml index 283e6aa85..5815e57c6 100644 --- a/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml +++ b/android/app/src/main/res/layout/item_study_management_optional_todo_add.xml @@ -18,17 +18,25 @@ android:id="@+id/et_item_study_management_optional_todo" android:layout_width="0dp" android:layout_height="0dp" + android:layout_marginStart="16dp" + android:background="@color/transparent" + android:hint="@string/item_study_management_add_todo_hint" + android:maxLength="20" + android:singleLine="true" + android:textAppearance="@style/text_r14" + android:textColor="@color/white" + android:textColorHint="@color/grey04_989DA5" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@id/tv_item_study_management_optional_todo_add_button" + app:layout_constraintEnd_toStartOf="@id/iv_item_study_management_optional_todo_add_button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - diff --git a/android/app/src/main/res/layout/item_study_management_optional_todos.xml b/android/app/src/main/res/layout/item_study_management_optional_todos.xml index 49b3fbd6d..6535ccbc4 100644 --- a/android/app/src/main/res/layout/item_study_management_optional_todos.xml +++ b/android/app/src/main/res/layout/item_study_management_optional_todos.xml @@ -25,7 +25,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" + android:ellipsize="end" android:gravity="center_vertical" + android:singleLine="true" android:text="@{optionalTodo.todo.content}" android:textAppearance="@style/text_r14" android:textColor="@color/white" diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 99aa0ab16..630544a41 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -69,11 +69,14 @@ 다음 스터디 회차 스터디 정보 더이상 선택투두를 추가할 수 없습니다. + 투두를 입력해 주세요. 투두 체크박스 필수투두를 완료했어요! 필수투두를 하고있어요! 스터디장 투두 체크박스 + 추가 + 투두를 추가해주세요 프로필 이미지 diff --git a/android/domain/src/main/java/com/created/domain/model/Role.kt b/android/domain/src/main/java/com/created/domain/model/Role.kt index f5f823d99..d4de352b5 100644 --- a/android/domain/src/main/java/com/created/domain/model/Role.kt +++ b/android/domain/src/main/java/com/created/domain/model/Role.kt @@ -9,7 +9,5 @@ enum class Role(val index: Int) { role.index == index } ?: throw IllegalAccessException("해당 역할을 찾을 수 없습니다.") } - - fun isMaster(role: Role): Boolean = role == MASTER } } From a994e81801fb5c2dfa9d256c838c14216a1ea033 Mon Sep 17 00:00:00 2001 From: Yerin Date: Tue, 1 Aug 2023 17:28:12 +0900 Subject: [PATCH 31/32] =?UTF-8?q?fix:=20=ED=82=A4=EB=B3=B4=EB=93=9C?= =?UTF-8?q?=EA=B0=80=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EA=B0=80=EB=A6=AC?= =?UTF-8?q?=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e21730234..07c335013 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,7 +17,8 @@ tools:targetApi="31"> + android:exported="false" + android:windowSoftInputMode="adjustPan" /> From c9a94390111d200cf1202b1b2e69fbded88592e2 Mon Sep 17 00:00:00 2001 From: Yerin Date: Wed, 2 Aug 2023 10:58:22 +0900 Subject: [PATCH 32/32] =?UTF-8?q?style:=20=EC=BD=94=EB=93=9C=20=EA=B0=80?= =?UTF-8?q?=EB=8F=85=EC=84=B1=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/StudyManagementMemberViewHolder.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt index a5c0e9fb2..ee6cbc838 100644 --- a/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt +++ b/android/app/src/main/java/com/created/team201/presentation/studyManagement/adapter/StudyManagementMemberViewHolder.kt @@ -20,11 +20,14 @@ class StudyManagementMemberViewHolder( fun bind(item: StudyMemberUiModel) { binding.studyMember = item binding.tvItemStudyManagementStudyMemberEssentialTodoDone.text = - if (item.isDone) { - binding.root.context.getString(R.string.item_study_management_todo_done) - } else { - binding.root.context.getString(R.string.item_study_management_todo_undone) - } + getIsDoneDescription(item.isDone) + } + + private fun getIsDoneDescription(isDone: Boolean): String { + if (isDone) { + return binding.root.context.getString(R.string.item_study_management_todo_done) + } + return binding.root.context.getString(R.string.item_study_management_todo_undone) } companion object {