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!