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

Fix/banners #1816

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions feature-banners-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ android {

buildConfigField "String", "ASSETS_BANNERS_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/assets/banners_dev.json\""
buildConfigField "String", "DAPPS_BANNERS_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/dapps/banners_dev.json\""
buildConfigField "String", "ASSETS_BANNERS_LOCALISATION_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/assets/localized_dev\""
buildConfigField "String", "DAPPS_BANNERS_LOCALISATION_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/dapps/localized_dev\""
}

buildTypes {
Expand All @@ -26,6 +28,8 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField "String", "ASSETS_BANNERS_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/assets/banners.json\""
buildConfigField "String", "DAPPS_BANNERS_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/dapps/banners.json\""
buildConfigField "String", "ASSETS_BANNERS_LOCALISATION_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/assets/localized\""
buildConfigField "String", "DAPPS_BANNERS_LOCALISATION_URL", "\"https://raw.githubusercontent.com/novasamatech/nova-utils/master/banners/content/dapps/localized\""
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,17 @@ package io.novafoundation.nova.feature_banners_api.presentation

import android.view.View
import android.view.ViewGroup
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import io.novafoundation.nova.common.list.SingleItemAdapter
import io.novafoundation.nova.common.utils.inflateChild
import io.novafoundation.nova.feature_banners_api.R
import io.novafoundation.nova.feature_banners_api.presentation.view.BannerPagerView
import kotlinx.android.synthetic.main.item_promotion_banner.view.bannerPager
import kotlinx.android.synthetic.main.item_promotion_banner.view.bannerShimmering

class PromotionBannerAdapter(
private val closable: Boolean
) : SingleItemAdapter<BannerHolder>(isShownByDefault = true) {

private var showShimmering = true
private var banners: List<BannerPageModel> = listOf()
private var bannerCallback: BannerPagerView.Callback? = null

Expand All @@ -25,12 +21,7 @@ class PromotionBannerAdapter(
}

override fun onBindViewHolder(holder: BannerHolder, position: Int) {
holder.bind(showShimmering, banners, bannerCallback)
}

fun showShimmering(show: Boolean) {
showShimmering = show
notifyChangedIfShown()
holder.bind(banners, bannerCallback)
}

fun setBanners(banners: List<BannerPageModel>) {
Expand All @@ -50,19 +41,12 @@ class BannerHolder(view: View, closable: Boolean) : RecyclerView.ViewHolder(view
itemView.bannerPager.setClosable(closable)
}

fun bind(showShimmering: Boolean, banners: List<BannerPageModel>, bannerCallback: BannerPagerView.Callback?) = with(itemView) {
fun bind(banners: List<BannerPageModel>, bannerCallback: BannerPagerView.Callback?) = with(itemView) {
bannerPager.setCallback(bannerCallback)
showShimmering(showShimmering)
showBanners(banners)
}

fun showShimmering(show: Boolean) = with(itemView) {
bannerPager.isVisible = !show
bannerShimmering.isVisible = show
}

fun showBanners(banners: List<BannerPageModel>) = with(itemView) {
bannerPager.isGone = banners.isEmpty()
bannerPager.setBanners(banners)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package io.novafoundation.nova.feature_banners_api.presentation
import io.novafoundation.nova.common.base.BaseFragment
import io.novafoundation.nova.common.base.BaseViewModel
import io.novafoundation.nova.common.domain.ExtendedLoadingState
import io.novafoundation.nova.common.domain.dataOrNull
import io.novafoundation.nova.feature_banners_api.presentation.view.BannerPagerView

context(BaseFragment<T>)
Expand All @@ -18,18 +19,7 @@ fun <T : BaseViewModel> PromotionBannersMixin.bindWithAdapter(adapter: Promotion
})

bannersFlow.observe {
when (it) {
is ExtendedLoadingState.Loaded -> {
adapter.show(it.data.isNotEmpty())
adapter.showShimmering(false)
adapter.setBanners(it.data)
}

is ExtendedLoadingState.Loading -> {
adapter.showShimmering(true)
}

else -> {}
}
adapter.show(it is ExtendedLoadingState.Loaded && it.data.isNotEmpty())
adapter.setBanners(it.dataOrNull.orEmpty())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import io.novafoundation.nova.feature_banners_api.domain.PromotionBanner
import kotlinx.coroutines.flow.Flow

interface BannersSourceFactory {
fun create(url: String): BannersSource
fun create(bannersUrl: String, localisationUrl: String): BannersSource
}

interface BannersSource {
fun observeBanners(): Flow<List<PromotionBanner>>
}

fun BannersSourceFactory.dappsSource() = create(BuildConfig.DAPPS_BANNERS_URL)
fun BannersSourceFactory.dappsSource() = create(BuildConfig.DAPPS_BANNERS_URL, BuildConfig.DAPPS_BANNERS_LOCALISATION_URL)

fun BannersSourceFactory.assetsSource() = create(BuildConfig.ASSETS_BANNERS_URL)
fun BannersSourceFactory.assetsSource() = create(BuildConfig.ASSETS_BANNERS_URL, BuildConfig.ASSETS_BANNERS_LOCALISATION_URL)
28 changes: 0 additions & 28 deletions feature-banners-api/src/main/res/layout/item_promotion_banner.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,4 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<LinearLayout
android:id="@+id/bannerShimmering"
android:layout_width="match_parent"
android:layout_height="110dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:background="@drawable/bg_block_12"
android:orientation="vertical"
android:padding="16dp">

<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="168dp"
android:layout_height="14dp"
android:background="@drawable/bg_shimmering" />

<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="125dp"
android:layout_height="8dp"
android:layout_marginTop="16dp"
android:background="@drawable/bg_shimmering" />

<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="89dp"
android:layout_height="8dp"
android:layout_marginTop="8dp"
android:background="@drawable/bg_shimmering" />
</LinearLayout>

</FrameLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ interface BannersApi {

companion object {
fun getLocalisationLink(url: String, language: Language): String {
val baseBannersUrl = url.substringBeforeLast("/")
return "$baseBannersUrl/localized/${language.iso639Code}.json"
return "$url/${language.iso639Code}.json"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

interface BannersRepository {
suspend fun getBanners(url: String): List<PromotionBanner>
suspend fun getBanners(url: String, localisationUrl: String): List<PromotionBanner>

fun closeBanner(id: String)

Expand All @@ -27,10 +27,10 @@ class RealBannersRepository(
private const val PREFS_CLOSED_BANNERS = "closed_banners"
}

override suspend fun getBanners(url: String): List<PromotionBanner> {
override suspend fun getBanners(url: String, localisationUrl: String): List<PromotionBanner> {
val language = preferences.getCurrentLanguage()!!
val bannersDeferred = scopeAsync { bannersApi.getBanners(url) }
val localisationDeferred = scopeAsync { getLocalisation(url, language) }
val localisationDeferred = scopeAsync { getLocalisation(localisationUrl, language) }

val banners = bannersDeferred.await()
val localisation = localisationDeferred.await()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.map

interface PromotionBannersInteractor {

suspend fun observeBanners(url: String): Flow<List<PromotionBanner>>
suspend fun observeBanners(url: String, localisationUrl: String): Flow<List<PromotionBanner>>

fun closeBanner(id: String)
}
Expand All @@ -16,8 +16,8 @@ class RealPromotionBannersInteractor(
private val bannersRepository: BannersRepository,
) : PromotionBannersInteractor {

override suspend fun observeBanners(url: String): Flow<List<PromotionBanner>> {
val banners = bannersRepository.getBanners(url)
override suspend fun observeBanners(url: String, localisationUrl: String): Flow<List<PromotionBanner>> {
val banners = bannersRepository.getBanners(url, localisationUrl)
return bannersRepository.observeClosedBannerIds()
.map { closedIds ->
banners.filter { it.id !in closedIds }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import io.novafoundation.nova.feature_banners_impl.domain.PromotionBannersIntera
import kotlinx.coroutines.flow.Flow

class RealBannersSource(
private val url: String,
private val bannersUrl: String,
private val localisationUrl: String,
private val bannersInteractor: PromotionBannersInteractor
) : BannersSource {

override fun observeBanners(): Flow<List<PromotionBanner>> {
return flowOfAll { bannersInteractor.observeBanners(url) }
return flowOfAll { bannersInteractor.observeBanners(bannersUrl, localisationUrl) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class RealBannersSourceFactory(
private val bannersInteractor: PromotionBannersInteractor
) : BannersSourceFactory {

override fun create(url: String): BannersSource {
return RealBannersSource(url, bannersInteractor)
override fun create(bannersUrl: String, localisationUrl: String): BannersSource {
return RealBannersSource(bannersUrl, localisationUrl, bannersInteractor)
}
}
Loading