Skip to content

Commit

Permalink
[MIN-52] feat : 스토리 디테일 화면 프레임 구현 (#25)
Browse files Browse the repository at this point in the history
  • Loading branch information
KDW03 committed Feb 22, 2023
1 parent 6c5bbd5 commit 4ea6175
Show file tree
Hide file tree
Showing 13 changed files with 110 additions and 28 deletions.
4 changes: 4 additions & 0 deletions story/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
id 'com.google.dagger.hilt.android'
id 'androidx.navigation.safeargs.kotlin'
}

android {
Expand Down Expand Up @@ -43,6 +44,9 @@ dependencies {
// ImagePicker
implementation 'io.github.ParkSangGwon:tedimagepicker:1.2.8'

// Navigation
api "androidx.navigation:navigation-fragment-ktx:$rootProject.nav_version"
api "androidx.navigation:navigation-ui-ktx:$rootProject.nav_version"

// Glide
implementation 'com.github.bumptech.glide:glide:4.14.2'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ package com.najudoryeong.mineme.story
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.najudoryeong.mineme.common.domain.entity.Story
import com.najudoryeong.mineme.story.databinding.ItemStoryInBinding
import com.najudoryeong.mineme.story.ui.StoryFragmentDirections


class StoryInAdapter : ListAdapter<Story, RecyclerView.ViewHolder>(StoryInDiffCallback()){
class StoryInAdapter(val fragment: Fragment) : ListAdapter<Story, RecyclerView.ViewHolder>(StoryInDiffCallback()){

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return StoryInViewHolder(
Expand All @@ -36,6 +39,7 @@ class StoryInAdapter : ListAdapter<Story, RecyclerView.ViewHolder>(StoryInDiffCa
story = storyModel
itemView.setOnClickListener {
// story 상세보기
fragment.findNavController().navigate(StoryFragmentDirections.detailStory(storyModel.postId))
Log.d("testStory","상세보기 클릭")
}
executePendingBindings()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.najudoryeong.mineme.story
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
Expand All @@ -12,7 +13,7 @@ import com.najudoryeong.mineme.story.domain.entity.StoryListWithDate
import com.najudoryeong.mineme.story.ui.dummy


class StoryOutAdapter: ListAdapter<StoryListWithDate, RecyclerView.ViewHolder>(StoryOutDiffCallback()) {
class StoryOutAdapter(val fragment : Fragment): ListAdapter<StoryListWithDate, RecyclerView.ViewHolder>(StoryOutDiffCallback()) {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
Expand Down Expand Up @@ -43,7 +44,7 @@ class StoryOutAdapter: ListAdapter<StoryListWithDate, RecyclerView.ViewHolder>(S
fun bind(storyListWithDate : StoryListWithDate){
// 외부 이제 나눈다 날짜별로
with(binding) {
outRecyclerView.adapter = StoryInAdapter().apply { submitList(storyListWithDate.posts) }
outRecyclerView.adapter = StoryInAdapter(fragment).apply { submitList(storyListWithDate.posts) }
yearMonth = getYearMonth(storyListWithDate.year,storyListWithDate.month)
executePendingBindings()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package com.najudoryeong.mineme.story.data

import com.najudoryeong.mineme.common.data.dto.CommonResponse
import com.najudoryeong.mineme.common.data.dto.NullResponse
import com.najudoryeong.mineme.story.data.dto.NewStoryRequest
import com.najudoryeong.mineme.story.domain.entity.StoryListWithDate
import org.apache.commons.lang3.ObjectUtils.Null
import retrofit2.http.Body

import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.POST
Expand All @@ -17,10 +15,10 @@ interface StoryService {
@Header("Authorization") token: String,
) : CommonResponse<List<StoryListWithDate>>

@POST("api/v1/stories")
suspend fun postNewStory(
@Header("Authorization") token: String,
@Body newStoryRequest: NewStoryRequest
) : NullResponse
// @POST("api/v1/stories")
// suspend fun postNewStory(
// @Header("Authorization") token: String,
// @Body newStoryRequest: NewStoryRequest
// ) : NullResponse

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
package com.najudoryeong.mineme.story.data.dto

data class NewStoryRequest(
val date : String
images :
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ class StoryUseCase @Inject constructor(
private val storyService : StoryService
){
suspend fun readStoryList(token: String): List<StoryListWithDate> = storyService.readStoryList(token).data
suspend fun postNewStory(token: String) :
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.najudoryeong.mineme.story.ui


import androidx.navigation.fragment.navArgs
import com.najudoryeong.mineme.common_ui.BaseFragment
import com.najudoryeong.mineme.story.databinding.FragmentStoryDetailBinding
import com.najudoryeong.mineme.story.util.DetailStoryFoundationInfo
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint
class StoryDetailFragment : BaseFragment<FragmentStoryDetailBinding>(DetailStoryFoundationInfo) {

private val args: StoryDetailFragmentArgs by navArgs()

override fun initView() {
binding.apply {
postIDTextView.text = args.postID.toString()
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import kotlinx.coroutines.launch
class StoryFragment : BaseFragment<FragmentStoryBinding>(StoryFoundationInfo) {

private val storyViewModel: StoryViewModel by viewModels()
private val storyOutAdapter: StoryOutAdapter by lazy { StoryOutAdapter() }
private val storyOutAdapter: StoryOutAdapter by lazy { StoryOutAdapter(this) }


override fun initView() {
Expand All @@ -42,7 +42,6 @@ class StoryFragment : BaseFragment<FragmentStoryBinding>(StoryFoundationInfo) {
findNavController().navigate(R.id.next)
}


private fun toastObserve() {
lifecycleScope.launch{
storyViewModel.toastMessage.collectLatest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ package com.najudoryeong.mineme.story.ui
import android.net.Uri
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.fragment.NavHostFragment.Companion.findNavController
import androidx.navigation.fragment.findNavController
import com.najudoryeong.mineme.common.domain.entity.Story
import com.najudoryeong.mineme.story.domain.entity.StoryListWithDate
import com.najudoryeong.mineme.common.domain.usecase.DataStoreUseCase
import com.najudoryeong.mineme.story.R
import com.najudoryeong.mineme.story.domain.usecase.StoryUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -25,19 +28,19 @@ var dummy: MutableList<StoryListWithDate> = mutableListOf(
),
Story(
"2020-03-02",
1,
2,
"마산1",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Story(
"2020-03-03",
1,
3,
"마산2",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Story(
"2020-03-04",
1,
4,
"마산3",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Expand All @@ -48,25 +51,25 @@ var dummy: MutableList<StoryListWithDate> = mutableListOf(
"2020", "04", listOf(
Story(
"2020-04-01",
1,
5,
"마산",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Story(
"2020-04-02",
1,
6,
"마산11",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Story(
"2020-04-03",
1,
7,
"마산21",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Story(
"2020-04-04",
1,
8,
"마산31",
"https://upload3.inven.co.kr/upload/2022/03/15/bbs/i16343629296.jpg?MW=800"
),
Expand Down Expand Up @@ -96,14 +99,13 @@ class StoryViewModel @Inject constructor(
fun raedStory(endApiCallBack: () -> Unit = {}) {
viewModelScope.launch {
_isApiLoading.value = true
//_storyList.value = dummy
_storyList.value = dummy
try {
storyUseCase.readStoryList(dataStoreUseCase.bearerJsonWebToken.first()!!).let {
_storyList.value = it.toMutableList()
}
} catch (e: Exception) {
// 값을 초기화해서 구독자가 알아차릴 수 있게
setToastMessage("스토리리스트 가져오는 거 실패")
}
endApiCallBack.invoke()
_isApiLoading.value = false
Expand All @@ -123,6 +125,8 @@ class StoryViewModel @Inject constructor(
}
}



fun setToastMessage(newMessage : String){
_toastMessage.value = ""
_toastMessage.value = newMessage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ val doItems = listOf(
)
val siItems = listOf("위치 없음", "마산시1", "마산시4", "마산시2", "마산시3", "마산시6")


@AndroidEntryPoint
class WriteStoryFragment : BaseFragment<FragmentWriteStoryBinding>(WriteStoryFoundationInfo){

Expand Down Expand Up @@ -85,7 +86,6 @@ class WriteStoryFragment : BaseFragment<FragmentWriteStoryBinding>(WriteStoryFou

override fun menuClick() {
Toast.makeText(context, "클릭메뉴", Toast.LENGTH_SHORT).show()
storyViewModel.
}

private fun toastObserve() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,18 @@ object WriteStoryFoundationInfo : FragmentInfoUtil {
override val bottomNavi_visibility: Int
get() = View.GONE

}


object DetailStoryFoundationInfo : FragmentInfoUtil {

override val layoutID: Int
get() = R.layout.fragment_story_detail
override val toolbarText: Int
get() = R.string.story
override val menu: Int
get() = com.najudoryeong.mineme.common_ui.R.menu.story_menu
override val bottomNavi_visibility: Int
get() = View.VISIBLE

}
23 changes: 23 additions & 0 deletions story/src/main/res/layout/fragment_story_detail.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.StoryDetailFragment">

<!-- TODO: Update blank fragment layout -->
<TextView
android:id="@+id/postID_textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="50sp"
android:text="@string/hello_blank_fragment" />

</FrameLayout>


</layout>
17 changes: 17 additions & 0 deletions story/src/main/res/navigation/nav_story.xml
Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_story"
app:startDestination="@id/storyFragment">

<fragment
android:id="@+id/storyFragment"
android:name="com.najudoryeong.mineme.story.ui.StoryFragment"
android:label="StoryFragment" >


<action
android:id="@+id/next"
app:destination="@id/writeStoryFragment"
app:popUpTo="@id/storyFragment" />
<action
android:id="@+id/detailStory"
app:destination="@id/storyDetailFragment"
app:popUpTo="@id/storyFragment" />

</fragment>
<fragment
android:id="@+id/writeStoryFragment"
android:name="com.najudoryeong.mineme.story.ui.WriteStoryFragment"
android:label="WriteStoryFragment" />
<fragment
android:id="@+id/storyDetailFragment"
android:name="com.najudoryeong.mineme.story.ui.StoryDetailFragment"
android:label="fragment_story_detail"
tools:layout="@layout/fragment_story_detail" >
<argument
android:name="postID"
app:argType="integer" />
</fragment>
</navigation>

0 comments on commit 4ea6175

Please sign in to comment.