Change app name to carrier name
Slice purchase notification shows the carrier name instead of the
application name.
Don't allow purchases when roaming.
Test: manual, unit, CTS
Bug: 263429235
Change-Id: I6586c6b132983514343f7e4081beaa5d855b1fa4
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index c1288e5..194b8f7 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -490,13 +490,11 @@
private static final class PurchasePremiumCapabilityArgument {
public @TelephonyManager.PremiumCapability int capability;
- public @NonNull String appName;
public @NonNull IIntegerConsumer callback;
PurchasePremiumCapabilityArgument(@TelephonyManager.PremiumCapability int capability,
- @NonNull String appName, @NonNull IIntegerConsumer callback) {
+ @NonNull IIntegerConsumer callback) {
this.capability = capability;
- this.appName = appName;
this.callback = callback;
}
}
@@ -2178,7 +2176,7 @@
PurchasePremiumCapabilityArgument arg =
(PurchasePremiumCapabilityArgument) request.argument;
SlicePurchaseController.getInstance(request.phone).purchasePremiumCapability(
- arg.capability, arg.appName, onCompleted);
+ arg.capability, onCompleted);
break;
}
@@ -11507,8 +11505,7 @@
}
sendRequestAsync(CMD_PURCHASE_PREMIUM_CAPABILITY,
- new PurchasePremiumCapabilityArgument(capability, callingProcess, callback), phone,
- null);
+ new PurchasePremiumCapabilityArgument(capability, callback), phone, null);
}
/**
diff --git a/src/com/android/phone/slice/SlicePurchaseController.java b/src/com/android/phone/slice/SlicePurchaseController.java
index 3864119..9298d55 100644
--- a/src/com/android/phone/slice/SlicePurchaseController.java
+++ b/src/com/android/phone/slice/SlicePurchaseController.java
@@ -40,6 +40,7 @@
import android.os.Message;
import android.os.PersistableBundle;
import android.provider.DeviceConfig;
+import android.sysprop.TelephonyProperties;
import android.telephony.AnomalyReporter;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
@@ -204,11 +205,9 @@
public static final String EXTRA_FAILURE_REASON =
"com.android.phone.slice.extra.FAILURE_REASON";
/**
- * Extra for the application name requesting to purchase the premium capability
- * from the slice purchase application.
+ * Extra for the user's carrier.
*/
- public static final String EXTRA_REQUESTING_APP_NAME =
- "com.android.phone.slice.extra.REQUESTING_APP_NAME";
+ public static final String EXTRA_CARRIER = "com.android.phone.slice.extra.CARRIER";
/**
* Extra for the canceled PendingIntent that the slice purchase application can send as a
* response if the performance boost notification or WebView was canceled by the user.
@@ -497,11 +496,10 @@
break;
}
case EVENT_START_SLICE_PURCHASE_APP: {
- int capability = msg.arg1;
- String appName = (String) msg.obj;
- logd("EVENT_START_SLICE_PURCHASE_APP: " + appName + " requests capability "
+ int capability = (int) msg.obj;
+ logd("EVENT_START_SLICE_PURCHASE_APP: "
+ TelephonyManager.convertPremiumCapabilityToString(capability));
- onStartSlicePurchaseApplication(capability, appName);
+ onStartSlicePurchaseApplication(capability);
break;
}
case EVENT_PURCHASE_TIMEOUT: {
@@ -565,13 +563,11 @@
* Purchase the given premium capability from the carrier.
*
* @param capability The premium capability to purchase.
- * @param appName The name of the application requesting premium capabilities.
* @param onComplete The callback message to send when the purchase request is complete.
*/
public synchronized void purchasePremiumCapability(
- @TelephonyManager.PremiumCapability int capability, @NonNull String appName,
- @NonNull Message onComplete) {
- logd("purchasePremiumCapability: " + appName + " requests capability "
+ @TelephonyManager.PremiumCapability int capability, @NonNull Message onComplete) {
+ logd("purchasePremiumCapability: "
+ TelephonyManager.convertPremiumCapabilityToString(capability));
// Check whether the premium capability can be purchased.
if (!arePremiumCapabilitiesSupportedByDevice()) {
@@ -627,8 +623,7 @@
// All state checks passed. Mark purchase pending and start the slice purchase application.
// Process through the handler since this method is synchronized.
mPendingPurchaseCapabilities.put(capability, onComplete);
- sendMessage(obtainMessage(EVENT_START_SLICE_PURCHASE_APP, capability, 0 /* unused */,
- appName));
+ sendMessage(obtainMessage(EVENT_START_SLICE_PURCHASE_APP, capability));
}
private void sendPurchaseResult(@TelephonyManager.PremiumCapability int capability,
@@ -687,8 +682,8 @@
}
}
- private void onStartSlicePurchaseApplication(@TelephonyManager.PremiumCapability int capability,
- @NonNull String appName) {
+ private void onStartSlicePurchaseApplication(
+ @TelephonyManager.PremiumCapability int capability) {
PremiumNetworkEntitlementResponse premiumNetworkEntitlementResponse =
mPremiumNetworkEntitlementApi.checkEntitlementStatus(capability);
@@ -721,7 +716,8 @@
}
String purchaseUrl = getPurchaseUrl(premiumNetworkEntitlementResponse);
- if (TextUtils.isEmpty(purchaseUrl)) {
+ String carrier = getSimOperator();
+ if (TextUtils.isEmpty(purchaseUrl) || TextUtils.isEmpty(carrier)) {
handlePurchaseResult(capability,
PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED, false);
return;
@@ -753,7 +749,7 @@
intent.putExtra(EXTRA_SUB_ID, mPhone.getSubId());
intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
intent.putExtra(EXTRA_PURCHASE_URL, purchaseUrl);
- intent.putExtra(EXTRA_REQUESTING_APP_NAME, appName);
+ intent.putExtra(EXTRA_CARRIER, carrier);
intent.putExtra(EXTRA_INTENT_CANCELED, createPendingIntent(
ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED, capability, false));
intent.putExtra(EXTRA_INTENT_CARRIER_ERROR, createPendingIntent(
@@ -805,6 +801,20 @@
}
/**
+ * Get the SIM operator. This is the carrier name from the SIM rather than from the network,
+ * which will be the same regardless of whether the user is roaming or not.
+ *
+ * @return The operator name from the SIM.
+ */
+ @VisibleForTesting
+ @Nullable public String getSimOperator() {
+ if (mPhone.getPhoneId() < TelephonyProperties.icc_operator_alpha().size()) {
+ return TelephonyProperties.icc_operator_alpha().get(mPhone.getPhoneId());
+ }
+ return null;
+ }
+
+ /**
* Create the PendingIntent to allow the slice purchase application to send back responses.
*
* @param action The action that will be sent for this PendingIntent
@@ -1028,6 +1038,11 @@
}
private boolean isNetworkAvailable() {
+ if (mPhone.getServiceState().getDataRoaming()) {
+ logd("Network unavailable because it is roaming.");
+ return false;
+ }
+
// TODO (b/251558673): Create a listener for data network type changed to dismiss
// notification and activity when the network is no longer available.
switch (mPhone.getServiceState().getDataNetworkType()) {
diff --git a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
index e2ebac0..921babb 100644
--- a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
+++ b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
@@ -70,7 +70,7 @@
@RunWith(AndroidJUnit4.class)
public class SlicePurchaseControllerTest extends TelephonyTestBase {
- private static final String TAG = "SlicePurchaseControllerTest";
+ private static final String CARRIER = "Some Carrier";
private static final String DAILY_NOTIFICATION_COUNT_KEY = "daily_notification_count0";
private static final String MONTHLY_NOTIFICATION_COUNT_KEY = "monthly_notification_count0";
private static final int YEAR = 2000;
@@ -148,6 +148,7 @@
mSlicePurchaseController = spy(slicePurchaseController);
doReturn(null).when(mSlicePurchaseController).createPendingIntent(
anyString(), anyInt(), anyBoolean());
+ doReturn(CARRIER).when(mSlicePurchaseController).getSimOperator();
replaceInstance(SlicePurchaseController.class, "sInstances", mSlicePurchaseController,
Map.of(PHONE_ID, mSlicePurchaseController));
replaceInstance(SlicePurchaseController.class, "mPremiumNetworkEntitlementApi",
@@ -272,8 +273,7 @@
@Test
public void testPurchasePremiumCapabilityResultFeatureNotSupported() {
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
mResult);
@@ -283,8 +283,7 @@
.getCachedAllowedNetworkTypesBitmask();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
mResult);
@@ -296,8 +295,7 @@
.getCachedAllowedNetworkTypesBitmask();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED, mResult);
@@ -308,8 +306,7 @@
SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED,
mResult);
@@ -325,8 +322,7 @@
SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(
TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
@@ -336,8 +332,7 @@
doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertNotEquals(
TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
@@ -355,8 +350,7 @@
doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
mResult);
@@ -365,8 +359,7 @@
doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
mResult);
@@ -385,8 +378,7 @@
doReturn(null).when(mPremiumNetworkEntitlementApi).checkEntitlementStatus(anyInt());
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED,
mResult);
@@ -398,8 +390,7 @@
.checkEntitlementStatus(anyInt());
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
mResult);
@@ -409,8 +400,7 @@
PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_PROVISION_STATUS_IN_PROGRESS;
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
mResult);
@@ -425,16 +415,14 @@
PURCHASE_CONDITION_TIMEOUT);
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED,
mResult);
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
@@ -450,16 +438,14 @@
sendValidPurchaseRequest();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
mResult);
// retry to verify same result
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
mResult);
@@ -487,8 +473,7 @@
testPurchasePremiumCapabilityResultSuccess();
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP,
mResult);
@@ -507,16 +492,14 @@
sendNetworkSlicingConfig(TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, true);
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
mResult);
// retry to verify same result
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
mResult);
@@ -537,8 +520,7 @@
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
@@ -565,8 +547,7 @@
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
@@ -596,8 +577,7 @@
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
@@ -660,8 +640,7 @@
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
@@ -678,8 +657,7 @@
// retry to verify throttled
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
}
@@ -741,8 +719,7 @@
// send purchase request
mSlicePurchaseController.purchasePremiumCapability(
- TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
- mHandler.obtainMessage());
+ TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
mTestableLooper.processAllMessages();
// verify that the purchase request was sent successfully