From 3be8ae415eb6d62daec4abb98011fc23bfd89083 Mon Sep 17 00:00:00 2001 From: tgyuu-An Date: Mon, 21 Aug 2023 13:41:19 +0900 Subject: [PATCH] =?UTF-8?q?#210=20MyPage=20UserImage=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/bindingadapter/BindingAdapter.kt | 2 +- .../common/{mapper => util}/SpanProvider.kt | 5 +-- .../test/repositories/FakeUserRepository.kt | 4 +- .../mediproject/feature/home/HomeFragment.kt | 3 +- .../feature/mypage/MyPageFragment.kt | 41 +++++++++++-------- .../mypagemore/MyPageMoreDialogFragment.kt | 6 +-- .../src/main/res/layout/fragment_my_page.xml | 1 - .../mypage/src/main/res/values/strings.xml | 2 - .../RecentPenaltyListFragment.kt | 3 +- 9 files changed, 31 insertions(+), 36 deletions(-) rename core/common/src/main/java/com/android/mediproject/core/common/{mapper => util}/SpanProvider.kt (97%) diff --git a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt index f0413ebcc..cc447da71 100644 --- a/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt +++ b/core/common/src/main/java/com/android/mediproject/core/common/bindingadapter/BindingAdapter.kt @@ -36,7 +36,7 @@ object BindingAdapter { GlideApp.with(imageView.context).load(img).centerInside().skipMemoryCache(caching).into(imageView) } - @BindingAdapter("loadUserImage", requireAll = false) + @BindingAdapter("loadUserImage") @JvmStatic fun loadUserImage(imageView: ImageView, img: String) { if (img.isEmpty()) { diff --git a/core/common/src/main/java/com/android/mediproject/core/common/mapper/SpanProvider.kt b/core/common/src/main/java/com/android/mediproject/core/common/util/SpanProvider.kt similarity index 97% rename from core/common/src/main/java/com/android/mediproject/core/common/mapper/SpanProvider.kt rename to core/common/src/main/java/com/android/mediproject/core/common/util/SpanProvider.kt index b753f9c44..1f63735c6 100644 --- a/core/common/src/main/java/com/android/mediproject/core/common/mapper/SpanProvider.kt +++ b/core/common/src/main/java/com/android/mediproject/core/common/util/SpanProvider.kt @@ -1,4 +1,4 @@ -package com.android.mediproject.core.common.mapper +package com.android.mediproject.core.common.util import android.content.Context import android.graphics.Typeface @@ -9,7 +9,6 @@ import android.text.style.ForegroundColorSpan import android.text.style.RelativeSizeSpan import android.text.style.StyleSpan import android.text.style.UnderlineSpan -import androidx.core.content.ContentProviderCompat.requireContext import androidx.core.content.ContextCompat import com.android.mediproject.core.common.R import javax.inject.Inject @@ -17,6 +16,7 @@ import javax.inject.Singleton @Singleton class SpanProvider @Inject constructor() { + companion object { private const val TEXT_SIZE_PERCENT = 1.2F } @@ -132,5 +132,4 @@ class SpanProvider @Inject constructor() { setSpan(UnderlineSpan(), 4, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE) } } - } diff --git a/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt b/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt index 94fd0bb6e..74718ebde 100644 --- a/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt +++ b/core/test/src/main/java/com/android/mediproject/core/test/repositories/FakeUserRepository.kt @@ -2,7 +2,7 @@ package com.android.mediproject.core.test.repositories import com.android.mediproject.core.data.user.UserInfoRepository import com.android.mediproject.core.model.user.AccountState -import com.android.mediproject.core.model.user.remote.UserResponse +import com.android.mediproject.core.model.user.User import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -14,7 +14,7 @@ class FakeUserInfoRepository : UserInfoRepository { override val myAccountInfo: StateFlow get() = _myAccountInfo.asStateFlow() - override fun getMyAccountInfo(): Flow> = channelFlow{ + override fun getMyAccountInfo(): Flow> = channelFlow{ } override suspend fun updateMyAccountInfo(accountState: AccountState){ diff --git a/feature/home/src/main/java/com/android/mediproject/feature/home/HomeFragment.kt b/feature/home/src/main/java/com/android/mediproject/feature/home/HomeFragment.kt index 06c16f58f..6ac736124 100644 --- a/feature/home/src/main/java/com/android/mediproject/feature/home/HomeFragment.kt +++ b/feature/home/src/main/java/com/android/mediproject/feature/home/HomeFragment.kt @@ -6,8 +6,7 @@ import android.view.View import androidx.core.os.bundleOf import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController -import com.android.mediproject.core.common.mapper.MedicineInfoMapper -import com.android.mediproject.core.common.mapper.SpanProvider +import com.android.mediproject.core.common.util.SpanProvider import com.android.mediproject.core.common.util.SystemBarStyler import com.android.mediproject.core.common.viewmodel.repeatOnStarted import com.android.mediproject.core.ui.base.BaseFragment diff --git a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt index 9ec6ee8f1..d475e88bf 100644 --- a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt +++ b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/MyPageFragment.kt @@ -1,20 +1,16 @@ package com.android.mediproject.feature.mypage import android.os.Bundle -import android.text.Spannable import android.text.SpannableStringBuilder -import android.text.style.ForegroundColorSpan -import android.text.style.UnderlineSpan import android.view.View -import androidx.core.content.ContextCompat import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager -import com.android.mediproject.core.common.mapper.SpanProvider +import com.android.mediproject.core.common.bindingadapter.GlideApp +import com.android.mediproject.core.common.util.SpanProvider import com.android.mediproject.core.common.util.SystemBarStyler import com.android.mediproject.core.common.viewmodel.UiState import com.android.mediproject.core.model.token.CurrentTokens import com.android.mediproject.core.model.token.TokenState -import com.android.mediproject.core.ui.R import com.android.mediproject.core.ui.base.BaseFragment import com.android.mediproject.feature.mypage.databinding.FragmentMyPageBinding import com.android.mediproject.feature.mypage.mypagemore.MyPageMoreBottomSheetFragment @@ -23,6 +19,7 @@ import dagger.hilt.android.AndroidEntryPoint import com.android.mediproject.core.common.viewmodel.repeatOnStarted import com.android.mediproject.core.model.comments.MyCommentsListResponse import com.android.mediproject.core.model.user.User +import com.bumptech.glide.Glide import javax.inject.Inject @AndroidEntryPoint @@ -31,6 +28,7 @@ class MyPageFragment : @Inject lateinit var systemBarStyler: SystemBarStyler + @Inject lateinit var spanProvider: SpanProvider @@ -45,18 +43,18 @@ class MyPageFragment : } private fun setBinding() = binding.apply { - viewModel = fragmentViewModel.apply { - viewLifecycleOwner.apply { - repeatOnStarted { token.collect { handleToken(it) } } - repeatOnStarted { eventFlow.collect { handleEvent(it) } } - repeatOnStarted { user.collect { handleUserState(it) } } - repeatOnStarted { myCommentsList.collect { handleMyCommentListState(it) } } - } - loadTokens() + viewModel = fragmentViewModel.apply { + viewLifecycleOwner.apply { + repeatOnStarted { token.collect { handleToken(it) } } + repeatOnStarted { eventFlow.collect { handleEvent(it) } } + repeatOnStarted { user.collect { handleUserState(it) } } + repeatOnStarted { myCommentsList.collect { handleMyCommentListState(it) } } } - setBarStyle() - setRecyclerView() + loadTokens() } + setBarStyle() + setRecyclerView() + } private fun handleToken(tokenState: TokenState) { log(tokenState.toString()) @@ -118,8 +116,7 @@ class MyPageFragment : is UiState.Success -> { setSuccessUserVisible() - binding.user = userState.data - + updateUserInformation(userState.data) } is UiState.Error -> { @@ -128,6 +125,14 @@ class MyPageFragment : } } + private fun updateUserInformation(newUserData: User) =binding.apply{ + user = newUserData + if (newUserData.profileUrl.isEmpty()) { + userImageIV.setImageResource(com.android.mediproject.core.common.R.drawable.default_user_image) + return@apply + } + GlideApp.with(requireContext()).load(newUserData.profileUrl).circleCrop().into(userImageIV) + } private fun setLoadingUserVisible() = binding.apply { userNameTV.visibility = View.GONE diff --git a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/mypagemore/MyPageMoreDialogFragment.kt b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/mypagemore/MyPageMoreDialogFragment.kt index e7ba8c884..7d275bd24 100644 --- a/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/mypagemore/MyPageMoreDialogFragment.kt +++ b/feature/mypage/src/main/java/com/android/mediproject/feature/mypage/mypagemore/MyPageMoreDialogFragment.kt @@ -3,21 +3,17 @@ package com.android.mediproject.feature.mypage.mypagemore import android.app.Dialog import android.os.Bundle import android.text.Editable -import android.text.Spannable import android.text.SpannableStringBuilder import android.text.TextWatcher -import android.text.style.ForegroundColorSpan -import android.text.style.UnderlineSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast -import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment import androidx.fragment.app.setFragmentResult import androidx.fragment.app.viewModels -import com.android.mediproject.core.common.mapper.SpanProvider +import com.android.mediproject.core.common.util.SpanProvider import com.android.mediproject.core.ui.base.view.Subtitle.Companion.PASSWORD import com.android.mediproject.feature.mypage.R import com.android.mediproject.feature.mypage.databinding.FragmentMyPageMoreDialogBinding diff --git a/feature/mypage/src/main/res/layout/fragment_my_page.xml b/feature/mypage/src/main/res/layout/fragment_my_page.xml index c2d03d95d..be4eab320 100644 --- a/feature/mypage/src/main/res/layout/fragment_my_page.xml +++ b/feature/mypage/src/main/res/layout/fragment_my_page.xml @@ -152,7 +152,6 @@ android:layout_height="wrap_content" android:layout_marginStart="20dp" android:layout_marginTop="10dp" - loadUserImage="@{user.profileUrl}" android:onClick="@{()->viewModel.clickMyImage()}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/feature/mypage/src/main/res/values/strings.xml b/feature/mypage/src/main/res/values/strings.xml index 0b540664d..54ab9c18b 100644 --- a/feature/mypage/src/main/res/values/strings.xml +++ b/feature/mypage/src/main/res/values/strings.xml @@ -14,8 +14,6 @@ 확인 취소 - 정말로 로그아웃을 원하신다면 완료 버튼을 눌러주세요. - 정말로 회원탈퇴를 원하신다면 “회원탈퇴”를 입력한 뒤, 완료 버튼을 눌러주세요. \"회원탈퇴\" 완료 diff --git a/feature/news/src/main/java/com/android/mediproject/feature/news/penalties/recentpenaltylist/RecentPenaltyListFragment.kt b/feature/news/src/main/java/com/android/mediproject/feature/news/penalties/recentpenaltylist/RecentPenaltyListFragment.kt index 6d81005d1..189006147 100644 --- a/feature/news/src/main/java/com/android/mediproject/feature/news/penalties/recentpenaltylist/RecentPenaltyListFragment.kt +++ b/feature/news/src/main/java/com/android/mediproject/feature/news/penalties/recentpenaltylist/RecentPenaltyListFragment.kt @@ -4,8 +4,7 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController -import com.android.mediproject.core.common.mapper.MedicineInfoMapper -import com.android.mediproject.core.common.mapper.SpanProvider +import com.android.mediproject.core.common.util.SpanProvider import com.android.mediproject.core.common.util.deepNavigate import com.android.mediproject.core.common.util.navigateByDeepLink import com.android.mediproject.core.common.viewmodel.UiState