diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/BuyTicketActivity.java b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/BuyTicketActivity.java index d1f973b436..6d323d9291 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/BuyTicketActivity.java +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/BuyTicketActivity.java @@ -215,6 +215,8 @@ private void handleTicketReservationSuccess(TicketType ticketType, Intent intent = new Intent(this, StripePaymentActivity.class); intent.putExtra(Const.KEY_TICKET_PRICE, ticketType.getFormattedPrice()); intent.putExtra(Const.KEY_TICKET_HISTORY, response.getTicketHistory()); + intent.putExtra(Const.KEY_TERMS_LINK, ticketType.getPaymentInfo().getTermsLink()); + intent.putExtra(Const.KEY_STRIPE_API_PUBLISHABLE_KEY, ticketType.getPaymentInfo().getStripePublicKey()); startActivity(intent); } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/StripePaymentActivity.java b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/StripePaymentActivity.java index dedb3ca1a2..6d572cbb58 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/StripePaymentActivity.java +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/activity/StripePaymentActivity.java @@ -1,6 +1,7 @@ package de.tum.in.tumcampusapp.component.ui.ticket.activity; import android.content.Intent; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.Editable; @@ -8,6 +9,7 @@ import android.transition.TransitionManager; import android.view.View; import android.view.autofill.AutofillManager; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.TextView; @@ -49,6 +51,7 @@ public class StripePaymentActivity extends BaseActivity { private EditText cardholderEditText; private ViewSwitcher selectMethodSwitcher; private MaterialButton purchaseButton; + private CheckBox termsOfServiceCheckBox; private PaymentSession paymentSession; private boolean didSelectPaymentMethod; @@ -57,6 +60,8 @@ public class StripePaymentActivity extends BaseActivity { // we need the ID to init the purchase private String ticketPrice; + private String termsOfServiceLink; + private String stripePublishableKey; public StripePaymentActivity() { super(R.layout.activity_payment_stripe); @@ -68,8 +73,13 @@ public void onCreate(Bundle savedInstanceState) { ticketPrice = getIntent().getStringExtra(Const.KEY_TICKET_PRICE); ticketHistory = getIntent().getIntExtra(Const.KEY_TICKET_HISTORY, -1); + termsOfServiceLink = getIntent().getStringExtra(Const.KEY_TERMS_LINK); + stripePublishableKey = getIntent().getStringExtra(Const.KEY_STRIPE_API_PUBLISHABLE_KEY); - if (ticketHistory < 0 || ticketPrice == null) { + if (ticketHistory < 0 + || ticketPrice == null + || termsOfServiceLink.isEmpty() + || stripePublishableKey == null) { Utils.showToast(this, R.string.error_something_wrong); finish(); return; @@ -121,11 +131,22 @@ public void afterTextChanged(Editable s) { purchaseButton = findViewById(R.id.complete_purchase_button); purchaseButton.setText(purchaseButtonString); purchaseButton.setOnClickListener(v -> purchaseTicket()); + + termsOfServiceCheckBox = findViewById(R.id.terms_of_service_checkbox); + termsOfServiceCheckBox.setOnClickListener((view) -> updateBuyButton()); + + findViewById(R.id.terms_of_service_button).setOnClickListener((view -> { + Intent browserIntent = new Intent(Intent.ACTION_VIEW); + browserIntent.setData(Uri.parse(termsOfServiceLink)); + view.getContext().startActivity(browserIntent); + })); } private void updateBuyButton() { boolean hasCardholder = !cardholderEditText.getText().toString().isEmpty(); - boolean enabled = hasCardholder && didSelectPaymentMethod; + boolean enabled = hasCardholder + && didSelectPaymentMethod + && termsOfServiceCheckBox.isChecked(); float alpha = enabled ? 1.0f : 0.5f; purchaseButton.setEnabled(enabled); @@ -239,7 +260,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } private void initStripeSession() { - PaymentConfiguration.init(Const.STRIPE_API_PUBLISHABLE_KEY); + PaymentConfiguration.init(stripePublishableKey); initCustomerSession(); } @@ -296,7 +317,7 @@ public void onError(int errorCode, @Nullable String errorMessage) { @Override public void onPaymentSessionDataChanged(@NonNull PaymentSessionData data) { - purchaseButton.setEnabled(true); + updateBuyButton(); selectMethodSwitcher.setEnabled(true); } diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/Payment.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/Payment.kt new file mode 100644 index 0000000000..c6f82da365 --- /dev/null +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/Payment.kt @@ -0,0 +1,12 @@ +package de.tum.`in`.tumcampusapp.component.ui.ticket.model + +import com.google.gson.annotations.SerializedName + +data class Payment( + @SerializedName("stripe_publishable_key") + var stripePublicKey: String = "", + @SerializedName("terms") + var termsLink: String = "", + var minTickets: Int = 1, + var maxTickets: Int = 1 +) \ No newline at end of file diff --git a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/TicketType.kt b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/TicketType.kt index 46b4ae89ac..a2cb680845 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/TicketType.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/component/ui/ticket/model/TicketType.kt @@ -1,6 +1,7 @@ package de.tum.`in`.tumcampusapp.component.ui.ticket.model import androidx.room.Entity +import androidx.room.Ignore import androidx.room.PrimaryKey import androidx.room.RoomWarnings import com.google.gson.annotations.SerializedName @@ -20,7 +21,10 @@ data class TicketType( @SerializedName("ticket_type") var id: Int = 0, var price: Int = 0, - var description: String = "" + var description: String = "", + @Ignore + @SerializedName("payment") + var paymentInfo: Payment = Payment() ) { val formattedPrice: String diff --git a/app/src/main/java/de/tum/in/tumcampusapp/utils/Const.kt b/app/src/main/java/de/tum/in/tumcampusapp/utils/Const.kt index 92225b35f7..9fc1bf85a0 100644 --- a/app/src/main/java/de/tum/in/tumcampusapp/utils/Const.kt +++ b/app/src/main/java/de/tum/in/tumcampusapp/utils/Const.kt @@ -163,12 +163,13 @@ object Const { const val CALENDAR_FILTER_HOUR_LIMIT_MIN_DEFAULT = "8" const val CALENDAR_FILTER_HOUR_LIMIT_MAX_DEFAULT = "20" - const val STRIPE_API_PUBLISHABLE_KEY = "pk_live_bjSAhBM3WFUqeNI4cJn9upDW" + const val KEY_STRIPE_API_PUBLISHABLE_KEY = "stripeApiPublishableKey" const val KEY_EVENT = "event" const val KEY_EVENT_ID = "eventId" const val KEY_CARD_HOLDER = "cardholder" const val KEY_TICKET_PRICE = "ticketPrice" const val KEY_TICKET_HISTORY = "ticketHistory" + const val KEY_TERMS_LINK = "termsOfServiceLink" const val SHOW_DRAWER = "showDrawer" diff --git a/app/src/main/res/drawable/ic_external_link.xml b/app/src/main/res/drawable/ic_external_link.xml new file mode 100644 index 0000000000..1ed3a810d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_external_link.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_payment_stripe.xml b/app/src/main/res/layout/activity_payment_stripe.xml index 33e3a45e7e..6c68370f1c 100644 --- a/app/src/main/res/layout/activity_payment_stripe.xml +++ b/app/src/main/res/layout/activity_payment_stripe.xml @@ -156,6 +156,33 @@ android:layout_height="0dp" android:layout_weight="1" /> + + + + + + + Menüpunkte wie die Notenansicht oder Studienbeitrag werden in dieser Ansicht nicht angezeigt. Tickets können nur bis zu vier Stunden vor Beginn über die App erworben werden. Im Kalender öffnen + Ich stimme den allgemeinen Geschäftsbedingungen (AGB) zu. + AGB Tickets hier erhältlich! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d47253ddbb..2f77ec4915 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -705,5 +705,8 @@ Signature: %5$s Hide Show %d more … Show in Calendar + + I agree to the terms of service. + Terms of Service Tickets available here!