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"