Rename SlicePurchaseWebInterface to DataBoostWebServiceFlow

Also remove duration parameter from notifyPurchaseSuccessful
Changed to be consistent with the TS.43 specs

Test: manual verify no regression of purchase behavior
Test: atest CarrierDefaultAppTest
Bug: 283210989
Change-Id: I6d93ca848495e1e2657518d12b61f4ab9796a035
This commit is contained in:
Sarah Chin
2023-04-11 10:30:36 -07:00
committed by Sarah Kim
parent 1b8166a9f8
commit 3e5ced802d
5 changed files with 32 additions and 41 deletions

View File

@@ -20,7 +20,7 @@
<meta charset="UTF-8">
<meta name="description" content="
This is a HTML page that calls and verifies responses from the @JavascriptInterface functions of
SlicePurchaseWebInterface. Test slice purchase application behavior using ADB shell commands and
DataBoostWebServiceFlow. Test slice purchase application behavior using ADB shell commands and
the APIs below:
FROM TERMINAL:
@@ -65,8 +65,8 @@
<p id="requested_capability"></p>
<h2>Notify purchase successful</h2>
<button type="button" onclick="testNotifyPurchaseSuccessful(60000)">
Notify purchase successful for 1 minute
<button type="button" onclick="testNotifyPurchaseSuccessful()">
Notify purchase successful
</button>
<p id="purchase_successful"></p>

View File

