- package store.panda.client.presentation.screens.cartandordering.payment;
- import android.annotation.SuppressLint;
- import android.annotation.TargetApi;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.os.Build;
- import android.os.Bundle;
- import android.support.annotation.NonNull;
- import android.support.v4.app.TaskStackBuilder;
- import android.support.v7.app.AlertDialog;
- import android.support.v7.widget.Toolbar;
- import android.view.KeyEvent;
- import android.view.View;
- import android.webkit.WebResourceRequest;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- import android.widget.ProgressBar;
- import android.widget.ViewFlipper;
- import com.transitionseverywhere.TransitionManager;
- import javax.inject.Inject;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import ru.handh.jin.R;
- import store.panda.client.data.model.Cart;
- import store.panda.client.domain.analytics.PandaoAnalytics;
- import store.panda.client.presentation.base.BaseDaggerActivity;
- import store.panda.client.presentation.screens.main.MainActivity;
- import store.panda.client.presentation.screens.orders.order.screen.OrdersHistoryActivity;
- import store.panda.client.presentation.util.ViewUtil;
- /**
- * Created by Konstantin Aleksashin on 20.07.17.
- */
- public class PaymentActivity extends BaseDaggerActivity implements PaymentMvpView {
- private static final String PAYMENT_LINK_SUCCESS = "/payment/success";
- private static final String PAYMENT_LINK_FAIL = "/payment/fail";
- private static final String BUNDLE_PAYMENT_FINISHED = "payment_finished";
- private static final int VIEW_PAYMENT = 0;
- private static final int VIEW_CLEAR_CART_PROGRESS = 1;
- public static final String EXTRA_PAYMENT_LINK = "ru.handh.jin.EXTRA.paymentLink";
- public static final String EXTRA_CART = "cart";
- @BindView(R.id.webView) WebView webView;
- @BindView(R.id.toolbarPayment) Toolbar toolbarPayment;
- @BindView(R.id.viewFlipper) ViewFlipper viewFlipper;
- @BindView(R.id.progressBar) ProgressBar progressBar;
- private boolean paymentFinished;
- public static Intent createStartIntent(Context context, @NonNull String paymentLink, @NonNull Cart cart) {
- PandaoAnalytics.trackShared(PandaoAnalytics.PandaoEvent.TRANSITION_TO_PAYMENT);
- PandaoAnalytics.track(PandaoAnalytics.PandaoEvent.TRANSITION_TO_PAYMENT);
- Intent intent = new Intent(context, PaymentActivity.class);
- intent.putExtra(EXTRA_PAYMENT_LINK, paymentLink);
- intent.putExtra(EXTRA_CART, cart);
- return intent;
- }
- @Inject PaymentPresenter paymentPresenter;
- @SuppressLint("SetJavaScriptEnabled")
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- activityComponent().inject(this);
- setContentView(R.layout.activity_payment);
- ButterKnife.bind(this);
- paymentPresenter.attachView(this);
- toolbarPayment.setTitle(R.string.cart_order_payment_screen_title);
- ViewUtil.showCrossOnToolbarAndSetFinishClick(this, toolbarPayment);
- WebSettings webSettings = webView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- webView.setWebViewClient(new MyWebViewClient());
- if (null != savedInstanceState) {
- paymentFinished = savedInstanceState.getBoolean(BUNDLE_PAYMENT_FINISHED, false);
- }
- paymentPresenter.onViewCreate(getIntent().getExtras().getString(EXTRA_PAYMENT_LINK), paymentFinished);
- }
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putBoolean(BUNDLE_PAYMENT_FINISHED, paymentFinished);
- }
- @Override
- protected void onDestroy() {
- webView.destroy();
- paymentPresenter.detachView();
- super.onDestroy();
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // Check if the key event was the Back button and if there's history
- if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack() && viewFlipper.getDisplayedChild() == VIEW_PAYMENT) {
- webView.goBack();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
- @Override
- public void loadUrl(String url) {
- webView.loadUrl(url);
- }
- @Override
- public void showSuccessView() {
- TaskStackBuilder.create(this)
- .addNextIntentWithParentStack(MainActivity.createStartIntent(this))
- .addNextIntent(OrdersHistoryActivity.createStartIntent(this, true))
- .startActivities();
- }
- @Override
- public void setPaymentFinishedState() {
- paymentFinished = true;
- }
- @Override
- public void showErrorPaymentDialog() {
- new AlertDialog.Builder(this)
- .setTitle(R.string.cart_order_payment_fail_alert_title)
- .setMessage(R.string.cart_order_payment_fail_alert_details)
- .setCancelable(false)
- .setPositiveButton(R.string.dialog_action_ok, (dialog, which) -> finish())
- .show();
- }
- @Override
- public void showClearCartProgressView() {
- if (viewFlipper.getDisplayedChild() != VIEW_CLEAR_CART_PROGRESS) {
- viewFlipper.setDisplayedChild(VIEW_CLEAR_CART_PROGRESS);
- }
- }
- private class MyWebViewClient extends WebViewClient {
- @SuppressWarnings("deprecation")
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- return shouldOverrideUrlLoading(url);
- }
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
- return shouldOverrideUrlLoading(request.getUrl().getPath());
- }
- @Override
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
- if (!checkUrl(url)) {
- progressBar.setVisibility(View.VISIBLE);
- } else {
- webView.stopLoading();
- }
- }
- @Override
- public void onPageFinished(WebView view, String url) {
- TransitionManager.beginDelayedTransition(viewFlipper);
- checkUrl(url);
- progressBar.setVisibility(View.GONE);
- }
- private boolean shouldOverrideUrlLoading(String url) {
- return checkUrl(url);
- }
- }
- private boolean checkUrl(String url) {
- if (url.contains(PAYMENT_LINK_SUCCESS)) {
- paymentPresenter.performSuccessfullPayment(getIntent().getParcelableExtra(EXTRA_CART));
- return true;
- } else if (url.contains(PAYMENT_LINK_FAIL)) {
- paymentPresenter.performFailPayment();
- return true;
- }
- return false;
- }
- @Override
- public void hideWebView() {
- webView.setVisibility(View.INVISIBLE);
- }
- }