add subscription status and tier to the AccountFragment

This commit is contained in:
Jannik 2022-07-21 22:06:41 +02:00
parent 0028cb6dd7
commit 821f8b5590
Signed by: Seil0
GPG Key ID: E8459F3723C52C24
6 changed files with 57 additions and 15 deletions

View File

@ -61,6 +61,7 @@ object Crunchyroll {
private val tokenRefreshContext = newSingleThreadContext("TokenRefreshContext") private val tokenRefreshContext = newSingleThreadContext("TokenRefreshContext")
private var accountID = "" private var accountID = ""
private var externalID = ""
private var policy = "" private var policy = ""
private var signature = "" private var signature = ""
@ -245,6 +246,7 @@ object Crunchyroll {
} }
accountID = account.accountId accountID = account.accountId
externalID = account.externalId
} }
/** /**
@ -704,4 +706,20 @@ object Crunchyroll {
requestPatch(profileEndpoint, bodyObject = json) requestPatch(profileEndpoint, bodyObject = json)
} }
/**
* Get additional profile (benefits) information for the currently logged in account.
*
* * @return A **[Profile]** object
*/
suspend fun benefits(): Benefits {
val profileEndpoint = "/subs/v1/subscriptions/$externalID/benefits"
return try {
requestGet(profileEndpoint)
} catch (ex: SerializationException) {
Log.e(TAG, "SerializationException in benefits().", ex)
NoneBenefits
}
}
} }

View File