@@ -15,19 +15,19 @@
*/
function testGetRequestedCapability() {
let capability = SlicePurchaseWebInterface.getRequestedCapability();
let capability = DataBoostWebServiceFlow.getRequestedCapability();
document.getElementById("requested_capability").innerHTML =
"Premium capability requested: " + capability;
}
function testNotifyPurchaseSuccessful(duration_ms_long = 0) {
SlicePurchaseWebInterface.notifyPurchaseSuccessful(duration_ms_long);
function testNotifyPurchaseSuccessful() {
DataBoostWebServiceFlow.notifyPurchaseSuccessful();
document.getElementById("purchase_successful").innerHTML =
"Notified purchase success for duration: " + duration_ms_long;
"Notified purchase successful.";
}
function testNotifyPurchaseFailed(failure_code = 0, failure_reason = "unknown") {
SlicePurchaseWebInterface.notifyPurchaseFailed(failure_code, failure_reason);
DataBoostWebServiceFlow.notifyPurchaseFailed(failure_code, failure_reason);
document.getElementById("purchase_failed").innerHTML =
"Notified purchase failed.";
}

View File

@@ -24,13 +24,13 @@ import android.webkit.JavascriptInterface;
import com.android.phone.slice.SlicePurchaseController;
/**
* Slice purchase web interface class allowing carrier websites to send responses back to the
* Data boost web service flow interface allowing carrier websites to send responses back to the
* slice purchase application using JavaScript.
*/
public class SlicePurchaseWebInterface {
public class DataBoostWebServiceFlow {
@NonNull SlicePurchaseActivity mActivity;
public SlicePurchaseWebInterface(@NonNull SlicePurchaseActivity activity) {
public DataBoostWebServiceFlow(@NonNull SlicePurchaseActivity activity) {
mActivity = activity;
}
@@ -41,7 +41,7 @@ public class SlicePurchaseWebInterface {
* This can be called using the JavaScript below:
* <script type="text/javascript">
* function getRequestedCapability(duration) {
* SlicePurchaseWebInterface.getRequestedCapability();
* DataBoostWebServiceFlow.getRequestedCapability();
* }
* </script>
*/
@@ -57,16 +57,14 @@ public class SlicePurchaseWebInterface {
*
* This can be called using the JavaScript below:
* <script type="text/javascript">
* function notifyPurchaseSuccessful(duration_ms_long = 0) {
* SlicePurchaseWebInterface.notifyPurchaseSuccessful(duration_ms_long);
* function notifyPurchaseSuccessful() {
* DataBoostWebServiceFlow.notifyPurchaseSuccessful();
* }
* </script>
*
* @param duration The duration for which the premium capability is purchased in milliseconds.
*/
@JavascriptInterface
public void notifyPurchaseSuccessful(long duration) {
mActivity.onPurchaseSuccessful(duration);
public void notifyPurchaseSuccessful() {
mActivity.onPurchaseSuccessful();
}
/**
@@ -76,7 +74,7 @@ public class SlicePurchaseWebInterface {
* This can be called using the JavaScript below:
* <script type="text/javascript">
* function notifyPurchaseFailed(failure_code = 0, failure_reason = "unknown") {
* SlicePurchaseWebInterface.notifyPurchaseFailed();
* DataBoostWebServiceFlow.notifyPurchaseFailed();
* }
* </script>
*

View File

@@ -32,21 +32,19 @@ import android.webkit.WebView;
import com.android.phone.slice.SlicePurchaseController;
import java.net.URL;
import java.util.concurrent.TimeUnit;
/**
* Activity that launches when the user clicks on the performance boost notification.
* This will open a {@link WebView} for the carrier website to allow the user to complete the
* premium capability purchase.
* The carrier website can get the requested premium capability using the JavaScript interface
* method {@code SlicePurchaseWebInterface.getRequestedCapability()}.
* method {@code DataBoostWebServiceFlow.getRequestedCapability()}.
* If the purchase is successful, the carrier website shall notify the slice purchase application
* using the JavaScript interface method
* {@code SlicePurchaseWebInterface.notifyPurchaseSuccessful(duration)}, where {@code duration} is
* the optional duration of the performance boost.
* {@code DataBoostWebServiceFlow.notifyPurchaseSuccessful()}.
* If the purchase was not successful, the carrier website shall notify the slice purchase
* application using the JavaScript interface method
* {@code SlicePurchaseWebInterface.notifyPurchaseFailed(code, reason)}, where {@code code} is the
* {@code DataBoostWebServiceFlow.notifyPurchaseFailed(code, reason)}, where {@code code} is the
* {@link SlicePurchaseController.FailureCode} indicating the reason for failure and {@code reason}
* is the human-readable reason for failure if the failure code is
* {@link SlicePurchaseController#FAILURE_CODE_UNKNOWN}.
@@ -118,15 +116,11 @@ public class SlicePurchaseActivity extends Activity {
setupWebView();
}
protected void onPurchaseSuccessful(long duration) {
protected void onPurchaseSuccessful() {
logd("onPurchaseSuccessful: Carrier website indicated successfully purchased premium "
+ "capability " + TelephonyManager.convertPremiumCapabilityToString(mCapability)
+ (duration > 0 ? " for " + TimeUnit.MILLISECONDS.toMinutes(duration) + " minutes."
: "."));
Intent intent = new Intent();
intent.putExtra(SlicePurchaseController.EXTRA_PURCHASE_DURATION, duration);
SlicePurchaseBroadcastReceiver.sendSlicePurchaseAppResponseWithData(mApplicationContext,
mIntent, SlicePurchaseController.EXTRA_INTENT_SUCCESS, intent);
+ "capability " + TelephonyManager.convertPremiumCapabilityToString(mCapability));
SlicePurchaseBroadcastReceiver.sendSlicePurchaseAppResponse(
mIntent, SlicePurchaseController.EXTRA_INTENT_SUCCESS);
finishAndRemoveTask();
}
@@ -178,7 +172,7 @@ public class SlicePurchaseActivity extends Activity {
// the slice purchase application.
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(
new SlicePurchaseWebInterface(this), "SlicePurchaseWebInterface");
new DataBoostWebServiceFlow(this), "DataBoostWebServiceFlow");
// Display WebView
setContentView(mWebView);

View File

@@ -53,6 +53,7 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas
private static final int PHONE_ID = 0;
@Mock PendingIntent mPendingIntent;
@Mock PendingIntent mSuccessfulIntent;
@Mock PendingIntent mCanceledIntent;
@Mock CarrierConfigManager mCarrierConfigManager;
@Mock NotificationManager mNotificationManager;
@@ -107,20 +108,18 @@ public class SlicePurchaseActivityTest extends ActivityUnitTestCase<SlicePurchas
doReturn(true).when(mCanceledIntent).isBroadcast();
doReturn(mCanceledIntent).when(spiedIntent).getParcelableExtra(
eq(SlicePurchaseController.EXTRA_INTENT_CANCELED), eq(PendingIntent.class));
doReturn(TelephonyManager.PHONE_PROCESS_NAME).when(mSuccessfulIntent).getCreatorPackage();
doReturn(true).when(mSuccessfulIntent).isBroadcast();
doReturn(mSuccessfulIntent).when(spiedIntent).getParcelableExtra(
eq(SlicePurchaseController.EXTRA_INTENT_SUCCESS), eq(PendingIntent.class));
mSlicePurchaseActivity = startActivity(spiedIntent, null, null);
}
@Test
public void testOnPurchaseSuccessful() throws Exception {
int duration = 5 * 60 * 1000; // 5 minutes
int invalidDuration = -1;
mSlicePurchaseActivity.onPurchaseSuccessful(duration);
ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mPendingIntent).send(eq(mContext), eq(0), intentCaptor.capture());
Intent intent = intentCaptor.getValue();
assertEquals(duration, intent.getLongExtra(
SlicePurchaseController.EXTRA_PURCHASE_DURATION, invalidDuration));
mSlicePurchaseActivity.onPurchaseSuccessful();
verify(mSuccessfulIntent).send();
}
@Test