diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7bfcf7c7..ce7649b7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,6 +56,10 @@
android:name=".presentation.main.feed.upload.loading.LoadingActivity"
android:exported="false"
android:screenOrientation="portrait" />
+
+) {
+ @Serializable
+ data class GetFeedResponseDto(
+ @SerialName("createdAt")
+ val createdAt: String,
+ @SerialName("feedId")
+ val feedId: Int,
+ @SerialName("feedImage")
+ val feedImage: String,
+ @SerialName("feedMoney")
+ val feedMoney: Long,
+ @SerialName("feedTitle")
+ val feedTitle: String,
+ @SerialName("isLiked")
+ val isLiked: Boolean,
+ @SerialName("likes")
+ val likes: Long,
+ @SerialName("nickName")
+ val nickName: String,
+ @SerialName("userId")
+ val userId: Int,
+ @SerialName("writerLevel")
+ val writerLevel: Int,
+ @SerialName("comments")
+ val comments: Long,
+ @SerialName("timeAgo")
+ val timeAgo: String
+ )
+
+ @Serializable
+ data class GetCommentResponseList(
+ @SerialName("commentId")
+ val commentId: Long,
+ @SerialName("author")
+ val author: String,
+ @SerialName("content")
+ val content: String,
+ @SerialName("createdAt")
+ val createdAt: String,
+ @SerialName("authorLevel")
+ val authorLevel: Int,
+ @SerialName("authorId")
+ val authorId: Int
+ )
+
+ fun toDetailFeed(): DetailFeed = DetailFeed(
+ feedId = getFeedResponseDto.feedId,
+ feedImage = getFeedResponseDto.feedImage,
+ feedMoney = getFeedResponseDto.feedMoney,
+ feedTitle = getFeedResponseDto.feedTitle,
+ isLiked = getFeedResponseDto.isLiked,
+ likes = getFeedResponseDto.likes,
+ nickName = getFeedResponseDto.nickName,
+ userId = getFeedResponseDto.userId,
+ writerLevel = getFeedResponseDto.writerLevel,
+ comments = getFeedResponseDto.comments,
+ timeAgo = getFeedResponseDto.timeAgo,
+ commentList = getCommentResponseList.map { list ->
+ CommentList(
+ commentId = list.commentId,
+ author = list.author,
+ content = list.content,
+ authorId = list.authorId,
+ authorLevel = list.authorLevel
+ )
+ }
+ )
+}
diff --git a/app/src/main/java/com/android/go/sopt/winey/data/repository/FeedRepositoryImpl.kt b/app/src/main/java/com/android/go/sopt/winey/data/repository/FeedRepositoryImpl.kt
index 59ebd625..1105170e 100644
--- a/app/src/main/java/com/android/go/sopt/winey/data/repository/FeedRepositoryImpl.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/data/repository/FeedRepositoryImpl.kt
@@ -9,6 +9,7 @@ import com.android.go.sopt.winey.data.service.FeedService
import com.android.go.sopt.winey.data.source.FeedDataSource
import com.android.go.sopt.winey.data.source.paging.MyFeedPagingSource
import com.android.go.sopt.winey.data.source.paging.WineyFeedPagingSource
+import com.android.go.sopt.winey.domain.entity.DetailFeed
import com.android.go.sopt.winey.domain.entity.Like
import com.android.go.sopt.winey.domain.entity.WineyFeed
import com.android.go.sopt.winey.domain.repository.FeedRepository
@@ -52,6 +53,11 @@ class FeedRepositoryImpl @Inject constructor(
feedDataSource.postFeedLike(feedId, requestPostLikeDto).toLike()
}
+ override suspend fun getFeedDetail(feedId: Int): Result =
+ runCatching {
+ feedDataSource.getFeedDetail(feedId).data?.toDetailFeed()
+ }
+
companion object {
const val WINEYFEED_PAGE_SIZE = 20
const val MYFEED_PAGE_SIZE = 10
diff --git a/app/src/main/java/com/android/go/sopt/winey/data/service/FeedService.kt b/app/src/main/java/com/android/go/sopt/winey/data/service/FeedService.kt
index 82b4c251..93d6ff64 100644
--- a/app/src/main/java/com/android/go/sopt/winey/data/service/FeedService.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/data/service/FeedService.kt
@@ -1,6 +1,7 @@
package com.android.go.sopt.winey.data.service
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
+import com.android.go.sopt.winey.data.model.remote.response.ResponseGetFeedDetailDto
import com.android.go.sopt.winey.data.model.remote.response.ResponseGetWineyFeedListDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
@@ -45,4 +46,9 @@ interface FeedService {
@Part file: MultipartBody.Part?,
@PartMap requestMap: HashMap
): BaseResponse
+
+ @GET("feed/{feedId}")
+ suspend fun getFeedDetail(
+ @Path("feedId") feedId: Int
+ ): BaseResponse
}
diff --git a/app/src/main/java/com/android/go/sopt/winey/data/source/FeedDataSource.kt b/app/src/main/java/com/android/go/sopt/winey/data/source/FeedDataSource.kt
index 5d9dd3e6..a67e3778 100644
--- a/app/src/main/java/com/android/go/sopt/winey/data/source/FeedDataSource.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/data/source/FeedDataSource.kt
@@ -1,6 +1,7 @@
package com.android.go.sopt.winey.data.source
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
+import com.android.go.sopt.winey.data.model.remote.response.ResponseGetFeedDetailDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
import com.android.go.sopt.winey.data.model.remote.response.base.BaseResponse
@@ -26,4 +27,9 @@ class FeedDataSource @Inject constructor(
requestMap: HashMap
): BaseResponse =
feedService.postWineyFeed(file, requestMap)
+
+ suspend fun getFeedDetail(
+ feedId: Int
+ ): BaseResponse =
+ feedService.getFeedDetail(feedId)
}
diff --git a/app/src/main/java/com/android/go/sopt/winey/domain/entity/DetailFeed.kt b/app/src/main/java/com/android/go/sopt/winey/domain/entity/DetailFeed.kt
new file mode 100644
index 00000000..993d0e27
--- /dev/null
+++ b/app/src/main/java/com/android/go/sopt/winey/domain/entity/DetailFeed.kt
@@ -0,0 +1,24 @@
+package com.android.go.sopt.winey.domain.entity
+
+data class DetailFeed(
+ val feedId: Int,
+ val feedImage: String,
+ val feedMoney: Long,
+ val feedTitle: String,
+ var isLiked: Boolean,
+ var likes: Long,
+ val nickName: String,
+ val userId: Int,
+ val writerLevel: Int,
+ val comments: Long,
+ val timeAgo: String,
+ val commentList: List
+)
+
+data class CommentList(
+ val commentId: Long,
+ val author: String,
+ val content: String,
+ val authorLevel: Int,
+ val authorId: Int
+)
diff --git a/app/src/main/java/com/android/go/sopt/winey/domain/repository/FeedRepository.kt b/app/src/main/java/com/android/go/sopt/winey/domain/repository/FeedRepository.kt
index ee9600ae..890a1d18 100644
--- a/app/src/main/java/com/android/go/sopt/winey/domain/repository/FeedRepository.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/domain/repository/FeedRepository.kt
@@ -3,6 +3,7 @@ package com.android.go.sopt.winey.domain.repository
import androidx.paging.PagingData
import com.android.go.sopt.winey.data.model.remote.request.RequestPostLikeDto
import com.android.go.sopt.winey.data.model.remote.response.ResponsePostWineyFeedDto
+import com.android.go.sopt.winey.domain.entity.DetailFeed
import com.android.go.sopt.winey.domain.entity.Like
import com.android.go.sopt.winey.domain.entity.WineyFeed
import kotlinx.coroutines.flow.Flow
@@ -22,4 +23,6 @@ interface FeedRepository {
file: MultipartBody.Part?,
requestMap: HashMap
): Result
+
+ suspend fun getFeedDetail(feedId: Int): Result
}
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedAdapter.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedAdapter.kt
index d593604f..78e7b47e 100644
--- a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedAdapter.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedAdapter.kt
@@ -14,7 +14,8 @@ import com.android.go.sopt.winey.util.view.setOnSingleClickListener
class WineyFeedAdapter(
private val likeButtonClick: (feedId: Int, isLiked: Boolean) -> Unit,
- private val showPopupMenu: (View, WineyFeed) -> Unit
+ private val showPopupMenu: (View, WineyFeed) -> Unit,
+ private val toFeedDetail: (feedId: Int, writerLevel: Int) -> Unit
) :
PagingDataAdapter(diffUtil) {
private val currentData: ItemSnapshotList
@@ -23,7 +24,8 @@ class WineyFeedAdapter(
class WineyFeedViewHolder(
private val binding: ItemWineyfeedPostBinding,
private val onLikeButtonClick: (feedId: Int, isLiked: Boolean) -> Unit,
- private val showPopupMenu: (View, WineyFeed) -> Unit
+ private val showPopupMenu: (View, WineyFeed) -> Unit,
+ private val toFeedDetail: (feedId: Int, writerLevel: Int) -> Unit
) : RecyclerView.ViewHolder(binding.root) {
fun onBind(data: WineyFeed?) {
@@ -37,9 +39,13 @@ class WineyFeedAdapter(
onLikeButtonClick(data.feedId, !data.isLiked)
}
- btnWineyfeedMore.setOnClickListener { view ->
+ btnWineyfeedMore.setOnSingleClickListener { view ->
showPopupMenu(view, data)
}
+
+ lWineyfeedPost.setOnSingleClickListener {
+ toFeedDetail(data.feedId, data.writerLevel)
+ }
}
}
@@ -60,7 +66,7 @@ class WineyFeedAdapter(
): WineyFeedViewHolder {
val binding =
ItemWineyfeedPostBinding.inflate(LayoutInflater.from(parent.context), parent, false)
- return WineyFeedViewHolder(binding, likeButtonClick, showPopupMenu)
+ return WineyFeedViewHolder(binding, likeButtonClick, showPopupMenu, toFeedDetail)
}
override fun onBindViewHolder(holder: WineyFeedViewHolder, position: Int) {
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedFragment.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedFragment.kt
index 727e9276..936374b1 100644
--- a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedFragment.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/WineyFeedFragment.kt
@@ -24,6 +24,7 @@ import com.android.go.sopt.winey.domain.entity.User
import com.android.go.sopt.winey.domain.entity.WineyFeed
import com.android.go.sopt.winey.domain.repository.DataStoreRepository
import com.android.go.sopt.winey.presentation.main.MainViewModel
+import com.android.go.sopt.winey.presentation.main.feed.detail.DetailActivity
import com.android.go.sopt.winey.presentation.main.feed.upload.UploadActivity
import com.android.go.sopt.winey.presentation.main.mypage.MyPageFragment
import com.android.go.sopt.winey.util.binding.BindingFragment
@@ -75,7 +76,8 @@ class WineyFeedFragment : BindingFragment(R.layout.fra
},
showPopupMenu = { view, wineyFeed ->
showPopupMenu(view, wineyFeed)
- }
+ },
+ toFeedDetail = { feedId, writerLevel -> navigateToDetail(feedId, writerLevel) }
)
binding.rvWineyfeedPost.adapter = ConcatAdapter(
wineyFeedHeaderAdapter,
@@ -252,10 +254,15 @@ class WineyFeedFragment : BindingFragment(R.layout.fra
startActivity(intent)
}
+ private fun navigateToDetail(feedId: Int, writerLevel: Int) {
+ val intent = Intent(requireContext(), DetailActivity::class.java)
+ intent.putExtra("feedId", feedId)
+ intent.putExtra("writerLevel", writerLevel)
+ startActivity(intent)
+ }
+
companion object {
- private const val LV_KNIGHT = 2
private const val MSG_WINEYFEED_ERROR = "ERROR"
-
private const val TAG_GOAL_DIALOG = "NO_GOAL_DIALOG"
private const val TAG_DELETE_DIALOG = "DELETE_DIALOG"
}
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/CommentAdapter.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/CommentAdapter.kt
new file mode 100644
index 00000000..978ec736
--- /dev/null
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/CommentAdapter.kt
@@ -0,0 +1,40 @@
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import com.android.go.sopt.winey.databinding.ItemDetailCommentBinding
+import com.android.go.sopt.winey.domain.entity.CommentList
+import com.android.go.sopt.winey.util.view.ItemDiffCallback
+
+class CommentAdapter() : ListAdapter(diffUtil) {
+ class CommentViewHolder(
+ private val binding: ItemDetailCommentBinding
+ ) : RecyclerView.ViewHolder(binding.root) {
+ fun onBind(data: CommentList) {
+ binding.apply {
+ this.data = data
+ executePendingBindings()
+ }
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): CommentViewHolder {
+ val binding =
+ ItemDetailCommentBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+ return CommentViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: CommentViewHolder, position: Int) {
+ holder.onBind(getItem(position))
+ }
+
+ companion object {
+ private val diffUtil = ItemDiffCallback(
+ onItemsTheSame = { old, new -> old.commentId == new.commentId },
+ onContentsTheSame = { old, new -> old == new }
+ )
+ }
+}
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailActivity.kt
new file mode 100644
index 00000000..cf960d0e
--- /dev/null
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailActivity.kt
@@ -0,0 +1,37 @@
+package com.android.go.sopt.winey.presentation.main.feed.detail
+
+import android.os.Bundle
+import androidx.fragment.app.commit
+import com.android.go.sopt.winey.R
+import com.android.go.sopt.winey.databinding.ActivityDetailBinding
+import com.android.go.sopt.winey.util.binding.BindingActivity
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class DetailActivity : BindingActivity(R.layout.activity_detail) {
+ private lateinit var detailFragment: DetailFragment
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val feedId = intent.getIntExtra("feedId", 0)
+ val writerLevel = intent.getIntExtra("writerLevel", 0)
+ putArgsToDetail(feedId, writerLevel)
+ setDefaultFragment(savedInstanceState)
+ }
+
+ private fun putArgsToDetail(feedId: Int, writerLevel: Int) {
+ detailFragment = DetailFragment()
+ detailFragment.arguments = Bundle().apply {
+ putInt("feedId", feedId)
+ putInt("writerLevel", writerLevel)
+ }
+ }
+
+ private fun setDefaultFragment(savedInstanceState: Bundle?) {
+ if (savedInstanceState == null) {
+ supportFragmentManager.commit {
+ replace(R.id.fcv_detail, detailFragment)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailFragment.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailFragment.kt
new file mode 100644
index 00000000..98ce3b1b
--- /dev/null
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailFragment.kt
@@ -0,0 +1,99 @@
+package com.android.go.sopt.winey.presentation.main.feed.detail
+
+import CommentAdapter
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.core.view.isVisible
+import androidx.fragment.app.viewModels
+import androidx.lifecycle.flowWithLifecycle
+import com.android.go.sopt.winey.R
+import com.android.go.sopt.winey.databinding.FragmentDetailBinding
+import com.android.go.sopt.winey.presentation.main.MainActivity
+import com.android.go.sopt.winey.util.binding.BindingFragment
+import com.android.go.sopt.winey.util.fragment.snackBar
+import com.android.go.sopt.winey.util.fragment.viewLifeCycle
+import com.android.go.sopt.winey.util.fragment.viewLifeCycleScope
+import com.android.go.sopt.winey.util.view.UiState
+import com.android.go.sopt.winey.util.view.setOnSingleClickListener
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import timber.log.Timber
+
+@AndroidEntryPoint
+class DetailFragment() :
+ BindingFragment(R.layout.fragment_detail) {
+ private var writerLevel: Int = 0
+ private var feedId: Int = 0
+ private lateinit var commentAdapter: CommentAdapter
+ private val viewModel by viewModels()
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ arguments?.let {
+ feedId = it.getInt("feedId", 0)
+ writerLevel = it.getInt("writerLevel", 0)
+ }
+ viewModel.getFeedDetail(feedId)
+ initAdapter()
+ initGetFeedDetailObserver()
+ binding.ivDetailBack.setOnSingleClickListener {
+ navigateToWineyFeed()
+ }
+ }
+
+ private fun initAdapter() {
+ commentAdapter = CommentAdapter()
+ binding.rvDetailComment.adapter = commentAdapter
+ binding.ivDetailProfilephoto.setImageResource(setUserProfile(writerLevel))
+ }
+
+ private fun initGetFeedDetailObserver() {
+ viewModel.getFeedDetailState.flowWithLifecycle(viewLifeCycle).onEach { state ->
+ when (state) {
+ is UiState.Success -> {
+ if (state.data?.commentList?.isEmpty() == true) {
+ binding.rvDetailComment.isVisible = false
+ binding.lCommentEmpty.isVisible = true
+ } else {
+ binding.rvDetailComment.isVisible = true
+ }
+ binding.data = state.data
+ commentAdapter.submitList(state.data?.commentList)
+ }
+
+ is UiState.Loading -> {
+ binding.rvDetailComment.isVisible = false
+ binding.lCommentEmpty.isVisible = false
+ }
+
+ is UiState.Failure -> {
+ snackBar(binding.root) { state.msg }
+ }
+
+ else -> Timber.tag("failure").e(MSG_DETAIL_ERROR)
+ }
+ }.launchIn(viewLifeCycleScope)
+ }
+
+ private fun setUserProfile(userLevel: Int): Int {
+ return when (userLevel) {
+ 1 -> R.drawable.img_wineyfeed_profile_1
+ 2 -> R.drawable.img_wineyfeed_profile_2
+ 3 -> R.drawable.img_wineyfeed_profile_3
+ 4 -> R.drawable.img_wineyfeed_profile_4
+ else -> R.drawable.img_wineyfeed_profile
+ }
+ }
+
+ private fun navigateToWineyFeed() {
+ val intent = Intent(requireContext(), MainActivity::class.java)
+ intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
+ startActivity(intent)
+ requireActivity().finish()
+ }
+
+ companion object {
+ private const val MSG_DETAIL_ERROR = "ERROR"
+ }
+}
diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailViewModel.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailViewModel.kt
new file mode 100644
index 00000000..ef1318d3
--- /dev/null
+++ b/app/src/main/java/com/android/go/sopt/winey/presentation/main/feed/detail/DetailViewModel.kt
@@ -0,0 +1,53 @@
+package com.android.go.sopt.winey.presentation.main.feed.detail
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.android.go.sopt.winey.domain.entity.DetailFeed
+import com.android.go.sopt.winey.domain.repository.FeedRepository
+import com.android.go.sopt.winey.util.view.UiState
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import retrofit2.HttpException
+import timber.log.Timber
+import javax.inject.Inject
+
+@HiltViewModel
+class DetailViewModel @Inject constructor(
+ private val feedRepository: FeedRepository
+) : ViewModel() {
+ private val _getFeedDetailState =
+ MutableStateFlow>(UiState.Loading)
+ val getFeedDetailState: StateFlow> =
+ _getFeedDetailState.asStateFlow()
+
+ fun getFeedDetail(feedId: Int) {
+ viewModelScope.launch {
+ feedRepository.getFeedDetail(feedId)
+ .onSuccess { response ->
+ _getFeedDetailState.emit(UiState.Success(response))
+ }
+ .onFailure { t -> handleFailureState(_getFeedDetailState, t) }
+ }
+ }
+
+ private fun handleFailureState(loadingState: MutableStateFlow>, t: Throwable) {
+ if (t is HttpException) {
+ val errorMessage = when (t.code()) {
+ CODE_DETAIL_INVALID_USER_OR_FEED -> t.message()
+ CODE_DETAIL_INVALID_REQUEST -> t.message()
+ else -> t.message()
+ }
+ loadingState.value = UiState.Failure(errorMessage)
+ Timber.e("$MSG_DETAIL_FAIL : ${t.code()} : ${t.message()}")
+ }
+ }
+
+ companion object {
+ private const val CODE_DETAIL_INVALID_USER_OR_FEED = 404
+ private const val CODE_DETAIL_INVALID_REQUEST = 400
+ private const val MSG_DETAIL_FAIL = "FAIL"
+ }
+}
diff --git a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt
index 31f85667..16eda1aa 100644
--- a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt
+++ b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt
@@ -42,10 +42,13 @@ fun TextView.setFormattedNumber(amount: Long, prefix: String?, suffix: String?)
}
@BindingAdapter("imageUrl")
-fun loadImager(view: ImageView, imageurl: String) {
- view.load(imageurl) {
- placeholder(R.drawable.img_wineyfeed_default)
- transformations(RoundedCornersTransformation(10F))
+fun loadImager(view: ImageView, imageurl: String?) {
+ if (imageurl != null) {
+ val uri = Uri.parse(imageurl)
+ view.load(uri) {
+ placeholder(R.drawable.img_wineyfeed_default)
+ transformations(RoundedCornersTransformation(10F))
+ }
}
}
@@ -151,3 +154,15 @@ fun ImageView.setNotiType(notiType: String) {
} else {
}
}
+
+@BindingAdapter("setLevelText")
+fun TextView.setLevelText(level: Int?) {
+ level?.let {
+ when (it) {
+ 1 -> text = resources.getString(R.string.comment_level_1)
+ 2 -> text = resources.getString(R.string.comment_level_2)
+ 3 -> text = resources.getString(R.string.comment_level_3)
+ 4 -> text = resources.getString(R.string.comment_level_4)
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/img_comment_empty.xml b/app/src/main/res/drawable/img_comment_empty.xml
index 54b23a92..2ce14cfa 100644
--- a/app/src/main/res/drawable/img_comment_empty.xml
+++ b/app/src/main/res/drawable/img_comment_empty.xml
@@ -1,177 +1,174 @@
+ android:width="38dp"
+ android:height="37dp"
+ android:viewportWidth="38"
+ android:viewportHeight="37">
-
diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml
new file mode 100644
index 00000000..1b4b12c5
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_detail.xml b/app/src/main/res/layout/fragment_detail.xml
new file mode 100644
index 00000000..17599495
--- /dev/null
+++ b/app/src/main/res/layout/fragment_detail.xml
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_feed_delete_dialog.xml b/app/src/main/res/layout/fragment_feed_delete_dialog.xml
deleted file mode 100644
index 8c4ffa76..00000000
--- a/app/src/main/res/layout/fragment_feed_delete_dialog.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_detail_comment.xml b/app/src/main/res/layout/item_detail_comment.xml
new file mode 100644
index 00000000..b1e3a518
--- /dev/null
+++ b/app/src/main/res/layout/item_detail_comment.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_wineyfeed_post.xml b/app/src/main/res/layout/item_wineyfeed_post.xml
index d57e657a..ddd2b3bf 100644
--- a/app/src/main/res/layout/item_wineyfeed_post.xml
+++ b/app/src/main/res/layout/item_wineyfeed_post.xml
@@ -11,6 +11,7 @@
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 915689bb..3a2663d6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -187,4 +187,11 @@
업로드가 완료되었습니다 :)
죄송합니다. 업로드에 실패했습니다 :(
+
+
+ LV.평민 ㆍ
+ LV.기사 ㆍ
+ LV.귀족 ㆍ
+ LV.황제 ㆍ
+ 아직 댓글이 없어요