Skip to content

Commit 611d842

Browse files
sshropshiresarahkoopjaxdesmarais
authored
Add customUrlScheme Property to DropInRequest (#439)
* Add customUrlScheme property to DropInRequest. * Add example for spike. Revert this PR before merging. * Reference updated version of Braintree Core. * Revert AndroidManifest.xml. * Add custom return url scheme docs to DropInRequest. * Revert MainActivity. * Add unit tests for custom url scheme. * Update CHANGELOG. * Update Drop-In/src/main/java/com/braintreepayments/api/DropInRequest.java Co-authored-by: Sarah Koop <skoop@paypal.com> * Update CHANGELOG.md Co-authored-by: Jax DesMarais-Leder <jax.desmarais@gmail.com> --------- Co-authored-by: Sarah Koop <skoop@paypal.com> Co-authored-by: Jax DesMarais-Leder <jax.desmarais@gmail.com>
1 parent 3816b5b commit 611d842

File tree

6 files changed

+55
-10
lines changed

6 files changed

+55
-10
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
## unreleased
44

5-
* Bump braintree_android module dependency versions to `4.38.1`
5+
* Bump braintree_android module dependency versions to `4.38.2`
66
* Android 14 Support
77
* Upgrade `compileSdkVersion` and `targetSdkVersion` to API 34
8+
* Add `customUrlScheme` property to `DropInRequest` to allow for custom URL schemes to be set for browser-based flow deep links
89

910
## 6.12.0
1011

Drop-In/src/main/java/com/braintreepayments/api/DropInClient.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ public class DropInClient {
3939

4040
private static DropInClientParams createDefaultParams(Context context, String authorization, ClientTokenProvider clientTokenProvider, DropInRequest dropInRequest, FragmentActivity activity, Lifecycle lifecycle) {
4141

42-
BraintreeClient braintreeClient;
43-
if (clientTokenProvider != null) {
44-
braintreeClient = new BraintreeClient(context, clientTokenProvider, null, IntegrationType.DROP_IN);
45-
} else {
46-
braintreeClient = new BraintreeClient(context, authorization, null, IntegrationType.DROP_IN);
42+
String customUrlScheme = null;
43+
if (dropInRequest != null) {
44+
customUrlScheme = dropInRequest.getCustomUrlScheme();
4745
}
4846

47+
BraintreeOptions braintreeOptions =
48+
new BraintreeOptions(context, null, customUrlScheme, authorization, clientTokenProvider, IntegrationType.DROP_IN);
49+
50+
BraintreeClient braintreeClient = new BraintreeClient(braintreeOptions);
4951
return new DropInClientParams()
5052
.activity(activity)
5153
.lifecycle(lifecycle)
@@ -359,7 +361,7 @@ void onDropInResult(DropInResult dropInResult) {
359361
/**
360362
* For clients using a {@link ClientTokenProvider}, call this method to invalidate the existing,
361363
* cached client token. A new client token will be fetched by the SDK when it is needed.
362-
*
364+
* <p>
363365
* For clients not using a {@link ClientTokenProvider}, this method does nothing.
364366
*/
365367
public void invalidateClientToken() {

Drop-In/src/main/java/com/braintreepayments/api/DropInInternalClient.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ class DropInInternalClient {
3939

4040
private static DropInInternalClientParams createDefaultParams(Context context, String authorization, DropInRequest dropInRequest, String sessionId) {
4141

42-
BraintreeClient braintreeClient =
43-
new BraintreeClient(context, authorization, sessionId, IntegrationType.DROP_IN);
42+
String customUrlScheme = dropInRequest.getCustomUrlScheme();
43+
BraintreeOptions braintreeOptions =
44+
new BraintreeOptions(context, sessionId, customUrlScheme, authorization, null, IntegrationType.DROP_IN);
45+
46+
BraintreeClient braintreeClient = new BraintreeClient(braintreeOptions);
4447

4548
return new DropInInternalClientParams()
4649
.dropInRequest(dropInRequest)

Drop-In/src/main/java/com/braintreepayments/api/DropInRequest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class DropInRequest implements Parcelable {
2828
private boolean vaultCardDefaultValue = true;
2929
private boolean allowVaultCardOverride = false;
3030

31+
private String customUrlScheme = null;
32+
3133
private int cardholderNameStatus = CardForm.FIELD_DISABLED;
3234

3335
public DropInRequest() {}
@@ -290,6 +292,25 @@ public boolean getAllowVaultCardOverride() {
290292
return allowVaultCardOverride;
291293
}
292294

295+
/**
296+
* Use this property to customize the return url scheme used to construct deep link return urls
297+
* for browser-based flows. You must also override the intent-filter entry for
298+
* {@link DropInActivity} in your app's AndroidManifest.xml.
299+
*
300+
* @param customUrlScheme A custom return url scheme to use for browser-based flows.
301+
*/
302+
public void setCustomUrlScheme(@Nullable String customUrlScheme) {
303+
this.customUrlScheme = customUrlScheme;
304+
}
305+
306+
/**
307+
* @return If set, the custom return url scheme used for browser-based flows.
308+
*/
309+
@Nullable
310+
public String getCustomUrlScheme() {
311+
return customUrlScheme;
312+
}
313+
293314
@Override
294315
public int describeContents() {
295316
return 0;
@@ -312,6 +333,7 @@ public void writeToParcel(Parcel dest, int flags) {
312333
dest.writeInt(cardholderNameStatus);
313334
dest.writeByte(vaultCardDefaultValue ? (byte) 1 : (byte) 0);
314335
dest.writeByte(allowVaultCardOverride ? (byte) 1 : (byte) 0);
336+
dest.writeString(customUrlScheme);
315337
}
316338

317339
protected DropInRequest(Parcel in) {
@@ -330,6 +352,7 @@ protected DropInRequest(Parcel in) {
330352
cardholderNameStatus = in.readInt();
331353
vaultCardDefaultValue = in.readByte() != 0;
332354
allowVaultCardOverride = in.readByte() != 0;
355+
customUrlScheme = in.readString();
333356
}
334357

335358
public static final Creator<DropInRequest> CREATOR = new Creator<DropInRequest>() {

Drop-In/src/test/java/com/braintreepayments/api/DropInInternalClientUnitTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,22 @@ public void internalConstructor_setsBraintreeClientWithSessionId() {
7474
assertEquals("session-id", sut.braintreeClient.getSessionId());
7575
}
7676

77+
@Test
78+
public void internalConstructor_usesDefaultBraintreeCustomUrlScheme() {
79+
DropInInternalClient sut =
80+
new DropInInternalClient(activity, Fixtures.TOKENIZATION_KEY, "session-id", new DropInRequest());
81+
assertEquals("com.braintreepayments.api.dropin.test.braintree", sut.braintreeClient.getReturnUrlScheme());
82+
}
83+
84+
@Test
85+
public void internalConstructor_overridesBraintreeCustomUrlSchemeIfSet() {
86+
DropInRequest request = new DropInRequest();
87+
request.setCustomUrlScheme("sample-custom-url-scheme");
88+
DropInInternalClient sut =
89+
new DropInInternalClient(activity, Fixtures.TOKENIZATION_KEY, "session-id", request);
90+
assertEquals("sample-custom-url-scheme", sut.braintreeClient.getReturnUrlScheme());
91+
}
92+
7793
@Test
7894
public void getConfiguration_forwardsInvocationToBraintreeClient() {
7995
BraintreeClient braintreeClient = new MockBraintreeClientBuilder().build();

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
}
88
}
99

10-
ext.brainTreeVersion = "4.38.1"
10+
ext.brainTreeVersion = "4.38.2"
1111

1212
ext.deps = [
1313
"braintreeCore" : "com.braintreepayments.api:braintree-core:$brainTreeVersion",

0 commit comments

Comments
 (0)