From 3c66ea986fecdddbaf417525c875cff3658185c4 Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 30 Jun 2026 16:12:16 +0900 Subject: [PATCH] =?UTF-8?q?fix(main):=20=EC=BD=98=ED=85=90=EC=B8=A0?= =?UTF-8?q?=EC=99=80=20=EB=8C=80=ED=99=94=20title=20bar=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=EC=9D=84=20=EC=97=B0=EA=B2=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/v2/main/chat/ChatMainFragment.kt | 36 +++++++++++++------ .../v2/main/content/ContentMainFragment.kt | 22 ++++++++++++ .../chat/ChatMainTitleBarActionSourceTest.kt | 27 ++++++++++++++ .../ContentMainTitleBarActionSourceTest.kt | 29 +++++++++++++++ 4 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt create mode 100644 app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt index 077b9342..915cb66a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.v2.main.chat +import android.content.Intent import android.os.Bundle import android.view.View import android.widget.ImageView @@ -12,6 +13,9 @@ import kr.co.vividnext.sodalive.base.BaseFragment import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomActivity import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.databinding.FragmentV2MainChatBinding +import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity +import kr.co.vividnext.sodalive.search.SearchActivity +import kr.co.vividnext.sodalive.v2.main.ensureMainV2NavigationAllowed import kr.co.vividnext.sodalive.v2.main.chat.dm.DmChatRoomActivity import kr.co.vividnext.sodalive.v2.main.chat.model.ChatRoomFilter import kr.co.vividnext.sodalive.v2.main.chat.model.ChatRoomListUiItem @@ -63,17 +67,29 @@ class ChatMainFragment : BaseFragment( private fun setupTitleBar() { binding.viewChatTitleBar.tvTitleBarTitle.setText(R.string.tab_chat) binding.viewChatTitleBar.ivTitleBarMenu.setImageResource(R.drawable.ic_bar_cash) - binding.viewChatTitleBar.llTitleBarActions.addView( - ImageView(requireContext()).apply { - setImageResource(R.drawable.ic_bar_search) - layoutParams = LinearLayout.LayoutParams( - LinearLayout.LayoutParams.WRAP_CONTENT, - LinearLayout.LayoutParams.WRAP_CONTENT - ).apply { - marginStart = resources.getDimensionPixelSize(R.dimen.spacing_14) - } + binding.viewChatTitleBar.ivTitleBarMenu.setOnClickListener { + openWithLoginGuard(CanChargeActivity::class.java) + } + + val searchAction = ImageView(requireContext()).apply { + setImageResource(R.drawable.ic_bar_search) + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + marginStart = resources.getDimensionPixelSize(R.dimen.spacing_14) } - ) + } + searchAction.setOnClickListener { + openWithLoginGuard(SearchActivity::class.java) + } + binding.viewChatTitleBar.llTitleBarActions.addView(searchAction) + } + + private fun openWithLoginGuard(activityClass: Class<*>) { + ensureMainV2NavigationAllowed { + startActivity(Intent(requireContext(), activityClass)) + } } private fun setupFilterTabs(initialFilter: ChatRoomFilter) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt index 4635152e..6e95b54e 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kr.co.vividnext.sodalive.R +import kr.co.vividnext.sodalive.audio_content.box.AudioContentBoxActivity import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity import kr.co.vividnext.sodalive.base.BaseFragment @@ -23,6 +24,8 @@ import kr.co.vividnext.sodalive.databinding.FragmentV2MainContentBinding import kr.co.vividnext.sodalive.databinding.ViewSectionTitleBinding import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.home.SeriesPublishedDaysOfWeek +import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity +import kr.co.vividnext.sodalive.search.SearchActivity import kr.co.vividnext.sodalive.v2.common.data.ContentSort import kr.co.vividnext.sodalive.v2.creator.channel.model.toLabelResId import kr.co.vividnext.sodalive.v2.creator.channel.ui.CreatorChannelSortPopup @@ -113,6 +116,7 @@ class ContentMainFragment : BaseFragment( setUpAllTypeTabs() setUpAllDayFilter() setUpAllSortButton() + setupTitleBarActions() showContentTab(CONTENT_TAB_RECOMMENDATION) setUpSectionTitles() setUpAdapters() @@ -129,6 +133,24 @@ class ContentMainFragment : BaseFragment( super.onDestroyView() } + private fun setupTitleBarActions() { + binding.viewContentTitleBar.ivTitleBarCash.setOnClickListener { + openWithLoginGuard(CanChargeActivity::class.java) + } + binding.viewContentTitleBar.ivTitleBarSearch.setOnClickListener { + openWithLoginGuard(SearchActivity::class.java) + } + binding.viewContentTitleBar.ivTitleBarStorage.setOnClickListener { + openWithLoginGuard(AudioContentBoxActivity::class.java) + } + } + + private fun openWithLoginGuard(activityClass: Class<*>) { + ensureMainV2NavigationAllowed { + startActivity(Intent(requireContext(), activityClass)) + } + } + fun selectAllTab(type: MainContentAllType, sort: ContentSort = ContentSort.LATEST) { pendingAllTabSelection = ContentAllTabSelection(type, sort) if (view != null) { diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt new file mode 100644 index 00000000..18f954b5 --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt @@ -0,0 +1,27 @@ +package kr.co.vividnext.sodalive.v2.main.chat + +import org.junit.Assert.assertTrue +import org.junit.Test +import java.io.File + +class ChatMainTitleBarActionSourceTest { + + @Test + fun `대화 title bar 우측 아이콘은 기존 목적지로 이동한다`() { + val source = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt" + ).readText() + + assertTrue(source.contains("ivTitleBarMenu.setOnClickListener")) + assertTrue(source.contains("searchAction.setOnClickListener")) + assertTrue(source.contains("ensureMainV2NavigationAllowed")) + assertTrue(source.contains("CanChargeActivity::class.java")) + assertTrue(source.contains("SearchActivity::class.java")) + } + + private fun projectFile(relativePath: String): File { + val candidates = listOf(File(relativePath), File("../$relativePath")) + return candidates.firstOrNull { it.exists() } + ?: error("Project file not found: $relativePath") + } +} diff --git a/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt new file mode 100644 index 00000000..aa97a3c0 --- /dev/null +++ b/app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt @@ -0,0 +1,29 @@ +package kr.co.vividnext.sodalive.v2.main.content + +import org.junit.Assert.assertTrue +import org.junit.Test +import java.io.File + +class ContentMainTitleBarActionSourceTest { + + @Test + fun `콘텐츠 title bar 우측 아이콘은 기존 목적지로 이동한다`() { + val source = projectFile( + "app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt" + ).readText() + + assertTrue(source.contains("viewContentTitleBar.ivTitleBarCash.setOnClickListener")) + assertTrue(source.contains("viewContentTitleBar.ivTitleBarSearch.setOnClickListener")) + assertTrue(source.contains("viewContentTitleBar.ivTitleBarStorage.setOnClickListener")) + assertTrue(source.contains("ensureMainV2NavigationAllowed")) + assertTrue(source.contains("CanChargeActivity::class.java")) + assertTrue(source.contains("SearchActivity::class.java")) + assertTrue(source.contains("AudioContentBoxActivity::class.java")) + } + + private fun projectFile(relativePath: String): File { + val candidates = listOf(File(relativePath), File("../$relativePath")) + return candidates.firstOrNull { it.exists() } + ?: error("Project file not found: $relativePath") + } +}