@ -125,6 +125,7 @@ typealias DiscSeasonList = Collection<SeasonListItem>
typealias Watchlist = Collection<Item> typealias Watchlist = Collection<Item>
typealias ContinueWatchingList = Collection<ContinueWatchingItem> typealias ContinueWatchingList = Collection<ContinueWatchingItem>
typealias RecommendationsList = Collection<Item> typealias RecommendationsList = Collection<Item>
typealias Benefits = Collection<Benefit>
@Serializable @Serializable
data class UpNextSeriesItem( data class UpNextSeriesItem(
@ -226,6 +227,7 @@ val NoneSimilarToResult = SimilarToResult(0, emptyList())
val NoneDiscSeasonList = DiscSeasonList(0, emptyList()) val NoneDiscSeasonList = DiscSeasonList(0, emptyList())
val NoneContinueWatchingList = ContinueWatchingList(0, emptyList()) val NoneContinueWatchingList = ContinueWatchingList(0, emptyList())
val NoneRecommendationsList = RecommendationsList(0, emptyList()) val NoneRecommendationsList = RecommendationsList(0, emptyList())
val NoneBenefits = Benefits(0, emptyList())
val NoneUpNextSeriesItem = UpNextSeriesItem( val NoneUpNextSeriesItem = UpNextSeriesItem(
playhead = 0, playhead = 0,
@ -412,3 +414,16 @@ val NoneProfile = Profile(
preferredContentSubtitleLanguage = "", preferredContentSubtitleLanguage = "",
username = "" username = ""
) )
/**
* benefit data class
*/
@Serializable
data class Benefit(
@SerialName("benefit") val benefit: String,
@SerialName("source") val source: String,
)
val NoneBenefit = Benefit(
benefit = "",
source = ""
)

View File

@ -15,6 +15,7 @@ import kotlinx.coroutines.runBlocking
import org.mosad.teapod.BuildConfig import org.mosad.teapod.BuildConfig
import org.mosad.teapod.R import org.mosad.teapod.R
import org.mosad.teapod.databinding.FragmentAccountBinding import org.mosad.teapod.databinding.FragmentAccountBinding
import org.mosad.teapod.parser.crunchyroll.Benefits
import org.mosad.teapod.parser.crunchyroll.Crunchyroll import org.mosad.teapod.parser.crunchyroll.Crunchyroll
import org.mosad.teapod.parser.crunchyroll.Profile import org.mosad.teapod.parser.crunchyroll.Profile
import org.mosad.teapod.parser.crunchyroll.supportedLocals import org.mosad.teapod.parser.crunchyroll.supportedLocals
@ -33,6 +34,9 @@ class AccountFragment : Fragment() {
private var profile: Deferred<Profile> = lifecycleScope.async { private var profile: Deferred<Profile> = lifecycleScope.async {
Crunchyroll.profile() Crunchyroll.profile()
} }
private var benefits: Deferred<Benefits> = lifecycleScope.async {
Crunchyroll.benefits()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentAccountBinding.inflate(inflater, container, false) binding = FragmentAccountBinding.inflate(inflater, container, false)
@ -44,14 +48,18 @@ class AccountFragment : Fragment() {
binding.textAccountLogin.text = EncryptedPreferences.login binding.textAccountLogin.text = EncryptedPreferences.login
// TODO reimplement for cr, if possible (maybe account status would be better? (premium)) // load account status and tier (async) info before anything else
// load subscription (async) info before anything else
binding.textAccountSubscription.text = getString(R.string.account_subscription, getString(R.string.loading))
lifecycleScope.launch { lifecycleScope.launch {
binding.textAccountSubscription.text = getString( benefits.await().apply {
R.string.account_subscription, this.items.firstOrNull { it.benefit == "cr_premium" }?.let {
"TODO" binding.textAccountSubscription.text = getString(R.string.account_premium)
) }
this.items.firstOrNull { it.benefit == "cr_fan_pack" }?.let {
binding.textAccountSubscriptionDesc.text =
getString(R.string.account_tier, getString(R.string.account_tier_mega_fan))
}
}
} }
// add preferred subtitles // add preferred subtitles
@ -80,12 +88,6 @@ class AccountFragment : Fragment() {
showLoginDialog() showLoginDialog()
} }
binding.linearAccountSubscription.setOnClickListener {
// TODO
//startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(AoDParser.getSubscriptionUrl())))
}
binding.linearSettingsContentLanguage.setOnClickListener { binding.linearSettingsContentLanguage.setOnClickListener {
showContentLanguageSelection() showContentLanguageSelection()
} }

View File

@ -112,7 +112,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/account_subscription" android:text="@string/loading"
android:textSize="16sp" /> android:textSize="16sp" />
<TextView <TextView
@ -120,7 +120,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/account_subscription_desc" android:text="@string/account_tier"
android:textColor="?textSecondary" /> android:textColor="?textSecondary" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -37,6 +37,8 @@
<string name="account_login_desc">Zum bearbeiten tippen</string> <string name="account_login_desc">Zum bearbeiten tippen</string>
<string name="account_subscription">Abo %1$s</string> <string name="account_subscription">Abo %1$s</string>
<string name="account_subscription_desc">Zum verlängern tippen</string> <string name="account_subscription_desc">Zum verlängern tippen</string>
<string name="account_premium">Premium Mitglied</string>
<string name="account_tier">Typ: %1$s</string>
<string name="info">Info</string> <string name="info">Info</string>
<string name="info_about_desc">Version %1$s (%2$s)</string> <string name="info_about_desc">Version %1$s (%2$s)</string>
<string name="settings">Einstellungen</string> <string name="settings">Einstellungen</string>

View File

@ -49,6 +49,11 @@
<string name="account_login_desc">Tap to edit</string> <string name="account_login_desc">Tap to edit</string>
<string name="account_subscription">Subscription %1$s</string> <string name="account_subscription">Subscription %1$s</string>
<string name="account_subscription_desc">Tap to extend</string> <string name="account_subscription_desc">Tap to extend</string>
<string name="account_premium">Premium member</string>
<string name="account_tier">Tier: %1$s</string>
<string name="account_tier_fan" translatable="false">Fan</string>
<string name="account_tier_mega_fan" translatable="false">Mega Fan</string>
<string name="account_tier_ultimate_fan" translatable="false">Ultimate Fan</string>
<string name="settings">Settings</string> <string name="settings">Settings</string>
<string name="settings_content_language">Preferred content language</string> <string name="settings_content_language">Preferred content language</string>
<string name="settings_content_language_desc">English</string> <string name="settings_content_language_desc">English</string>