diff options
author | 2023-04-11 10:30:36 -0700 | |
---|---|---|
committer | 2023-05-23 01:43:18 +0000 | |
commit | 9047617287020561c7c1bfabb48f247e8e4a3ba2 (patch) | |
tree | 0fb7559e0b2e3888b92bc01d196a85af0e4615d8 | |
parent | e1574fc0946f02f92a050016a4c81f9a45b76ca3 (diff) |
Add dismissFlow callback to SlicePurchaseWebInterface
Changes are to be consistent with TS.43 upsell call flow
Test: manual verify no regression of purchase behavior
Bug: 269356100
Change-Id: I58875f7d8ba3499cc7bf91699b5ceb9d417e1bfe
5 files changed, 50 insertions, 1 deletions
diff --git a/packages/CarrierDefaultApp/assets/slice_purchase_test.html b/packages/CarrierDefaultApp/assets/slice_purchase_test.html index d2c1c04265bf..917276b9ce65 100644 --- a/packages/CarrierDefaultApp/assets/slice_purchase_test.html +++ b/packages/CarrierDefaultApp/assets/slice_purchase_test.html @@ -75,5 +75,11 @@ Notify purchase failed </button> <p id="purchase_failed"></p> + + <h2>Dismiss flow</h2> + <button type="button" onclick="testDismissFlow()"> + Dismiss flow + </button> + <p id="dismiss_flow"></p> </body> </html> diff --git a/packages/CarrierDefaultApp/assets/slice_purchase_test.js b/packages/CarrierDefaultApp/assets/slice_purchase_test.js index 84ab1f933838..be397a115921 100644 --- a/packages/CarrierDefaultApp/assets/slice_purchase_test.js +++ b/packages/CarrierDefaultApp/assets/slice_purchase_test.js @@ -31,3 +31,9 @@ function testNotifyPurchaseFailed(failure_code = 0, failure_reason = "unknown") document.getElementById("purchase_failed").innerHTML = "Notified purchase failed."; } + +function testDismissFlow() { + DataBoostWebServiceFlow.dismissFlow(); + document.getElementById("dismiss_flow").innerHTML = + "Called dismiss flow."; +} diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/DataBoostWebServiceFlow.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/DataBoostWebServiceFlow.java index 0aadd31b6e18..4500a220523d 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/DataBoostWebServiceFlow.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/DataBoostWebServiceFlow.java @@ -88,4 +88,21 @@ public class DataBoostWebServiceFlow { @Nullable String failureReason) { mActivity.onPurchaseFailed(failureCode, failureReason); } + + /** + * Interface method allowing the carrier website to notify the slice purchase application that + * the service flow ended prematurely. This can be due to user action, an error in the + * web sheet logic, or an error on the network side. + * + * This can be called using the JavaScript below: + * <script type="text/javascript"> + * function dismissFlow() { + * DataBoostWebServiceFlow.dismissFlow(); + * } + * </script> + */ + @JavascriptInterface + public void dismissFlow() { + mActivity.onDismissFlow(); + } } diff --git a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SlicePurchaseActivity.java b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SlicePurchaseActivity.java index d304394dacb7..c47b2112be2d 100644 --- a/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SlicePurchaseActivity.java +++ b/packages/CarrierDefaultApp/src/com/android/carrierdefaultapp/SlicePurchaseActivity.java @@ -137,6 +137,14 @@ public class SlicePurchaseActivity extends Activity { finishAndRemoveTask(); } + protected void onDismissFlow() { + logd("onDismissFlow: Dismiss flow called while purchasing premium capability " + + TelephonyManager.convertPremiumCapabilityToString(mCapability)); + SlicePurchaseBroadcastReceiver.sendSlicePurchaseAppResponse( + mIntent, SlicePurchaseController.EXTRA_INTENT_REQUEST_FAILED); + finishAndRemoveTask(); + } + @Override public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { // Pressing back in the WebView will go to the previous page instead of closing diff --git a/packages/CarrierDefaultApp/tests/unit/src/com/android/carrierdefaultapp/SlicePurchaseActivityTest.java b/packages/CarrierDefaultApp/tests/unit/src/com/android/carrierdefaultapp/SlicePurchaseActivityTest.java index e7a75e58105d..cc103fa98e65 100644 --- a/packages/CarrierDefaultApp/tests/unit/src/com/android/carrierdefaultapp/SlicePurchaseActivityTest.java +++ b/packages/CarrierDefaultApp/tests/unit/src/com/android/carrierdefaultapp/SlicePurchaseActivityTest.java @@ -55,6 +55,7 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas @Mock PendingIntent mPendingIntent; @Mock PendingIntent mSuccessfulIntent; @Mock PendingIntent mCanceledIntent; + @Mock PendingIntent mRequestFailedIntent; @Mock CarrierConfigManager mCarrierConfigManager; @Mock NotificationManager mNotificationManager; @Mock PersistableBundle mPersistableBundle; @@ -112,6 +113,11 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas doReturn(true).when(mSuccessfulIntent).isBroadcast(); doReturn(mSuccessfulIntent).when(spiedIntent).getParcelableExtra( eq(SlicePurchaseController.EXTRA_INTENT_SUCCESS), eq(PendingIntent.class)); + doReturn(TelephonyManager.PHONE_PROCESS_NAME).when(mRequestFailedIntent) + .getCreatorPackage(); + doReturn(true).when(mRequestFailedIntent).isBroadcast(); + doReturn(mRequestFailedIntent).when(spiedIntent).getParcelableExtra( + eq(SlicePurchaseController.EXTRA_INTENT_REQUEST_FAILED), eq(PendingIntent.class)); mSlicePurchaseActivity = startActivity(spiedIntent, null, null); } @@ -124,7 +130,7 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas @Test public void testOnPurchaseFailed() throws Exception { - int failureCode = SlicePurchaseController.FAILURE_CODE_SERVER_UNREACHABLE; + int failureCode = SlicePurchaseController.FAILURE_CODE_CARRIER_URL_UNAVAILABLE; String failureReason = "Server unreachable"; mSlicePurchaseActivity.onPurchaseFailed(failureCode, failureReason); ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); @@ -141,4 +147,10 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas mSlicePurchaseActivity.onDestroy(); verify(mCanceledIntent).send(); } + + @Test + public void testOnDismissFlow() throws Exception { + mSlicePurchaseActivity.onDismissFlow(); + verify(mRequestFailedIntent).send(); + } } |