diff --git a/app/src/main/java/com/into/websoso/ui/detailExploreResult/DetailExploreResultActivity.kt b/app/src/main/java/com/into/websoso/ui/detailExploreResult/DetailExploreResultActivity.kt index cf0380035..79293f93b 100644 --- a/app/src/main/java/com/into/websoso/ui/detailExploreResult/DetailExploreResultActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/detailExploreResult/DetailExploreResultActivity.kt @@ -2,11 +2,13 @@ package com.into.websoso.ui.detailExploreResult import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Bundle import androidx.activity.viewModels import androidx.core.view.isVisible import androidx.recyclerview.widget.GridLayoutManager import com.into.websoso.R +import com.into.websoso.R.string.inquire_link import com.into.websoso.core.common.ui.base.BaseActivity import com.into.websoso.core.common.util.InfiniteScrollListener import com.into.websoso.core.common.util.SingleEventHandler @@ -27,7 +29,7 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class DetailExploreResultActivity : BaseActivity(R.layout.activity_detail_explore_result) { private val detailExploreResultAdapter: DetailExploreResultAdapter by lazy { - DetailExploreResultAdapter(::navigateToNovelDetail) + DetailExploreResultAdapter(::navigateToNovelDetail, ::navigateToInquire) } private val detailExploreResultViewModel: DetailExploreResultViewModel by viewModels() private val singleEventHandler: SingleEventHandler by lazy { SingleEventHandler.from() } @@ -161,6 +163,12 @@ class DetailExploreResultActivity : BaseActivity (Unit), + private val onInquireClick: () -> Unit, ) : ListAdapter(diffCallBack) { - - override fun getItemViewType(position: Int): Int { - return when (getItem(position)) { + override fun getItemViewType(position: Int): Int = + when (getItem(position)) { is Header -> HEADER.ordinal is Novels -> NOVELS.ordinal is Loading -> LOADING.ordinal } - } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return when (ItemType.valueOf(viewType)) { - HEADER -> DetailExploreResultHeaderViewHolder.from(parent) + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): RecyclerView.ViewHolder = + when (ItemType.valueOf(viewType)) { + HEADER -> DetailExploreResultHeaderViewHolder.from(parent, onInquireClick) NOVELS -> DetailExploreResultViewHolder.of(parent, onNovelClick) LOADING -> DetailExploreLoadingViewHolder.from(parent) } - } - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + override fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + position: Int, + ) { when (holder) { is DetailExploreResultHeaderViewHolder -> holder.bind((getItem(position) as Header).novelCount) is DetailExploreResultViewHolder -> holder.bind((getItem(position) as Novels).novel) @@ -42,24 +46,20 @@ class DetailExploreResultAdapter( companion object { private val diffCallBack = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame( oldItem: DetailExploreResultItemType, newItem: DetailExploreResultItemType, - ): Boolean { - return when { + ): Boolean = + when { oldItem is Novels && newItem is Novels -> oldItem.novel.id == newItem.novel.id oldItem is Header && newItem is Header -> oldItem.novelCount == newItem.novelCount else -> false } - } override fun areContentsTheSame( oldItem: DetailExploreResultItemType, newItem: DetailExploreResultItemType, - ): Boolean { - return oldItem == newItem - } + ): Boolean = oldItem == newItem } } } diff --git a/app/src/main/java/com/into/websoso/ui/detailExploreResult/adapter/DetailExploreResultHeaderViewHolder.kt b/app/src/main/java/com/into/websoso/ui/detailExploreResult/adapter/DetailExploreResultHeaderViewHolder.kt index 6552a6ee1..2629d67ce 100644 --- a/app/src/main/java/com/into/websoso/ui/detailExploreResult/adapter/DetailExploreResultHeaderViewHolder.kt +++ b/app/src/main/java/com/into/websoso/ui/detailExploreResult/adapter/DetailExploreResultHeaderViewHolder.kt @@ -6,8 +6,15 @@ import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.into.websoso.databinding.ItemDetailExploreResultHeaderBinding -class DetailExploreResultHeaderViewHolder(private val binding: ItemDetailExploreResultHeaderBinding) : - RecyclerView.ViewHolder(binding.root) { +class DetailExploreResultHeaderViewHolder( + private val binding: ItemDetailExploreResultHeaderBinding, + onInquireClick: () -> Unit, +) : RecyclerView.ViewHolder(binding.root) { + init { + binding.clDetailExploreInquireButton.setOnClickListener { + onInquireClick.invoke() + } + } fun bind(novelCount: Long) { binding.apply { @@ -19,13 +26,17 @@ class DetailExploreResultHeaderViewHolder(private val binding: ItemDetailExplore companion object { private const val NOVEL_COUNT_INVISIBLE_THRESHOLD = 0 - fun from(parent: ViewGroup): DetailExploreResultHeaderViewHolder = + fun from( + parent: ViewGroup, + onInquireClickListener: () -> Unit, + ): DetailExploreResultHeaderViewHolder = DetailExploreResultHeaderViewHolder( ItemDetailExploreResultHeaderBinding.inflate( LayoutInflater.from(parent.context), parent, false, - ) + ), + onInquireClickListener, ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreActivity.kt b/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreActivity.kt index 4339135d6..0afb8994e 100644 --- a/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreActivity.kt +++ b/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreActivity.kt @@ -9,6 +9,7 @@ import android.view.inputmethod.InputMethodManager import androidx.activity.addCallback import androidx.activity.viewModels import com.into.websoso.R +import com.into.websoso.R.string.inquire_link import com.into.websoso.core.common.ui.base.BaseActivity import com.into.websoso.core.common.ui.model.ResultFrom.NormalExploreBack import com.into.websoso.core.common.util.InfiniteScrollListener @@ -29,7 +30,12 @@ class NormalExploreActivity : BaseActivity(R.layou @Inject lateinit var tracker: Tracker - private val normalExploreAdapter: NormalExploreAdapter by lazy { NormalExploreAdapter(::navigateToNovelDetail) } + private val normalExploreAdapter: NormalExploreAdapter by lazy { + NormalExploreAdapter( + ::navigateToNovelDetail, + ::navigateToInquire, + ) + } private val normalExploreViewModel: NormalExploreViewModel by viewModels() private val singleEventHandler: SingleEventHandler by lazy { SingleEventHandler.from() } @@ -114,7 +120,7 @@ class NormalExploreActivity : BaseActivity(R.layou override fun onNovelInquireButtonClick() { tracker.trackEvent("contact_novel_search") - val inquireUrl = getString(R.string.inquire_link) + val inquireUrl = getString(inquire_link) val intent = Intent(Intent.ACTION_VIEW, Uri.parse(inquireUrl)) startActivity(intent) } @@ -137,6 +143,12 @@ class NormalExploreActivity : BaseActivity(R.layou } } + private fun navigateToInquire() { + val inquireUrl = getString(inquire_link) + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(inquireUrl)) + startActivity(intent) + } + private fun setupObserver() { normalExploreViewModel.uiState.observe(this) { uiState -> when { diff --git a/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreClickListener.kt b/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreClickListener.kt index 8c075f0ad..baaee10f0 100644 --- a/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreClickListener.kt +++ b/app/src/main/java/com/into/websoso/ui/normalExplore/NormalExploreClickListener.kt @@ -1,7 +1,6 @@ package com.into.websoso.ui.normalExplore interface NormalExploreClickListener { - fun onBackButtonClick() fun onSearchButtonClick() @@ -9,4 +8,4 @@ interface NormalExploreClickListener { fun onSearchCancelButtonClick() fun onNovelInquireButtonClick() -} \ No newline at end of file +} diff --git a/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreAdapter.kt b/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreAdapter.kt index 1061db518..0caef98d4 100644 --- a/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreAdapter.kt +++ b/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreAdapter.kt @@ -14,25 +14,29 @@ import com.into.websoso.ui.normalExplore.adapter.NormalExploreItemType.Novels class NormalExploreAdapter( private val novelItemClickListener: (novelId: Long) -> Unit, + private val inquireClickListener: () -> Unit, ) : ListAdapter(diffCallBack) { - - override fun getItemViewType(position: Int): Int { - return when (getItem(position)) { + override fun getItemViewType(position: Int): Int = + when (getItem(position)) { is Header -> HEADER.ordinal is Novels -> NOVELS.ordinal is Loading -> LOADING.ordinal } - } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - return when (ItemType.valueOf(viewType)) { - HEADER -> NormalExploreHeaderViewHolder.from(parent) + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): RecyclerView.ViewHolder = + when (ItemType.valueOf(viewType)) { + HEADER -> NormalExploreHeaderViewHolder.from(parent, inquireClickListener) NOVELS -> NormalExploreViewHolder.of(parent, novelItemClickListener) LOADING -> NormalExploreLoadingViewHolder.from(parent) } - } - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + override fun onBindViewHolder( + holder: RecyclerView.ViewHolder, + position: Int, + ) { when (holder) { is NormalExploreHeaderViewHolder -> holder.bind((getItem(position) as Header).novelCount) is NormalExploreViewHolder -> holder.bind((getItem(position) as Novels).novel) @@ -42,24 +46,20 @@ class NormalExploreAdapter( companion object { private val diffCallBack = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame( oldItem: NormalExploreItemType, newItem: NormalExploreItemType, - ): Boolean { - return when { + ): Boolean = + when { oldItem is Novels && newItem is Novels -> oldItem.novel.id == newItem.novel.id oldItem is Header && newItem is Header -> oldItem.novelCount == newItem.novelCount else -> false } - } override fun areContentsTheSame( oldItem: NormalExploreItemType, newItem: NormalExploreItemType, - ): Boolean { - return oldItem == newItem - } + ): Boolean = oldItem == newItem } } } diff --git a/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreHeaderViewHolder.kt b/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreHeaderViewHolder.kt index 7684a42b0..7c18b2715 100644 --- a/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreHeaderViewHolder.kt +++ b/app/src/main/java/com/into/websoso/ui/normalExplore/adapter/NormalExploreHeaderViewHolder.kt @@ -6,8 +6,15 @@ import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.into.websoso.databinding.ItemNormalExploreHeaderBinding -class NormalExploreHeaderViewHolder(private val binding: ItemNormalExploreHeaderBinding) : - RecyclerView.ViewHolder(binding.root) { +class NormalExploreHeaderViewHolder( + private val binding: ItemNormalExploreHeaderBinding, + onInquireClick: () -> Unit, +) : RecyclerView.ViewHolder(binding.root) { + init { + binding.clNormalExploreInquireButton.setOnClickListener { + onInquireClick.invoke() + } + } fun bind(novelCount: Long) { binding.apply { @@ -19,13 +26,17 @@ class NormalExploreHeaderViewHolder(private val binding: ItemNormalExploreHeader companion object { private const val NOVEL_COUNT_INVISIBLE_THRESHOLD = 0 - fun from(parent: ViewGroup): NormalExploreHeaderViewHolder = + fun from( + parent: ViewGroup, + onInquireClickListener: () -> Unit, + ): NormalExploreHeaderViewHolder = NormalExploreHeaderViewHolder( ItemNormalExploreHeaderBinding.inflate( LayoutInflater.from(parent.context), parent, false, - ) + ), + onInquireClickListener, ) } -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/item_detail_explore_result_header.xml b/app/src/main/res/layout/item_detail_explore_result_header.xml index 02aff50e9..c02a29931 100644 --- a/app/src/main/res/layout/item_detail_explore_result_header.xml +++ b/app/src/main/res/layout/item_detail_explore_result_header.xml @@ -1,32 +1,72 @@ - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_normal_explore_header.xml b/app/src/main/res/layout/item_normal_explore_header.xml index 5ead3b64a..6dc09bab1 100644 --- a/app/src/main/res/layout/item_normal_explore_header.xml +++ b/app/src/main/res/layout/item_normal_explore_header.xml @@ -1,33 +1,72 @@ - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fd59ab7f..3c563b418 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,6 +18,7 @@ %.1f (%d) 해당 검색어를 가진 작품은\n아직 등록되지 않았어요... 작품 추가 문의하기 + 찾는 작품이 없다면? 탐색하기 @@ -56,6 +57,7 @@ \u00A0적용 작품 해당하는 작품이 없어요\n검색의 범위를 더 넓혀보세요 + 찾는 작품이 없다면? 나도 한마디