Add option to enroll in beta programs

This commit is contained in:
Rahul Kumar Patel
2021-02-19 02:15:28 +05:30
parent 87a5bb3994
commit edd91f3658
5 changed files with 165 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import com.aurora.Constants import com.aurora.Constants
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.File import com.aurora.gplayapi.data.models.File
import com.aurora.gplayapi.helpers.AppDetailsHelper import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.helpers.PurchaseHelper import com.aurora.gplayapi.helpers.PurchaseHelper
@@ -63,6 +64,7 @@ class AppDetailsActivity : BaseDetailsActivity() {
private lateinit var B: ActivityDetailsBinding private lateinit var B: ActivityDetailsBinding
private lateinit var bottomSheetBehavior: BottomSheetBehavior<LinearLayout> private lateinit var bottomSheetBehavior: BottomSheetBehavior<LinearLayout>
private lateinit var authData: AuthData
private lateinit var app: App private lateinit var app: App
private lateinit var downloadManager: DownloadManager private lateinit var downloadManager: DownloadManager
private lateinit var fetch: Fetch private lateinit var fetch: Fetch
@@ -226,7 +228,7 @@ class AppDetailsActivity : BaseDetailsActivity() {
private fun fetchCompleteApp() { private fun fetchCompleteApp() {
task { task {
val authData = AuthProvider.with(this).getAuthData() authData = AuthProvider.with(this).getAuthData()
return@task AppDetailsHelper(authData) return@task AppDetailsHelper(authData)
.using(HttpClient.getPreferredClient()) .using(HttpClient.getPreferredClient())
.getAppByPackageName(app.packageName) .getAppByPackageName(app.packageName)
@@ -285,6 +287,16 @@ class AppDetailsActivity : BaseDetailsActivity() {
inflateAppRatingAndReviews(B.layoutDetailsReview, app) inflateAppRatingAndReviews(B.layoutDetailsReview, app)
inflateAppDevInfo(B.layoutDetailsDev, app) inflateAppDevInfo(B.layoutDetailsDev, app)
inflateAppPrivacy(B.layoutDetailsPrivacy, app) inflateAppPrivacy(B.layoutDetailsPrivacy, app)
if (!authData.isAnonymous) {
app.testingProgram?.let {
if (it.isAvailable && it.isSubscribed) {
B.layoutDetailsApp.txtLine1.text = it.displayName
}
}
inflateBetaSubscription(B.layoutDetailsBeta, app)
}
} }
} }

View File

@@ -32,18 +32,19 @@ import androidx.core.text.HtmlCompat
import com.aurora.Constants import com.aurora.Constants
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.helpers.ReviewsHelper import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.model.ExodusReport import com.aurora.store.data.model.ExodusReport
import com.aurora.store.data.model.Report import com.aurora.store.data.model.Report
import com.aurora.store.data.network.HttpClient import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.LayoutDetailsDescriptionBinding import com.aurora.store.databinding.*
import com.aurora.store.databinding.LayoutDetailsDevBinding
import com.aurora.store.databinding.LayoutDetailsPrivacyBinding
import com.aurora.store.databinding.LayoutDetailsReviewBinding
import com.aurora.store.util.CommonUtil import com.aurora.store.util.CommonUtil
import com.aurora.store.util.NavigationUtil import com.aurora.store.util.NavigationUtil
import com.aurora.store.util.extensions.hide
import com.aurora.store.util.extensions.load
import com.aurora.store.util.extensions.show
import com.aurora.store.util.extensions.toast import com.aurora.store.util.extensions.toast
import com.aurora.store.view.custom.RatingView import com.aurora.store.view.custom.RatingView
import com.aurora.store.view.epoxy.views.* import com.aurora.store.view.epoxy.views.*
@@ -232,6 +233,60 @@ abstract class BaseDetailsActivity : BaseActivity() {
} }
} }
fun inflateBetaSubscription(B: LayoutDetailsBetaBinding, app: App) {
app.testingProgram?.let { betaProgram ->
if (betaProgram.isAvailable) {
B.root.show()
updateBetaActions(B, betaProgram.isSubscribed)
if (betaProgram.isSubscribedAndInstalled) {
}
B.imgBeta.load(betaProgram.artwork.url) {
}
B.btnBetaAction.setOnClickListener {
val authData = AuthProvider.with(this).getAuthData()
task {
B.btnBetaAction.text = getString(R.string.action_pending)
B.btnBetaAction.isEnabled = false
AppDetailsHelper(authData).testingProgram(
app.packageName,
!betaProgram.isSubscribed
)
} successUi {
B.btnBetaAction.isEnabled = true
if (it.subscribed) {
updateBetaActions(B, true)
}
if (it.unsubscribed) {
updateBetaActions(B, false)
}
} failUi {
updateBetaActions(B, betaProgram.isSubscribed)
toast("Failed to update beta status")
}
}
} else {
B.root.hide()
}
}
}
private fun updateBetaActions(B: LayoutDetailsBetaBinding, isSubscribed: Boolean) {
if (isSubscribed) {
B.btnBetaAction.text = getString(R.string.action_leave)
B.txtBetaTitle.text = getString(R.string.details_beta_subscribed)
} else {
B.btnBetaAction.text = getString(R.string.action_join)
B.txtBetaTitle.text = getString(R.string.details_beta_available)
}
}
//Helpers //Helpers
private fun openScreenshotActivity(app: App, position: Int) { private fun openScreenshotActivity(app: App, position: Int) {
val intent = Intent( val intent = Intent(

View File

@@ -84,6 +84,10 @@
android:id="@+id/layout_details_privacy" android:id="@+id/layout_details_privacy"
layout="@layout/layout_details_privacy" /> layout="@layout/layout_details_privacy" />
<include
android:id="@+id/layout_details_beta"
layout="@layout/layout_details_beta" />
<include <include
android:id="@+id/layout_details_dev" android:id="@+id/layout_details_dev"
layout="@layout/layout_details_dev" /> layout="@layout/layout_details_dev" />

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Aurora Store
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
~
~ 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 <http://www.gnu.org/licenses/>.
~
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/padding_large"
android:paddingEnd="@dimen/padding_small"
android:visibility="gone"
tools:visibility="visible">
<com.aurora.store.view.custom.layouts.ActionHeaderLayout
android:id="@+id/header_rating_reviews"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:headerTitle="@string/details_beta" />
<RelativeLayout
android:id="@+id/layout_user_review"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/margin_small"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txt_beta_title"
style="@style/AuroraTextStyle.Subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/img_beta"
android:text="@string/details_beta_available" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txt_beta_subtitle"
style="@style/AuroraTextStyle.Line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_beta_title"
android:layout_alignStart="@id/txt_beta_title"
android:layout_alignEnd="@id/txt_beta_title"
android:layout_marginTop="@dimen/margin_small"
android:maxLines="5"
android:text="@string/details_beta_description" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_beta"
android:layout_width="@dimen/icon_size_medium"
android:layout_height="@dimen/icon_size_medium"
android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/margin_normal" />
</RelativeLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_beta_Action"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:minWidth="128dp"
android:text="@string/action_join" />
</LinearLayout>

View File

@@ -84,7 +84,9 @@
<string name="action_installations">"Installations"</string> <string name="action_installations">"Installations"</string>
<string name="action_installed">"Installed"</string> <string name="action_installed">"Installed"</string>
<string name="action_installing">"Installing"</string> <string name="action_installing">"Installing"</string>
<string name="action_join">"Join"</string>
<string name="action_later">"Later"</string> <string name="action_later">"Later"</string>
<string name="action_leave">"Leave"</string>
<string name="action_logging_in">"Logging in"</string> <string name="action_logging_in">"Logging in"</string>
<string name="action_logout">"Logout"</string> <string name="action_logout">"Logout"</string>
<string name="action_manual">"Manual download"</string> <string name="action_manual">"Manual download"</string>
@@ -92,6 +94,7 @@
<string name="action_next">"Next"</string> <string name="action_next">"Next"</string>
<string name="action_open">"Open"</string> <string name="action_open">"Open"</string>
<string name="action_pause">"Pause"</string> <string name="action_pause">"Pause"</string>
<string name="action_pending">"Pending"</string>
<string name="action_post">"Post"</string> <string name="action_post">"Post"</string>
<string name="action_previous">"Previous"</string> <string name="action_previous">"Previous"</string>
<string name="action_purchase">"Purchase"</string> <string name="action_purchase">"Purchase"</string>
@@ -117,6 +120,11 @@
<string name="action_whitelist">"Whitelist"</string> <string name="action_whitelist">"Whitelist"</string>
<string name="action_wishlist_add">"Add to wishlist"</string> <string name="action_wishlist_add">"Add to wishlist"</string>
<string name="details_beta">"Beta program"</string>
<string name="details_beta_subscribed">"You're a beta tester"</string>
<string name="details_beta_available">"Join beta program ?"</string>
<string name="details_beta_description">"You will see new features and bugs before the public does. Give your feedback to developers to help them improve."</string>
<string name="details_beta_delay">"Enrollment may take some time, you can check status later."</string>
<string name="details_changelog">"Changelog"</string> <string name="details_changelog">"Changelog"</string>
<string name="details_changelog_unavailable">"Changelog not provided"</string> <string name="details_changelog_unavailable">"Changelog not provided"</string>
<string name="details_contains_ads">"Contains Ads"</string> <string name="details_contains_ads">"Contains Ads"</string>