From 00e24e5125f0e71e70b75cd358fcbeaf4199a2fa Mon Sep 17 00:00:00 2001 From: Rahul Kumar Patel Date: Fri, 14 May 2021 02:02:31 +0530 Subject: [PATCH] Add promotional apps section on ForYou page --- .../controller/GenericCarouselController.kt | 2 +- .../epoxy/views/details/MiniScreenshotView.kt | 12 ++-- .../epoxy/views/details/ScreenshotView.kt | 12 ++-- .../view/ui/details/AppDetailsActivity.kt | 56 ++++++++++++------- .../homestream/BaseClusterViewModel.kt | 21 +++++++ 5 files changed, 74 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt b/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt index a3965edae..221816d99 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/controller/GenericCarouselController.kt @@ -44,7 +44,7 @@ open class GenericCarouselController(private val callbacks: Callbacks) : open fun applyFilter(streamBundle: StreamCluster): Boolean { return streamBundle.clusterTitle.isNotBlank() //Filter noisy cluster && streamBundle.clusterAppList.isNotEmpty() //Filter empty clusters - && streamBundle.clusterAppList.count() > 1 //Filter clusters with single apps (mostly promotions) + && streamBundle.clusterAppList.count() >= 1 //Filter clusters with single apps (mostly promotions) } override fun buildModels(streamBundle: StreamBundle?) { diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/MiniScreenshotView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/MiniScreenshotView.kt index 8fedbfd37..3a391385c 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/MiniScreenshotView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/MiniScreenshotView.kt @@ -26,12 +26,12 @@ import com.airbnb.epoxy.CallbackProp import com.airbnb.epoxy.ModelProp import com.airbnb.epoxy.ModelView import com.airbnb.epoxy.OnViewRecycled -import com.aurora.gplayapi.data.models.Artwork -import com.aurora.store.R -import com.aurora.store.databinding.ViewScreenshotMiniBinding import com.aurora.extensions.clear import com.aurora.extensions.load import com.aurora.extensions.px +import com.aurora.gplayapi.data.models.Artwork +import com.aurora.store.R +import com.aurora.store.databinding.ViewScreenshotMiniBinding import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions @@ -79,7 +79,11 @@ class MiniScreenshotView : RelativeLayout { @ModelProp fun artwork(artwork: Artwork) { normalizeSize(artwork) - B.img.load("${artwork.url}=rw-w480-v1-e15", DrawableTransitionOptions.withCrossFade()) { + val imgUrl = if (artwork.url.endsWith(".webp")) + artwork.url + else + "${artwork.url}=rw-w480-v1-e15" + B.img.load(imgUrl, DrawableTransitionOptions.withCrossFade()) { placeholder(R.drawable.bg_rounded) transform(RoundedCorners(8.px.toInt())) } diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ScreenshotView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ScreenshotView.kt index 15471f09b..1b7465f1c 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ScreenshotView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ScreenshotView.kt @@ -26,12 +26,12 @@ import com.airbnb.epoxy.CallbackProp import com.airbnb.epoxy.ModelProp import com.airbnb.epoxy.ModelView import com.airbnb.epoxy.OnViewRecycled -import com.aurora.gplayapi.data.models.Artwork -import com.aurora.store.R -import com.aurora.store.databinding.ViewScreenshotBinding import com.aurora.extensions.clear import com.aurora.extensions.load import com.aurora.extensions.px +import com.aurora.gplayapi.data.models.Artwork +import com.aurora.store.R +import com.aurora.store.databinding.ViewScreenshotBinding import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions @@ -79,7 +79,11 @@ class ScreenshotView : RelativeLayout { @ModelProp fun artwork(artwork: Artwork) { normalizeSize(artwork) - B.img.load("${artwork.url}=rw-w480-v1-e15", DrawableTransitionOptions.withCrossFade()) { + val imgUrl = if (artwork.url.endsWith(".webp")) + artwork.url + else + "${artwork.url}=rw-w480-v1-e15" + B.img.load(imgUrl, DrawableTransitionOptions.withCrossFade()) { placeholder(R.drawable.bg_rounded) transform(RoundedCorners(8.px.toInt())) } diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt index 453531c07..bbb409cbf 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt @@ -144,6 +144,7 @@ class AppDetailsActivity : BaseDetailsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) B = ActivityDetailsBinding.inflate(layoutInflater) + authData = AuthProvider.with(this).getAuthData() setContentView(B.root) onNewIntent(intent) @@ -174,7 +175,9 @@ class AppDetailsActivity : BaseDetailsActivity() { } else { isExternal = true app = App(packageName) - fetchCompleteApp() + if (app.inPlayStore) { + fetchCompleteApp() + } } } else { val rawApp: String? = intent.getStringExtra(Constants.STRING_EXTRA) @@ -183,7 +186,11 @@ class AppDetailsActivity : BaseDetailsActivity() { isInstalled = PackageUtil.isInstalled(this, app.packageName) inflatePartialApp() - fetchCompleteApp() + if (app.inPlayStore) { + fetchCompleteApp() + } else { + inflateExtraDetails(app) + } } else { close() } @@ -317,7 +324,6 @@ class AppDetailsActivity : BaseDetailsActivity() { private fun fetchCompleteApp() { task { - authData = AuthProvider.with(this).getAuthData() return@task AppDetailsHelper(authData) .using(HttpClient.getPreferredClient()) .getAppByPackageName(app.packageName) @@ -379,23 +385,30 @@ class AppDetailsActivity : BaseDetailsActivity() { app?.let { B.viewFlipper.displayedChild = 1 inflateAppDescription(B.layoutDetailDescription, app) - inflateAppRatingAndReviews(B.layoutDetailsReview, app) + inflateAppDevInfo(B.layoutDetailsDev, app) inflateAppPrivacy(B.layoutDetailsPrivacy, app) inflateAppPermission(B.layoutDetailsPermissions, app) - if (!authData.isAnonymous) { - app.testingProgram?.let { - if (it.isAvailable && it.isSubscribed) { - B.layoutDetailsApp.txtLine1.text = it.displayName + if (app.inPlayStore) { + inflateAppRatingAndReviews(B.layoutDetailsReview, app) + if (!authData.isAnonymous) { + app.testingProgram?.let { + if (it.isAvailable && it.isSubscribed) { + B.layoutDetailsApp.txtLine1.text = it.displayName + } } + + inflateBetaSubscription(B.layoutDetailsBeta, app) } - inflateBetaSubscription(B.layoutDetailsBeta, app) - } - - if (Preferences.getBoolean(this, Preferences.PREFERENCE_SIMILAR)) { - inflateAppStream(B.epoxyRecyclerStream, app) + if (Preferences.getBoolean(this, Preferences.PREFERENCE_SIMILAR)) { + inflateAppStream(B.epoxyRecyclerStream, app) + } + } else { + B.layoutDetailsReview.root.hide() + B.layoutDetailsBeta.root.hide() + B.epoxyRecyclerStream.hide() } } } @@ -425,13 +438,16 @@ class AppDetailsActivity : BaseDetailsActivity() { updateActionState(State.PROGRESS) task { - val authData = AuthProvider - .with(this) - .getAuthData() - - PurchaseHelper(authData) - .using(HttpClient.getPreferredClient()) - .purchase(app.packageName, app.versionCode, app.offerType) + if (app.inPlayStore) { + PurchaseHelper(authData) + .using(HttpClient.getPreferredClient()) + .purchase(app.packageName, app.versionCode, app.offerType) + } else { + val metaFile = app.fileList[0] + val fileList: MutableList = mutableListOf() + fileList.add(metaFile) + fileList + } } successUi { files -> if (files.isNotEmpty()) { var hasOBB = false diff --git a/app/src/main/java/com/aurora/store/viewmodel/homestream/BaseClusterViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/homestream/BaseClusterViewModel.kt index 8dc3c6064..908287bc2 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/homestream/BaseClusterViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/homestream/BaseClusterViewModel.kt @@ -45,6 +45,9 @@ abstract class BaseClusterViewModel(application: Application) : BaseAndroidViewM val liveData: MutableLiveData = MutableLiveData() var streamBundle: StreamBundle = StreamBundle() + /* Should certainly do it in a better way :(*/ + var promotionsAdded: Boolean = false + lateinit var type: StreamHelper.Type lateinit var category: StreamHelper.Category @@ -72,6 +75,13 @@ abstract class BaseClusterViewModel(application: Application) : BaseAndroidViewM type ) + //Add promotional cluster + if (!promotionsAdded) { + val promotionalCluster = promotionalCluster() + newBundle.streamClusters[promotionalCluster.id] = promotionalCluster + promotionsAdded = true + } + //Update old bundle streamBundle.apply { streamClusters.putAll(newBundle.streamClusters) @@ -118,4 +128,15 @@ abstract class BaseClusterViewModel(application: Application) : BaseAndroidViewM clusterNextPageUrl = newCluster.clusterNextPageUrl } } + + private fun promotionalCluster(): StreamCluster { + val response = HttpClient.getPreferredClient().get( + "https://promotions.auroraoss.com", + hashMapOf() + ) + return if (response.isSuccessful) + gson.fromJson(String(response.responseBytes), StreamCluster::class.java) + else + StreamCluster() + } }