package com.stripe.wrap.pay.testharness; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.BooleanResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.wallet.FullWallet; import com.google.android.gms.wallet.FullWalletRequest; import com.google.android.gms.wallet.IsReadyToPayRequest; import com.google.android.gms.wallet.MaskedWallet; import com.google.android.gms.wallet.fragment.SupportWalletFragment; import com.google.android.gms.wallet.fragment.WalletFragmentOptions; import com.stripe.android.model.StripePaymentSource; import com.stripe.wrap.pay.activity.StripeAndroidPayActivity; public class TestAndroidPayActivity extends StripeAndroidPayActivity { AndroidPayAvailabilityChooser mAndroidPayAvailabilityChooser; GoogleApiClientMockBuilder mGoogleApiClientMockBuilder; StripeAndroidPayActivityListener mListener; public void setStripeAppCompatActivityListener(StripeAndroidPayActivityListener listener) { mListener = listener; } public void setGoogleApiClientMockBuilder(GoogleApiClientMockBuilder builder) { mGoogleApiClientMockBuilder = builder; } public void setAndroidPayAvailabilityChooser(AndroidPayAvailabilityChooser chooser) { mAndroidPayAvailabilityChooser = chooser; } @NonNull @Override protected GoogleApiClient buildGoogleApiClient() { return mGoogleApiClientMockBuilder.getMockGoogleApiClient(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (mListener != null) { mListener.onActivityResult(requestCode, resultCode, data); } } @Override protected int getWalletEnvironment() { int walletEnvironment = super.getWalletEnvironment(); if (mListener != null) { mListener.getWalletEnvironment(walletEnvironment); } return walletEnvironment; } @Override protected int getWalletTheme() { int walletTheme = super.getWalletTheme(); if (mListener != null) { mListener.getWalletTheme(walletTheme); } return walletTheme; } @NonNull @Override protected WalletFragmentOptions getWalletFragmentOptions(int walletFragmentMode) { WalletFragmentOptions options = super.getWalletFragmentOptions(walletFragmentMode); if (mListener != null) { mListener.getWalletFragmentOptions(options); } return options; } public WalletFragmentOptions accessWalletFragmentOptions(int walletFragmentMode) { return getWalletFragmentOptions(walletFragmentMode); } @Override protected void addBuyButtonWalletFragment(@NonNull SupportWalletFragment walletFragment) { if (mListener != null) { mListener.addBuyButtonWalletFragment(walletFragment); } } @Override protected void addConfirmationWalletFragment(@NonNull SupportWalletFragment walletFragment) { if (mListener != null) { mListener.addConfirmationWalletFragment(walletFragment); } } @Override protected void onBeforeAndroidPayAvailable() { super.onBeforeAndroidPayAvailable(); if (mListener != null) { mListener.onBeforeAndroidPayAvailable(); } } @Override protected void onAfterAndroidPayCheckComplete() { super.onAfterAndroidPayCheckComplete(); if (mListener != null) { mListener.onAfterAndroidPayCheckComplete(); } } @Override protected void onAndroidPayAvailable() { if (mListener != null) { mListener.onAndroidPayAvailable(); } } @Override protected void onAndroidPayNotAvailable() { if (mListener != null) { mListener.onAndroidPayNotAvailable(); } } @Override protected void handleError(int errorCode) { if (mListener != null) { mListener.handleError(errorCode); } } @Override protected void loadFullWallet(@NonNull FullWalletRequest fullWalletRequest) { super.loadFullWallet(fullWalletRequest); if (mListener != null) { mListener.loadFullWallet(fullWalletRequest); } } @Override protected void onChangedMaskedWalletRetrieved(@Nullable MaskedWallet maskedWallet) { super.onChangedMaskedWalletRetrieved(maskedWallet); if (mListener != null) { mListener.onConfirmedMaskedWalletRetrieved(maskedWallet); } } @Override protected void onMaskedWalletRetrieved(@Nullable MaskedWallet maskedWallet) { if (mListener != null) { mListener.onMaskedWalletRetrieved(maskedWallet); } } @Override protected void onStripePaymentSourceReturned( FullWallet wallet, StripePaymentSource paymentSource) { super.onStripePaymentSourceReturned(wallet, paymentSource); if (mListener != null) { mListener.onStripePaymentSourceReturned(wallet, paymentSource); } } @Override protected void verifyAndPrepareAndroidPayControls( @NonNull GoogleApiClient googleApiClient, @NonNull IsReadyToPayRequest isReadyToPayRequest) { if (mListener != null && mAndroidPayAvailabilityChooser != null) { mListener.verifyAndPrepareAndroidPayControls(isReadyToPayRequest); // Simulate the check completing onAfterAndroidPayCheckComplete(); BooleanResult result = mAndroidPayAvailabilityChooser.doesAndroidPayCheckSucceed(); if (result.getStatus().isSuccess() && result.getValue()) { createAndAddBuyButtonWalletFragment(); } else { onAndroidPayNotAvailable(); } } } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { super.onConnectionFailed(connectionResult); if (mListener != null) { mListener.onConnectionFailed(connectionResult); } } /** * Listener that acts as a shadow of this Activity */ public interface StripeAndroidPayActivityListener { void addBuyButtonWalletFragment(SupportWalletFragment walletFragment); void addConfirmationWalletFragment(SupportWalletFragment walletFragment); void getWalletEnvironment(int walletEnvironment); void getWalletFragmentOptions(WalletFragmentOptions options); void getWalletTheme(int walletTheme); void handleError(int errorCode); void loadFullWallet(FullWalletRequest fullWalletRequest); void onActivityResult(int requestCode, int resultCode, Intent data); void onAfterAndroidPayCheckComplete(); void onAndroidPayAvailable(); void onAndroidPayNotAvailable(); void onBeforeAndroidPayAvailable(); void onConfirmedMaskedWalletRetrieved(MaskedWallet maskedWallet); void onConnectionFailed(@NonNull ConnectionResult connectionResult); void onMaskedWalletRetrieved(MaskedWallet maskedWallet); void onStripePaymentSourceReturned(FullWallet fullWallet, StripePaymentSource paySource); void verifyAndPrepareAndroidPayControls(@NonNull IsReadyToPayRequest payRequest); } public interface GoogleApiClientMockBuilder { GoogleApiClient getMockGoogleApiClient(); } public interface AndroidPayAvailabilityChooser { BooleanResult doesAndroidPayCheckSucceed(); } }