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); } }