From bd06612383a82f2df9141bec1a8de6a675f12d3a Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 4 Mar 2025 11:46:41 +0900 Subject: [PATCH 01/25] =?UTF-8?q?feat:=20dto=20=EB=8D=B0=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/YesterdayCardResponse.kt | 31 +++++++++++++++++++ .../data/home/service/HomeService.kt | 4 +++ 2 files changed, 35 insertions(+) create mode 100644 app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt diff --git a/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt new file mode 100644 index 00000000..109f403f --- /dev/null +++ b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt @@ -0,0 +1,31 @@ +package com.toyou.toyouandroid.data.home.dto.response + +import com.google.gson.annotations.SerializedName +import java.time.LocalDate + +data class YesterdayCardResponse( + @SerializedName("yesterday") val yesterday : List +) + +data class YesterdayCard( + @SerializedName("cardId") val cardId : Long, + @SerializedName("cardContent") val cardContent : YesterdayCardContent + +) + +data class YesterdayCardContent( + @SerializedName("date") val date : LocalDate, + @SerializedName("receiver") val receiver : String, + @SerializedName("emotion") val emotion : String, + @SerializedName("exposure") val exposure : Boolean, + @SerializedName("questionList") val questionList : YesterdayCardQuestionList +) + +data class YesterdayCardQuestionList( + @SerializedName("questionId") val id : Long, + @SerializedName("content") val content : String, + @SerializedName("questionType") val type: String, + @SerializedName("questioner") val questioner : String, + @SerializedName("answer") val answer : String, + @SerializedName("answerOption") val options : List?, +) \ No newline at end of file diff --git a/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt b/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt index cbcd5510..f90fa8d9 100644 --- a/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt +++ b/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt @@ -12,4 +12,8 @@ interface HomeService { suspend fun getCardDetail( @Path("cardId") card : Long ) : BaseResponse + + @GET("/diarycards/yesterday") + suspend fun getCardYesterday( + ) : BaseResponse<> } \ No newline at end of file From 01405f428354a828d407b79b63f8143340e4320a Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 4 Mar 2025 11:49:30 +0900 Subject: [PATCH 02/25] =?UTF-8?q?feat:=20repository=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/toyou/toyouandroid/data/home/service/HomeService.kt | 3 ++- .../toyouandroid/domain/home/repository/HomeRepository.kt | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt b/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt index f90fa8d9..d9c5be29 100644 --- a/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt +++ b/app/src/main/java/com/toyou/toyouandroid/data/home/service/HomeService.kt @@ -1,6 +1,7 @@ package com.toyou.toyouandroid.data.home.service import com.toyou.toyouandroid.data.home.dto.response.CardDetail +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCardResponse import com.toyou.toyouandroid.network.BaseResponse import retrofit2.http.GET import retrofit2.http.Header @@ -15,5 +16,5 @@ interface HomeService { @GET("/diarycards/yesterday") suspend fun getCardYesterday( - ) : BaseResponse<> + ) : BaseResponse } \ No newline at end of file diff --git a/app/src/main/java/com/toyou/toyouandroid/domain/home/repository/HomeRepository.kt b/app/src/main/java/com/toyou/toyouandroid/domain/home/repository/HomeRepository.kt index ac8c00b7..bb2367a3 100644 --- a/app/src/main/java/com/toyou/toyouandroid/domain/home/repository/HomeRepository.kt +++ b/app/src/main/java/com/toyou/toyouandroid/domain/home/repository/HomeRepository.kt @@ -1,10 +1,14 @@ package com.toyou.toyouandroid.domain.home.repository +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCardResponse import com.toyou.toyouandroid.data.home.service.HomeService import com.toyou.toyouandroid.network.AuthNetworkModule +import com.toyou.toyouandroid.network.BaseResponse class HomeRepository { private val client = AuthNetworkModule.getClient().create(HomeService::class.java) suspend fun getCardDetail(id : Long)=client.getCardDetail(id) + + suspend fun getYesterdayCard() = client.getCardYesterday() } \ No newline at end of file From d591b9c3f86dd04b6e37b015859647baa94624aa Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 4 Mar 2025 14:18:22 +0900 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20=EC=96=B4=EC=A0=9C=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=B0=EC=B9=B4=EB=93=9C=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=ED=98=B8=EC=B6=9C=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../emotionstamp/HomeOptionFragment.kt | 6 +- .../fragment/home/HomeFragment.kt | 7 +- .../fragment/home/HomeViewModel.kt | 74 +++++++------------ .../fragment/mypage/MypageFragment.kt | 4 +- .../fragment/mypage/ProfileFragment.kt | 4 +- .../onboarding/SignupNicknameFragment.kt | 4 +- .../viewmodel/HomeViewModelFactory.kt | 6 +- 7 files changed, 49 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/emotionstamp/HomeOptionFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/emotionstamp/HomeOptionFragment.kt index 08b49e7d..88303f70 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/emotionstamp/HomeOptionFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/emotionstamp/HomeOptionFragment.kt @@ -19,6 +19,7 @@ import com.toyou.toyouandroid.data.emotion.dto.EmotionRequest import com.toyou.toyouandroid.data.onboarding.service.AuthService import com.toyou.toyouandroid.data.social.service.SocialService import com.toyou.toyouandroid.domain.create.repository.CreateRepository +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.network.AuthNetworkModule import com.toyou.toyouandroid.network.NetworkModule import com.toyou.toyouandroid.presentation.fragment.notice.NoticeDialog @@ -57,18 +58,19 @@ class HomeOptionFragment : Fragment() { val createService = AuthNetworkModule.getClient().create(CreateService::class.java) val createRepository = CreateRepository(createService) + val homeRepository = HomeRepository() homeOptionViewModel = ViewModelProvider( this, HomeViewModelFactory( - tokenManager + tokenManager, homeRepository ) )[HomeOptionViewModel::class.java] homeViewModel = ViewModelProvider( this, HomeViewModelFactory( - tokenManager + tokenManager, homeRepository ) )[HomeViewModel::class.java] diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt index b11e905f..d2f8bfcd 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt @@ -28,6 +28,7 @@ import com.toyou.toyouandroid.data.notice.service.NoticeService import com.toyou.toyouandroid.data.onboarding.service.AuthService import com.toyou.toyouandroid.data.record.service.RecordService import com.toyou.toyouandroid.domain.create.repository.CreateRepository +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.domain.record.RecordRepository import com.toyou.toyouandroid.network.NetworkModule import com.toyou.toyouandroid.presentation.viewmodel.NoticeViewModelFactory @@ -79,6 +80,7 @@ class HomeFragment : Fragment() { val recordRepository = RecordRepository(recordService) val createService = AuthNetworkModule.getClient().create(CreateService::class.java) val createRepository = CreateRepository(createService) + val homeRepository = HomeRepository() noticeViewModel = ViewModelProvider( @@ -88,7 +90,7 @@ class HomeFragment : Fragment() { viewModel = ViewModelProvider( this, - HomeViewModelFactory(tokenManager) + HomeViewModelFactory(tokenManager, homeRepository) )[HomeViewModel::class.java] binding.lifecycleOwner = viewLifecycleOwner @@ -142,6 +144,9 @@ class HomeFragment : Fragment() { database = UserDatabase.getDatabase(requireContext()) + //일기카드 조회 + viewModel.getYesterdayCard() + // 질문 개수에 따른 우체통 이미지 변경 userViewModel.cardNum.observe(viewLifecycleOwner) { cardNum -> diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt index 5f34db21..a17c3e61 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt @@ -3,19 +3,25 @@ package com.toyou.toyouandroid.presentation.fragment.home import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.toyou.toyouandroid.R import com.toyou.toyouandroid.network.AuthNetworkModule import com.toyou.toyouandroid.data.emotion.dto.DiaryCard import com.toyou.toyouandroid.data.emotion.service.EmotionService import com.toyou.toyouandroid.data.emotion.dto.YesterdayFriendsResponse +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.utils.TokenManager import com.toyou.toyouandroid.utils.calendar.getCurrentDate +import kotlinx.coroutines.launch import retrofit2.Call import retrofit2.Callback import retrofit2.Response import timber.log.Timber +import kotlin.math.log -class HomeViewModel(private val tokenManager: TokenManager) : ViewModel() { +class HomeViewModel(private val tokenManager: TokenManager, + private val repository: HomeRepository) : ViewModel() { private val _homeEmotion = MutableLiveData() val homeEmotion: LiveData get() = _homeEmotion @@ -38,6 +44,9 @@ class HomeViewModel(private val tokenManager: TokenManager) : ViewModel() { private val _isLoading = MutableLiveData() val isLoading: LiveData get() = _isLoading + private val _yesterdayCards = MutableLiveData>() + val yesterdayCards: LiveData> = _yesterdayCards + private val _isEmpty = MutableLiveData() val isEmpty: LiveData get() = _isEmpty @@ -60,54 +69,23 @@ class HomeViewModel(private val tokenManager: TokenManager) : ViewModel() { _homeDateBackground.value = R.color.g00 _homeBackground.value = R.drawable.background_white } - - fun loadYesterdayDiaryCards() { - _isLoading.value = true - - tokenManager.refreshToken( - onSuccess = { token -> - Timber.d("API 호출 - 사용된 Access Token: $token") - - apiService.getYesterdayFriendCard().enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful) { - val diaryResponse = response.body() - Timber.d("API 응답 데이터: $diaryResponse") - - if (diaryResponse?.isSuccess == true) { - val cards = diaryResponse.result.yesterday - Timber.d("받아온 카드 목록: $cards") - - if (cards.isEmpty()) { - Timber.d("카드 목록이 비어 있습니다.") - _isEmpty.value = true - } else { - _diaryCards.value = cards - _isEmpty.value = false - } - } else { - Timber.e("API 호출 실패 - 응답이 성공하지 않음. 메시지: ${diaryResponse?.message}") - } - } else { - Timber.e("API 호출 실패 - 코드: ${response.code()}, 메시지: ${response.message()}") - } - - _isLoading.value = false - } - - override fun onFailure(call: Call, t: Throwable) { - Timber.e(t, "API 호출 실패 - 네트워크 오류") - _isLoading.value = false - _isEmpty.value = true // 실패 시 빈 상태로 간주 - } - }) - }, - onFailure = { - Timber.e("토큰 갱신 실패 - API 호출 중단") - _isLoading.value = false + fun getYesterdayCard() { + viewModelScope.launch { + try { + val response = repository.getYesterdayCard() + if (response.isSuccess) { + _yesterdayCards.value = response.result.yesterday + Timber.tag("어제 일기") + } else { + tokenManager.refreshToken( + onSuccess = { getYesterdayCard() }, + onFailure = { Timber.tag("HomeViewModel").d("refresh error") } + ) + } + } catch (e: Exception) { + _yesterdayCards.value = emptyList() } - ) + } } - } diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/MypageFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/MypageFragment.kt index 0a4ce327..2642091b 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/MypageFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/MypageFragment.kt @@ -21,6 +21,7 @@ import com.toyou.toyouandroid.databinding.FragmentMypageBinding import com.toyou.toyouandroid.presentation.base.MainActivity import com.toyou.toyouandroid.presentation.fragment.onboarding.SignupNicknameViewModel import com.toyou.toyouandroid.data.onboarding.service.AuthService +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.network.AuthNetworkModule import com.toyou.toyouandroid.network.NetworkModule import com.toyou.toyouandroid.presentation.viewmodel.AuthViewModelFactory @@ -74,10 +75,11 @@ class MypageFragment : Fragment() { val tokenStorage = TokenStorage(requireContext()) val authService: AuthService = NetworkModule.getClient().create(AuthService::class.java) val tokenManager = TokenManager(authService, tokenStorage) + val homeRepository = HomeRepository() homeViewModel = ViewModelProvider( this, - HomeViewModelFactory(tokenManager) + HomeViewModelFactory(tokenManager, homeRepository) )[HomeViewModel::class.java] sharedPreferences = requireActivity().getSharedPreferences("FCM_PREFERENCES", Context.MODE_PRIVATE) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/ProfileFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/ProfileFragment.kt index e876dad8..bd1934ee 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/ProfileFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/mypage/ProfileFragment.kt @@ -20,6 +20,7 @@ import com.toyou.toyouandroid.databinding.FragmentProfileBinding import com.toyou.toyouandroid.presentation.base.MainActivity import com.toyou.toyouandroid.data.onboarding.service.AuthService import com.toyou.toyouandroid.domain.create.repository.CreateRepository +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.network.AuthNetworkModule import com.toyou.toyouandroid.network.NetworkModule import com.toyou.toyouandroid.presentation.viewmodel.AuthViewModelFactory @@ -63,12 +64,13 @@ class ProfileFragment : Fragment() { val tokenManager = TokenManager(authService, tokenStorage) val createService = AuthNetworkModule.getClient().create(CreateService::class.java) val createRepository = CreateRepository(createService) + val homeRepository = HomeRepository() viewModel = ViewModelProvider( this, HomeViewModelFactory( - tokenManager + tokenManager, homeRepository ) )[ProfileViewModel::class.java] diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/onboarding/SignupNicknameFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/onboarding/SignupNicknameFragment.kt index e21bea6c..fcb90b41 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/onboarding/SignupNicknameFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/onboarding/SignupNicknameFragment.kt @@ -16,6 +16,7 @@ import androidx.navigation.fragment.findNavController import com.toyou.toyouandroid.R import com.toyou.toyouandroid.data.onboarding.service.AuthService import com.toyou.toyouandroid.databinding.FragmentSignupnicknameBinding +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.network.NetworkModule import com.toyou.toyouandroid.presentation.base.MainActivity import com.toyou.toyouandroid.presentation.fragment.home.HomeViewModel @@ -47,10 +48,11 @@ class SignupNicknameFragment : Fragment() { val tokenStorage = TokenStorage(requireContext()) val authService: AuthService = NetworkModule.getClient().create(AuthService::class.java) val tokenManager = TokenManager(authService, tokenStorage) + val homeRepository = HomeRepository() homeViewModel = ViewModelProvider( this, - HomeViewModelFactory(tokenManager) + HomeViewModelFactory(tokenManager, homeRepository) )[HomeViewModel::class.java] binding.viewModel = viewModel diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/viewmodel/HomeViewModelFactory.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/viewmodel/HomeViewModelFactory.kt index fd2c7dec..514b1ce7 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/viewmodel/HomeViewModelFactory.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/viewmodel/HomeViewModelFactory.kt @@ -2,13 +2,15 @@ package com.toyou.toyouandroid.presentation.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import com.toyou.toyouandroid.domain.home.repository.HomeRepository import com.toyou.toyouandroid.presentation.fragment.emotionstamp.HomeOptionViewModel import com.toyou.toyouandroid.presentation.fragment.home.HomeViewModel import com.toyou.toyouandroid.presentation.fragment.mypage.ProfileViewModel import com.toyou.toyouandroid.utils.TokenManager class HomeViewModelFactory( - private val tokenManager: TokenManager + private val tokenManager: TokenManager, + private val repository: HomeRepository ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(HomeOptionViewModel::class.java)) { @@ -16,7 +18,7 @@ class HomeViewModelFactory( return HomeOptionViewModel(tokenManager) as T } else if (modelClass.isAssignableFrom(HomeViewModel::class.java)) { @Suppress("UNCHECKED_CAST") - return HomeViewModel(tokenManager) as T + return HomeViewModel(tokenManager, repository) as T } else if (modelClass.isAssignableFrom(ProfileViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return ProfileViewModel(tokenManager) as T From 973afac802e1b12c06acbe003d2ec344a55b6792 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Tue, 4 Mar 2025 14:40:07 +0900 Subject: [PATCH 04/25] =?UTF-8?q?feat:=20=EC=9D=BC=EA=B8=B0=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=A1=B0=ED=9A=8C=20API=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/dto/response/YesterdayCardResponse.kt | 2 +- .../fragment/home/HomeBottomSheetClickListener.kt | 2 +- .../presentation/fragment/home/HomeFragment.kt | 14 +++++++------- .../presentation/fragment/home/HomeViewModel.kt | 1 - .../home/adapter/HomeBottomSheetAdapter.kt | 5 +++-- app/src/main/res/layout/item_home_bottom_sheet.xml | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt index 109f403f..e9d423ab 100644 --- a/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt +++ b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt @@ -14,7 +14,7 @@ data class YesterdayCard( ) data class YesterdayCardContent( - @SerializedName("date") val date : LocalDate, + @SerializedName("date") val date : String, @SerializedName("receiver") val receiver : String, @SerializedName("emotion") val emotion : String, @SerializedName("exposure") val exposure : Boolean, diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeBottomSheetClickListener.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeBottomSheetClickListener.kt index ab422032..84b26e68 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeBottomSheetClickListener.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeBottomSheetClickListener.kt @@ -2,5 +2,5 @@ package com.toyou.toyouandroid.presentation.fragment.home interface HomeBottomSheetClickListener { - fun onDiaryCardClick(cardId: Int?) + fun onDiaryCardClick(cardId: Long?) } \ No newline at end of file diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt index d2f8bfcd..dd934bab 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt @@ -21,6 +21,7 @@ import com.toyou.toyouandroid.databinding.FragmentHomeBinding import com.toyou.toyouandroid.network.AuthNetworkModule import com.toyou.toyouandroid.presentation.base.MainActivity import com.toyou.toyouandroid.data.emotion.dto.DiaryCard +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard import com.toyou.toyouandroid.presentation.fragment.home.adapter.HomeBottomSheetAdapter import com.toyou.toyouandroid.presentation.fragment.notice.NoticeViewModel import com.toyou.toyouandroid.domain.notice.NoticeRepository @@ -120,12 +121,12 @@ class HomeFragment : Fragment() { noticeViewModel.fetchNotices() listener = object : HomeBottomSheetClickListener { - override fun onDiaryCardClick(cardId: Int?) { + override fun onDiaryCardClick(cardId: Long?) { Timber.tag("HomeFragment").d("$cardId") cardId?.let { cardInfoViewModel.getCardDetail(cardId.toLong()) val bundle = Bundle().apply { - putInt("cardId", it) + putLong("cardId", it) } navController.navigate(R.id.action_navigation_home_to_friend_card_container_fragment, bundle) } @@ -147,6 +148,7 @@ class HomeFragment : Fragment() { //일기카드 조회 viewModel.getYesterdayCard() + // 질문 개수에 따른 우체통 이미지 변경 userViewModel.cardNum.observe(viewLifecycleOwner) { cardNum -> @@ -206,10 +208,8 @@ class HomeFragment : Fragment() { } // 홈 화면 바텀 시트 설정 - viewModel.diaryCards.observe(viewLifecycleOwner) { diaryCards -> - if (diaryCards != null) { - setupRecyclerView(diaryCards) - } + viewModel.yesterdayCards.observe(viewLifecycleOwner) { yesterdayCards -> + setupRecyclerView(yesterdayCards) } // 우체통 클릭시 일기카드 생성 화면으로 전환(임시) @@ -317,7 +317,7 @@ class HomeFragment : Fragment() { } } - private fun setupRecyclerView(items: List) { + private fun setupRecyclerView(items: List) { val adapter = HomeBottomSheetAdapter(items.toMutableList(), listener) binding.homeBottomSheetRv.layoutManager = GridLayoutManager(context, 2) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt index a17c3e61..94e5c886 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt @@ -75,7 +75,6 @@ class HomeViewModel(private val tokenManager: TokenManager, val response = repository.getYesterdayCard() if (response.isSuccess) { _yesterdayCards.value = response.result.yesterday - Timber.tag("어제 일기") } else { tokenManager.refreshToken( onSuccess = { getYesterdayCard() }, diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt index 143e9e71..02743373 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt @@ -6,10 +6,11 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.toyou.toyouandroid.databinding.ItemHomeBottomSheetBinding import com.toyou.toyouandroid.data.emotion.dto.DiaryCard +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard import com.toyou.toyouandroid.presentation.fragment.home.HomeBottomSheetClickListener class HomeBottomSheetAdapter( - private val items: MutableList, + private val items: MutableList, // private val cardDetails: List, private val listener: HomeBottomSheetClickListener ) : RecyclerView.Adapter() { @@ -32,7 +33,7 @@ class HomeBottomSheetAdapter( inner class ViewHolder(private val binding: ItemHomeBottomSheetBinding) : RecyclerView.ViewHolder(binding.root) { - fun bind(item: DiaryCard) { + fun bind(item: YesterdayCard) { val homeBottomSheetCardDetailAdapter = HomeBottomSheetCardDetailAdapter() binding.cardList.apply { diff --git a/app/src/main/res/layout/item_home_bottom_sheet.xml b/app/src/main/res/layout/item_home_bottom_sheet.xml index 2c904d98..a852bdac 100644 --- a/app/src/main/res/layout/item_home_bottom_sheet.xml +++ b/app/src/main/res/layout/item_home_bottom_sheet.xml @@ -7,7 +7,7 @@ + type="com.toyou.toyouandroid.data.home.dto.response.YesterdayCard" /> Date: Wed, 5 Mar 2025 12:43:08 +0900 Subject: [PATCH 05/25] =?UTF-8?q?feat:=20=EC=9D=BC=EA=B8=B0=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=20=EC=A1=B0=ED=9A=8C=20API=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/YesterdayCardResponse.kt | 32 +++++++++---------- .../fragment/home/HomeFragment.kt | 12 ++++++- .../fragment/home/HomeViewModel.kt | 2 ++ 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt index e9d423ab..47524270 100644 --- a/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt +++ b/app/src/main/java/com/toyou/toyouandroid/data/home/dto/response/YesterdayCardResponse.kt @@ -1,31 +1,29 @@ package com.toyou.toyouandroid.data.home.dto.response import com.google.gson.annotations.SerializedName -import java.time.LocalDate data class YesterdayCardResponse( - @SerializedName("yesterday") val yesterday : List + @SerializedName("cards") val yesterday: List ) data class YesterdayCard( - @SerializedName("cardId") val cardId : Long, - @SerializedName("cardContent") val cardContent : YesterdayCardContent - + @SerializedName("cardId") val cardId: Long, + @SerializedName("cardContent") val cardContent: YesterdayCardContent ) data class YesterdayCardContent( - @SerializedName("date") val date : String, - @SerializedName("receiver") val receiver : String, - @SerializedName("emotion") val emotion : String, - @SerializedName("exposure") val exposure : Boolean, - @SerializedName("questionList") val questionList : YesterdayCardQuestionList + @SerializedName("date") val date: String, + @SerializedName("receiver") val receiver: String, + @SerializedName("emotion") val emotion: String, + @SerializedName("exposure") val exposure: Boolean, + @SerializedName("questionList") val questionList: List ) -data class YesterdayCardQuestionList( - @SerializedName("questionId") val id : Long, - @SerializedName("content") val content : String, +data class YesterdayCardQuestion( + @SerializedName("questionId") val id: Long, + @SerializedName("content") val content: String, @SerializedName("questionType") val type: String, - @SerializedName("questioner") val questioner : String, - @SerializedName("answer") val answer : String, - @SerializedName("answerOption") val options : List?, -) \ No newline at end of file + @SerializedName("questioner") val questioner: String, + @SerializedName("answer") val answer: String, + @SerializedName("answerOption") val options: List? +) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt index dd934bab..f62092ad 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt @@ -209,7 +209,17 @@ class HomeFragment : Fragment() { // 홈 화면 바텀 시트 설정 viewModel.yesterdayCards.observe(viewLifecycleOwner) { yesterdayCards -> - setupRecyclerView(yesterdayCards) + if (yesterdayCards.isNotEmpty()) { + binding.homeBottomsheetPseudo.visibility = View.GONE + binding.homeBottomSheetRv.visibility = View.VISIBLE + setupRecyclerView(yesterdayCards) + Timber.tag("yester"+yesterdayCards.toString()) + + } else { + binding.homeBottomsheetPseudo.visibility = View.VISIBLE + binding.homeBottomSheetRv.visibility = View.GONE + Timber.tag("yester"+yesterdayCards.toString()) + } } // 우체통 클릭시 일기카드 생성 화면으로 전환(임시) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt index 94e5c886..b7e56c35 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeViewModel.kt @@ -73,8 +73,10 @@ class HomeViewModel(private val tokenManager: TokenManager, viewModelScope.launch { try { val response = repository.getYesterdayCard() + Timber.tag("HomeViewModel").d("yesterdayCards: ${response.result}") if (response.isSuccess) { _yesterdayCards.value = response.result.yesterday + Timber.tag("HomeViewModel").d("yesterdayCards: ${response.result.yesterday}") } else { tokenManager.refreshToken( onSuccess = { getYesterdayCard() }, From c6b2eaaae9343b2376ab3e5a7e0dafd938037237 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 5 Mar 2025 13:10:00 +0900 Subject: [PATCH 06/25] =?UTF-8?q?feat:=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EC=9D=BC=EA=B8=B0=EC=B9=B4=EB=93=9C=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toyou/toyouandroid/model/YesterdayType.kt | 6 ++ .../home/adapter/HomeBottomSheetAdapter.kt | 4 +- .../HomeBottomSheetCardDetailAdapter.kt | 90 ++++++++++--------- 3 files changed, 57 insertions(+), 43 deletions(-) create mode 100644 app/src/main/java/com/toyou/toyouandroid/model/YesterdayType.kt diff --git a/app/src/main/java/com/toyou/toyouandroid/model/YesterdayType.kt b/app/src/main/java/com/toyou/toyouandroid/model/YesterdayType.kt new file mode 100644 index 00000000..219c88a3 --- /dev/null +++ b/app/src/main/java/com/toyou/toyouandroid/model/YesterdayType.kt @@ -0,0 +1,6 @@ +package com.toyou.toyouandroid.model; + +const val Ytype1 = "LONG_ANSWER" +const val Ytype2 = "SHORT_ANSWER" +const val Ytype3 = "OPTIONAL" +const val Ytype4 = 3 diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt index 02743373..e6b770dc 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt @@ -5,7 +5,6 @@ import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.toyou.toyouandroid.databinding.ItemHomeBottomSheetBinding -import com.toyou.toyouandroid.data.emotion.dto.DiaryCard import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard import com.toyou.toyouandroid.presentation.fragment.home.HomeBottomSheetClickListener @@ -36,10 +35,13 @@ class HomeBottomSheetAdapter( fun bind(item: YesterdayCard) { val homeBottomSheetCardDetailAdapter = HomeBottomSheetCardDetailAdapter() + homeBottomSheetCardDetailAdapter.setCards(listOf(item)) binding.cardList.apply { layoutManager = LinearLayoutManager(binding.root.context, LinearLayoutManager.VERTICAL, false) adapter = homeBottomSheetCardDetailAdapter } + binding.itemHomeBottomSheet = item + binding.itemHomeBottomSheet = item diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt index 61c4b597..317e4a1d 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt @@ -6,18 +6,22 @@ import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.toyou.toyouandroid.R +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard +import com.toyou.toyouandroid.data.home.dto.response.YesterdayCardQuestion import com.toyou.toyouandroid.model.PreviewCardModel +import com.toyou.toyouandroid.model.Ytype1 import com.toyou.toyouandroid.model.type1 import com.toyou.toyouandroid.model.type2 import com.toyou.toyouandroid.model.type3 class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter() { - private var cardList : List = emptyList() - private lateinit var emotion: String + private var questionList: List = emptyList() + //private lateinit var emotion: String + private var emotion: String = "NORMAL" - fun setCards(newCards: List) { - cardList = newCards + fun setCards(newCards: List) { + questionList = newCards.flatMap { it.cardContent.questionList } notifyDataSetChanged() } @@ -26,45 +30,32 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter 1 + "SHORT_ANSWER" -> 2 + "OPTIONAL" -> 3 + else -> 4 + } } - override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int - ): RecyclerView.ViewHolder { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val view: View return when (viewType) { - type1 -> { - view = LayoutInflater.from(parent.context).inflate( - R.layout.card_qa_list, - parent, - false - ) - MultiViewHolderPreview1(view) - } - type2 -> { + 1, 2 -> { view = LayoutInflater.from(parent.context).inflate( - R.layout.card_qa_list, - parent, - false + R.layout.card_qa_list, parent, false ) MultiViewHolderPreview1(view) } - type3 -> { + 3 -> { view = LayoutInflater.from(parent.context).inflate( - R.layout.item_answer_option_two, - parent, - false + R.layout.item_answer_option_two, parent, false ) MultiViewHolderPreview3(view) } - else -> { view = LayoutInflater.from(parent.context).inflate( - R.layout.item_answer_option_three, - parent, - false + R.layout.item_answer_option_three, parent, false ) MultiViewHolderPreview4(view) } @@ -72,27 +63,35 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter { - (holder as MultiViewHolderPreview1).bind(cardList[position]) - holder.setIsRecyclable(false) - } - type2 -> { - (holder as MultiViewHolderPreview1).bind(cardList[position]) + val item = questionList[position] + + when (item.type) { + "LONG_ANSWER", "SHORT_ANSWER" -> { + (holder as MultiViewHolderPreview1).bind( + PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + ) holder.setIsRecyclable(false) } - type3 -> { - (holder as MultiViewHolderPreview3).bind(cardList[position]) + "OPTIONAL" -> { + (holder as MultiViewHolderPreview3).bind( + PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + ) holder.setIsRecyclable(false) } - else -> { - (holder as MultiViewHolderPreview4).bind(cardList[position]) + (holder as MultiViewHolderPreview4).bind( + PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + ) holder.setIsRecyclable(false) } } } + override fun getItemCount(): Int { + return questionList.size + } + + inner class MultiViewHolderPreview1(view: View) : RecyclerView.ViewHolder(view){ private val question: TextView = view.findViewById(R.id.question) private val answer: TextView = view.findViewById(R.id.answer) @@ -188,7 +187,14 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter 1 + "SHORT_ANSWER" -> 2 + "OPTIONAL" -> 3 + else -> 4 + } } + + } \ No newline at end of file From 6e64438ba761ee332f00c8af15e9f70f1ed0cc01 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 5 Mar 2025 15:19:20 +0900 Subject: [PATCH 07/25] =?UTF-8?q?feat:=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EC=9D=BC=EA=B8=B0=EC=B9=B4=EB=93=9C=20emotion?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=B0=B0=EA=B2=BD=EC=83=89=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragment/home/HomeFragment.kt | 6 - .../home/adapter/HomeBottomSheetAdapter.kt | 32 ++++- .../HomeBottomSheetCardDetailAdapter.kt | 125 +++++++----------- 3 files changed, 77 insertions(+), 86 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt index f62092ad..8caca40e 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/HomeFragment.kt @@ -182,9 +182,6 @@ class HomeFragment : Fragment() { binding.homeBottomsheetPseudo.visibility = View.VISIBLE binding.homeBottomSheetRv.visibility = View.GONE - // 작일 친구 일기 카드 자동 조회 -// viewModel.loadYesterdayDiaryCards() - // 바텀 시트 터치 이벤트 처리 binding.homeBottomSheet.apply { setOnTouchListener { v, event -> @@ -213,12 +210,9 @@ class HomeFragment : Fragment() { binding.homeBottomsheetPseudo.visibility = View.GONE binding.homeBottomSheetRv.visibility = View.VISIBLE setupRecyclerView(yesterdayCards) - Timber.tag("yester"+yesterdayCards.toString()) - } else { binding.homeBottomsheetPseudo.visibility = View.VISIBLE binding.homeBottomSheetRv.visibility = View.GONE - Timber.tag("yester"+yesterdayCards.toString()) } } diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt index e6b770dc..45fc0080 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt @@ -1,9 +1,11 @@ package com.toyou.toyouandroid.presentation.fragment.home.adapter +import android.graphics.Color import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.toyou.toyouandroid.R import com.toyou.toyouandroid.databinding.ItemHomeBottomSheetBinding import com.toyou.toyouandroid.data.home.dto.response.YesterdayCard import com.toyou.toyouandroid.presentation.fragment.home.HomeBottomSheetClickListener @@ -42,13 +44,41 @@ class HomeBottomSheetAdapter( } binding.itemHomeBottomSheet = item - binding.itemHomeBottomSheet = item binding.homeBottomSheetItem.setOnClickListener { listener.onDiaryCardClick(item.cardId) } + when(item.cardContent.emotion){ + "HAPPY" -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_happy) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFF7F3E3")) + } + "EXCITED" -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_exciting) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFE0EEF6")) + } + "NORMAL" -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_normal) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFDFE1F1")) + } + "NERVOUS" -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_anxiety) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFD6E4D9")) + + } + "ANGRY" -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_upset) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFF4DDDD")) + } + //임의로 감정이 null일때..일수는 없지만 + else -> { + binding.itemImage.setImageResource(R.drawable.home_stamp_option_upset) + binding.cardView.setCardBackgroundColor(Color.parseColor("#FFF4DDDD")) + } + } + binding.executePendingBindings() } } diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt index 317e4a1d..2f7a5623 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt @@ -17,16 +17,21 @@ import com.toyou.toyouandroid.model.type3 class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter() { private var questionList: List = emptyList() - //private lateinit var emotion: String - private var emotion: String = "NORMAL" + private var emotionMap: Map = emptyMap() // cardId -> emotion + private var questionToCardMap: Map = emptyMap() // questionId -> cardId fun setCards(newCards: List) { questionList = newCards.flatMap { it.cardContent.questionList } - notifyDataSetChanged() - } - fun setEmotion(emotion : String){ - this.emotion = emotion + // 카드 ID별 감정을 저장 + emotionMap = newCards.associate { it.cardId to it.cardContent.emotion } + + // 질문 ID별 카드 ID를 저장 + questionToCardMap = newCards.flatMap { card -> + card.cardContent.questionList.map { it.id to card.cardId } + }.toMap() + + notifyDataSetChanged() } override fun getItemViewType(position: Int): Int { @@ -65,34 +70,35 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter { (holder as MultiViewHolderPreview1).bind( - PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + PreviewCardModel(item.content, item.answer, mapQuestionType(item.type), item.questioner, item.options, item.id) ) - holder.setIsRecyclable(false) } "OPTIONAL" -> { (holder as MultiViewHolderPreview3).bind( - PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + PreviewCardModel(item.content, item.answer, mapQuestionType(item.type), item.questioner, item.options, item.id), + emotion ) - holder.setIsRecyclable(false) } else -> { (holder as MultiViewHolderPreview4).bind( - PreviewCardModel(item.content, item.answer,mapQuestionType(item.type),item.questioner,item.options, item.id) + PreviewCardModel(item.content, item.answer, mapQuestionType(item.type), item.questioner, item.options, item.id), + emotion ) - holder.setIsRecyclable(false) } } } - override fun getItemCount(): Int { - return questionList.size - } - + override fun getItemCount(): Int = questionList.size - inner class MultiViewHolderPreview1(view: View) : RecyclerView.ViewHolder(view){ + inner class MultiViewHolderPreview1(view: View) : RecyclerView.ViewHolder(view) { private val question: TextView = view.findViewById(R.id.question) private val answer: TextView = view.findViewById(R.id.answer) @@ -102,88 +108,51 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter txtOption1.setBackgroundResource(R.drawable.selected_option_happy) - "EXCITED" -> txtOption1.setBackgroundResource(R.drawable.selected_option_excited) - "NORMAL" -> txtOption1.setBackgroundResource(R.drawable.selected_option_normal) - "NERVOUS" -> txtOption1.setBackgroundResource(R.drawable.selected_option_container) - "ANGRY" -> txtOption1.setBackgroundResource(R.drawable.selected_option_angry) - } - } else { - txtOption1.setBackgroundResource(R.drawable.search_container) - } - - if (item.answer == item.options[1]) { - when(emotion){ - "HAPPY" -> txtOption2.setBackgroundResource(R.drawable.selected_option_happy) - "EXCITED" -> txtOption2.setBackgroundResource(R.drawable.selected_option_excited) - "NORMAL" -> txtOption2.setBackgroundResource(R.drawable.selected_option_normal) - "NERVOUS" -> txtOption2.setBackgroundResource(R.drawable.selected_option_container) - "ANGRY" -> txtOption2.setBackgroundResource(R.drawable.selected_option_angry) - } - } else { - txtOption2.setBackgroundResource(R.drawable.search_container) - } + applyEmotionStyle(txtOption1, item.answer == item.options[0], emotion) + applyEmotionStyle(txtOption2, item.answer == item.options[1], emotion) } } - inner class MultiViewHolderPreview4(view: View) : RecyclerView.ViewHolder(view){ + inner class MultiViewHolderPreview4(view: View) : RecyclerView.ViewHolder(view) { private val question: TextView = view.findViewById(R.id.question) private val txtOption1: TextView = view.findViewById(R.id.choose_three_first_tv) private val txtOption2: TextView = view.findViewById(R.id.choose_three_second_tv) private val txtOption3: TextView = view.findViewById(R.id.choose_three_third_tv) - fun bind(item: PreviewCardModel) { + fun bind(item: PreviewCardModel, emotion: String) { question.text = item.question txtOption1.text = item.options!![0] txtOption2.text = item.options[1] txtOption3.text = item.options[2] - if (item.answer == item.options[0]) { - when(emotion){ - "HAPPY" -> txtOption1.setBackgroundResource(R.drawable.selected_option_happy) - "EXCITED" -> txtOption1.setBackgroundResource(R.drawable.selected_option_excited) - "NORMAL" -> txtOption1.setBackgroundResource(R.drawable.selected_option_normal) - "NERVOUS" -> txtOption1.setBackgroundResource(R.drawable.selected_option_container) - "ANGRY" -> txtOption1.setBackgroundResource(R.drawable.selected_option_angry) - } - } else { - txtOption1.setBackgroundResource(R.drawable.search_container) - } + applyEmotionStyle(txtOption1, item.answer == item.options[0], emotion) + applyEmotionStyle(txtOption2, item.answer == item.options[1], emotion) + applyEmotionStyle(txtOption3, item.answer == item.options[2], emotion) + } + } - if (item.answer == item.options[1]) { - when(emotion){ - "HAPPY" -> txtOption2.setBackgroundResource(R.drawable.selected_option_happy) - "EXCITED" -> txtOption2.setBackgroundResource(R.drawable.selected_option_excited) - "NORMAL" -> txtOption2.setBackgroundResource(R.drawable.selected_option_normal) - "NERVOUS" -> txtOption2.setBackgroundResource(R.drawable.selected_option_container) - "ANGRY" -> txtOption2.setBackgroundResource(R.drawable.selected_option_angry) - } - } else { - txtOption2.setBackgroundResource(R.drawable.search_container) - } - if (item.answer == item.options[2]) { - when(emotion){ - "HAPPY" -> txtOption3.setBackgroundResource(R.drawable.selected_option_happy) - "EXCITED" -> txtOption3.setBackgroundResource(R.drawable.selected_option_excited) - "NORMAL" -> txtOption3.setBackgroundResource(R.drawable.selected_option_normal) - "NERVOUS" -> txtOption3.setBackgroundResource(R.drawable.selected_option_container) - "ANGRY" -> txtOption3.setBackgroundResource(R.drawable.selected_option_angry) - } - } else { - txtOption3.setBackgroundResource(R.drawable.search_container) + private fun applyEmotionStyle(view: TextView, isSelected: Boolean, emotion: String) { + if (isSelected) { + when (emotion) { + "HAPPY" -> view.setBackgroundResource(R.drawable.selected_option_happy) + "EXCITED" -> view.setBackgroundResource(R.drawable.selected_option_excited) + "NORMAL" -> view.setBackgroundResource(R.drawable.selected_option_normal) + "NERVOUS" -> view.setBackgroundResource(R.drawable.selected_option_container) + "ANGRY" -> view.setBackgroundResource(R.drawable.selected_option_angry) + else -> view.setBackgroundResource(R.drawable.search_container) } + } else { + view.setBackgroundResource(R.drawable.search_container) } } @@ -195,6 +164,4 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter 4 } } - - -} \ No newline at end of file +} From 3a4c5f69b40e10fafb07acd36729e63286fe0ddd Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 5 Mar 2025 15:46:43 +0900 Subject: [PATCH 08/25] =?UTF-8?q?feat:=20=EB=B0=94=ED=85=80=20=EC=8B=9C?= =?UTF-8?q?=ED=8A=B8=20=EC=B9=B4=EB=93=9C=20=EB=A0=88=EC=9D=B4=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/adapter/HomeBottomSheetAdapter.kt | 4 ++ .../HomeBottomSheetCardDetailAdapter.kt | 2 +- .../res/layout/item_home_bottom_sheet.xml | 23 +++++----- app/src/main/res/layout/item_yesterday_qa.xml | 42 +++++++++++++++++++ app/src/main/res/values/font_styles.xml | 8 ++++ 5 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/layout/item_yesterday_qa.xml diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt index 45fc0080..765d65bd 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetAdapter.kt @@ -50,6 +50,10 @@ class HomeBottomSheetAdapter( listener.onDiaryCardClick(item.cardId) } + binding.itemTitle.text = item.cardContent.receiver + + binding.itemDetail.text = item.cardContent.date + when(item.cardContent.emotion){ "HAPPY" -> { binding.itemImage.setImageResource(R.drawable.home_stamp_option_happy) diff --git a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt index 2f7a5623..0d2ade30 100644 --- a/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/presentation/fragment/home/adapter/HomeBottomSheetCardDetailAdapter.kt @@ -48,7 +48,7 @@ class HomeBottomSheetCardDetailAdapter : RecyclerView.Adapter { view = LayoutInflater.from(parent.context).inflate( - R.layout.card_qa_list, parent, false + R.layout.item_yesterday_qa, parent, false ) MultiViewHolderPreview1(view) } diff --git a/app/src/main/res/layout/item_home_bottom_sheet.xml b/app/src/main/res/layout/item_home_bottom_sheet.xml index a852bdac..8f1384f3 100644 --- a/app/src/main/res/layout/item_home_bottom_sheet.xml +++ b/app/src/main/res/layout/item_home_bottom_sheet.xml @@ -13,7 +13,7 @@ + android:layout_marginStart="0dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="0dp"> @@ -49,8 +49,7 @@ style="@style/gangwon10" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="5dp" - android:layout_marginTop="10dp" + android:layout_marginStart="6dp" android:layout_toEndOf="@+id/item_image" android:layout_toRightOf="@id/item_image" android:text="240509" @@ -62,7 +61,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/item_title" - android:layout_marginStart="5dp" + android:layout_marginStart="6dp" android:layout_toEndOf="@+id/item_image" android:layout_toRightOf="@+id/item_image" android:text="To.xxx" @@ -74,7 +73,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/item_detail" android:layout_marginStart="10dp" - android:layout_marginTop="20dp" + android:layout_marginTop="9dp" android:layout_marginEnd="10dp" android:divider="#00000000" /> diff --git a/app/src/main/res/layout/item_yesterday_qa.xml b/app/src/main/res/layout/item_yesterday_qa.xml new file mode 100644 index 00000000..ce36bf44 --- /dev/null +++ b/app/src/main/res/layout/item_yesterday_qa.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/font_styles.xml b/app/src/main/res/values/font_styles.xml index a3f094f4..587b1042 100644 --- a/app/src/main/res/values/font_styles.xml +++ b/app/src/main/res/values/font_styles.xml @@ -1,5 +1,13 @@ + + +