From Blush Terrapin, 5 Years ago, written in Plain Text.
Embed
  1. package store.panda.client.presentation.screens.cartandordering.payment;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.annotation.TargetApi;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.graphics.Bitmap;
  8. import android.os.Build;
  9. import android.os.Bundle;
  10. import android.support.annotation.NonNull;
  11. import android.support.v4.app.TaskStackBuilder;
  12. import android.support.v7.app.AlertDialog;
  13. import android.support.v7.widget.Toolbar;
  14. import android.view.KeyEvent;
  15. import android.view.View;
  16. import android.webkit.WebResourceRequest;
  17. import android.webkit.WebSettings;
  18. import android.webkit.WebView;
  19. import android.webkit.WebViewClient;
  20. import android.widget.ProgressBar;
  21. import android.widget.ViewFlipper;
  22.  
  23. import com.transitionseverywhere.TransitionManager;
  24.  
  25. import javax.inject.Inject;
  26.  
  27. import butterknife.BindView;
  28. import butterknife.ButterKnife;
  29. import ru.handh.jin.R;
  30. import store.panda.client.data.model.Cart;
  31. import store.panda.client.domain.analytics.PandaoAnalytics;
  32. import store.panda.client.presentation.base.BaseDaggerActivity;
  33. import store.panda.client.presentation.screens.main.MainActivity;
  34. import store.panda.client.presentation.screens.orders.order.screen.OrdersHistoryActivity;
  35. import store.panda.client.presentation.util.ViewUtil;
  36.  
  37. /**
  38.  * Created by Konstantin Aleksashin on 20.07.17.
  39.  */
  40.  
  41. public class PaymentActivity extends BaseDaggerActivity implements PaymentMvpView {
  42.     private static final String PAYMENT_LINK_SUCCESS = "/payment/success";
  43.     private static final String PAYMENT_LINK_FAIL = "/payment/fail";
  44.     private static final String BUNDLE_PAYMENT_FINISHED = "payment_finished";
  45.  
  46.     private static final int VIEW_PAYMENT = 0;
  47.     private static final int VIEW_CLEAR_CART_PROGRESS = 1;
  48.  
  49.     public static final String EXTRA_PAYMENT_LINK = "ru.handh.jin.EXTRA.paymentLink";
  50.     public static final String EXTRA_CART = "cart";
  51.  
  52.     @BindView(R.id.webView) WebView webView;
  53.     @BindView(R.id.toolbarPayment) Toolbar toolbarPayment;
  54.     @BindView(R.id.viewFlipper) ViewFlipper viewFlipper;
  55.     @BindView(R.id.progressBar) ProgressBar progressBar;
  56.  
  57.     private boolean paymentFinished;
  58.  
  59.     public static Intent createStartIntent(Context context, @NonNull String paymentLink, @NonNull Cart cart) {
  60.         PandaoAnalytics.trackShared(PandaoAnalytics.PandaoEvent.TRANSITION_TO_PAYMENT);
  61.         PandaoAnalytics.track(PandaoAnalytics.PandaoEvent.TRANSITION_TO_PAYMENT);
  62.         Intent intent = new Intent(context, PaymentActivity.class);
  63.         intent.putExtra(EXTRA_PAYMENT_LINK, paymentLink);
  64.         intent.putExtra(EXTRA_CART, cart);
  65.         return intent;
  66.     }
  67.  
  68.     @Inject PaymentPresenter paymentPresenter;
  69.  
  70.     @SuppressLint("SetJavaScriptEnabled")
  71.     @Override
  72.     protected void onCreate(Bundle savedInstanceState) {
  73.         super.onCreate(savedInstanceState);
  74.         activityComponent().inject(this);
  75.         setContentView(R.layout.activity_payment);
  76.         ButterKnife.bind(this);
  77.         paymentPresenter.attachView(this);
  78.         toolbarPayment.setTitle(R.string.cart_order_payment_screen_title);
  79.         ViewUtil.showCrossOnToolbarAndSetFinishClick(this, toolbarPayment);
  80.  
  81.         WebSettings webSettings = webView.getSettings();
  82.         webSettings.setJavaScriptEnabled(true);
  83.         webView.setWebViewClient(new MyWebViewClient());
  84.  
  85.         if (null != savedInstanceState) {
  86.             paymentFinished = savedInstanceState.getBoolean(BUNDLE_PAYMENT_FINISHED, false);
  87.         }
  88.         paymentPresenter.onViewCreate(getIntent().getExtras().getString(EXTRA_PAYMENT_LINK), paymentFinished);
  89.     }
  90.  
  91.     @Override
  92.     protected void onSaveInstanceState(Bundle outState) {
  93.         super.onSaveInstanceState(outState);
  94.         outState.putBoolean(BUNDLE_PAYMENT_FINISHED, paymentFinished);
  95.     }
  96.  
  97.     @Override
  98.     protected void onDestroy() {
  99.         webView.destroy();
  100.         paymentPresenter.detachView();
  101.         super.onDestroy();
  102.     }
  103.  
  104.     @Override
  105.     public boolean onKeyDown(int keyCode, KeyEvent event) {
  106.         // Check if the key event was the Back button and if there's history
  107.         if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack() && viewFlipper.getDisplayedChild() == VIEW_PAYMENT) {
  108.             webView.goBack();
  109.             return true;
  110.         }
  111.         return super.onKeyDown(keyCode, event);
  112.     }
  113.  
  114.     @Override
  115.     public void loadUrl(String url) {
  116.         webView.loadUrl(url);
  117.     }
  118.  
  119.     @Override
  120.     public void showSuccessView() {
  121.         TaskStackBuilder.create(this)
  122.                 .addNextIntentWithParentStack(MainActivity.createStartIntent(this))
  123.                 .addNextIntent(OrdersHistoryActivity.createStartIntent(this, true))
  124.                 .startActivities();
  125.     }
  126.  
  127.     @Override
  128.     public void setPaymentFinishedState() {
  129.         paymentFinished = true;
  130.     }
  131.  
  132.     @Override
  133.     public void showErrorPaymentDialog() {
  134.         new AlertDialog.Builder(this)
  135.                 .setTitle(R.string.cart_order_payment_fail_alert_title)
  136.                 .setMessage(R.string.cart_order_payment_fail_alert_details)
  137.                 .setCancelable(false)
  138.                 .setPositiveButton(R.string.dialog_action_ok, (dialog, which) -> finish())
  139.                 .show();
  140.     }
  141.  
  142.     @Override
  143.     public void showClearCartProgressView() {
  144.         if (viewFlipper.getDisplayedChild() != VIEW_CLEAR_CART_PROGRESS) {
  145.             viewFlipper.setDisplayedChild(VIEW_CLEAR_CART_PROGRESS);
  146.         }
  147.     }
  148.  
  149.     private class MyWebViewClient extends WebViewClient {
  150.  
  151.         @SuppressWarnings("deprecation")
  152.         @Override
  153.         public boolean shouldOverrideUrlLoading(WebView view, String url) {
  154.             return shouldOverrideUrlLoading(url);
  155.         }
  156.  
  157.         @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  158.         @Override
  159.         public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
  160.             return shouldOverrideUrlLoading(request.getUrl().getPath());
  161.         }
  162.  
  163.         @Override
  164.         public void onPageStarted(WebView view, String url, Bitmap favicon) {
  165.             if (!checkUrl(url)) {
  166.                 progressBar.setVisibility(View.VISIBLE);
  167.             } else {
  168.                 webView.stopLoading();
  169.             }
  170.         }
  171.  
  172.         @Override
  173.         public void onPageFinished(WebView view, String url) {
  174.             TransitionManager.beginDelayedTransition(viewFlipper);
  175.             checkUrl(url);
  176.             progressBar.setVisibility(View.GONE);
  177.         }
  178.  
  179.         private boolean shouldOverrideUrlLoading(String url) {
  180.             return checkUrl(url);
  181.         }
  182.     }
  183.  
  184.     private boolean checkUrl(String url) {
  185.         if (url.contains(PAYMENT_LINK_SUCCESS)) {
  186.             paymentPresenter.performSuccessfullPayment(getIntent().getParcelableExtra(EXTRA_CART));
  187.             return true;
  188.         } else if (url.contains(PAYMENT_LINK_FAIL)) {
  189.             paymentPresenter.performFailPayment();
  190.             return true;
  191.         }
  192.         return false;
  193.     }
  194.  
  195.     @Override
  196.     public void hideWebView() {
  197.         webView.setVisibility(View.INVISIBLE);
  198.     }
  199. }
  200.