11package com.into.websoso.ui.main.feed
22
33import android.annotation.SuppressLint
4- import android.content.Intent
54import android.os.Bundle
65import android.view.LayoutInflater
76import android.view.View
87import android.view.ViewGroup
98import android.view.WindowManager
109import android.widget.PopupWindow
1110import android.widget.TextView
12- import androidx.activity.result.ActivityResultLauncher
11+ import androidx.activity.result.ActivityResult
1312import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
1413import androidx.core.view.children
1514import androidx.core.view.isVisible
@@ -32,11 +31,8 @@ import com.into.websoso.core.common.ui.base.BaseFragment
3231import com.into.websoso.core.common.ui.custom.WebsosoChip
3332import com.into.websoso.core.common.ui.model.ResultFrom.BlockUser
3433import com.into.websoso.core.common.ui.model.ResultFrom.CreateFeed
35- import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailBack
3634import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailError
3735import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailRemoved
38- import com.into.websoso.core.common.ui.model.ResultFrom.NovelDetailBack
39- import com.into.websoso.core.common.ui.model.ResultFrom.OtherUserProfileBack
4036import com.into.websoso.core.common.ui.model.ResultFrom.WithdrawUser
4137import com.into.websoso.core.common.util.InfiniteScrollListener
4238import com.into.websoso.core.common.util.SingleEventHandler
@@ -50,6 +46,7 @@ import com.into.websoso.databinding.FragmentFeedBinding
5046import com.into.websoso.databinding.MenuFeedPopupBinding
5147import com.into.websoso.ui.createFeed.CreateFeedActivity
5248import com.into.websoso.ui.feedDetail.FeedDetailActivity
49+ import com.into.websoso.ui.feedDetail.FeedDetailActivity.Companion.FEED_ID
5350import com.into.websoso.ui.feedDetail.model.EditFeedModel
5451import com.into.websoso.ui.main.feed.adapter.FeedAdapter
5552import com.into.websoso.ui.main.feed.adapter.FeedType.Feed
@@ -80,7 +77,69 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
8077 private val feedViewModel: FeedViewModel by viewModels()
8178 private val feedAdapter: FeedAdapter by lazy { FeedAdapter (onClickFeedItem()) }
8279 private val singleEventHandler: SingleEventHandler by lazy { SingleEventHandler .from() }
83- private lateinit var activityResultCallback: ActivityResultLauncher <Intent >
80+ private val activityResultCallback by lazy {
81+ registerForActivityResult(StartActivityForResult ()) { result ->
82+ handleActivityResult(result)
83+ }
84+ }
85+
86+ private fun handleActivityResult (result : ActivityResult ) {
87+ when (result.resultCode) {
88+ CreateFeed .RESULT_OK -> {
89+ feedViewModel.updateRefreshedFeeds(true )
90+ // TODO: 피드 아예 초기화
91+
92+ showWebsosoSnackBar(
93+ view = binding.root,
94+ message = getString(feed_create_done),
95+ icon = ic_novel_detail_check,
96+ )
97+ }
98+
99+ FeedDetailRemoved .RESULT_OK -> {
100+ val removedFeedId = result.data?.getLongExtra(FEED_ID , - 1 ) ? : - 1
101+ feedViewModel.updateRefreshedFeeds(removedFeedId)
102+
103+ showWebsosoSnackBar(
104+ view = binding.root,
105+ message = getString(feed_removed_feed_snackbar),
106+ icon = ic_blocked_user_snack_bar,
107+ )
108+ }
109+
110+ FeedDetailError .RESULT_OK -> {
111+ val removedFeedId = result.data?.getLongExtra(FEED_ID , - 1 ) ? : - 1
112+ feedViewModel.updateRefreshedFeeds(removedFeedId)
113+
114+ showWebsosoSnackBar(
115+ view = binding.root,
116+ message = getString(feed_server_error),
117+ icon = ic_blocked_user_snack_bar,
118+ )
119+ }
120+
121+ BlockUser .RESULT_OK -> {
122+ val nickname = result.data?.getStringExtra(USER_NICKNAME ).orEmpty()
123+ val removedFeedId = result.data?.getLongExtra(FEED_ID , - 1 ) ? : - 1
124+
125+ feedViewModel.updateRefreshedFeeds(removedFeedId)
126+
127+ showWebsosoSnackBar(
128+ view = binding.root,
129+ message = getString(block_user_success_message, nickname),
130+ icon = ic_novel_detail_check,
131+ )
132+ }
133+
134+ WithdrawUser .RESULT_OK -> {
135+ showWebsosoSnackBar(
136+ view = binding.root,
137+ message = getString(R .string.other_user_page_withdraw_user),
138+ icon = ic_blocked_user_snack_bar,
139+ )
140+ }
141+ }
142+ }
84143
85144 override fun onCreateView (
86145 inflater : LayoutInflater ,
@@ -134,7 +193,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
134193 false -> likeCount + 1
135194 }
136195
137- view.findViewById<TextView >(tv_feed_thumb_up_count).text = updatedLikeCount.toString()
196+ view.findViewById<TextView >(tv_feed_thumb_up_count).text =
197+ updatedLikeCount.toString()
138198 view.isSelected = ! view.isSelected
139199
140200 singleEventHandler.debounce(coroutineScope = lifecycleScope) {
@@ -296,73 +356,10 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
296356
297357 initView()
298358 setupObserver()
299- refreshView()
359+ activityResultCallback
300360 tracker.trackEvent(" feed_all" )
301361 }
302362
303- private fun refreshView () {
304- if (::activityResultCallback.isInitialized.not ()) {
305- activityResultCallback = registerForActivityResult(StartActivityForResult ()) { result ->
306- when (result.resultCode) {
307- FeedDetailBack .RESULT_OK ,
308- NovelDetailBack .RESULT_OK ,
309- OtherUserProfileBack .RESULT_OK ,
310- -> feedViewModel.updateRefreshedFeeds(false )
311-
312- CreateFeed .RESULT_OK -> {
313- feedViewModel.updateRefreshedFeeds(true )
314-
315- showWebsosoSnackBar(
316- view = binding.root,
317- message = getString(feed_create_done),
318- icon = ic_novel_detail_check,
319- )
320- }
321-
322- FeedDetailRemoved .RESULT_OK -> {
323- feedViewModel.updateRefreshedFeeds(false )
324-
325- showWebsosoSnackBar(
326- view = binding.root,
327- message = getString(feed_removed_feed_snackbar),
328- icon = ic_blocked_user_snack_bar,
329- )
330- }
331-
332- FeedDetailError .RESULT_OK -> {
333- feedViewModel.updateRefreshedFeeds(false )
334-
335- showWebsosoSnackBar(
336- view = binding.root,
337- message = getString(feed_server_error),
338- icon = ic_blocked_user_snack_bar,
339- )
340- }
341-
342- BlockUser .RESULT_OK -> {
343- feedViewModel.updateRefreshedFeeds(false )
344-
345- val nickname = result.data?.getStringExtra(USER_NICKNAME ).orEmpty()
346-
347- showWebsosoSnackBar(
348- view = binding.root,
349- message = getString(block_user_success_message, nickname),
350- icon = ic_novel_detail_check,
351- )
352- }
353-
354- WithdrawUser .RESULT_OK -> {
355- showWebsosoSnackBar(
356- view = binding.root,
357- message = getString(R .string.other_user_page_withdraw_user),
358- icon = ic_blocked_user_snack_bar,
359- )
360- }
361- }
362- }
363- }
364- }
365-
366363 private fun initView () {
367364 binding.onWriteClick = { singleEventHandler.throttleFirst { navigateToFeedWriting() } }
368365 setupAdapter()
@@ -433,7 +430,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
433430 val chip = it as Chip
434431 chip.isSelected = chip.text == selectedCategory.category.krTitle
435432 }
436-
433+ // TODO: 최초로 init할 때 전체상태로 updateFeeds 호출함 -> 리프레시되어야하기 때문에 true 설정
434+ // TODO: 뷰모델 init으로 옮기기, isRefreshed 상태 없애기
437435 feedViewModel.updateFeeds(true )
438436 }
439437 }
0 commit comments