Skip to content

Commit

Permalink
Merge pull request #683 from braintree/deliver_browser_switch_result_…
Browse files Browse the repository at this point in the history
…from_new_task

Add `BraintreeClient#deliverBrowserSwitchResultFromNewTask()` method
  • Loading branch information
sshropshire authored Feb 13, 2023
2 parents 6fed68d + b512d59 commit 8c0b887
Show file tree
Hide file tree
Showing 15 changed files with 78 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -301,15 +301,30 @@ BrowserSwitchResult getBrowserSwitchResult(@NonNull FragmentActivity activity) {
return browserSwitchClient.getResult(activity);
}

/**
* Deliver a browser switch result from an Activity's pending deep link intent url.
* If {@link BraintreeClient#launchesBrowserSwitchAsNewTask(boolean)} is set to true,
* use {@link BraintreeClient#deliverBrowserSwitchResultFromNewTask(Context)} instead.
*
* @param activity
* @return {@link BrowserSwitchResult}
*/
public BrowserSwitchResult deliverBrowserSwitchResult(@NonNull FragmentActivity activity) {
return browserSwitchClient.deliverResult(activity);
}

BrowserSwitchResult getBrowserSwitchResultFromCache(@NonNull Context context) {
BrowserSwitchResult getBrowserSwitchResultFromNewTask(@NonNull Context context) {
return browserSwitchClient.getResultFromCache(context);
}

BrowserSwitchResult deliverBrowserSwitchResultFromCache(@NonNull Context context) {
/**
* Deliver pending browser switch result received by {@link BraintreeDeepLinkActivity} when
* {@link BraintreeClient#launchesBrowserSwitchAsNewTask(boolean)} is set to true.
*
* @param context
* @return {@link BrowserSwitchResult}
*/
public BrowserSwitchResult deliverBrowserSwitchResultFromNewTask(@NonNull Context context) {
return browserSwitchClient.deliverResultFromCache(context);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,17 @@ public void deliverBrowserSwitchResult_forwardsInvocationToBrowserSwitchClient()
verify(browserSwitchClient).deliverResult(activity);
}

@Test
public void deliverBrowserSwitchResultFromNewTask_forwardsInvocationToBrowserSwitchClient() {
Context context = mock(Context.class);

BraintreeClientParams params = createDefaultParams(configurationLoader, authorizationLoader);
BraintreeClient sut = new BraintreeClient(params);

sut.deliverBrowserSwitchResultFromNewTask(context);
verify(browserSwitchClient).deliverResultFromCache(context);
}

@Test
public void assertCanPerformBrowserSwitch_assertsBrowserSwitchIsPossible() throws BrowserSwitchException {
BraintreeClientParams params = createDefaultParams(configurationLoader, authorizationLoader);
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

* Fixes a bug where an error was not thrown inside `PayPalNativeCheckoutClient` when no PayPal response was received from the API

* BraintreeCore
* Add `BraintreeClient#deliverBrowserSwitchResultFromNewTask()` method to allow browser switch results to be captured manually when `BraintreeClient#launchesBrowserSwitchAsNewTask()` is set to true.
* SharedUtils
* Replace EncryptedSharedPreferences with SharedPreferences for internal persistent data storage for all payment flows
* Deprecate `BraintreeSharedPreferencesException`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,12 @@ BrowserSwitchResult deliverBrowserSwitchResult(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResult(activity);
}

BrowserSwitchResult getBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromCache(activity);
BrowserSwitchResult getBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromNewTask(activity);
}

BrowserSwitchResult deliverBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromCache(activity);
BrowserSwitchResult deliverBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromNewTask(activity);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,10 @@ public void run() {
}

BrowserSwitchResult pendingResultFromCache =
localPaymentClient.getBrowserSwitchResultFromCache(finalActivity);
localPaymentClient.getBrowserSwitchResultFromNewTask(finalActivity);
if (pendingResultFromCache != null && pendingResultFromCache.getRequestCode() == LOCAL_PAYMENT) {
resultToDeliver =
localPaymentClient.deliverBrowserSwitchResultFromCache(finalActivity);
localPaymentClient.deliverBrowserSwitchResultFromNewTask(finalActivity);
}

if (resultToDeliver != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -682,19 +682,19 @@ public void deliverBrowserSwitchResult_forwardsInvocationToBraintreeClient() {
@Test
public void getBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient() {
BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);
when(braintreeClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

LocalPaymentClient sut = new LocalPaymentClient(activity, lifecycle, braintreeClient, payPalDataCollector, localPaymentApi);
assertSame(browserSwitchResult, sut.getBrowserSwitchResultFromCache(activity));
assertSame(browserSwitchResult, sut.getBrowserSwitchResultFromNewTask(activity));
}

@Test
public void deliverBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient() {
public void deliverBrowserSwitchResultFromNewTask_forwardsInvocationToBraintreeClient() {
BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);
when(braintreeClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

LocalPaymentClient sut = new LocalPaymentClient(activity, lifecycle, braintreeClient, payPalDataCollector, localPaymentApi);
assertSame(browserSwitchResult, sut.deliverBrowserSwitchResultFromCache(activity));
assertSame(browserSwitchResult, sut.deliverBrowserSwitchResultFromNewTask(activity));
}

private LocalPaymentRequest getIdealLocalPaymentRequest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ public void onResume_whenLifeCycleObserverIsFragment_payPalClientDeliversResultF
when(browserSwitchResult.getRequestCode()).thenReturn(LOCAL_PAYMENT);

LocalPaymentClient localPaymentClient = mock(LocalPaymentClient.class);
when(localPaymentClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

LocalPaymentLifecycleObserver sut = new LocalPaymentLifecycleObserver(localPaymentClient);

Expand All @@ -86,8 +86,8 @@ public void onResume_whenLifeCycleObserverIsActivity_payPalClientDeliversResultF
when(browserSwitchResult.getRequestCode()).thenReturn(LOCAL_PAYMENT);

LocalPaymentClient localPaymentClient = mock(LocalPaymentClient.class);
when(localPaymentClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

LocalPaymentLifecycleObserver sut = new LocalPaymentLifecycleObserver(localPaymentClient);

Expand Down Expand Up @@ -121,7 +121,7 @@ public void onResume_whenCachedBrowserSwitchResultExists_andRequestCodeNotLocalP
when(browserSwitchResult.getRequestCode()).thenReturn(PAYPAL);

LocalPaymentClient localPaymentClient = mock(LocalPaymentClient.class);
when(localPaymentClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(localPaymentClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

LocalPaymentLifecycleObserver sut = new LocalPaymentLifecycleObserver(localPaymentClient);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,12 @@ BrowserSwitchResult deliverBrowserSwitchResult(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResult(activity);
}

BrowserSwitchResult getBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromCache(activity);
BrowserSwitchResult getBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromNewTask(activity);
}

BrowserSwitchResult deliverBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromCache(activity);
BrowserSwitchResult deliverBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromNewTask(activity);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ public void run() {
}

BrowserSwitchResult pendingResultFromCache =
payPalClient.getBrowserSwitchResultFromCache(finalActivity);
payPalClient.getBrowserSwitchResultFromNewTask(finalActivity);
if (pendingResultFromCache != null && pendingResultFromCache.getRequestCode() == PAYPAL) {
resultToDeliver =
payPalClient.deliverBrowserSwitchResultFromCache(finalActivity);
payPalClient.deliverBrowserSwitchResultFromNewTask(finalActivity);
}

if (resultToDeliver != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -778,25 +778,25 @@ public void getBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient(
BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);

BraintreeClient braintreeClient = mock(BraintreeClient.class);
when(braintreeClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

PayPalClient sut = new PayPalClient(activity, lifecycle, braintreeClient, payPalInternalClient);

BrowserSwitchResult result = sut.getBrowserSwitchResultFromCache(activity);
BrowserSwitchResult result = sut.getBrowserSwitchResultFromNewTask(activity);
assertSame(browserSwitchResult, result);
}

@Test
public void deliverBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient() {
public void deliverBrowserSwitchResultFromNewTask_forwardsInvocationToBraintreeClient() {
PayPalInternalClient payPalInternalClient = new MockPayPalInternalClientBuilder().build();
BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);

BraintreeClient braintreeClient = mock(BraintreeClient.class);
when(braintreeClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

PayPalClient sut = new PayPalClient(activity, lifecycle, braintreeClient, payPalInternalClient);

BrowserSwitchResult result = sut.deliverBrowserSwitchResultFromCache(activity);
BrowserSwitchResult result = sut.deliverBrowserSwitchResultFromNewTask(activity);
assertSame(browserSwitchResult, result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ public void onResume_whenLifeCycleObserverIsFragment_payPalClientDeliversResultF
when(browserSwitchResult.getRequestCode()).thenReturn(PAYPAL);

PayPalClient payPalClient = mock(PayPalClient.class);
when(payPalClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(payPalClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(payPalClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(payPalClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

PayPalLifecycleObserver sut = new PayPalLifecycleObserver(payPalClient);

Expand All @@ -86,8 +86,8 @@ public void onResume_whenLifeCycleObserverIsActivity_payPalClientDeliversResultF
when(browserSwitchResult.getRequestCode()).thenReturn(PAYPAL);

PayPalClient payPalClient = mock(PayPalClient.class);
when(payPalClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(payPalClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(payPalClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(payPalClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

PayPalLifecycleObserver sut = new PayPalLifecycleObserver(payPalClient);

Expand Down Expand Up @@ -122,7 +122,7 @@ public void onResume_whenCachedBrowserSwitchResultExists_andRequestCodeNotPayPal
when(browserSwitchResult.getRequestCode()).thenReturn(THREE_D_SECURE);

PayPalClient payPalClient = mock(PayPalClient.class);
when(payPalClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(payPalClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

PayPalLifecycleObserver sut = new PayPalLifecycleObserver(payPalClient);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -620,12 +620,12 @@ BrowserSwitchResult deliverBrowserSwitchResult(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResult(activity);
}

BrowserSwitchResult getBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromCache(activity);
BrowserSwitchResult getBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.getBrowserSwitchResultFromNewTask(activity);
}

BrowserSwitchResult deliverBrowserSwitchResultFromCache(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromCache(activity);
BrowserSwitchResult deliverBrowserSwitchResultFromNewTask(FragmentActivity activity) {
return braintreeClient.deliverBrowserSwitchResultFromNewTask(activity);
}

// endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ public void run() {
}

BrowserSwitchResult pendingResultFromCache =
threeDSecureClient.getBrowserSwitchResultFromCache(finalActivity);
threeDSecureClient.getBrowserSwitchResultFromNewTask(finalActivity);
if (pendingResultFromCache != null && pendingResultFromCache.getRequestCode() == THREE_D_SECURE) {
resultToDeliver =
threeDSecureClient.deliverBrowserSwitchResultFromCache(finalActivity);
threeDSecureClient.deliverBrowserSwitchResultFromNewTask(finalActivity);
}

if (resultToDeliver != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -706,25 +706,25 @@ public void getBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient(
BraintreeClient braintreeClient = mock(BraintreeClient.class);

BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);
when(braintreeClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

ThreeDSecureClient sut = new ThreeDSecureClient(activity, lifecycle, braintreeClient, cardinalClient, browserSwitchHelper, threeDSecureAPI);

BrowserSwitchResult result = sut.getBrowserSwitchResultFromCache(activity);
BrowserSwitchResult result = sut.getBrowserSwitchResultFromNewTask(activity);
assertSame(browserSwitchResult, result);
}

@Test
public void deliverBrowserSwitchResultFromCache_forwardsInvocationToBraintreeClient() {
public void deliverBrowserSwitchResultFromNewTask_forwardsInvocationToBraintreeClient() {
CardinalClient cardinalClient = new MockCardinalClientBuilder().build();
BraintreeClient braintreeClient = mock(BraintreeClient.class);

BrowserSwitchResult browserSwitchResult = mock(BrowserSwitchResult.class);
when(braintreeClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(braintreeClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

ThreeDSecureClient sut = new ThreeDSecureClient(activity, lifecycle, braintreeClient, cardinalClient, browserSwitchHelper, threeDSecureAPI);

BrowserSwitchResult result = sut.deliverBrowserSwitchResultFromCache(activity);
BrowserSwitchResult result = sut.deliverBrowserSwitchResultFromNewTask(activity);
assertSame(browserSwitchResult, result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ public void onResume_whenLifeCycleObserverIsFragment_threeDSecureClientDeliversR
when(browserSwitchResult.getRequestCode()).thenReturn(THREE_D_SECURE);

ThreeDSecureClient threeDSecureClient = mock(ThreeDSecureClient.class);
when(threeDSecureClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

ThreeDSecureLifecycleObserver sut = new ThreeDSecureLifecycleObserver(activityResultRegistry, threeDSecureClient);

Expand All @@ -151,8 +151,8 @@ public void onResume_whenLifeCycleObserverIsActivity_threeDSecureClientDeliversR
when(browserSwitchResult.getRequestCode()).thenReturn(THREE_D_SECURE);

ThreeDSecureClient threeDSecureClient = mock(ThreeDSecureClient.class);
when(threeDSecureClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.deliverBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.deliverBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

ThreeDSecureLifecycleObserver sut = new ThreeDSecureLifecycleObserver(activityResultRegistry, threeDSecureClient);

Expand Down Expand Up @@ -189,7 +189,7 @@ public void onResume_whenCachedBrowserSwitchResultExists_andRequestCodeNotThreeD
when(browserSwitchResult.getRequestCode()).thenReturn(PAYPAL);

ThreeDSecureClient threeDSecureClient = mock(ThreeDSecureClient.class);
when(threeDSecureClient.getBrowserSwitchResultFromCache(activity)).thenReturn(browserSwitchResult);
when(threeDSecureClient.getBrowserSwitchResultFromNewTask(activity)).thenReturn(browserSwitchResult);

ThreeDSecureLifecycleObserver sut = new ThreeDSecureLifecycleObserver(activityResultRegistry, threeDSecureClient);

Expand Down

0 comments on commit 8c0b887

Please sign in to comment.