diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 1413b72..bb22a45 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index 31a7ad7..ac03f9f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -58,6 +58,10 @@ dependencies {
implementation 'com.wdullaer:materialdatetimepicker:3.1.1'
implementation 'io.nlopez.smartlocation:library:3.3.3'
implementation 'q.rorbin:badgeview:1.1.0'
+ implementation 'com.braintreepayments.api:braintree:2.13.1'
+ implementation('com.braintreepayments.api:drop-in:3.1.0') {
+ exclude group: 'com.braintreepayments.api', module: 'braintree'
+ }
testImplementation 'junit:junit:4.12'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f23e80f..4f619e5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -56,8 +56,26 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java b/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java
new file mode 100644
index 0000000..4bb447f
--- /dev/null
+++ b/app/src/main/java/ch/pizzapp/android/activity/PaymentActivity.java
@@ -0,0 +1,118 @@
+package ch.pizzapp.android.activity;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+import com.braintreepayments.api.BraintreeFragment;
+import com.braintreepayments.api.Card;
+import com.braintreepayments.api.PayPal;
+import com.braintreepayments.api.exceptions.BraintreeError;
+import com.braintreepayments.api.exceptions.ErrorWithResponse;
+import com.braintreepayments.api.exceptions.InvalidArgumentException;
+import com.braintreepayments.api.interfaces.BraintreeCancelListener;
+import com.braintreepayments.api.interfaces.BraintreeErrorListener;
+import com.braintreepayments.api.interfaces.ConfigurationListener;
+import com.braintreepayments.api.interfaces.PaymentMethodNonceCallback;
+import com.braintreepayments.api.interfaces.PaymentMethodNonceCreatedListener;
+import com.braintreepayments.api.interfaces.PaymentMethodNoncesUpdatedListener;
+import com.braintreepayments.api.models.CardBuilder;
+import com.braintreepayments.api.models.Configuration;
+import com.braintreepayments.api.models.PayPalRequest;
+import com.braintreepayments.api.models.PaymentMethodNonce;
+
+
+import java.util.List;
+
+import butterknife.ButterKnife;
+import ch.pizzapp.android.R;
+import ch.pizzapp.android.api.ApiConstants;
+import ch.pizzapp.android.helper.DialogHelper;
+
+public class PaymentActivity extends BaseActivity
+ implements PaymentMethodNonceCreatedListener,
+ PaymentMethodNoncesUpdatedListener, ConfigurationListener,
+ BraintreeCancelListener, PaymentMethodNonceCallback,
+ BraintreeErrorListener {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_payment);
+ ButterKnife.bind(this);
+ showBraintreePaymentFragment();
+ }
+
+ @Override
+ public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) {
+ // Send this nonce to your server
+ String nonce = paymentMethodNonce.getNonce();
+ }
+
+ @Override
+ public void onConfigurationFetched(Configuration configuration) {
+
+ }
+
+ @Override
+ public void onPaymentMethodNoncesUpdated(List paymentMethodNonces) {
+
+ }
+
+ @Override
+ public void onCancel(int requestCode) {
+ // Use this to handle a canceled activity, if the given requestCode is important.
+ // You may want to use this callback to hide loading indicators, and prepare your UI for input
+ }
+
+ @Override
+ public void success(PaymentMethodNonce paymentMethodNonce) {
+
+ }
+
+ @Override
+ public void failure(Exception exception) {
+
+ }
+
+ @Override
+ public void onError(Exception error) {
+ if (error instanceof ErrorWithResponse) {
+ ErrorWithResponse errorWithResponse = (ErrorWithResponse) error;
+ BraintreeError cardErrors = errorWithResponse.errorFor("creditCard");
+ if (cardErrors != null) {
+ // There is an issue with the credit card.
+ BraintreeError expirationMonthError = cardErrors.errorFor("expirationMonth");
+ if (expirationMonthError != null) {
+ // There is an issue with the expiration month.
+ DialogHelper.showAlertDialog(this, expirationMonthError.getMessage());
+ }
+ }
+ }
+ }
+
+
+ private void showBraintreePaymentFragment(){
+ try {
+
+ BraintreeFragment braintreeFragment =
+ BraintreeFragment.newInstance(
+ BaseActivity.currentActivity, ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX);
+
+ /*
+ // create paypal payment
+ PayPal.requestBillingAgreement(braintreeFragment, new PayPalRequest());
+ */
+
+ CardBuilder cardBuilder = new CardBuilder()
+ .cardNumber("4111111111111111")
+ .expirationMonth("08")
+ .expirationYear("2018");
+ Card.tokenize(braintreeFragment, cardBuilder);
+
+ }catch (InvalidArgumentException e){
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java b/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java
index b81bd65..bb1b9d0 100644
--- a/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java
+++ b/app/src/main/java/ch/pizzapp/android/api/ApiConstants.java
@@ -13,4 +13,16 @@ public class ApiConstants {
public static final String CAMPAIGN_CODE_PIZZAPASS = "PIZZAPASS";
public static final String CAMPAIGN_CODE_CHAMPAGNE = "CHAMPAGNE";
+
+ public static final String BRAINTREE_TOKENIZATION_KEY_SANDBOX = "sandbox_wk7668t4_v332h2jkpq44r8w8";
+ public static final String BRAINTREE_TOKENIZATION_KEY_PRODUCTION = "";
+
+
+ public static final String PAYMENT_METHOD_CODE_CREDIT_DEBIT_CARD = "braintree"; // Credit / Debit Card
+ public static final String PAYMENT_METHOD_CODE_BANK_CASH = "cod"; // Bar
+ public static final String PAYMENT_METHOD_CODE_TRANSFER = "bank_transfer"; // Kreditkarten-Kartenzahlung
+ public static final String PAYMENT_METHOD_CODE_TWINT = "twintcw_twint"; // TWINT
+ public static final String PAYMENT_METHOD_CODE_PAYPAL = "paypal";
+ public static final String PAYMENT_METHOD_CODE_ANDROID_PAY = "android_pay";
+ public static final String PAYMENT_METHOD_CODE_APPLE_PAY = "apple_pay";
}
diff --git a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java
index 6fc817a..8343682 100644
--- a/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java
+++ b/app/src/main/java/ch/pizzapp/android/fragment/createOrder/CreateOrderSummaryFragment.java
@@ -1,5 +1,6 @@
package ch.pizzapp.android.fragment.createOrder;
+import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
@@ -10,9 +11,23 @@ import android.view.ViewGroup;
import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.braintreepayments.api.dropin.DropInActivity;
+import com.braintreepayments.api.dropin.DropInRequest;
+import com.braintreepayments.api.dropin.DropInResult;
+import com.braintreepayments.api.exceptions.BraintreeError;
+import com.braintreepayments.api.exceptions.ErrorWithResponse;
+import com.braintreepayments.api.interfaces.BraintreeCancelListener;
+import com.braintreepayments.api.interfaces.BraintreeErrorListener;
+import com.braintreepayments.api.interfaces.ConfigurationListener;
+import com.braintreepayments.api.interfaces.PaymentMethodNonceCallback;
+import com.braintreepayments.api.interfaces.PaymentMethodNonceCreatedListener;
+import com.braintreepayments.api.interfaces.PaymentMethodNoncesUpdatedListener;
+import com.braintreepayments.api.models.Configuration;
+import com.braintreepayments.api.models.PaymentMethodNonce;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import butterknife.BindString;
import butterknife.BindView;
@@ -22,6 +37,7 @@ import ch.pizzapp.android.R;
import ch.pizzapp.android.activity.BaseActivity;
import ch.pizzapp.android.activity.CampaignProductListActivity;
import ch.pizzapp.android.activity.CreateOrderActivity;
+import ch.pizzapp.android.api.ApiConstants;
import ch.pizzapp.android.api.ApiEndPoints;
import ch.pizzapp.android.api.ApiErrorUtils;
import ch.pizzapp.android.api.ApiService;
@@ -31,6 +47,7 @@ import ch.pizzapp.android.helper.PriceHelper;
import ch.pizzapp.android.helper.SessionHelper;
import ch.pizzapp.android.helper.SharedPrefsHelper;
import ch.pizzapp.android.model.CampaignModel;
+import ch.pizzapp.android.model.PaymentMethodModel;
import ch.pizzapp.android.model.cart.CartInfoModel;
import ch.pizzapp.android.model.cart.CartProductModel;
import ch.pizzapp.android.view.AppInfoView;
@@ -65,9 +82,11 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
@BindString(R.string.no) String noText;
@BindString(R.string.restaurant_out_of_order) String restaurantOutOfOrderText;
@BindString(R.string.something_went_wrong) String genericErrorText;
+ @BindString(R.string.unknown_payment_method) String unknownPaymentMethodText;
public static final java.lang.String FRAGMENT_NAME = "orderSummaryFragment";
private int REQUEST_CODE_CAMPAIGN_PRODUCT_LIST = 7847;
+ private final int REQUEST_CODE_PAYMENT = 3784;
private CreateOrderActivity createOrderActivity;
public CreateOrderSummaryFragment() {}
@@ -96,6 +115,21 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
BaseActivity.setCurrentActivity(createOrderActivity);
getCartProducts();
}
+ else if (requestCode == REQUEST_CODE_PAYMENT) {
+ if (resultCode == Activity.RESULT_OK) {
+ DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
+ Log.i("fjehfhreuf", "vjfjvjfv");
+ //createOrder();
+ // use the result to update your UI and send the payment method nonce to your server
+ } else if (resultCode == Activity.RESULT_CANCELED) {
+ // the user canceled
+ Log.i("fjehfhreuf", "vjfjvjfv");
+ } else {
+ // handle errors here, an exception may be available in
+ Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
+ Log.i("fjehfhreuf", "vjfjvjfv");
+ }
+ }
}
@OnClick({R.id.previousTextView, R.id.nextTextView})
@@ -318,7 +352,23 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
response.body() != null){
if(response.body().isSuccess()){
- createOrder();
+
+ if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.UNKNOWN){
+ DialogHelper.hideLoadingDialog();
+ DialogHelper.showAlertDialog(BaseActivity.currentActivity, unknownPaymentMethodText);
+ }
+ else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.CASH ||
+ createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TRANSFER){
+ createOrder();
+ }
+ else if(createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType() == PaymentMethodModel.PaymentMethodType.TWINT) {
+ DialogHelper.hideLoadingDialog();
+ startTwintPayment();
+ }
+ else {
+ DialogHelper.hideLoadingDialog();
+ startBraintreePayment();
+ }
}
else {
DialogHelper.hideLoadingDialog();
@@ -342,7 +392,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
}
private void createOrder(){
- //DialogHelper.showLoadingDialog();
+ DialogHelper.showLoadingDialog();
Call> call = ApiService.apiInterface.createOrder(
ApiEndPoints.API_CREATE_ORDER + SessionHelper.getCustomerToken().getToken(), getCreateOrderParams());
call.enqueue(new Callback>() {
@@ -437,4 +487,38 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment {
});
}
+ private void startBraintreePayment(){
+
+ // CVV kodu default olarak gozukmuyor.
+ // Gozukmesi için braintree'ye login ol
+ // Go to Settings --> Processing --> CVV --> Click on Edit --> Check option 'CVV not provided(l)', Enable option 'for any transaction'
+ //
+
+ DropInRequest paymentRequest = new DropInRequest()
+ .tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX)
+ //.clientToken("eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiI3NzY2ZmNmNTQ3MDc1YWMzMGZiNmIxMzU3MTI1ZTJmODc5YjM4MmNkOTcwYmYwZmYyNmQzMWJmNGRiYjI1MjQzfGNyZWF0ZWRfYXQ9MjAxOC0wNi0xM1QxODo1Mzo0Mi4wODA4MDc5MDQrMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vb3JpZ2luLWFuYWx5dGljcy1zYW5kLnNhbmRib3guYnJhaW50cmVlLWFwaS5jb20vMzQ4cGs5Y2dmM2JneXcyYiJ9LCJ0aHJlZURTZWN1cmVFbmFibGVkIjp0cnVlLCJwYXlwYWxFbmFibGVkIjp0cnVlLCJwYXlwYWwiOnsiZGlzcGxheU5hbWUiOiJBY21lIFdpZGdldHMsIEx0ZC4gKFNhbmRib3gpIiwiY2xpZW50SWQiOm51bGwsInByaXZhY3lVcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vcHAiLCJ1c2VyQWdyZWVtZW50VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3RvcyIsImJhc2VVcmwiOiJodHRwczovL2Fzc2V0cy5icmFpbnRyZWVnYXRld2F5LmNvbSIsImFzc2V0c1VybCI6Imh0dHBzOi8vY2hlY2tvdXQucGF5cGFsLmNvbSIsImRpcmVjdEJhc2VVcmwiOm51bGwsImFsbG93SHR0cCI6dHJ1ZSwiZW52aXJvbm1lbnROb05ldHdvcmsiOnRydWUsImVudmlyb25tZW50Ijoib2ZmbGluZSIsInVudmV0dGVkTWVyY2hhbnQiOmZhbHNlLCJicmFpbnRyZWVDbGllbnRJZCI6Im1hc3RlcmNsaWVudDMiLCJiaWxsaW5nQWdyZWVtZW50c0VuYWJsZWQiOnRydWUsIm1lcmNoYW50QWNjb3VudElkIjoiYWNtZXdpZGdldHNsdGRzYW5kYm94IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sIm1lcmNoYW50SWQiOiIzNDhwazljZ2YzYmd5dzJiIiwidmVubW8iOiJvZmYifQ==")
+ //.amount("CHF1.0")
+ //.requestThreeDSecureVerification(true)
+ .disableVenmo();
+
+
+ switch (createOrderActivity.getSelectedPaymentMethod().getPaymentMethodType()){
+ case CREDIT_DEBIT_CARD:
+ paymentRequest.disableAndroidPay();
+ paymentRequest.disablePayPal();
+ break;
+ case PAYPAL:
+ paymentRequest.disableAndroidPay();
+ break;
+ case ANDROID_PAY:
+ paymentRequest.disablePayPal();
+ break;
+ }
+ startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_PAYMENT);
+ }
+
+ private void startTwintPayment(){
+
+ }
+
}
diff --git a/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java b/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java
index 6c1eefd..8549e11 100644
--- a/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java
+++ b/app/src/main/java/ch/pizzapp/android/model/PaymentMethodModel.java
@@ -7,6 +7,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import ch.pizzapp.android.api.ApiConstants;
+
/**
* Created by cimenmus on 17/10/2017.
*/
@@ -21,6 +23,17 @@ public class PaymentMethodModel {
@Expose @SerializedName("sort_order")
private String sortOrder;
+ public enum PaymentMethodType {
+ CREDIT_DEBIT_CARD,
+ CASH,
+ TRANSFER,
+ PAYPAL,
+ TWINT,
+ ANDROID_PAY,
+ APPLE_PAY,
+ UNKNOWN
+ }
+
private void checkNull(){
if(code == null)
@@ -51,6 +64,28 @@ public class PaymentMethodModel {
});
}
+
+ public PaymentMethodType getPaymentMethodType() {
+ switch (code){
+ case ApiConstants.PAYMENT_METHOD_CODE_CREDIT_DEBIT_CARD:
+ return PaymentMethodType.CREDIT_DEBIT_CARD;
+ case ApiConstants.PAYMENT_METHOD_CODE_BANK_CASH:
+ return PaymentMethodType.CASH;
+ case ApiConstants.PAYMENT_METHOD_CODE_TRANSFER:
+ return PaymentMethodType.TRANSFER;
+ case ApiConstants.PAYMENT_METHOD_CODE_PAYPAL:
+ return PaymentMethodType.PAYPAL;
+ case ApiConstants.PAYMENT_METHOD_CODE_TWINT:
+ return PaymentMethodType.TWINT;
+ case ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY:
+ return PaymentMethodType.ANDROID_PAY;
+ case ApiConstants.PAYMENT_METHOD_CODE_APPLE_PAY:
+ return PaymentMethodType.APPLE_PAY;
+ default:
+ return PaymentMethodType.UNKNOWN;
+ }
+ }
+
public String getCode() {
return code;
}
diff --git a/app/src/main/res/layout/activity_payment.xml b/app/src/main/res/layout/activity_payment.xml
new file mode 100644
index 0000000..d70db3e
--- /dev/null
+++ b/app/src/main/res/layout/activity_payment.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6e1cc8a..4dc58fe 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -171,6 +171,8 @@
ZAHLUNGSWEISE
ZWISCHENSUMME
NACHRICHT
+
+ Bilinmeyen ödeme yöntemi.