7
7
import com .braintreepayments .api .PaymentRequest ;
8
8
import com .braintreepayments .api .models .PaymentMethodNonce ;
9
9
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 ;
10
15
11
16
import com .facebook .react .bridge .Callback ;
12
17
import com .facebook .react .bridge .ReactApplicationContext ;
13
18
import com .facebook .react .bridge .ReactContextBaseJavaModule ;
14
19
import com .facebook .react .bridge .ReactMethod ;
20
+ import com .facebook .react .bridge .ActivityEventListener ;
15
21
16
- public class Braintree extends ReactContextBaseJavaModule {
22
+ public class Braintree extends ReactContextBaseJavaModule implements ActivityEventListener {
17
23
private static final int PAYMENT_REQUEST = 1 ;
24
+ private String token ;
18
25
19
26
private Callback successCallback ;
20
27
private Callback errorCallback ;
21
28
22
29
private Context mActivityContext ;
23
30
24
- public Braintree (ReactApplicationContext reactContext , Context activityContext ) {
31
+ private BraintreeFragment mBraintreeFragment ;
32
+
33
+ public Braintree (ReactApplicationContext reactContext ) {
25
34
super (reactContext );
26
- this . mActivityContext = activityContext ;
35
+ reactContext . addActivityEventListener ( this ) ;
27
36
}
28
37
29
38
@ Override
30
39
public String getName () {
31
40
return "Braintree" ;
32
41
}
33
42
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
+
34
85
@ ReactMethod
35
- public void paymentRequest (final String clientToken , final Callback successCallback , final Callback errorCallback ) {
86
+ public void paymentRequest (final Callback successCallback , final Callback errorCallback ) {
36
87
this .successCallback = successCallback ;
37
88
this .errorCallback = errorCallback ;
38
89
39
90
PaymentRequest paymentRequest = new PaymentRequest ()
40
- .clientToken (clientToken );
91
+ .clientToken (this . getToken () );
41
92
42
- (( Activity ) this . mActivityContext ).startActivityForResult (
43
- paymentRequest .getIntent (this . mActivityContext ),
93
+ (getCurrentActivity () ).startActivityForResult (
94
+ paymentRequest .getIntent (getCurrentActivity () ),
44
95
PAYMENT_REQUEST
45
96
);
46
97
}
47
98
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 ) {
49
101
if (requestCode == PAYMENT_REQUEST ) {
50
102
switch (resultCode ) {
51
103
case Activity .RESULT_OK :
@@ -66,4 +118,9 @@ public void handleActivityResult(final int requestCode, final int resultCode, fi
66
118
}
67
119
}
68
120
}
121
+
122
+ @ Override
123
+ public void onNewIntent (Intent intent ){
124
+
125
+ }
69
126
}
0 commit comments