Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 보관함 읽기 상태에 따른 탭 이동 구현 #561

Merged
merged 22 commits into from
Jan 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c9540b6
feat: 내 서재 보관함 레이아웃 영역 추가
yeonjeen Jan 23, 2025
9847ae6
feat: 내 서재 보관함 읽기 상태 탭별 개별 이동 로직 구현
yeonjeen Jan 23, 2025
05ee178
feat: 다른유저 서재 보관함 읽기 상태 탭별 개별 이동 로직 구현
yeonjeen Jan 23, 2025
6018733
refactor: 불필요한 코드 삭제
yeonjeen Jan 23, 2025
998721b
feat: 다른유저 서재 보관함 레이아웃 영역 추가
yeonjeen Jan 23, 2025
b5b76ec
feat: 읽기상태 경로에 따른 보관함 작품 업데이트 로직 분기처리
yeonjeen Jan 23, 2025
f8453da
feat: 보관함 이동 시 업데이트 조건에 읽기 상태 추가
yeonjeen Jan 23, 2025
491aaa0
refactor: 함수 이름 변경
yeonjeen Jan 23, 2025
795acac
Merge remote-tracking branch 'origin/develop' into feat/554
yeonjeen Jan 24, 2025
7e9d871
refactor: 코드리뷰반영
yeonjeen Jan 24, 2025
0e06d67
refactor: 린트해결
yeonjeen Jan 24, 2025
58ce4a0
refactor: 린트해결
yeonjeen Jan 24, 2025
fc4293c
refactor: 린트해결
yeonjeen Jan 24, 2025
5b17f7e
refactor: 린트해결
yeonjeen Jan 24, 2025
1803f50
refactor: 린트해결
yeonjeen Jan 24, 2025
a462c8a
refactor: 린트해결
yeonjeen Jan 24, 2025
07719f7
refactor: 린트해결
yeonjeen Jan 24, 2025
275bc5c
refactor: 린트해결
yeonjeen Jan 24, 2025
34c5538
build: ktlint 포맷팅
m6z1 Jan 25, 2025
353b180
Merge branch 'develop' of https://github.com/Team-WSS/WSS-Android int…
m6z1 Jan 25, 2025
de1b6b9
build: ktlint expression body 설정 비활성화
m6z1 Jan 25, 2025
784199a
build: ktlint 포맷팅
m6z1 Jan 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.into.websoso.data.model.NovelPreferenceEntity
import com.into.websoso.databinding.FragmentMyLibraryBinding
import com.into.websoso.ui.main.myPage.myLibrary.adapter.RestGenrePreferenceAdapter
import com.into.websoso.ui.userStorage.UserStorageActivity
import com.into.websoso.ui.userStorage.model.StorageTab
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Expand Down Expand Up @@ -197,27 +198,32 @@ class MyLibraryFragment : BaseFragment<FragmentMyLibraryBinding>(R.layout.fragme
}

