Skip to content

Commit

Permalink
MBL-1332: Thanks page string doesn't make sense for late pledges (#2036)
Browse files Browse the repository at this point in the history
* Update late pledge thanks page

* Linter

---------

Co-authored-by: Leigh Douglas <[email protected]>
  • Loading branch information
leighdouglas and Leigh Douglas authored May 13, 2024
1 parent 96dc1aa commit 337ceac
Show file tree
Hide file tree
Showing 14 changed files with 119 additions and 83 deletions.
44 changes: 29 additions & 15 deletions app/src/main/assets/json/server-config.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@ class ProjectPageActivity :
.shippingAmount(shippingAmount)
.build()
val pledgeData = PledgeData.with(PledgeFlowContext.forPledgeReason(PledgeReason.PLEDGE), projectData, selectedReward)
showCreatePledgeSuccess(Pair(checkoutData, pledgeData), userEmail)
showCreatePledgeSuccess(Pair(checkoutData, pledgeData))
checkoutFlowViewModel.onProjectSuccess()
refreshProject()
binding.pledgeContainerCompose.isGone = true
Expand Down Expand Up @@ -1088,7 +1088,7 @@ class ProjectPageActivity :
showSnackbar(binding.snackbarAnchor, getString(R.string.Youve_canceled_your_pledge))
}

