Merge "Import translations. DO NOT MERGE ANYWHERE" into udc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d36dfec..8d03ed7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -164,6 +164,9 @@
     <!-- Needed to set user association to a certain sim -->
     <uses-permission android:name="android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION"/>
 
+    <!-- Needed to register for UWB state changes for satellite communication -->
+    <uses-permission android:name="android.permission.UWB_PRIVILEGED"/>
+
     <permission android:name="com.android.phone.permission.ACCESS_LAST_KNOWN_CELL_ID"
                 android:label="Access last known cell identity."
                 android:protectionLevel="signature"/>
diff --git a/src/com/android/phone/slice/SlicePurchaseController.java b/src/com/android/phone/slice/SlicePurchaseController.java
index 4166b1e..ef8780c 100644
--- a/src/com/android/phone/slice/SlicePurchaseController.java
+++ b/src/com/android/phone/slice/SlicePurchaseController.java
@@ -679,8 +679,8 @@
         }
     }
 
-    /*
-      return a new PremiumNetworkEntitlementApi object.
+    /**
+     * @return A new PremiumNetworkEntitlementApi object.
      */
     @VisibleForTesting
     public PremiumNetworkEntitlementApi getPremiumNetworkEntitlementApi() {
@@ -987,6 +987,7 @@
         int[] supportedCapabilities = getCarrierConfigs().getIntArray(
                 CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY);
         if (supportedCapabilities == null) {
+            logd("No premium capabilities are supported by the carrier.");
             return false;
         }
         return Arrays.stream(supportedCapabilities)
@@ -1015,8 +1016,13 @@
     private boolean arePremiumCapabilitiesSupportedByDevice() {
         if ((mPhone.getCachedAllowedNetworkTypesBitmask()
                 & TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
+            logd("Premium capabilities unsupported because NR is not allowed on the device.");
             return false;
         }
+        if (!mIsSlicingUpsellEnabled) {
+            logd("Premium capabilities unsupported because "
+                    + "slicing upsell is disabled on the device.");
+        }
         return mIsSlicingUpsellEnabled;
     }
 
@@ -1048,7 +1054,13 @@
 
     private boolean isNetworkAvailable() {
         if (mPhone.getServiceState().getDataRoaming()) {
-            logd("Network unavailable because it is roaming.");
+            logd("Network unavailable because device is roaming.");
+            return false;
+        }
+
+        if (!mPhone.getDataSettingsManager().isDataEnabledForReason(
+                TelephonyManager.DATA_ENABLED_REASON_USER)) {
+            logd("Network unavailable because user data is disabled.");
             return false;
         }
 
diff --git a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
index a29ed09..d79b305 100644
--- a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
+++ b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
@@ -57,6 +57,7 @@
 import com.android.TelephonyTestBase;
 import com.android.internal.telephony.CommandsInterface;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.data.DataSettingsManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -88,6 +89,7 @@
     @Mock CarrierConfigManager mCarrierConfigManager;
     @Mock CommandsInterface mCommandsInterface;
     @Mock ServiceState mServiceState;
+    @Mock DataSettingsManager mDataSettingsManager;
     @Mock PremiumNetworkEntitlementApi mPremiumNetworkEntitlementApi;
     @Mock SharedPreferences mSharedPreferences;
     @Mock SharedPreferences.Editor mEditor;
@@ -116,6 +118,7 @@
         doReturn(PHONE_ID).when(mPhone).getPhoneId();
         doReturn(mContext).when(mPhone).getContext();
         doReturn(mServiceState).when(mPhone).getServiceState();
+        doReturn(mDataSettingsManager).when(mPhone).getDataSettingsManager();
         mPhone.mCi = mCommandsInterface;
 
         doReturn(mCarrierConfigManager).when(mContext)
@@ -357,6 +360,7 @@
 
         // retry with valid network
         doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+        doReturn(true).when(mDataSettingsManager).isDataEnabledForReason(anyInt());
 
         mSlicePurchaseController.purchasePremiumCapability(
                 TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, mHandler.obtainMessage());
@@ -375,6 +379,7 @@
                 SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
         doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
         doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+        doReturn(true).when(mDataSettingsManager).isDataEnabledForReason(anyInt());
         doReturn(null).when(mPremiumNetworkEntitlementApi).checkEntitlementStatus(anyInt());
 
         mSlicePurchaseController.purchasePremiumCapability(
@@ -713,6 +718,7 @@
         doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
         // network available
         doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+        doReturn(true).when(mDataSettingsManager).isDataEnabledForReason(anyInt());
         // entitlement check passed
         mEntitlementResponse.mEntitlementStatus =
                 PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_ENTITLEMENT_STATUS_DISABLED;