private fun onStorageButtonClick() {
binding.ivMyLibraryGoToStorage.setOnClickListener {
singleEventHandler.throttleFirst {
val intent = UserStorageActivity.getIntent(
context = requireContext(),
source = UserStorageActivity.SOURCE_MY_LIBRARY,
userId = myLibraryViewModel.userId,
)
userStorageResultLauncher.launch(intent)
val tabClickMappings = mapOf(
binding.clMyLibraryTopBar to StorageTab.INTEREST.readStatus,
binding.llMyLibraryStorageInteresting to StorageTab.INTEREST.readStatus,
binding.llMyLibraryStorageWatching to StorageTab.WATCHING.readStatus,
binding.llMyLibraryStorageWatched to StorageTab.WATCHED.readStatus,
binding.llMyLibraryStorageQuit to StorageTab.QUIT.readStatus,
)

tabClickMappings.forEach { (view, readStatus) ->
view.setOnClickListener {
singleEventHandler.throttleFirst {
navigateToStorageActivity(readStatus)
}
}
}
}

binding.llMyLibraryStorage.setOnClickListener {
singleEventHandler.throttleFirst {
val intent = UserStorageActivity.getIntent(
context = requireContext(),
source = UserStorageActivity.SOURCE_MY_LIBRARY,
userId = myLibraryViewModel.userId,
)
userStorageResultLauncher.launch(intent)
}
}
private fun navigateToStorageActivity(readStatus: String) {
userStorageResultLauncher.launch(
UserStorageActivity.getIntent(
context = requireContext(),
source = UserStorageActivity.SOURCE_MY_LIBRARY,
userId = myLibraryViewModel.userId,
readStatus = readStatus,
),
)
}

private fun updateDominantGenres(topGenres: List<GenrePreferenceEntity>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.into.websoso.data.model.NovelPreferenceEntity
import com.into.websoso.databinding.FragmentOtherUserLibraryBinding
import com.into.websoso.ui.otherUserPage.otherUserLibrary.adapter.RestGenrePreferenceAdapter
import com.into.websoso.ui.userStorage.UserStorageActivity
import com.into.websoso.ui.userStorage.model.StorageTab
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Expand Down Expand Up @@ -73,6 +74,7 @@ class OtherUserLibraryFragment : BaseFragment<FragmentOtherUserLibraryBinding>(R
binding.clOtherUserLibraryKnownPreference.visibility = View.GONE
binding.clOtherUserLibraryUnknownPreference.visibility = View.VISIBLE
}

false -> {
binding.clOtherUserLibraryKnownPreference.visibility = View.VISIBLE
binding.clOtherUserLibraryUnknownPreference.visibility = View.GONE
Expand Down Expand Up @@ -198,29 +200,35 @@ class OtherUserLibraryFragment : BaseFragment<FragmentOtherUserLibraryBinding>(R
private fun onStorageButtonClick() {
val userId = requireNotNull(otherUserLibraryViewModel.userId.value)

binding.ivOtherUserLibraryGoToStorage.setOnClickListener {
singleEventHandler.throttleFirst {
startActivity(
UserStorageActivity.getIntent(
requireContext(),
UserStorageActivity.SOURCE_OTHER_USER_LIBRARY,
userId,
),
)
val clickMappings = mapOf(
binding.clOtherUserLibraryTopBar to StorageTab.INTEREST.readStatus,
binding.llOtherUserLibraryStorageInteresting to StorageTab.INTEREST.readStatus,
binding.llOtherUserLibraryStorageWatching to StorageTab.WATCHING.readStatus,
binding.llOtherUserLibraryStorageWatched to StorageTab.WATCHED.readStatus,
binding.llOtherUserLibraryStorageQuit to StorageTab.QUIT.readStatus,
)

clickMappings.forEach { (view, readStatus) ->
view.setOnClickListener {
singleEventHandler.throttleFirst {
navigateToUserStorageActivity(userId, readStatus)
}
}
}
}

binding.llOtherUserLibraryStorage.setOnClickListener {
singleEventHandler.throttleFirst {
startActivity(
UserStorageActivity.getIntent(
requireContext(),
UserStorageActivity.SOURCE_OTHER_USER_LIBRARY,
userId,
),
)
}
}
private fun navigateToUserStorageActivity(
userId: Long,
readStatus: String,
) {
startActivity(
UserStorageActivity.getIntent(
context = requireContext(),
source = UserStorageActivity.SOURCE_OTHER_USER_LIBRARY,
userId = userId,
readStatus = readStatus,
),
)
}

override fun onResume() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class UserStorageActivity : BaseActivity<ActivityStorageBinding>(R.layout.activi
setupUserId()
bindViewModel()
setupViewPagerAndTabLayout()
setupInitialReadStatusTab()
onBackButtonClick()
onSortTypeButtonClick()
onExploreButton()
Expand All @@ -52,8 +53,9 @@ class UserStorageActivity : BaseActivity<ActivityStorageBinding>(R.layout.activi
private fun setupUserId() {
val source = intent.getStringExtra(EXTRA_SOURCE) ?: SOURCE_MY_LIBRARY
val userId = intent.getLongExtra(USER_ID_KEY, UserStorageViewModel.DEFAULT_USER_ID)
val readStatus = intent.getStringExtra(READ_STATUS) ?: StorageTab.INTEREST.readStatus

userStorageViewModel.updateUserStorage(source, userId)
userStorageViewModel.updateUserStorage(source, userId, readStatus)
}

private fun bindViewModel() {
Expand All @@ -72,20 +74,31 @@ class UserStorageActivity : BaseActivity<ActivityStorageBinding>(R.layout.activi
binding.vpStorage.adapter = userStorageAdapter
}

private fun setupInitialReadStatusTab() {
val readStatus = intent.getStringExtra(READ_STATUS) ?: StorageTab.INTEREST.readStatus
userStorageViewModel.updateReadStatus(readStatus, forceLoad = true)

val initialTabIndex = StorageTab.entries.indexOfFirst { it.readStatus == readStatus }
binding.tlStorage.selectTab(binding.tlStorage.getTabAt(initialTabIndex.coerceAtLeast(0)))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a: coerceAtLeast 가 무슨 속성인가요 ?? 어떤 로직인 지 궁금해요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

예외처리를 한건데요! coerceAtLeast 는 값이 최소값보다 작을 경우 최소값을 반환합니다! 그래서 예외나 오류가 발생했을 때 관심으로 이동할 수 있도록 처리했습니다!

}

private fun setupTabLayoutWithViewPager() {
TabLayoutMediator(binding.tlStorage, binding.vpStorage) { tab, position ->
tab.text = StorageTab.fromPosition(position).title
}.attach()

binding.tlStorage.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
val selectedTab = requireNotNull(tab) { "Tab must not be null" }
onReadingStatusTabSelected(selectedTab.position)
}
binding.tlStorage.addOnTabSelectedListener(
object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
val selectedTab = requireNotNull(tab) { "Tab must not be null" }
onReadingStatusTabSelected(selectedTab.position)
}

override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabReselected(tab: TabLayout.Tab?) {}
})
override fun onTabUnselected(tab: TabLayout.Tab?) {}

override fun onTabReselected(tab: TabLayout.Tab?) {}
},
)
}

private fun onReadingStatusTabSelected(position: Int) {
Expand Down Expand Up @@ -172,12 +185,20 @@ class UserStorageActivity : BaseActivity<ActivityStorageBinding>(R.layout.activi
const val USER_ID_KEY = "userId"
const val SOURCE_MY_LIBRARY = "myLibrary"
const val SOURCE_OTHER_USER_LIBRARY = "otherUserLibrary"

fun getIntent(context: Context, source: String, userId: Long): Intent {
return Intent(context, UserStorageActivity::class.java).apply {
putExtra(EXTRA_SOURCE, source)
putExtra(USER_ID_KEY, userId)
}
const val READ_STATUS = "read_status"

fun getIntent(
context: Context,
source: String,
userId: Long,
readStatus: String = StorageTab.INTEREST.readStatus,
) = Intent(
context,
UserStorageActivity::class.java,
).apply {
putExtra(EXTRA_SOURCE, source)
putExtra(USER_ID_KEY, userId)
putExtra(READ_STATUS, readStatus)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ class UserStorageViewModel @Inject constructor(
fun updateUserStorage(
source: String,
receivedUserId: Long,
readStatus: String = StorageTab.INTEREST.readStatus,
) {
this.source = source
this.userId = receivedUserId

updateReadStatus(StorageTab.INTEREST.readStatus, forceLoad = true)
updateReadStatus(readStatus, forceLoad = true)
}

fun updateRatingChanged() {
Expand Down Expand Up @@ -111,4 +112,4 @@ class UserStorageViewModel @Inject constructor(
const val STORAGE_NOVEL_SIZE = 100
const val DEFAULT_USER_ID = -1L
}
}
}
Loading
Loading