private fun showCreatePledgeSuccess(checkoutDataAndProjectData: Pair<CheckoutData, PledgeData>, email: String = "") {
private fun showCreatePledgeSuccess(checkoutDataAndProjectData: Pair<CheckoutData, PledgeData>) {
val checkoutData = checkoutDataAndProjectData.first
val pledgeData = checkoutDataAndProjectData.second
val projectData = pledgeData.projectData()
Expand All @@ -1098,7 +1098,6 @@ class ProjectPageActivity :
if (clearFragmentBackStack() || (projectData.project().showLatePledgeFlow() && fFLatePledge)) {
startActivity(
Intent(this, ThanksActivity::class.java)
.putExtra(IntentKey.EMAIL, email)
.putExtra(IntentKey.PROJECT, projectData.project())
.putExtra(IntentKey.CHECKOUT_DATA, checkoutData)
.putExtra(IntentKey.PLEDGE_DATA, pledgeData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public ThanksAdapter(final @NonNull Delegate delegate) {
}

public void takeData(final @NonNull ThanksData data) {
setSection(SECTION_SHARE_VIEW, Collections.singletonList(Pair.create(Pair.create(data.getBackedProject(), data.getCheckoutData()), data.getUserEmail())));
setSection(SECTION_SHARE_VIEW, Collections.singletonList(Pair.create(data.getBackedProject(), data.getCheckoutData())));
setSection(SECTION_RECOMMENDED_PROJECTS_VIEW, data.getRecommendedProjects());
setSection(SECTION_CATEGORY_VIEW, Collections.singletonList(data.getCategory()));
notifyDataSetChanged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import com.kickstarter.ui.data.CheckoutData
class ThanksData(
val backedProject: Project,
val checkoutData: CheckoutData,
val userEmail: String,
val category: Category,
val recommendedProjects: List<Pair<Project, DiscoveryParams>>
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.kickstarter.ui.viewholders
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.text.Html
import android.util.Pair
import com.facebook.share.model.ShareLinkContent
Expand All @@ -16,6 +17,7 @@ import com.kickstarter.ui.data.CheckoutData
import com.kickstarter.viewmodels.ThanksShareHolderViewModel
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import java.math.RoundingMode

class ThanksShareViewHolder(private val binding: ThanksShareViewBinding) : KSViewHolder(binding.root) {
private val viewModel = ThanksShareHolderViewModel.ThanksShareViewHolderViewModel(environment())
Expand Down Expand Up @@ -75,7 +77,7 @@ class ThanksShareViewHolder(private val binding: ThanksShareViewBinding) : KSVie

@Throws(Exception::class)
override fun bindData(data: Any?) {
val projectAndCheckoutData = requireNotNull(data as Pair<Pair<Project, CheckoutData>, String>?)
val projectAndCheckoutData = requireNotNull(data as Pair<Project, CheckoutData>?)
viewModel.inputs.configureWith(projectAndCheckoutData)
}

Expand All @@ -87,10 +89,33 @@ class ThanksShareViewHolder(private val binding: ThanksShareViewBinding) : KSVie
binding.backedProject.text = Html.fromHtml(ksString.format(context().getString(R.string.You_have_successfully_backed_project_html), "project_name", projectName))
}

private fun showPostCampaignPledgeText(pcptext: Triple<Project, Double, String>) {
// TODO: Change to use new string once it is available
// binding.backedProject.text = Html.fromHtml(ksString.format(context().getString(R.string.You_have_successfully_pledged_to_project_post_campaign_html), "project_name", pcptext.first.name(), "pledge_total", ksCurrency.format(initialValue = pcptext.second, project = pcptext.first, roundingMode = RoundingMode.HALF_UP), "user_email", pcptext.third))
binding.backedProject.text = ""
private fun showPostCampaignPledgeText(pcptext: Pair<Double, Project>) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
binding.backedProject.text = Html.fromHtml(
ksString.format(
context().getString(R.string.You_have_successfully_pledged_to_project_post_campaign_html_short),
"pledge_total",
ksCurrency.format(
initialValue = pcptext.first,
project = pcptext.second,
roundingMode = RoundingMode.HALF_UP
)
),
Html.FROM_HTML_MODE_LEGACY
)
} else {
binding.backedProject.text = Html.fromHtml(
ksString.format(
context().getString(R.string.You_have_successfully_pledged_to_project_post_campaign_html_short),
"pledge_total",
ksCurrency.format(
initialValue = pcptext.first,
project = pcptext.second,
roundingMode = RoundingMode.HALF_UP
)
),
)
}
}

private fun startShare(projectNameAndShareUrl: Pair<String, String>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import io.reactivex.subjects.PublishSubject
interface ThanksShareHolderViewModel {
interface Inputs {
/** Call to configure the view model with a project. */
fun configureWith(thanksShareData: Pair<Pair<Project, CheckoutData>, String>)
fun configureWith(thanksShareData: Pair<Project, CheckoutData>)

/** Call when the share button is clicked. */
fun shareClick()
Expand All @@ -47,12 +47,12 @@ interface ThanksShareHolderViewModel {
/** Emits the project name and url to share using Twitter. */
fun startShareOnTwitter(): Observable<Pair<String, String>>

fun postCampaignPledgeText(): Observable<Triple<Project, Double, String>>
fun postCampaignPledgeText(): Observable<Pair<Double, Project>>
}

class ThanksShareViewHolderViewModel(environment: Environment) : Inputs, Outputs {

private val thanksShareData = PublishSubject.create<Pair<Pair<Project, CheckoutData>, String>>()
private val thanksShareData = PublishSubject.create<Pair<Project, CheckoutData>>()
private val project = PublishSubject.create<Project>()
private val shareClick = PublishSubject.create<Unit>()
private val shareOnFacebookClick = PublishSubject.create<Unit>()
Expand All @@ -61,7 +61,7 @@ interface ThanksShareHolderViewModel {
private val startShare = PublishSubject.create<Pair<String, String>>()
private val startShareOnFacebook = PublishSubject.create<Pair<Project, String>>()
private val startShareOnTwitter = PublishSubject.create<Pair<String, String>>()
private val postCampaignText = PublishSubject.create<Triple<Project, Double, String>>()
private val postCampaignText = PublishSubject.create<Pair<Double, Project>>()

val inputs: Inputs = this
val outputs: Outputs = this
Expand All @@ -71,21 +71,21 @@ interface ThanksShareHolderViewModel {
init {
thanksShareData
.map { it.first }
.subscribe { project.onNext(it.first) }
.subscribe { project.onNext(it) }
.addToDisposable(disposables)

thanksShareData
.filter { it.first.first.isInPostCampaignPledgingPhase().isFalse() }
.filter { it.first.first.postCampaignPledgingEnabled().isFalse() }
.map { it.first.first.name() }
.filter { it.first.isInPostCampaignPledgingPhase().isFalse() }
.filter { it.first.postCampaignPledgingEnabled().isFalse() }
.map { it.first.name() }
.subscribe { projectName.onNext(it) }
.addToDisposable(disposables)

thanksShareData
.filter { it.first.first.isInPostCampaignPledgingPhase().isTrue() }
.filter { it.first.first.postCampaignPledgingEnabled().isTrue() }
.filter { it.first.isInPostCampaignPledgingPhase().isTrue() }
.filter { it.first.postCampaignPledgingEnabled().isTrue() }
.subscribe {
postCampaignText.onNext(Triple(it.first.first, it.first.second.amount(), it.second))
postCampaignText.onNext(Pair(it.second.amount(), it.first))
}
.addToDisposable(disposables)
project
Expand Down Expand Up @@ -122,7 +122,7 @@ interface ThanksShareHolderViewModel {
.addToDisposable(disposables)
}

override fun configureWith(thanksShareData: Pair<Pair<Project, CheckoutData>, String>) {
override fun configureWith(thanksShareData: Pair<Project, CheckoutData>) {
this.thanksShareData.onNext(thanksShareData)
}

Expand All @@ -143,7 +143,7 @@ interface ThanksShareHolderViewModel {
override fun startShareOnTwitter(): Observable<Pair<String, String>> = startShareOnTwitter
override fun projectName(): Observable<String> = projectName

override fun postCampaignPledgeText(): Observable<Triple<Project, Double, String>> = postCampaignText
override fun postCampaignPledgeText(): Observable<Pair<Double, Project>> = postCampaignText
override fun onCleared() {
disposables.clear()
}
Expand Down
17 changes: 4 additions & 13 deletions app/src/main/java/com/kickstarter/viewmodels/ThanksViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -127,12 +127,6 @@ interface ThanksViewModel {
.ofType(Project::class.java)
.take(1)

val userEmail = intent()
.filter { it.getStringExtra(IntentKey.EMAIL).isNotNull() }
.map<String?> { it.getStringExtra(IntentKey.EMAIL) }
.ofType(String::class.java)
.take(1)

val rootCategory = project
.switchMap {
rootCategory(it, apolloClient)
Expand Down Expand Up @@ -278,19 +272,16 @@ interface ThanksViewModel {
rootCategory,
recommendedProjects.startWith(listOf()),
checkoutData,
userEmail
) { backedProject, category, projects, checkoutData, email ->
ThanksData(backedProject, checkoutData, email, category, projects)
) { backedProject, category, projects, checkoutData ->
ThanksData(backedProject, checkoutData, category, projects)
}.subscribe { adapterData.onNext(it) }
.addToDisposable(disposables)

adapterData
.compose(Transformers.takePairWhenV2(projectOnUserChangeSave))
.withLatestFrom(userEmail) { adapterAndProjectData, email ->
Triple(adapterAndProjectData.first, adapterAndProjectData.second.updateStartedProjectAndDiscoveryParamsList(adapterAndProjectData.first.recommendedProjects), email)
}
.map { Pair(it.first, it.second.updateStartedProjectAndDiscoveryParamsList(it.first.recommendedProjects)) }
.map {
ThanksData(it.first.backedProject, it.first.checkoutData, it.third, it.first.category, it.second)
ThanksData(it.first.backedProject, it.first.checkoutData, it.first.category, it.second)
}.distinctUntilChanged()
.subscribe {
adapterData.onNext(it)
Expand Down
16 changes: 9 additions & 7 deletions app/src/main/res/values-de/strings_i18n.xml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ Unterstützer</string>
<string name="Check_out_these_handpicked_projects" formatted="false">Sieh dir dieses speziell für dich ausgesuchten Projekte an.</string>
<string name="Check_your_inbox_to_complete_this_simple_step" formatted="false">Sieh bitte in deinem Posteingang nach und schließe diesen einfachen Schritt ab.</string>
<string name="Check_your_payment_details" formatted="false">Überprüfe die Daten deiner Zahlungsweise</string>
<string name="Checkout" formatted="false">Checkout</string>
<string name="Checkout" formatted="false">Kasse</string>
<string name="Choose_another_reward" formatted="false">Andere Belohnung auswählen</string>
<string name="Chooses_location_for_shipping" formatted="false">Legt %{location} als Versandort fest.</string>
<string name="Chosen_just_for_you" formatted="false">Speziell für dich ausgewählt</string>
Expand All @@ -135,7 +135,7 @@ Unterstützer</string>
<string name="Complete_payment" formatted="false">Zahlung abschließen</string>
<string name="Confirm" formatted="false">Bestätigen</string>
<string name="Confirm_password" formatted="false">Neues Passwort bestätigen</string>
<string name="Confirm_your_pledge_details" formatted="false">Confirm your pledge details</string>
<string name="Confirm_your_pledge_details" formatted="false">Bestätige die Details zu deinem Finanzierungsbeitrag</string>
<string name="Connect_with_Facebook_to_follow_friends_and_get_notified" formatted="false">Verknüpfe dein Konto mit Facebook - du kannst deinen Freunden folgen und wirst benachrichtigt, sobald sie ein Projekt veröffentlichen oder unterstützen.</string>
<string name="Contact_backer" formatted="false">Unterstützer kontaktieren</string>
<string name="Contact_creator" formatted="false">Projektgründer kontaktieren</string>
Expand Down Expand Up @@ -607,7 +607,7 @@ Antippen und erneut versuchen</string>
<string name="Select_this_reward" formatted="false">Diese Belohnung wählen</string>
<string name="Select_this_reward_instead" formatted="false">Diese Belohnung auswählen</string>
<string name="Select_up_to_five" formatted="false">Wähle bis zu fünf aus den unten stehenden Optionen aus.</string>
<string name="Select_your_reward" formatted="false">Select your reward</string>
<string name="Select_your_reward" formatted="false">Belohnung auswählen</string>
<string name="Selected" formatted="false">Ausgewählt</string>
<string name="Selected_card" formatted="false">Ausgewählte Karte</string>
<string name="Selected_reward" formatted="false">Gewählte Belohnung</string>
Expand Down Expand Up @@ -812,9 +812,10 @@ Bitte versuche es später noch einmal.</string>
<string name="You_canceled_your_pledge_for_this_project" formatted="false">Du hast den Finanzierungsbeitrag für dieses Projekt zurückgezogen.</string>
<string name="You_cant_use_this_credit_card_to_back_a_project_from_project_country" formatted="false">Diese Karte kann nicht verwendet werden, um ein Projekt aus dem folgenden Land zu unterstützen: %{project_country}.</string>
<string name="You_have_successfully_backed_project_html" formatted="false">Dank deiner Unterstützung ist &lt;b>%{project_name}&lt;/b> seiner Verwirklichung einen Schritt näher. Sag es weiter!</string>
<string name="You_have_successfully_pledged_to_project_post_campaign_html" formatted="false">&lt;p>You have successfully pledged to &lt;b>%{project_name}&lt;/b>. Your pledge of &lt;b>%{pledge_total}&lt;/b> has been collected.&lt;/p>\n
&lt;p>You’ll receive a confirmation email at %{user_email} when your rewards are ready to fulfill so that you can finalize and pay shipping and tax.&lt;/p>\n
&lt;p>This project is now one step closer to a reality, thanks to you. Spread the word!&lt;/p></string>
<string name="You_have_successfully_pledged_to_project_post_campaign_html" formatted="false">&lt;p>Du hast &lt;b>%{project_name}&lt;/b> mit deinem Beitrag erfolgreich unterstützt. Dein Beitrag in Höhe von &lt;b>%{pledge_total}&lt;/b> wurde eingezogen.&lt;/p>\n
&lt;p>Du erhältst eine E-Mail an %{user_email}, wenn deine Belohnungen zur Erfüllung bereit sind, damit du alles finalisieren und für Versand und Steuern zahlen kannst.&lt;/p>\n
&lt;p>Dank dir ist dieses Projekt seiner Realisierung einen Schritt nähergekommen. Erzähl auch deinen Freunden und Bekannten davon!&lt;/p></string>
<string name="You_have_successfully_pledged_to_project_post_campaign_html_short" formatted="false">Dein Beitrag in Höhe von &lt;b>%{pledge_total}&lt;/b> wird dabei helfen, dieses Projekt Wirklichkeit werden zu lassen. Weitere Details findest du in der E-Mail, die du von uns erhalten hast.</string>
<string name="You_launched_this_project_on_launch_date" formatted="false">Du hast dieses Projekt am %{launch_date} veröffentlicht. Tools für Projektgründer findest du auf unserer Website.</string>
<string name="You_need_to_pledge_at_least_reward_minimum_for_this_reward" formatted="false">Diese Belohnung hat einen Mindestfinanzierungsbeitrag von %{reward_minimum}.</string>
<string name="You_pledged_on_date" formatted="false">&lt;b>Finanzierungsbeitrag geleistet&lt;/b> im %{pledge_date}</string>
Expand All @@ -829,7 +830,8 @@ Bitte versuche es später noch einmal.</string>
<string name="Your_message_has_been_sent" formatted="false">Deine Nachricht wurde versandt!</string>
<string name="Your_name_displayed" formatted="false">Dein Name wird auf deinem Profil angezeigt.</string>
<string name="Your_payment_method_was_successfully_charged" formatted="false">Deine Zahlungsmethode wurde erfolgreich belastet.</string>
<string name="Your_payment_method_will_be_charged_immediately" formatted="false">Your payment method will be charged immediately upon pledge and you’ll receive a confirmation email at %{user_email}. Your pledge cannot be canceled or modified.</string>
<string name="Your_payment_method_will_be_charged" formatted="false">Deine Zahlungsmethode für den Finanzierungsbeitrag wird &lt;b>umgehend belastet&lt;b>. Dein Beitrag &lt;b>kann nicht storniert oder geändert&lt;/b> werden.</string>
<string name="Your_payment_method_will_be_charged_immediately" formatted="false">Deine Zahlungsmethode wird umgehend belastet und du erhältst eine Bestätigungs-E-Mail an %{user_email}. Dein Beitrag kann nicht storniert oder geändert werden.</string>
<string name="Your_pledge" formatted="false">Dein Beitrag</string>
<string name="Your_pledge_amount" formatted="false">Dein Beitrag:</string>
<string name="Your_pledge_details" formatted="false">Einzelheiten deines Beitrags</string>
Expand Down
Loading

0 comments on commit 337ceac

Please sign in to comment.