Skip to content

Commit ec7aa3f

Browse files
committed
React Native 0.31 support
1 parent ae6c863 commit ec7aa3f

File tree

4 files changed

+85
-31
lines changed

4 files changed

+85
-31
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ android {
2020

2121
dependencies {
2222
compile fileTree(dir: "libs", include: ["*.jar"])
23-
compile "com.facebook.react:react-native:0.15.+"
23+
compile "com.facebook.react:react-native:+"
2424
compile 'com.braintreepayments.api:braintree:2.+'
2525
compile 'com.braintreepayments.api:drop-in:2.+'
2626
}

index.android.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
'use strict';
22

3-
var Braintree = require('react-native').NativeModules.Braintree;
3+
import { NativeModules, processColor } from 'react-native';
4+
var Braintree = NativeModules.Braintree;
45

56
module.exports = {
6-
paymentRequest(clientToken) {
7+
setup(token) {
78
return new Promise(function(resolve, reject) {
8-
Braintree.paymentRequest(
9-
clientToken,
10-
(nonce) => resolve(nonce),
11-
(error) => reject(error)
12-
);
13-
})
14-
},
9+
Braintree.setup(token, (test) => resolve(test), (err) => reject(err));
10+
});
11+
},
12+
13+
getCardNonce(cardNumber, expirationMonth, expirationYear) {
14+
return new Promise(function(resolve, reject) {
15+
Braintree.getCardNonce(cardNumber, expirationMonth, expirationYear, (nonce) => resolve(nonce), (err) => reject(err))
16+
});
17+
},
18+
19+
showPaymentViewController() {
20+
return new Promise(function(resolve, reject) {
21+
Braintree.paymentRequest((nonce) => resolve(nonce), (error) => reject(error));
22+
});
23+
},
1524
};

src/main/java/com/surialabs/rn/braintree/Braintree.java

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,97 @@
77
import com.braintreepayments.api.PaymentRequest;
88
import com.braintreepayments.api.models.PaymentMethodNonce;
99
import com.braintreepayments.api.BraintreePaymentActivity;
10+
import com.braintreepayments.api.BraintreeFragment;
11+
import com.braintreepayments.api.exceptions.InvalidArgumentException;
12+
import com.braintreepayments.api.models.CardBuilder;
13+
import com.braintreepayments.api.Card;
14+
import com.braintreepayments.api.interfaces.PaymentMethodNonceCreatedListener;
1015

1116
import com.facebook.react.bridge.Callback;
1217
import com.facebook.react.bridge.ReactApplicationContext;
1318
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1419
import com.facebook.react.bridge.ReactMethod;
20+
import com.facebook.react.bridge.ActivityEventListener;
1521

16-
public class Braintree extends ReactContextBaseJavaModule {
22+
public class Braintree extends ReactContextBaseJavaModule implements ActivityEventListener {
1723
private static final int PAYMENT_REQUEST = 1;
24+
private String token;
1825

1926
private Callback successCallback;
2027
private Callback errorCallback;
2128

2229
private Context mActivityContext;
2330

24-
public Braintree(ReactApplicationContext reactContext, Context activityContext) {
31+
private BraintreeFragment mBraintreeFragment;
32+
33+
public Braintree(ReactApplicationContext reactContext) {
2534
super(reactContext);
26-
this.mActivityContext = activityContext;
35+
reactContext.addActivityEventListener(this);
2736
}
2837

2938
@Override
3039
public String getName() {
3140
return "Braintree";
3241
}
3342

43+
public String getToken() {
44+
return this.token;
45+
}
46+
47+
public void setToken(String token) {
48+
this.token = token;
49+
}
50+
51+
@ReactMethod
52+
public void setup(final String token, final Callback successCallback, final Callback errorCallback) {
53+
try {
54+
this.mBraintreeFragment = BraintreeFragment.newInstance(getCurrentActivity(), token);
55+
this.mBraintreeFragment.addListener(new PaymentMethodNonceCreatedListener() {
56+
@Override
57+
public void onPaymentMethodNonceCreated(PaymentMethodNonce paymentMethodNonce) {
58+
nonceCallback(paymentMethodNonce.getNonce());
59+
}
60+
});
61+
this.setToken(token);
62+
successCallback.invoke(this.getToken());
63+
} catch (InvalidArgumentException e) {
64+
errorCallback.invoke(e.getMessage());
65+
}
66+
}
67+
68+
@ReactMethod
69+
public void getCardNonce(final String cardNumber, final String expirationMonth, final String expirationYear, final Callback successCallback, final Callback errorCallback) {
70+
this.successCallback = successCallback;
71+
this.errorCallback = errorCallback;
72+
73+
CardBuilder cardBuilder = new CardBuilder()
74+
.cardNumber(cardNumber)
75+
.expirationMonth(expirationMonth)
76+
.expirationYear(expirationYear);
77+
78+
Card.tokenize(this.mBraintreeFragment, cardBuilder);
79+
}
80+
81+
public void nonceCallback(String nonce) {
82+
this.successCallback.invoke(nonce);
83+
}
84+
3485
@ReactMethod
35-
public void paymentRequest(final String clientToken, final Callback successCallback, final Callback errorCallback) {
86+
public void paymentRequest(final Callback successCallback, final Callback errorCallback) {
3687
this.successCallback = successCallback;
3788
this.errorCallback = errorCallback;
3889

3990
PaymentRequest paymentRequest = new PaymentRequest()
40-
.clientToken(clientToken);
91+
.clientToken(this.getToken());
4192

42-
((Activity)this.mActivityContext).startActivityForResult(
43-
paymentRequest.getIntent(this.mActivityContext),
93+
(getCurrentActivity()).startActivityForResult(
94+
paymentRequest.getIntent(getCurrentActivity()),
4495
PAYMENT_REQUEST
4596
);
4697
}
4798

48-
public void handleActivityResult(final int requestCode, final int resultCode, final Intent data) {
99+
@Override
100+
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
49101
if (requestCode == PAYMENT_REQUEST) {
50102
switch (resultCode) {
51103
case Activity.RESULT_OK:
@@ -66,4 +118,9 @@ public void handleActivityResult(final int requestCode, final int resultCode, fi
66118
}
67119
}
68120
}
121+
122+
@Override
123+
public void onNewIntent(Intent intent){
124+
125+
}
69126
}
Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.surialabs.rn.braintree;
22

3-
import android.content.Intent;
4-
import android.content.Context;
5-
63
import com.facebook.react.ReactPackage;
74
import com.facebook.react.bridge.JavaScriptModule;
85
import com.facebook.react.bridge.NativeModule;
@@ -14,17 +11,12 @@
1411
import java.util.List;
1512

1613
public class BraintreePackage implements ReactPackage {
17-
private Context mContext;
1814
private Braintree mModuleInstance;
1915

20-
public BraintreePackage(Context activityContext) {
21-
mContext = activityContext;
22-
}
23-
2416
@Override
2517
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
2618
List<NativeModule> modules = new ArrayList<>();
27-
mModuleInstance = new Braintree(reactContext, mContext);
19+
mModuleInstance = new Braintree(reactContext);
2820

2921
modules.add(mModuleInstance);
3022
return modules;
@@ -39,8 +31,4 @@ public List<Class<? extends JavaScriptModule>> createJSModules() {
3931
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
4032
return Collections.emptyList();
4133
}
42-
43-
public void handleActivityResult(final int requestCode, final int resultCode, final Intent data) {
44-
mModuleInstance.handleActivityResult(requestCode, resultCode, data);
45-
}
4634
}

0 commit comments

Comments
 (0)