feat(home): 추천 배너 이동을 연결한다
This commit is contained in:
@@ -33,6 +33,8 @@ import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyAct
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentlyActiveCreatorUiModel
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationRecentDebutCreatorSection
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.HomeRecommendationUiState
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationBannerIntent
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.toHomeRecommendationBannerRoute
|
||||
import kr.co.vividnext.sodalive.v2.main.home.model.visibleHomeGenreCreatorGroups
|
||||
import kr.co.vividnext.sodalive.v2.main.home.ui.HomeAiCharacterAdapter
|
||||
import kr.co.vividnext.sodalive.v2.main.home.ui.HomeBannerBinder
|
||||
@@ -266,7 +268,10 @@ class HomeMainFragment : BaseFragment<FragmentV2MainHomeBinding>(
|
||||
|
||||
private fun onLiveClick(item: HomeRecommendationLiveUiModel) = Unit
|
||||
|
||||
private fun onBannerClick(item: HomeRecommendationBannerUiModel) = Unit
|
||||
private fun onBannerClick(item: HomeRecommendationBannerUiModel) {
|
||||
val route = item.toHomeRecommendationBannerRoute() ?: return
|
||||
startActivity(route.toHomeRecommendationBannerIntent(requireContext()))
|
||||
}
|
||||
|
||||
private fun openCreatorProfile(creatorId: Long) {
|
||||
startActivity(
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
package kr.co.vividnext.sodalive.v2.main.home.model
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import kr.co.vividnext.sodalive.BuildConfig
|
||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
|
||||
import kr.co.vividnext.sodalive.settings.event.EventDetailActivity
|
||||
import kr.co.vividnext.sodalive.settings.event.EventItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.AudioContentTag
|
||||
import kr.co.vividnext.sodalive.v2.widget.characterchatthumbnail.CharacterChatThumbnailItem
|
||||
import kr.co.vividnext.sodalive.v2.widget.feed.FeedItem
|
||||
import java.util.Locale
|
||||
|
||||
data class HomeRecommendationLiveSection(
|
||||
val items: List<HomeRecommendationLiveUiModel>
|
||||
@@ -65,6 +74,60 @@ data class HomeRecommendationBannerUiModel(
|
||||
val link: String?
|
||||
)
|
||||
|
||||
sealed interface HomeRecommendationBannerRoute {
|
||||
data class Event(val eventItem: EventItem) : HomeRecommendationBannerRoute
|
||||
|
||||
data class Creator(val creatorId: Long) : HomeRecommendationBannerRoute
|
||||
|
||||
data class Series(val seriesId: Long) : HomeRecommendationBannerRoute
|
||||
|
||||
data class Link(val url: String, val isWebUrl: Boolean) : HomeRecommendationBannerRoute
|
||||
}
|
||||
|
||||
fun HomeRecommendationBannerUiModel.toHomeRecommendationBannerRoute(): HomeRecommendationBannerRoute? {
|
||||
eventItem?.let { return HomeRecommendationBannerRoute.Event(it) }
|
||||
creatorId?.takeIf { it > 0 }?.let { return HomeRecommendationBannerRoute.Creator(it) }
|
||||
seriesId?.takeIf { it > 0 }?.let { return HomeRecommendationBannerRoute.Series(it) }
|
||||
|
||||
val routeLink = link?.trim()?.takeIf { it.isNotBlank() } ?: return null
|
||||
val uri = runCatching { Uri.parse(routeLink) }.getOrNull() ?: return null
|
||||
val scheme = uri.scheme?.lowercase(Locale.ROOT) ?: return null
|
||||
val isWebUrl = scheme == "http" || scheme == "https"
|
||||
val isInternalDeepLink = scheme == BuildConfig.APPSCHEME ||
|
||||
(isWebUrl && uri.host.equals(homeRecommendationAppLinkHost(), ignoreCase = true))
|
||||
if (!isWebUrl && !isInternalDeepLink) return null
|
||||
return HomeRecommendationBannerRoute.Link(
|
||||
url = routeLink,
|
||||
isWebUrl = isWebUrl && !isInternalDeepLink
|
||||
)
|
||||
}
|
||||
|
||||
fun HomeRecommendationBannerRoute.toHomeRecommendationBannerIntent(context: Context): Intent {
|
||||
return when (this) {
|
||||
is HomeRecommendationBannerRoute.Event -> {
|
||||
Intent(context, EventDetailActivity::class.java).apply {
|
||||
putExtra(Constants.EXTRA_EVENT, eventItem)
|
||||
}
|
||||
}
|
||||
|
||||
is HomeRecommendationBannerRoute.Creator -> {
|
||||
Intent(context, UserProfileActivity::class.java).apply {
|
||||
putExtra(Constants.EXTRA_USER_ID, creatorId)
|
||||
}
|
||||
}
|
||||
|
||||
is HomeRecommendationBannerRoute.Series -> {
|
||||
Intent(context, SeriesDetailActivity::class.java).apply {
|
||||
putExtra(Constants.EXTRA_SERIES_ID, seriesId)
|
||||
}
|
||||
}
|
||||
|
||||
is HomeRecommendationBannerRoute.Link -> Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||
}
|
||||
}
|
||||
|
||||
private fun homeRecommendationAppLinkHost(): String = "${BuildConfig.APPSCHEME}.onelink.me"
|
||||
|
||||
data class HomeRecommendationRecentlyActiveCreatorUiModel(
|
||||
val nickname: String,
|
||||
val profileImage: String,
|
||||
|
||||
Reference in New Issue
Block a user