From 98f46eff2199636f9effee98587b7b4254086ace Mon Sep 17 00:00:00 2001 From: PIYUJIN Date: Tue, 19 Aug 2025 03:13:18 +0900 Subject: [PATCH 01/13] =?UTF-8?q?[Fix]=20#33=20=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/res/drawable/img_mood_cry_thick.xml | 45 +++++++++++++++++++ ...ood_empty.xml => img_mood_empty_thick.xml} | 0 .../res/drawable/img_mood_happy_thick.xml | 38 ++++++++++++++++ ...ood_smile.xml => img_mood_smile_thick.xml} | 0 4 files changed, 83 insertions(+) create mode 100644 app/src/main/res/drawable/img_mood_cry_thick.xml rename app/src/main/res/drawable/{img_mood_empty.xml => img_mood_empty_thick.xml} (100%) create mode 100644 app/src/main/res/drawable/img_mood_happy_thick.xml rename app/src/main/res/drawable/{img_mood_smile.xml => img_mood_smile_thick.xml} (100%) diff --git a/app/src/main/res/drawable/img_mood_cry_thick.xml b/app/src/main/res/drawable/img_mood_cry_thick.xml new file mode 100644 index 0000000..5d350ca --- /dev/null +++ b/app/src/main/res/drawable/img_mood_cry_thick.xml @@ -0,0 +1,45 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_mood_empty.xml b/app/src/main/res/drawable/img_mood_empty_thick.xml similarity index 100% rename from app/src/main/res/drawable/img_mood_empty.xml rename to app/src/main/res/drawable/img_mood_empty_thick.xml diff --git a/app/src/main/res/drawable/img_mood_happy_thick.xml b/app/src/main/res/drawable/img_mood_happy_thick.xml new file mode 100644 index 0000000..2d38020 --- /dev/null +++ b/app/src/main/res/drawable/img_mood_happy_thick.xml @@ -0,0 +1,38 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/img_mood_smile.xml b/app/src/main/res/drawable/img_mood_smile_thick.xml similarity index 100% rename from app/src/main/res/drawable/img_mood_smile.xml rename to app/src/main/res/drawable/img_mood_smile_thick.xml From 809bf662177e54171a4333e1d8368dc1ad240197 Mon Sep 17 00:00:00 2001 From: PIYUJIN Date: Tue, 19 Aug 2025 03:15:07 +0900 Subject: [PATCH 02/13] =?UTF-8?q?[Fix]=20#33=20=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9A=B4=EB=8F=99=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/team/score/Mypage/MypageMainFragment.kt | 2 +- app/src/main/java/com/team/score/Utils/TimeUtil.kt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/team/score/Mypage/MypageMainFragment.kt b/app/src/main/java/com/team/score/Mypage/MypageMainFragment.kt index b637a08..599c992 100644 --- a/app/src/main/java/com/team/score/Mypage/MypageMainFragment.kt +++ b/app/src/main/java/com/team/score/Mypage/MypageMainFragment.kt @@ -89,7 +89,7 @@ class MypageMainFragment : Fragment() { Glide.with(this@MypageMainFragment) .load(getUserInfo?.profileImgUrl) .into(imageViewProfile) - textViewNotificationTime.text = "${formatExerciseTimeToKorean(getUserInfo?.goal ?: "00:00:00")}" + textViewNotificationTime.text = "${formatExerciseTimeToKorean(getUserInfo?.goal)}" // 레벨 layout layoutLevel.run { diff --git a/app/src/main/java/com/team/score/Utils/TimeUtil.kt b/app/src/main/java/com/team/score/Utils/TimeUtil.kt index ecb4f40..16391bb 100644 --- a/app/src/main/java/com/team/score/Utils/TimeUtil.kt +++ b/app/src/main/java/com/team/score/Utils/TimeUtil.kt @@ -34,7 +34,9 @@ object TimeUtil { // 목표 시간 표시 포맷 @RequiresApi(Build.VERSION_CODES.O) - fun formatExerciseTimeToKorean(time: String): String { + fun formatExerciseTimeToKorean(time: String?): String { + if(time.isNullOrEmpty()) return "없음" + val formatter = DateTimeFormatter.ofPattern("HH:mm:ss") val localTime = LocalTime.parse(time, formatter) From a20b9c10100717e8147f6f782e471cb2c43bf56e Mon Sep 17 00:00:00 2001 From: PIYUJIN Date: Tue, 19 Aug 2025 03:18:06 +0900 Subject: [PATCH 03/13] =?UTF-8?q?[Feat]=20#33=20=20=ED=94=BC=EB=93=9C=20AP?= =?UTF-8?q?I=20=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/score/API/request/record/FeedUploadRequest.kt | 10 +++++----- .../score/API/response/record/FeedEmotionResponse.kt | 1 - .../com/team/score/Group/viewModel/GroupViewModel.kt | 3 +-- .../com/team/score/Record/viewModel/RecordViewModel.kt | 3 +-- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/team/score/API/request/record/FeedUploadRequest.kt b/app/src/main/java/com/team/score/API/request/record/FeedUploadRequest.kt index f0042f5..71b871c 100644 --- a/app/src/main/java/com/team/score/API/request/record/FeedUploadRequest.kt +++ b/app/src/main/java/com/team/score/API/request/record/FeedUploadRequest.kt @@ -7,9 +7,9 @@ data class FeedUploadRequest( var othersId: List?, var distance: Int, var reducedKcal: Int, - var location: String, - var weather: String, - var temperature: Int, - var fineDust: String, + var location: String?, + var weather: String?, + var temperature: Int?, + var fineDust: String?, var feeling: String? -) +) \ No newline at end of file diff --git a/app/src/main/java/com/team/score/API/response/record/FeedEmotionResponse.kt b/app/src/main/java/com/team/score/API/response/record/FeedEmotionResponse.kt index e75610e..1dfac1e 100644 --- a/app/src/main/java/com/team/score/API/response/record/FeedEmotionResponse.kt +++ b/app/src/main/java/com/team/score/API/response/record/FeedEmotionResponse.kt @@ -5,5 +5,4 @@ data class FeedEmotionResponse( val agentProfileImgUrl: String, val agentNickname: String, val emotionType: String, // "LIKE", "BEST", "SUPPORT", "CONGRAT" - val reactedAt: String ) diff --git a/app/src/main/java/com/team/score/Group/viewModel/GroupViewModel.kt b/app/src/main/java/com/team/score/Group/viewModel/GroupViewModel.kt index 4d189f7..d39fb15 100644 --- a/app/src/main/java/com/team/score/Group/viewModel/GroupViewModel.kt +++ b/app/src/main/java/com/team/score/Group/viewModel/GroupViewModel.kt @@ -752,8 +752,7 @@ class GroupViewModel: ViewModel() { feed.agentId, feed.agentProfileImgUrl, feed.agentNickname, - feed.emotionType, - feed.reactedAt + feed.emotionType ) tempFeedEmotion.add(feedEmotionList) diff --git a/app/src/main/java/com/team/score/Record/viewModel/RecordViewModel.kt b/app/src/main/java/com/team/score/Record/viewModel/RecordViewModel.kt index c048c8a..6a8c4db 100644 --- a/app/src/main/java/com/team/score/Record/viewModel/RecordViewModel.kt +++ b/app/src/main/java/com/team/score/Record/viewModel/RecordViewModel.kt @@ -194,8 +194,7 @@ class RecordViewModel: ViewModel() { feed.agentId, feed.agentProfileImgUrl, feed.agentNickname, - feed.emotionType, - feed.reactedAt + feed.emotionType ) tempFeedEmotion.add(feedEmotionList) From ff9c3862f9eb134804d18cad8b39f76ba77e5743 Mon Sep 17 00:00:00 2001 From: PIYUJIN Date: Tue, 19 Aug 2025 03:20:59 +0900 Subject: [PATCH 04/13] =?UTF-8?q?[Feat]=20#33=20=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=94=BC=EB=93=9C=20=ED=99=94=EB=A9=B4=20=EC=97=A0=ED=8B=B0?= =?UTF-8?q?=EB=B7=B0=20=EA=B5=AC=EC=84=B1=20=EB=B0=8F=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/score/Group/GroupMateListFragment.kt | 4 +- .../score/Home/adapter/GroupRelayAdapter.kt | 5 +- .../score/Home/viewModel/HomeViewModel.kt | 6 +- .../com/team/score/Mypage/UserFeedFragment.kt | 31 ++++++- .../main/res/layout/fragment_user_feed.xml | 85 +++++++++++++++++-- 5 files changed, 113 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/team/score/Group/GroupMateListFragment.kt b/app/src/main/java/com/team/score/Group/GroupMateListFragment.kt index ee793d2..559be57 100644 --- a/app/src/main/java/com/team/score/Group/GroupMateListFragment.kt +++ b/app/src/main/java/com/team/score/Group/GroupMateListFragment.kt @@ -105,7 +105,9 @@ class GroupMateListFragment : Fragment() { override fun onItemClick(position: Int) { val userId = getGroupUnexercisedMateInfo?.get(position)?.userId ?: 0 - homeViewModel.batonGroupMember(mainActivity, userId) + homeViewModel.batonGroupMember(mainActivity, userId) { + + } } } } diff --git a/app/src/main/java/com/team/score/Home/adapter/GroupRelayAdapter.kt b/app/src/main/java/com/team/score/Home/adapter/GroupRelayAdapter.kt index 75641f2..509dc2e 100644 --- a/app/src/main/java/com/team/score/Home/adapter/GroupRelayAdapter.kt +++ b/app/src/main/java/com/team/score/Home/adapter/GroupRelayAdapter.kt @@ -103,8 +103,9 @@ class GroupRelayAdapter( itemClickListener = object : GroupRelayTodayUnexercisedMemberAdapter.OnItemClickListener { override fun onItemClick(unexerciseMemberPosition: Int) { val userId = group.notExercisedUsers?.get(unexerciseMemberPosition)?.userId ?: return - viewModel.batonGroupMember(activity, userId) - updateList(group.notExercisedUsers, unexerciseMemberPosition) + viewModel.batonGroupMember(activity, userId) { + updateList(group.notExercisedUsers, unexerciseMemberPosition) + } } } } diff --git a/app/src/main/java/com/team/score/Home/viewModel/HomeViewModel.kt b/app/src/main/java/com/team/score/Home/viewModel/HomeViewModel.kt index efb5bf2..7e048a7 100644 --- a/app/src/main/java/com/team/score/Home/viewModel/HomeViewModel.kt +++ b/app/src/main/java/com/team/score/Home/viewModel/HomeViewModel.kt @@ -77,7 +77,7 @@ class HomeViewModel: ViewModel() { } // 바통 찌르기 - fun batonGroupMember(activity: Activity, receiverId: Int) { + fun batonGroupMember(activity: Activity, receiverId: Int, onSuccess: () -> Unit) { val apiClient = ApiClient(activity) val tokenManager = TokenManager(activity) @@ -95,6 +95,8 @@ class HomeViewModel: ViewModel() { isBaton.value = BatonStatus(true, receiverId) + onSuccess() + } else { // 통신이 실패한 경우(응답코드 3xx, 4xx 등) var result: Boolean? = response.body() @@ -110,7 +112,7 @@ class HomeViewModel: ViewModel() { 401 -> { refreshToken( activity, - retryRequest = { batonGroupMember(activity, receiverId) }, + retryRequest = { batonGroupMember(activity, receiverId, onSuccess) }, onFailure = { activity.finish() } ) } diff --git a/app/src/main/java/com/team/score/Mypage/UserFeedFragment.kt b/app/src/main/java/com/team/score/Mypage/UserFeedFragment.kt index 67c73c8..28bc2c5 100644 --- a/app/src/main/java/com/team/score/Mypage/UserFeedFragment.kt +++ b/app/src/main/java/com/team/score/Mypage/UserFeedFragment.kt @@ -5,12 +5,15 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.team.score.API.TokenManager import com.team.score.API.response.user.FeedListResponse import com.team.score.Group.OtherGroupFeedListFragment +import com.team.score.Home.viewModel.HomeViewModel import com.team.score.MainActivity import com.team.score.Mypage.Adapter.FeedAdapter import com.team.score.R @@ -27,6 +30,9 @@ class UserFeedFragment : Fragment() { private val viewModel: RecordViewModel by lazy { ViewModelProvider(this)[RecordViewModel::class.java] } + private val homeViewModel: HomeViewModel by lazy { + ViewModelProvider(requireActivity())[HomeViewModel::class.java] + } lateinit var feedAdapter: FeedAdapter @@ -77,6 +83,17 @@ class UserFeedFragment : Fragment() { .commit() } + buttonBaton.setOnClickListener { + // 바통 찌르기 + homeViewModel.batonGroupMember(mainActivity, arguments?.getInt("userId") ?: 0) { + binding.buttonBaton.run { + text = "찌르기 완료!" + backgroundTintList = + context?.let { ContextCompat.getColorStateList(it, R.color.main) } + } + } + } + recyclerViewFeed.apply { layoutManager = GridLayoutManager(context, 3) adapter = feedAdapter @@ -90,7 +107,6 @@ class UserFeedFragment : Fragment() { // 마지막 항목이 보이고, 로딩 중이 아니며, 마지막 페이지도 아닐 경우 if (!isLoading && !isLastPage && lastVisible >= totalItemCount - 1 && !(isFirstPage == true && isLastPage == true)) { - Log.d("##", "reload") isLoading = true viewModel.getFeedList(mainActivity, arguments?.getInt("userId") ?: 0, currentPage) } @@ -119,11 +135,18 @@ class UserFeedFragment : Fragment() { if(isFirstPage) { binding.run { if(feedResponse.isEmpty()) { - layoutEmptyFeed.visibility = View.VISIBLE - textViewEmptyTitle.text = "${MyApplication.userNickname}님만의 운동기록을\n채워보세요!" - recyclerViewFeed.visibility = View.GONE + if(arguments?.getInt("userId") ?: 0 == TokenManager(mainActivity).getUserId()) { + layoutEmptyFeed.visibility = View.GONE + layoutEmptyMyFeed.visibility = View.VISIBLE + textViewMyEmptyTitle.text = "${MyApplication.userNickname}님만의 운동기록을\n채워보세요!" + recyclerViewFeed.visibility = View.GONE + } else { + layoutEmptyFeed.visibility = View.VISIBLE + layoutEmptyMyFeed.visibility = View.GONE + } } else { layoutEmptyFeed.visibility = View.GONE + layoutEmptyMyFeed.visibility = View.GONE recyclerViewFeed.visibility = View.VISIBLE } } diff --git a/app/src/main/res/layout/fragment_user_feed.xml b/app/src/main/res/layout/fragment_user_feed.xml index 46b3ee3..08530d7 100644 --- a/app/src/main/res/layout/fragment_user_feed.xml +++ b/app/src/main/res/layout/fragment_user_feed.xml @@ -15,25 +15,27 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_bias="0.0" /> + app:layout_constraintVertical_bias="0.0"> + + + app:layout_constraintTop_toTopOf="parent"> @@ -42,9 +44,9 @@ android:id="@+id/textView_empty_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="12sp" + android:layout_marginTop="12dp" android:fontFamily="@font/pretendard_bold" - android:text="닉네임님만의 운동기록을\n채워보세요!" + android:text="피드가 아직 없어요" android:textAlignment="center" android:textColor="@color/text_color3" android:textSize="24sp" @@ -52,15 +54,80 @@ app:layout_constraintStart_toStartOf="@+id/imageView_empty" app:layout_constraintTop_toBottomOf="@+id/imageView_empty" /> + + +