From 2295153cabcf4611d8291cf6de1e994db9f103ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mustafa=20ic=CC=A7men?= Date: Fri, 29 Aug 2025 22:00:17 +0200 Subject: [PATCH] update braintree sdk --- app/build.gradle | 3 +- .../android/activity/CreateOrderActivity.java | 49 +++++- .../android/activity/LoginActivity.java | 36 ++++- .../android/activity/MyAddressesActivity.java | 3 + .../android/activity/RegisterActivity.java | 4 + .../adapter/pager/OrderPagerAdapter.java | 52 ------ .../CreateOrderSummaryFragment.java | 153 +++++++++--------- .../android/helper/SessionHelper.java | 9 ++ .../android/helper/SharedPrefsHelper.java | 19 +++ .../android/model/AddressModel.java | 6 + .../android/model/PaymentTokenModel.java | 4 +- 11 files changed, 201 insertions(+), 137 deletions(-) delete mode 100644 app/src/main/java/ch/pizzalemon/android/adapter/pager/OrderPagerAdapter.java diff --git a/app/build.gradle b/app/build.gradle index f06b094..9b42e93 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,8 +79,7 @@ dependencies { implementation 'com.wdullaer:materialdatetimepicker:4.2.3' implementation 'org.jsoup:jsoup:1.14.2' implementation 'me.relex:circleindicator:2.1.6' - implementation 'com.braintreepayments.api:braintree:3.20.1' - implementation 'com.braintreepayments.api:drop-in:5.4.1' + implementation 'com.braintreepayments.api:drop-in:6.17.0' testImplementation 'junit:junit:4.13.2' } diff --git a/app/src/main/java/ch/pizzalemon/android/activity/CreateOrderActivity.java b/app/src/main/java/ch/pizzalemon/android/activity/CreateOrderActivity.java index ed16bfc..80e8703 100644 --- a/app/src/main/java/ch/pizzalemon/android/activity/CreateOrderActivity.java +++ b/app/src/main/java/ch/pizzalemon/android/activity/CreateOrderActivity.java @@ -8,7 +8,7 @@ import android.view.View; import android.webkit.WebView; import com.badoualy.stepperindicator.StepperIndicator; -import com.braintreepayments.api.dropin.utils.PaymentMethodType; +import com.braintreepayments.api.DropInPaymentMethod; import java.util.ArrayList; @@ -16,17 +16,27 @@ import butterknife.BindView; import butterknife.ButterKnife; import ch.pizzalemon.android.R; import ch.pizzalemon.android.api.ApiConstants; +import ch.pizzalemon.android.api.ApiEndPoints; +import ch.pizzalemon.android.api.ApiErrorUtils; +import ch.pizzalemon.android.api.ApiService; +import ch.pizzalemon.android.api.ResponseObject; import ch.pizzalemon.android.fragment.createOrder.CreateOrderNoteFragment; import ch.pizzalemon.android.fragment.createOrder.CreateOrderResultFragment; import ch.pizzalemon.android.fragment.createOrder.CreateOrderSummaryFragment; import ch.pizzalemon.android.fragment.createOrder.PaymentMethodFragment; import ch.pizzalemon.android.fragment.createOrder.ShippingAddressFragment; import ch.pizzalemon.android.fragment.createOrder.ShippingMethodFragment; +import ch.pizzalemon.android.helper.DialogHelper; +import ch.pizzalemon.android.helper.SessionHelper; import ch.pizzalemon.android.helper.SharedPrefsHelper; import ch.pizzalemon.android.model.AddressModel; import ch.pizzalemon.android.model.PaymentMethodModel; +import ch.pizzalemon.android.model.PaymentTokenModel; import ch.pizzalemon.android.model.ShippingMethodModel; import ch.pizzalemon.android.model.cart.CartInfoModel; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class CreateOrderActivity extends BaseActivity { @@ -46,6 +56,8 @@ public class CreateOrderActivity extends BaseActivity { private String couponCode; private ArrayList paymentMethodList = new ArrayList<>(); + private PaymentTokenModel paymentTokenModel = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -105,7 +117,7 @@ public class CreateOrderActivity extends BaseActivity { break; case 4: fragmentManager.beginTransaction().replace(R.id.orderFragmentsContainer, - CreateOrderSummaryFragment.newInstance()).commit(); + CreateOrderSummaryFragment.newInstance(paymentTokenModel)).commit(); break; case 5: @@ -128,7 +140,7 @@ public class CreateOrderActivity extends BaseActivity { openFragment(3); break; case CreateOrderNoteFragment.FRAGMENT_NAME: - openFragment(4); + createBraintreePaymentTokenAndOpenSummaryFragment(); break; case CreateOrderSummaryFragment.FRAGMENT_NAME: openFragment(5); @@ -212,13 +224,13 @@ public class CreateOrderActivity extends BaseActivity { this.selectedPaymentMethod = selectedPaymentMethod; } - public void setSelectedPaymentMethodForBraintree(PaymentMethodType paymentMethodType){ + public void setSelectedPaymentMethodForBraintree(DropInPaymentMethod paymentMethodType){ String paymentMethodCode = ""; switch (paymentMethodType){ case PAYPAL: paymentMethodCode = ApiConstants.PAYMENT_METHOD_CODE_PAYPAL; break; - case GOOGLE_PAYMENT: + case GOOGLE_PAY: paymentMethodCode = ApiConstants.PAYMENT_METHOD_CODE_ANDROID_PAY; break; default: @@ -250,6 +262,33 @@ public class CreateOrderActivity extends BaseActivity { } } + private void createBraintreePaymentTokenAndOpenSummaryFragment(){ + DialogHelper.showLoadingDialog(); + Call> call = ApiService.apiInterface.createBraintreePaymentToken( + "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken()); + + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess() && + response.body().getData().getToken() != null){ + paymentTokenModel = response.body().getData(); + openFragment(4); + } + else { + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.showFailedDialog(); + } + }); + } + /* @Override public void onBackPressed() { diff --git a/app/src/main/java/ch/pizzalemon/android/activity/LoginActivity.java b/app/src/main/java/ch/pizzalemon/android/activity/LoginActivity.java index 41389b8..f844272 100644 --- a/app/src/main/java/ch/pizzalemon/android/activity/LoginActivity.java +++ b/app/src/main/java/ch/pizzalemon/android/activity/LoginActivity.java @@ -16,12 +16,14 @@ import ch.pizzalemon.android.R; import ch.pizzalemon.android.api.ApiEndPoints; import ch.pizzalemon.android.api.ApiErrorUtils; import ch.pizzalemon.android.api.ApiService; +import ch.pizzalemon.android.api.ResponseArray; import ch.pizzalemon.android.api.ResponseObject; import ch.pizzalemon.android.helper.DialogHelper; import ch.pizzalemon.android.helper.PriceHelper; import ch.pizzalemon.android.helper.SessionHelper; import ch.pizzalemon.android.helper.SharedPrefsHelper; import ch.pizzalemon.android.helper.ViewHelper; +import ch.pizzalemon.android.model.AddressModel; import ch.pizzalemon.android.model.CustomerTokenModel; import ch.pizzalemon.android.model.UserModel; import ch.pizzalemon.android.model.cart.CartInfoModel; @@ -156,8 +158,7 @@ public class LoginActivity extends BaseActivity { response.body().isSuccess()){ SharedPrefsHelper.setCartItemCount(response.body().getData().getProducts().size()); SharedPrefsHelper.setCartTotalPrice(PriceHelper.removeCurrencyFromPrice(response.body().getData().getCartTotalModel().getText())); - startActivity(new Intent(LoginActivity.this, MainActivity.class)); - finishAffinity(); + getUserAddress(); } else @@ -171,4 +172,35 @@ public class LoginActivity extends BaseActivity { } }); } + + private void getUserAddress(){ + Call> call = ApiService.apiInterface.getCustomerAddresses( + SessionHelper.getSelectedStore().getStoreName(), + SessionHelper.getCustomerToken().getToken()); + call.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + DialogHelper.hideLoadingDialog(); + if(response.isSuccessful() && + response.body().getData() != null && + response.body().isSuccess()){ + if (!response.body().getData().isEmpty()){ + SessionHelper.saveUserMainAddress(response.body().getData().get(0)); + } + startActivity(new Intent(LoginActivity.this, MainActivity.class)); + finishAffinity(); + } + else { + ApiErrorUtils.parseError(response); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + DialogHelper.hideLoadingDialog(); + DialogHelper.showFailedDialog(); + } + }); + } + } diff --git a/app/src/main/java/ch/pizzalemon/android/activity/MyAddressesActivity.java b/app/src/main/java/ch/pizzalemon/android/activity/MyAddressesActivity.java index 3fe0d22..b829ca1 100644 --- a/app/src/main/java/ch/pizzalemon/android/activity/MyAddressesActivity.java +++ b/app/src/main/java/ch/pizzalemon/android/activity/MyAddressesActivity.java @@ -104,6 +104,9 @@ public class MyAddressesActivity extends BaseActivity { AddressModel.checkNull(addressModels); addressList.clear(); addressList.addAll(addressModels); + if (!addressList.isEmpty()) { + SessionHelper.saveUserMainAddress(addressList.get(0)); + } addressesRecyclerAdapter.notifyDataSetChanged(); } diff --git a/app/src/main/java/ch/pizzalemon/android/activity/RegisterActivity.java b/app/src/main/java/ch/pizzalemon/android/activity/RegisterActivity.java index a0029a2..bc5fa92 100644 --- a/app/src/main/java/ch/pizzalemon/android/activity/RegisterActivity.java +++ b/app/src/main/java/ch/pizzalemon/android/activity/RegisterActivity.java @@ -26,6 +26,7 @@ import ch.pizzalemon.android.helper.DialogHelper; import ch.pizzalemon.android.helper.SessionHelper; import ch.pizzalemon.android.helper.SharedPrefsHelper; import ch.pizzalemon.android.helper.ViewHelper; +import ch.pizzalemon.android.model.AddressModel; import ch.pizzalemon.android.model.CityModel; import ch.pizzalemon.android.model.CountryModel; import ch.pizzalemon.android.model.CustomerTokenModel; @@ -293,6 +294,9 @@ public class RegisterActivity extends BaseActivity { customerTokenModel.setStoreOfToken(SessionHelper.getSelectedStore()); SharedPrefsHelper.saveCustomerToken(customerTokenModel); SharedPrefsHelper.setCustomerLoggedIn(true); + SessionHelper.saveUserMainAddress( + new AddressModel(appEditTextList.get(6).getText() + ", " + appEditTextList.get(7).getText() + ", " + selectedCityModel.getCity()) + ); startActivity(new Intent(RegisterActivity.this, MainActivity.class)); finishAffinity(); } diff --git a/app/src/main/java/ch/pizzalemon/android/adapter/pager/OrderPagerAdapter.java b/app/src/main/java/ch/pizzalemon/android/adapter/pager/OrderPagerAdapter.java deleted file mode 100644 index 430f7db..0000000 --- a/app/src/main/java/ch/pizzalemon/android/adapter/pager/OrderPagerAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package ch.pizzalemon.android.adapter.pager; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; - -import ch.pizzalemon.android.fragment.createOrder.CreateOrderResultFragment; -import ch.pizzalemon.android.fragment.createOrder.CreateOrderSummaryFragment; -import ch.pizzalemon.android.fragment.createOrder.PaymentMethodFragment; -import ch.pizzalemon.android.fragment.createOrder.ShippingAddressFragment; -import ch.pizzalemon.android.fragment.createOrder.ShippingMethodFragment; - -/** - * Created by cimenmus on 17/10/2017. - */ - -public class OrderPagerAdapter extends FragmentPagerAdapter { - - public OrderPagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - switch (position){ - case 0: - return ShippingMethodFragment.newInstance(); - case 1: - return ShippingAddressFragment.newInstance(); - case 2: - return PaymentMethodFragment.newInstance(); - case 3: - return CreateOrderSummaryFragment.newInstance(); - case 4: - return CreateOrderResultFragment.newInstance(); - default: - return ShippingMethodFragment.newInstance(); - } - } - - @Override - public int getCount() { - return 5; - } - - /* - @Override - public CharSequence getPageTitle(int position) { - return "Page " + position; - } - */ -} \ No newline at end of file diff --git a/app/src/main/java/ch/pizzalemon/android/fragment/createOrder/CreateOrderSummaryFragment.java b/app/src/main/java/ch/pizzalemon/android/fragment/createOrder/CreateOrderSummaryFragment.java index 7722510..6bd5341 100644 --- a/app/src/main/java/ch/pizzalemon/android/fragment/createOrder/CreateOrderSummaryFragment.java +++ b/app/src/main/java/ch/pizzalemon/android/fragment/createOrder/CreateOrderSummaryFragment.java @@ -1,6 +1,7 @@ package ch.pizzalemon.android.fragment.createOrder; -import android.app.Activity; +import static com.braintreepayments.api.ThreeDSecureRequest.VERSION_2; + import android.content.Intent; import android.os.Build; import android.os.Bundle; @@ -8,7 +9,6 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,10 +19,14 @@ import android.webkit.WebViewClient; 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.models.PayPalRequest; +import com.braintreepayments.api.DropInClient; +import com.braintreepayments.api.DropInListener; +import com.braintreepayments.api.DropInRequest; +import com.braintreepayments.api.DropInResult; +import com.braintreepayments.api.PayPalRequest; +import com.braintreepayments.api.ThreeDSecureAdditionalInformation; +import com.braintreepayments.api.ThreeDSecurePostalAddress; +import com.braintreepayments.api.ThreeDSecureRequest; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import com.wdullaer.materialdatetimepicker.time.Timepoint; @@ -56,6 +60,7 @@ import ch.pizzalemon.android.helper.SharedPrefsHelper; import ch.pizzalemon.android.model.PaymentMethodModel; import ch.pizzalemon.android.model.PaymentTokenModel; import ch.pizzalemon.android.model.StoreShiftModel; +import ch.pizzalemon.android.model.UserModel; import ch.pizzalemon.android.model.cart.CartInfoModel; import ch.pizzalemon.android.model.cart.CartProductModel; import ch.pizzalemon.android.model.cart.CartTotalModel; @@ -68,7 +73,7 @@ import retrofit2.Response; * Created by cimenmus on 17/10/2017. */ -public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { +public class CreateOrderSummaryFragment extends CreateOrderBaseFragment implements DropInListener { @BindView(R.id.orderPersonFullnamePizzalinkInfoLayout) AppInfoView orderPersonFullnamePizzalinkInfoLayout; @BindView(R.id.orderShippingMethodPizzalinkInfoLayout) AppInfoView orderShippingMethodPizzalinkInfoLayout; @@ -105,10 +110,16 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { private StoreShiftModel storeShiftModel; private PaymentTokenModel braintreePaymentTokenModel; + private DropInClient dropInClient = null; + public CreateOrderSummaryFragment() {} - public static CreateOrderSummaryFragment newInstance() { - return new CreateOrderSummaryFragment(); + public static CreateOrderSummaryFragment newInstance(PaymentTokenModel paymentTokenModel) { + Bundle args = new Bundle(); + args.putSerializable("braintreePaymentTokenModel", paymentTokenModel); + CreateOrderSummaryFragment fragment = new CreateOrderSummaryFragment(); + fragment.setArguments(args); + return fragment; } @Override @@ -119,39 +130,33 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_create_order_summary, container, false); + getDataFromArguments(); ButterKnife.bind(this, view); initViews(); getCartProductsWithCommission(); return view; } - @Override - public void onResume() { - super.onResume(); - createBraintreePaymentToken(); + private void getDataFromArguments(){ + braintreePaymentTokenModel = (PaymentTokenModel) getArguments().getSerializable("braintreePaymentTokenModel"); + if (braintreePaymentTokenModel != null && braintreePaymentTokenModel.getToken() != null){ + dropInClient = new DropInClient(CreateOrderSummaryFragment.this, braintreePaymentTokenModel.getToken()); + } } @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == REQUEST_CODE_BRAINTREE_PAYMENT) { - if (resultCode == Activity.RESULT_OK) { - DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT); - createOrderActivity.setSelectedPaymentMethodForBraintree(result.getPaymentMethodType()); - createBraintreePayment(result); - // 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"); - DialogHelper.showAlertDialog(BaseActivity.currentActivity, paymentCanceledText); - } else { - // handle errors here, an exception may be available in - Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR); - DialogHelper.showAlertDialog(BaseActivity.currentActivity, error.getMessage()); - } + public void onDropInSuccess(@NonNull DropInResult dropInResult) { + if (dropInResult.getPaymentMethodType() != null && dropInResult.getPaymentMethodNonce() != null){ + createOrderActivity.setSelectedPaymentMethodForBraintree(dropInResult.getPaymentMethodType()); + createBraintreePayment(dropInResult); } } + @Override + public void onDropInFailure(@NonNull Exception error) { + DialogHelper.showAlertDialog(BaseActivity.currentActivity, error.getMessage()); + } + @OnClick({R.id.previousTextView, R.id.nextTextView}) protected void onClick(View view){ CreateOrderActivity createOrderActivity = (CreateOrderActivity) BaseActivity.currentActivity; @@ -869,46 +874,18 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { }); } - private void createBraintreePaymentToken(){ - - Call> call = ApiService.apiInterface.createBraintreePaymentToken( - "/" + SessionHelper.getSelectedStore().getStoreName() + ApiEndPoints.API_CREATE_BRAINTREE_PAYMENT_TOKEN + SessionHelper.getCustomerToken().getToken()); - - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if(response.isSuccessful() && - response.body().getData() != null && - response.body().isSuccess()){ - braintreePaymentTokenModel = response.body().getData(); - Log.i("fuhrfuhruhfr", "fhurhfurfhurfh"); - } - else { - ApiErrorUtils.parseError(response); - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - DialogHelper.showFailedDialog(); - } - }); - } - 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' - if(braintreePaymentTokenModel == null ||braintreePaymentTokenModel.getToken().isEmpty()){ + if(braintreePaymentTokenModel == null || braintreePaymentTokenModel.getToken().isEmpty() || dropInClient == null){ DialogHelper.showAlertDialog(BaseActivity.currentActivity, getString(R.string.something_went_wrong)); return; } String amountStringForBraintree = PriceHelper.removeCurrencyFromPrice(createOrderActivity.getCartInfo().getCartTotalModel().getText()); - PayPalRequest paypalRequest = new PayPalRequest(amountStringForBraintree) - .currencyCode("CHF"); - //.intent(PayPalRequest.INTENT_AUTHORIZE); + //PayPalRequest paypalRequest = new PayPalRequest(amountStringForBraintree).currencyCode("CHF");//.intent(PayPalRequest.INTENT_AUTHORIZE); /** * Paypal has two flow type: Vault and Checkout. @@ -926,17 +903,44 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { * https://developers.braintreepayments.com/guides/paypal/checkout-with-paypal/android/v3 * https://developers.braintreepayments.com/guides/paypal/vault/javascript/v2 */ - DropInRequest paymentRequest = new DropInRequest() - //.tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_SANDBOX) - //.tokenizationKey(ApiConstants.BRAINTREE_TOKENIZATION_KEY_PRODUCTION) - //.clientToken("eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiI3NzY2ZmNmNTQ3MDc1YWMzMGZiNmIxMzU3MTI1ZTJmODc5YjM4MmNkOTcwYmYwZmYyNmQzMWJmNGRiYjI1MjQzfGNyZWF0ZWRfYXQ9MjAxOC0wNi0xM1QxODo1Mzo0Mi4wODA4MDc5MDQrMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vb3JpZ2luLWFuYWx5dGljcy1zYW5kLnNhbmRib3guYnJhaW50cmVlLWFwaS5jb20vMzQ4cGs5Y2dmM2JneXcyYiJ9LCJ0aHJlZURTZWN1cmVFbmFibGVkIjp0cnVlLCJwYXlwYWxFbmFibGVkIjp0cnVlLCJwYXlwYWwiOnsiZGlzcGxheU5hbWUiOiJBY21lIFdpZGdldHMsIEx0ZC4gKFNhbmRib3gpIiwiY2xpZW50SWQiOm51bGwsInByaXZhY3lVcmwiOiJodHRwOi8vZXhhbXBsZS5jb20vcHAiLCJ1c2VyQWdyZWVtZW50VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3RvcyIsImJhc2VVcmwiOiJodHRwczovL2Fzc2V0cy5icmFpbnRyZWVnYXRld2F5LmNvbSIsImFzc2V0c1VybCI6Imh0dHBzOi8vY2hlY2tvdXQucGF5cGFsLmNvbSIsImRpcmVjdEJhc2VVcmwiOm51bGwsImFsbG93SHR0cCI6dHJ1ZSwiZW52aXJvbm1lbnROb05ldHdvcmsiOnRydWUsImVudmlyb25tZW50Ijoib2ZmbGluZSIsInVudmV0dGVkTWVyY2hhbnQiOmZhbHNlLCJicmFpbnRyZWVDbGllbnRJZCI6Im1hc3RlcmNsaWVudDMiLCJiaWxsaW5nQWdyZWVtZW50c0VuYWJsZWQiOnRydWUsIm1lcmNoYW50QWNjb3VudElkIjoiYWNtZXdpZGdldHNsdGRzYW5kYm94IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sIm1lcmNoYW50SWQiOiIzNDhwazljZ2YzYmd5dzJiIiwidmVubW8iOiJvZmYifQ==") - .clientToken(braintreePaymentTokenModel.getToken()) - .requestThreeDSecureVerification(true) - .amount(amountStringForBraintree) - .disableGooglePayment() - //.paypalRequest(paypalRequest) - .disablePayPal() - .disableVenmo(); + + UserModel user = SessionHelper.getUser(); + + ThreeDSecurePostalAddress threeDSecureBillingAddress = new ThreeDSecurePostalAddress(); + threeDSecureBillingAddress.setGivenName(user.getFirstname()); + threeDSecureBillingAddress.setSurname(user.getLastname()); + threeDSecureBillingAddress.setPhoneNumber(user.getTelephone()); + if (SessionHelper.getUserMainAddress() != null && SessionHelper.getUserMainAddress().getAddress() != null){ + threeDSecureBillingAddress.setExtendedAddress(SessionHelper.getUserMainAddress().getAddress()); + } + + ThreeDSecurePostalAddress threeDSecureShippingAddress = new ThreeDSecurePostalAddress(); + threeDSecureShippingAddress.setGivenName(user.getFirstname()); + threeDSecureShippingAddress.setSurname(user.getLastname()); + threeDSecureShippingAddress.setPhoneNumber(user.getTelephone()); + threeDSecureShippingAddress.setExtendedAddress(createOrderActivity.getSelectedShippingAddress().getAddress()); + + ThreeDSecureAdditionalInformation ThreeDSecureAdditionalInformation = new ThreeDSecureAdditionalInformation(); + ThreeDSecureAdditionalInformation.setShippingAddress(threeDSecureShippingAddress); + + ThreeDSecureRequest threeDSecureRequest = new ThreeDSecureRequest(); + threeDSecureRequest.setAmount(amountStringForBraintree); + threeDSecureRequest.setEmail(user.getEmail()); + threeDSecureRequest.setBillingAddress(threeDSecureBillingAddress); + threeDSecureRequest.setVersionRequested(VERSION_2); + threeDSecureRequest.setAdditionalInformation(ThreeDSecureAdditionalInformation); + + //DropInRequest paymentRequest = new DropInRequest(true); + DropInRequest dropInRequest = new DropInRequest(); + dropInRequest.setThreeDSecureRequest(threeDSecureRequest); + dropInRequest.setGooglePayDisabled(true); + dropInRequest.setPayPalDisabled(true); + dropInRequest.setVenmoDisabled(true); + //paymentRequest.setPayPalRequest(paypalRequest); + + dropInClient.setListener(this); + dropInClient.launchDropIn(dropInRequest); + /* @@ -960,7 +964,6 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { break; } */ - startActivityForResult(paymentRequest.getIntent(BaseActivity.currentActivity), REQUEST_CODE_BRAINTREE_PAYMENT); } private void createBraintreePayment(final DropInResult dropInResult){ @@ -974,8 +977,8 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { DialogHelper.hideLoadingDialog(); if(response.isSuccessful() && response.body().getData() != null && - response.body().isSuccess()){ - createOrder(getCreateOrderParams(dropInResult.getPaymentMethodNonce().getNonce())); + response.body().isSuccess() && dropInResult.getPaymentMethodNonce() != null){ + createOrder(getCreateOrderParams(dropInResult.getPaymentMethodNonce().getString())); } else { ApiErrorUtils.parseError(response); @@ -992,7 +995,7 @@ public class CreateOrderSummaryFragment extends CreateOrderBaseFragment { private HashMap getBraintreePaymentParams(DropInResult dropInResult){ HashMap params = new HashMap<>(); - params.put("payment_method_nonce", dropInResult.getPaymentMethodNonce().getNonce()); + params.put("payment_method_nonce", dropInResult.getPaymentMethodNonce().getString()); params.put("amount", PriceHelper.removeCurrencyFromPrice(createOrderActivity.getCartInfo().getCartTotalModel().getText())); return params; } diff --git a/app/src/main/java/ch/pizzalemon/android/helper/SessionHelper.java b/app/src/main/java/ch/pizzalemon/android/helper/SessionHelper.java index babecad..4548387 100644 --- a/app/src/main/java/ch/pizzalemon/android/helper/SessionHelper.java +++ b/app/src/main/java/ch/pizzalemon/android/helper/SessionHelper.java @@ -6,6 +6,7 @@ import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import ch.pizzalemon.android.model.AddressModel; import ch.pizzalemon.android.model.CouponModel; import ch.pizzalemon.android.model.CouponType; import ch.pizzalemon.android.model.GeneralCouponModel; @@ -125,6 +126,14 @@ public class SessionHelper { SharedPrefsHelper.saveSessionId(sessionId); } + public static void saveUserMainAddress(AddressModel addressModel){ + SharedPrefsHelper.saveUserMainAddress(addressModel); + } + + public static AddressModel getUserMainAddress(){ + return SharedPrefsHelper.getUserMainAddress(); + } + public static Calendar getTokenDeathDate(String tokenDeathTime){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); diff --git a/app/src/main/java/ch/pizzalemon/android/helper/SharedPrefsHelper.java b/app/src/main/java/ch/pizzalemon/android/helper/SharedPrefsHelper.java index 70ac055..1a84c54 100644 --- a/app/src/main/java/ch/pizzalemon/android/helper/SharedPrefsHelper.java +++ b/app/src/main/java/ch/pizzalemon/android/helper/SharedPrefsHelper.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import ch.pizzalemon.android.activity.BaseActivity; +import ch.pizzalemon.android.model.AddressModel; import ch.pizzalemon.android.model.CategoryModel; import ch.pizzalemon.android.model.GeneralCouponModel; import ch.pizzalemon.android.model.PersonalCouponModel; @@ -41,6 +42,8 @@ public class SharedPrefsHelper { private static final String PREF_KEY_SELECTED_PERSONAL_COUPON = SHARED_PREFS_NAME + "selectedPersonalCoupon"; private static final String PREF_KEY_SESSION_ID = SHARED_PREFS_NAME + "sessionId"; + private static final String PREF_KEY_USER_MAIN_ADDRESS = SHARED_PREFS_NAME + "userMainAddress"; + private static SharedPreferences sharedPreferences = BaseActivity.currentActivity .getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE); @@ -98,6 +101,7 @@ public class SharedPrefsHelper { editor.remove(PREF_KEY_SELECTED_GENERAL_COUPON); editor.remove(PREF_KEY_SELECTED_PERSONAL_COUPON); editor.remove(PREF_KEY_SESSION_ID); + editor.remove(PREF_KEY_USER_MAIN_ADDRESS); editor.apply(); } @@ -227,6 +231,21 @@ public class SharedPrefsHelper { } + public static void saveUserMainAddress(AddressModel addressModel){ + editor.putString(PREF_KEY_USER_MAIN_ADDRESS, gson.toJson(addressModel)); + editor.apply(); + } + + public static AddressModel getUserMainAddress(){ + return gson.fromJson(sharedPreferences.getString(PREF_KEY_USER_MAIN_ADDRESS, ""), AddressModel.class); + } + + public static void clearUserMainAddress(){ + editor.remove(PREF_KEY_USER_MAIN_ADDRESS); + editor.apply(); + } + + /* public static void saveCategoryList(ArrayList cats){ diff --git a/app/src/main/java/ch/pizzalemon/android/model/AddressModel.java b/app/src/main/java/ch/pizzalemon/android/model/AddressModel.java index 7f6d545..36107dc 100644 --- a/app/src/main/java/ch/pizzalemon/android/model/AddressModel.java +++ b/app/src/main/java/ch/pizzalemon/android/model/AddressModel.java @@ -18,6 +18,12 @@ public class AddressModel { private String address; private boolean isSelected; + public AddressModel(String address){ + id = ""; + this.address = address; + isSelected = true; + } + private void checkNull(){ if(id == null) diff --git a/app/src/main/java/ch/pizzalemon/android/model/PaymentTokenModel.java b/app/src/main/java/ch/pizzalemon/android/model/PaymentTokenModel.java index e88a6b7..43f83db 100644 --- a/app/src/main/java/ch/pizzalemon/android/model/PaymentTokenModel.java +++ b/app/src/main/java/ch/pizzalemon/android/model/PaymentTokenModel.java @@ -1,6 +1,8 @@ package ch.pizzalemon.android.model; -public class PaymentTokenModel { +import java.io.Serializable; + +public class PaymentTokenModel implements Serializable { private String token;