diff --git a/app/build.gradle b/app/build.gradle index 1ce4f64bf..49662afdf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -172,7 +172,7 @@ dependencies { implementation "com.github.topjohnwu.libsu:core:${versions.libsu}" //Love <3 - api("com.gitlab.AuroraOSS:gplayapi:82843a04ce") + api("com.gitlab.AuroraOSS:gplayapi:9d327499ae") } Properties props = new Properties() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c68aec025..3541cc4b3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -110,6 +110,21 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/aurora/store/util/extensions/Glide.kt b/app/src/main/java/com/aurora/store/util/extensions/Glide.kt index 048e8c1d1..ab7761a3a 100644 --- a/app/src/main/java/com/aurora/store/util/extensions/Glide.kt +++ b/app/src/main/java/com/aurora/store/util/extensions/Glide.kt @@ -27,6 +27,7 @@ import androidx.annotation.DrawableRes import androidx.annotation.RawRes import com.bumptech.glide.Glide import com.bumptech.glide.TransitionOptions +import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.ViewTarget diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/BadgeView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/BadgeView.kt index f6cb92f4b..fc682c00a 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/BadgeView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/BadgeView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.util.AttributeSet @@ -30,7 +30,7 @@ import com.aurora.gplayapi.data.models.details.Badge import com.aurora.store.R import com.aurora.store.databinding.ViewBadgeBinding import com.aurora.store.util.extensions.load - +import com.aurora.store.view.epoxy.views.BaseView @ModelView( autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT, diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ExodusView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ExodusView.kt index d876675eb..edd3d069a 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ExodusView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ExodusView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.util.AttributeSet @@ -29,7 +29,7 @@ import com.airbnb.epoxy.OnViewRecycled import com.aurora.store.R import com.aurora.store.data.model.ExodusTracker import com.aurora.store.databinding.ViewExodusBinding - +import com.aurora.store.view.epoxy.views.BaseView @ModelView( autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT, diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/FileView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/FileView.kt index 2af3c2edf..18be0e50c 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/FileView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/FileView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.util.AttributeSet @@ -28,6 +28,7 @@ import com.aurora.gplayapi.data.models.File import com.aurora.store.R import com.aurora.store.databinding.ViewFileBinding import com.aurora.store.util.CommonUtil +import com.aurora.store.view.epoxy.views.BaseView @ModelView( autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT, diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/LargeScreenshotView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/LargeScreenshotView.kt index 096404ea3..9aa5fc37b 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/LargeScreenshotView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/LargeScreenshotView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.content.res.Resources @@ -34,13 +34,13 @@ import com.aurora.store.databinding.ViewScreenshotLargeBinding import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.px import com.aurora.store.util.extensions.runOnUiThread +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target - @ModelView( autoLayout = ModelView.Size.MATCH_WIDTH_MATCH_HEIGHT, baseModelClass = BaseView::class diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/MoreBadgeView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/MoreBadgeView.kt index aaae0a9d5..af6a3c15a 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/MoreBadgeView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/MoreBadgeView.kt @@ -33,7 +33,6 @@ import com.aurora.store.databinding.ViewMoreBadgeBinding import com.aurora.store.util.extensions.load import com.aurora.store.view.epoxy.views.BaseView - @ModelView( autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT, baseModelClass = BaseView::class diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ReviewView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ReviewView.kt index 5dd2cdeb0..bdac646c6 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/details/ReviewView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/details/ReviewView.kt @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.util.AttributeSet @@ -32,6 +32,7 @@ import com.aurora.store.databinding.ViewReviewBinding import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.load import com.aurora.store.util.extensions.toDate +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions 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 9ea8fa281..7b3f95b97 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 @@ -17,7 +17,7 @@ * */ -package com.aurora.store.view.epoxy.views +package com.aurora.store.view.epoxy.views.details import android.content.Context import android.util.AttributeSet @@ -32,10 +32,10 @@ import com.aurora.store.databinding.ViewScreenshotBinding import com.aurora.store.util.extensions.clear import com.aurora.store.util.extensions.load import com.aurora.store.util.extensions.px +import com.aurora.store.view.epoxy.views.BaseView import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions - @ModelView( autoLayout = ModelView.Size.WRAP_WIDTH_WRAP_HEIGHT, baseModelClass = BaseView::class @@ -79,7 +79,7 @@ class ScreenshotView : RelativeLayout { @ModelProp fun artwork(artwork: Artwork) { normalizeSize(artwork) - B.img.load(artwork.url, DrawableTransitionOptions.withCrossFade()) { + B.img.load("${artwork.url}=rw-h480-v1-e15", 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/BaseDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt index 2b47640cb..2e06ef2ce 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt @@ -48,6 +48,9 @@ import com.aurora.store.util.extensions.show import com.aurora.store.util.extensions.toast import com.aurora.store.view.custom.RatingView import com.aurora.store.view.epoxy.views.* +import com.aurora.store.view.epoxy.views.details.ReviewViewModel_ +import com.aurora.store.view.epoxy.views.details.ScreenshotView +import com.aurora.store.view.epoxy.views.details.ScreenshotViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import nl.komponents.kovenant.task import nl.komponents.kovenant.ui.failUi diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt index bc824178c..bf3a6be75 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt @@ -29,8 +29,8 @@ import com.aurora.store.data.providers.ExodusDataProvider import com.aurora.store.databinding.ActivityGenericRecyclerBinding import com.aurora.store.util.extensions.browse import com.aurora.store.util.extensions.close -import com.aurora.store.view.epoxy.views.ExodusViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ +import com.aurora.store.view.epoxy.views.details.ExodusViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import org.json.JSONObject diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreActivity.kt index 7a01692af..9f37a3622 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreActivity.kt @@ -29,10 +29,10 @@ import com.aurora.store.R import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.ActivityDetailsMoreBinding import com.aurora.store.util.extensions.close -import com.aurora.store.view.epoxy.views.FileViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppAltViewModel_ import com.aurora.store.view.epoxy.views.details.AppDependentViewModel_ +import com.aurora.store.view.epoxy.views.details.FileViewModel_ import com.aurora.store.view.epoxy.views.details.MoreBadgeViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import nl.komponents.kovenant.task diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt index 8fec8e22e..c15e40a64 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt @@ -29,7 +29,7 @@ import com.aurora.store.data.ViewState import com.aurora.store.databinding.ActivityDetailsReviewBinding import com.aurora.store.util.extensions.close import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener -import com.aurora.store.view.epoxy.views.ReviewViewModel_ +import com.aurora.store.view.epoxy.views.details.ReviewViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.viewmodel.review.ReviewViewModel diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt new file mode 100644 index 000000000..e86a66454 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileActivity.kt @@ -0,0 +1,174 @@ +/* + * Aurora Store + * Copyright (C) 2021, Rahul Kumar Patel + * + * Aurora Store is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Aurora Store is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Aurora Store. If not, see . + * + */ + +package com.aurora.store.view.ui.details + +import android.content.Intent +import android.os.Bundle +import com.airbnb.epoxy.EpoxyModel +import com.aurora.gplayapi.data.models.AuthData +import com.aurora.gplayapi.data.models.details.DevStream +import com.aurora.gplayapi.helpers.AppDetailsHelper +import com.aurora.store.R +import com.aurora.store.data.providers.AuthProvider +import com.aurora.store.databinding.ActivityDevProfileBinding +import com.aurora.store.util.extensions.close +import com.aurora.store.util.extensions.load +import com.aurora.store.util.extensions.toast +import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_ +import com.aurora.store.view.epoxy.views.* +import com.aurora.store.view.epoxy.views.details.ScreenshotViewModel_ +import com.aurora.store.view.ui.commons.BaseActivity +import nl.komponents.kovenant.task +import nl.komponents.kovenant.ui.failUi +import nl.komponents.kovenant.ui.successUi + +class DevProfileActivity : BaseActivity() { + + private lateinit var B: ActivityDevProfileBinding + private lateinit var authData: AuthData + + override fun onConnected() { + hideNetworkConnectivitySheet() + } + + override fun onDisconnected() { + showNetworkConnectivitySheet() + } + + override fun onReconnected() { + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + B = ActivityDevProfileBinding.inflate(layoutInflater) + authData = AuthProvider.with(this).getAuthData() + + setContentView(B.root) + + attachToolbar() + + onNewIntent(intent) + } + + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + if (intent != null) { + if (intent.scheme != null && (intent.scheme == "http" || intent.scheme == "https")) { + val devId = intent.data!!.getQueryParameter("id") + if (devId.isNullOrEmpty()) { + close() + } else { + fetchDevProfile(devId) + } + } + } else { + close() + } + } + + private fun attachToolbar() { + B.layoutToolbarAction.toolbar.setOnClickListener { + close() + } + B.layoutToolbarAction.txtTitle.text = getString(R.string.details_dev_profile) + } + + private fun updateInfo(devStream: DevStream) { + B.layoutToolbarAction.txtTitle.text = devStream.title + B.txtDevName.text = devStream.title + B.txtDevDescription.text = devStream.description + B.imgIcon.load(devStream.imgUrl) + } + + private fun updateController(devStream: DevStream) { + B.recycler + .withModels { + setFilterDuplicates(true) + + for (entry in devStream.appListMap) { + val clusterViewModels = mutableListOf>() + val screenshotsViewModels = mutableListOf>() + + if (entry.value.size == 1) { + val app = entry.value[0] + for (artwork in app.screenshots) { + screenshotsViewModels.add( + ScreenshotViewModel_() + .id(artwork.url) + .artwork(artwork) + ) + } + + clusterViewModels.add( + AppListViewModel_() + .id(app.id) + .app(app) + .click { _ -> + openDetailsActivity(app) + } + ) + } else { + for (app in entry.value) { + clusterViewModels.add( + AppViewModel_() + .id(app.id) + .app(app) + .click { _ -> + openDetailsActivity(app) + } + ) + } + } + + add( + HeaderViewModel_() + .id(entry.key) + .title(entry.key) + ) + + if (screenshotsViewModels.isNotEmpty()) { + add( + CarouselHorizontalModel_() + .id("${entry.key}_screenshots") + .models(screenshotsViewModels) + ) + } + + add( + CarouselHorizontalModel_() + .id("${entry.key}_cluster") + .models(clusterViewModels) + ) + } + } + } + + private fun fetchDevProfile(devId: String) { + task { + AppDetailsHelper(authData).getDeveloperStream(devId) + } successUi { + updateInfo(it) + updateController(it) + } failUi { + toast("Dev profile unavailable") + close() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/ui/details/ScreenshotActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/ScreenshotActivity.kt index 8d925e598..2e005aedf 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/ScreenshotActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/ScreenshotActivity.kt @@ -26,13 +26,11 @@ import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.RecyclerView import com.aurora.Constants import com.aurora.gplayapi.data.models.Artwork -import com.aurora.store.R import com.aurora.store.databinding.ActivityScreenshotBinding import com.aurora.store.util.extensions.close -import com.aurora.store.view.epoxy.views.LargeScreenshotViewModel_ +import com.aurora.store.view.epoxy.views.details.LargeScreenshotViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import com.google.gson.reflect.TypeToken -import com.tonyodev.fetch2.Status class ScreenshotActivity : BaseActivity() { diff --git a/app/src/main/res/layout/activity_dev_profile.xml b/app/src/main/res/layout/activity_dev_profile.xml new file mode 100644 index 000000000..53be051b7 --- /dev/null +++ b/app/src/main/res/layout/activity_dev_profile.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + \ 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 a4307fe6c..fa7114027 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -133,6 +133,7 @@ "Address" "Developer contact" "Email" + "Developer profile" "Developer\'s reply" "Website" "Files"