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 var accountID = ""
private var externalID = ""
private var policy = ""
private var signature = ""
@ -245,6 +246,7 @@ object Crunchyroll {
}
accountID = account.accountId
externalID = account.externalId
}
/**
@ -704,4 +706,20 @@ object Crunchyroll {
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 ContinueWatchingList = Collection<ContinueWatchingItem>
typealias RecommendationsList = Collection<Item>
typealias Benefits = Collection<Benefit>
@Serializable
data class UpNextSeriesItem(
@ -226,6 +227,7 @@ val NoneSimilarToResult = SimilarToResult(0, emptyList())
val NoneDiscSeasonList = DiscSeasonList(0, emptyList())
val NoneContinueWatchingList = ContinueWatchingList(0, emptyList())
val NoneRecommendationsList = RecommendationsList(0, emptyList())
val NoneBenefits = Benefits(0, emptyList())
val NoneUpNextSeriesItem = UpNextSeriesItem(
playhead = 0,
@ -412,3 +414,16 @@ val NoneProfile = Profile(
preferredContentSubtitleLanguage = "",
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.R
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.Profile
import org.mosad.teapod.parser.crunchyroll.supportedLocals
@ -33,6 +34,9 @@ class AccountFragment : Fragment() {
private var profile: Deferred<Profile> = lifecycleScope.async {
Crunchyroll.profile()
}
private var benefits: Deferred<Benefits> = lifecycleScope.async {
Crunchyroll.benefits()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentAccountBinding.inflate(inflater, container, false)
@ -44,14 +48,18 @@ class AccountFragment : Fragment() {
binding.textAccountLogin.text = EncryptedPreferences.login
// TODO reimplement for cr, if possible (maybe account status would be better? (premium))
// load subscription (async) info before anything else
binding.textAccountSubscription.text = getString(R.string.account_subscription, getString(R.string.loading))
// load account status and tier (async) info before anything else
lifecycleScope.launch {
binding.textAccountSubscription.text = getString(
R.string.account_subscription,
"TODO"
)
benefits.await().apply {
this.items.firstOrNull { it.benefit == "cr_premium" }?.let {
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
@ -80,12 +88,6 @@ class AccountFragment : Fragment() {
showLoginDialog()
}
binding.linearAccountSubscription.setOnClickListener {
// TODO
//startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(AoDParser.getSubscriptionUrl())))
}
binding.linearSettingsContentLanguage.setOnClickListener {
showContentLanguageSelection()
}

View File

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

View File

@ -37,6 +37,8 @@
<string name="account_login_desc">Zum bearbeiten tippen</string>
<string name="account_subscription">Abo %1$s</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_about_desc">Version %1$s (%2$s)</string>
<string name="settings">Einstellungen</string>

View File

@ -49,6 +49,11 @@
<string name="account_login_desc">Tap to edit</string>
<string name="account_subscription">Subscription %1$s</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_content_language">Preferred content language</string>
<string name="settings_content_language_desc">English</string>