fix(deeplink): 커뮤니티 댓글 딥링크 postId 라우팅을 정렬한다

This commit is contained in:
2026-03-13 21:39:20 +09:00
parent 598a04d084
commit 60677e262c
4 changed files with 212 additions and 9 deletions

View File

@@ -45,6 +45,8 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
private lateinit var imm: InputMethodManager
private var creatorId: Long = 0
private var deepLinkTargetPostId: Long = 0
private var isDeepLinkCommentHandled = false
private var isListMode = false
private var listAnchorPosition = 0
private var gridAnchorPosition = 0
@@ -114,6 +116,10 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
}
creatorId = intent.getLongExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID, 0)
deepLinkTargetPostId = intent.getLongExtra(Constants.EXTRA_COMMUNITY_POST_ID, 0)
if (deepLinkTargetPostId <= 0) {
deepLinkTargetPostId = intent.getStringExtra(Constants.EXTRA_COMMUNITY_POST_ID)?.toLongOrNull() ?: 0
}
if (creatorId <= 0) {
Toast.makeText(
applicationContext,
@@ -121,6 +127,7 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
Toast.LENGTH_LONG
).show()
finish()
return
}
bindData()
@@ -178,15 +185,7 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
)
},
showCommentBottomSheetDialog = { postId, existOrdered ->
val dialog = CreatorCommunityCommentFragment(
creatorId = creatorId,
postId = postId,
existOrdered = existOrdered
)
dialog.show(
supportFragmentManager,
dialog.tag
)
showCommentBottomSheet(postId = postId, existOrdered = existOrdered)
},
onClickModify = {
modifyResult.launch(
@@ -262,6 +261,7 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
loadingDialog.show(screenWidth, "")
} else {
loadingDialog.dismiss()
openDeepLinkTargetCommentIfNeeded()
}
}
@@ -275,9 +275,50 @@ class CreatorCommunityAllActivity : BaseActivity<ActivityCreatorCommunityAllBind
gridAdapter.items.addAll(it)
listAdapter.notifyDataSetChanged()
gridAdapter.notifyDataSetChanged()
openDeepLinkTargetCommentIfNeeded()
}
}
private fun openDeepLinkTargetCommentIfNeeded() {
if (isDeepLinkCommentHandled || deepLinkTargetPostId <= 0) {
return
}
val targetPost = listAdapter.items.firstOrNull { it.postId == deepLinkTargetPostId }
if (targetPost != null) {
isDeepLinkCommentHandled = true
switchToListMode(listAdapter.items.indexOfFirst { it.postId == targetPost.postId }, fromGridItemClick = false)
showCommentBottomSheet(postId = targetPost.postId, existOrdered = targetPost.existOrdered)
return
}
if (viewModel.isLast) {
isDeepLinkCommentHandled = true
Toast.makeText(
applicationContext,
getString(R.string.screen_creator_community_all_error_invalid_request),
Toast.LENGTH_LONG
).show()
return
}
if (viewModel.isLoading.value != true) {
viewModel.getCommunityPostList()
}
}
private fun showCommentBottomSheet(postId: Long, existOrdered: Boolean) {
val dialog = CreatorCommunityCommentFragment(
creatorId = creatorId,
postId = postId,
existOrdered = existOrdered
)
dialog.show(
supportFragmentManager,
dialog.tag
)
}
private fun setupRecyclerViews() {
val listRecyclerView = binding.rvCreatorCommunity
listRecyclerView.layoutManager = LinearLayoutManager(

View File

@@ -111,6 +111,15 @@ class DeepLinkActivity : AppCompatActivity() {
putQuery("content_id")
putQuery("deep_link_value")
putQuery("deep_link_sub5")
putQuery("postId")
putQuery(Constants.EXTRA_COMMUNITY_CREATOR_ID)
putQuery(Constants.EXTRA_COMMUNITY_POST_ID)
}
extras.getString("postId")?.takeIf { it.isNotBlank() }?.let {
if (!extras.containsKey(Constants.EXTRA_COMMUNITY_POST_ID)) {
extras.putString(Constants.EXTRA_COMMUNITY_POST_ID, it)
}
}
intent.getBundleExtra(Constants.EXTRA_DATA)?.let { source ->
@@ -129,6 +138,8 @@ class DeepLinkActivity : AppCompatActivity() {
copyString("deep_link")
copyString("deep_link_value")
copyString("deep_link_sub5")
copyString(Constants.EXTRA_COMMUNITY_CREATOR_ID)
copyString(Constants.EXTRA_COMMUNITY_POST_ID)
source.getLong(Constants.EXTRA_ROOM_ID).takeIf { it > 0 }?.let {
extras.putString("room_id", it.toString())
@@ -145,6 +156,12 @@ class DeepLinkActivity : AppCompatActivity() {
source.getLong(Constants.EXTRA_AUDIO_CONTENT_ID).takeIf { it > 0 }?.let {
extras.putString("content_id", it.toString())
}
source.getLong(Constants.EXTRA_COMMUNITY_CREATOR_ID).takeIf { it > 0 }?.let {
extras.putString(Constants.EXTRA_COMMUNITY_CREATOR_ID, it.toString())
}
source.getLong(Constants.EXTRA_COMMUNITY_POST_ID).takeIf { it > 0 }?.let {
extras.putString(Constants.EXTRA_COMMUNITY_POST_ID, it.toString())
}
}
intent.getLongExtra(Constants.EXTRA_ROOM_ID, 0).takeIf { it > 0 }?.let {
@@ -162,6 +179,12 @@ class DeepLinkActivity : AppCompatActivity() {
intent.getLongExtra(Constants.EXTRA_AUDIO_CONTENT_ID, 0).takeIf { it > 0 }?.let {
extras.putString("content_id", it.toString())
}
intent.getLongExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID, 0).takeIf { it > 0 }?.let {
extras.putString(Constants.EXTRA_COMMUNITY_CREATOR_ID, it.toString())
}
intent.getLongExtra(Constants.EXTRA_COMMUNITY_POST_ID, 0).takeIf { it > 0 }?.let {
extras.putString(Constants.EXTRA_COMMUNITY_POST_ID, it.toString())
}
intent.getStringExtra("deep_link")?.takeIf { it.isNotBlank() }?.let {
extras.putString("deep_link", it)
@@ -171,6 +194,18 @@ class DeepLinkActivity : AppCompatActivity() {
extras.putString("deep_link", it)
}
intent.getStringExtra("postId")?.takeIf { it.isNotBlank() }?.let {
if (!extras.containsKey(Constants.EXTRA_COMMUNITY_POST_ID)) {
extras.putString(Constants.EXTRA_COMMUNITY_POST_ID, it)
}
}
intent.getStringExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID)?.takeIf { it.isNotBlank() }?.let {
if (!extras.containsKey(Constants.EXTRA_COMMUNITY_CREATOR_ID)) {
extras.putString(Constants.EXTRA_COMMUNITY_CREATOR_ID, it)
}
}
if (data != null) {
applyPathDeepLink(data = data, putIfAbsent = ::putIfAbsent)
}
@@ -228,6 +263,8 @@ class DeepLinkActivity : AppCompatActivity() {
?: bundle.getLong(Constants.EXTRA_AUDITION_ID).takeIf { it > 0 }
val communityCreatorId = bundle.getString(Constants.EXTRA_COMMUNITY_CREATOR_ID)?.toLongOrNull()
?: bundle.getLong(Constants.EXTRA_COMMUNITY_CREATOR_ID).takeIf { it > 0 }
val communityPostId = bundle.getString(Constants.EXTRA_COMMUNITY_POST_ID)?.toLongOrNull()
?: bundle.getLong(Constants.EXTRA_COMMUNITY_POST_ID).takeIf { it > 0 }
when {
roomId != null && roomId > 0 -> {
@@ -262,6 +299,9 @@ class DeepLinkActivity : AppCompatActivity() {
startActivity(
Intent(applicationContext, CreatorCommunityAllActivity::class.java).apply {
putExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID, communityCreatorId)
if (communityPostId != null && communityPostId > 0) {
putExtra(Constants.EXTRA_COMMUNITY_POST_ID, communityPostId)
}
}
)
return true

View File

@@ -336,6 +336,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
?: bundle.getLong(Constants.EXTRA_AUDITION_ID).takeIf { it > 0 }
val communityCreatorId = bundle.getString(Constants.EXTRA_COMMUNITY_CREATOR_ID)?.toLongOrNull()
?: bundle.getLong(Constants.EXTRA_COMMUNITY_CREATOR_ID).takeIf { it > 0 }
val communityPostId = bundle.getString(Constants.EXTRA_COMMUNITY_POST_ID)?.toLongOrNull()
?: bundle.getLong(Constants.EXTRA_COMMUNITY_POST_ID).takeIf { it > 0 }
when {
roomId != null && roomId > 0 -> {
viewModel.clickTab(MainViewModel.CurrentTab.LIVE)
@@ -371,6 +373,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
communityCreatorId != null && communityCreatorId > 0 -> {
val nextIntent = Intent(applicationContext, CreatorCommunityAllActivity::class.java)
nextIntent.putExtra(Constants.EXTRA_COMMUNITY_CREATOR_ID, communityCreatorId)
if (communityPostId != null && communityPostId > 0) {
nextIntent.putExtra(Constants.EXTRA_COMMUNITY_POST_ID, communityPostId)
}
startActivity(nextIntent)
return true
}
@@ -411,7 +416,15 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
putQuery("content_id")
putQuery("deep_link_value")
putQuery("deep_link_sub5")
putQuery("postId")
putQuery(Constants.EXTRA_COMMUNITY_CREATOR_ID)
putQuery(Constants.EXTRA_COMMUNITY_POST_ID)
extras.getString("postId")?.takeIf { it.isNotBlank() }?.let {
if (!extras.containsKey(Constants.EXTRA_COMMUNITY_POST_ID)) {
extras.putString(Constants.EXTRA_COMMUNITY_POST_ID, it)
}
}
applyPathDeepLink(data = data) { key, value ->
if (!value.isNullOrBlank() && !extras.containsKey(key)) {
@@ -419,6 +432,39 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
}
}
val deepLinkValue = extras.getString("deep_link_value")
val deepLinkValueId = extras.getString("deep_link_sub5")
if (!deepLinkValue.isNullOrBlank() && !deepLinkValueId.isNullOrBlank()) {
when (deepLinkValue.lowercase(Locale.ROOT)) {
"live" -> if (!extras.containsKey("room_id")) {
extras.putString("room_id", deepLinkValueId)
}
"channel" -> if (!extras.containsKey("channel_id")) {
extras.putString("channel_id", deepLinkValueId)
}
"content" -> if (!extras.containsKey("content_id")) {
extras.putString("content_id", deepLinkValueId)
}
"audition" -> if (!extras.containsKey("audition_id")) {
extras.putString("audition_id", deepLinkValueId)
}
"community" -> if (!extras.containsKey(Constants.EXTRA_COMMUNITY_CREATOR_ID)) {
extras.putString(Constants.EXTRA_COMMUNITY_CREATOR_ID, deepLinkValueId)
}
"message" -> if (!extras.containsKey("message_id")) {
extras.putString("message_id", deepLinkValueId)
}
else -> Unit
}
}
return extras
}