diff --git a/res/values/strings.xml b/res/values/strings.xml
index c49d6e3f767..8e52af884bd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12533,12 +12533,14 @@
Invalid Network Mode %1$d. Ignore.
-
+
Satellite messaging
-
+
Send and receive text messages by satellite. Included with your account.
-
+
Send and receive text messages by satellite. Not included with your account.
+
+ Send and receive text messages by satellite. Contact your carrier for details.
Satellite messaging, satellite connectivity
@@ -12565,6 +12567,8 @@
You can text anyone, including emergency services. Your phone will reconnect to a mobile network when available.
%1$s may take longer and is available only in some areas. Weather and certain structures may affect your satellite connection. Calling by satellite isn\u2019t available. Emergency calls may still connect.\n\nIt may take some time for account changes to show in Settings. Contact %2$s for details.
+
+ %1$s may take longer and is available only in some areas. Weather and certain structures may affect your satellite connection. Calling by satellite isn\u2019t available. Emergency calls may still connect. Texting with emergency services may not be available in all areas.\n\nIt may take some time for account changes to show in Settings. Contact %2$s for details.
More about %1$s
diff --git a/src/com/android/settings/network/telephony/SatelliteSetting.java b/src/com/android/settings/network/telephony/SatelliteSetting.java
index 52957d98b30..d4bd212d153 100644
--- a/src/com/android/settings/network/telephony/SatelliteSetting.java
+++ b/src/com/android/settings/network/telephony/SatelliteSetting.java
@@ -19,7 +19,9 @@ package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT;
+import static android.telephony.CarrierConfigManager.KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL;
+import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING;
import android.app.Activity;
@@ -165,8 +167,14 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
}
private void updateMobilePlan(boolean isSatelliteEligible) {
- // Your mobile plan
PreferenceCategory prefCategory = findPreference(PREF_KEY_CATEGORY_YOUR_SATELLITE_PLAN);
+ if (prefCategory == null || !mConfigBundle.getBoolean(
+ KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL)) {
+ prefCategory.setVisible(false);
+ return;
+ }
+
+ // Your mobile plan
prefCategory.setTitle(getResources().getString(R.string.category_title_your_satellite_plan,
mSimOperatorName));
Preference messagingPreference = findPreference(PREF_KEY_YOUR_SATELLITE_PLAN);
@@ -227,9 +235,11 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
// More about satellite messaging
FooterPreference footerPreference = findPreference(KEY_FOOTER_PREFERENCE);
if (footerPreference != null) {
- footerPreference.setSummary(
- getResources().getString(R.string.satellite_setting_summary_more_information,
- getSubjectString(), mSimOperatorName));
+ int summary = mConfigBundle.getBoolean(KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL)
+ ? R.string.satellite_setting_summary_more_information
+ : R.string.satellite_setting_summary_more_information_no_emergency_messaging;
+ footerPreference.setSummary(getResources().getString(summary,
+ getSubjectString(), mSimOperatorName));
final String[] link = new String[1];
link[0] = readSatelliteMoreInfoString();
@@ -273,7 +283,9 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
bundle = carrierConfigManager.getConfigForSubId(subId,
KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING,
- KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT);
+ KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
+ KEY_EMERGENCY_MESSAGING_SUPPORTED_BOOL);
if (bundle.isEmpty()) {
Log.d(TAG, "SatelliteSettings: getDefaultConfig");
bundle = CarrierConfigManager.getDefaultConfig();
diff --git a/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java b/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
index e2c6412ba57..fd82e5c77f4 100644
--- a/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
@@ -17,9 +17,9 @@
package com.android.settings.network.telephony;
import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
-import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
import static android.telephony.CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL;
+import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
@@ -65,9 +65,9 @@ public class SatelliteSettingPreferenceController extends
@Nullable
private Boolean mIsSatelliteEligible = null;
private boolean mIsServiceDataType = false;
- private boolean mIsSatelliteSmsAvailableForManualType = false;
- private boolean mIsCarrierSatelliteAttachSupported = false;
- private boolean mIsCarrierRoamingNtnConnectedTypeManual = false;
+ @VisibleForTesting
+ boolean mIsSatelliteSmsAvailableForManualType = false;
+ private PersistableBundle mCarrierConfigs = new PersistableBundle();
public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) {
super(context, key);
@@ -95,13 +95,15 @@ public class SatelliteSettingPreferenceController extends
return UNSUPPORTED_ON_DEVICE;
}
- int availabilityStatus = mIsCarrierSatelliteAttachSupported
- ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
- if (availabilityStatus == AVAILABLE && mIsCarrierRoamingNtnConnectedTypeManual
- && !mIsSatelliteSmsAvailableForManualType) {
- availabilityStatus = CONDITIONALLY_UNAVAILABLE;
+ boolean isSatelliteAttachSupport = mCarrierConfigs.getBoolean(
+ KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
+
+ if (isSatelliteAttachSupport && isCarrierRoamingNtnConnectedTypeAuto()
+ && mIsSatelliteSmsAvailableForManualType) {
+ return AVAILABLE;
}
- return availabilityStatus;
+
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
@@ -128,7 +130,7 @@ public class SatelliteSettingPreferenceController extends
@Override
public void updateState(@Nullable Preference preference) {
super.updateState(preference);
- if (preference != null) {
+ if (preference != null && preference.getKey().equals(getPreferenceKey())) {
mCarrierRoamingNtnModeCallback.mPref = preference;
updateSummary(preference);
}
@@ -162,18 +164,7 @@ public class SatelliteSettingPreferenceController extends
logd("init(), subId=" + subId);
mSubId = subId;
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
-
- final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
- if (carrierConfig == null) {
- logd("init(), no carrier config data");
- return;
- }
- mIsCarrierSatelliteAttachSupported = carrierConfig.getBoolean(
- KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
- mIsCarrierRoamingNtnConnectedTypeManual =
- CARRIER_ROAMING_NTN_CONNECT_MANUAL == carrierConfig.getInt(
- KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
- CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
+ mCarrierConfigs = mCarrierConfigCache.getConfigForSubId(subId);
}
private void updateSummary(Preference preference) {
@@ -186,11 +177,12 @@ public class SatelliteSettingPreferenceController extends
return;
}
- if (mIsCarrierRoamingNtnConnectedTypeManual) {
- preference.setSummary(mIsSatelliteSmsAvailableForManualType
- ? R.string.satellite_setting_enabled_summary
- : R.string.satellite_setting_disabled_summary);
- } else {
+ if (!mCarrierConfigs.getBoolean(KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL)) {
+ preference.setSummary(R.string.satellite_setting_summary_without_entitlement);
+ return;
+ }
+
+ if (isCarrierRoamingNtnConnectedTypeAuto()) {
try {
Set restrictionReason =
mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
@@ -207,9 +199,19 @@ public class SatelliteSettingPreferenceController extends
loge(ex.toString());
preference.setSummary(R.string.satellite_setting_disabled_summary);
}
+ } else {
+ preference.setSummary(mIsSatelliteSmsAvailableForManualType
+ ? R.string.satellite_setting_enabled_summary
+ : R.string.satellite_setting_disabled_summary);
}
}
+ private boolean isCarrierRoamingNtnConnectedTypeAuto() {
+ return CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC == mCarrierConfigs.getInt(
+ KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
+ }
+
@VisibleForTesting
class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
TelephonyCallback.CarrierRoamingNtnListener {
diff --git a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceControllerTest.java
index 6e650fd883f..8fcb32e493d 100644
--- a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceControllerTest.java
@@ -16,10 +16,12 @@
package com.android.settings.network.telephony;
+import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC;
+import static android.telephony.CarrierConfigManager.CARRIER_ROAMING_NTN_CONNECT_MANUAL;
+import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
@@ -39,6 +41,9 @@ import android.telephony.TelephonyManager;
import android.telephony.satellite.SatelliteManager;
import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -47,7 +52,6 @@ import com.android.settings.R;
import com.android.settings.network.CarrierConfigCache;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -56,10 +60,10 @@ import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class)
-@Ignore("b/382664790")
+@UiThreadTest
public class SatelliteSettingsPreferenceControllerTest {
- private static final String KEY = "key";
- private static final int TEST_SUB_ID = 0;
+ private static final String KEY = "SatelliteSettingsPreferenceControllerTest";
+ private static final int TEST_SUB_ID = 5;
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -85,12 +89,13 @@ public class SatelliteSettingsPreferenceControllerTest {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(mSatelliteManager);
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)).thenReturn(mTelephonyManager);
+ when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig);
mController = spy(new SatelliteSettingPreferenceController(mContext, KEY));
}
@Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
- public void getAvailabilityStatus_noSatellite_returnUnsupport() {
+ public void getAvailabilityStatus_noSatellite_returnUnsupported() {
when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
mController = new SatelliteSettingPreferenceController(mContext, KEY);
@@ -102,11 +107,39 @@ public class SatelliteSettingsPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
public void getAvailabilityStatus_carrierIsNotSupport_returnUnavailable() {
- when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
false);
- when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig);
+ int result = mController.getAvailabilityStatus(TEST_SUB_ID);
+
+ assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
+ public void getAvailabilityStatus_ntnConnectIsManual_returnUnavailable() {
+ mCarrierConfig.putBoolean(
+ CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
+ true);
+ mCarrierConfig.putInt(
+ CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_MANUAL);
+ int result = mController.getAvailabilityStatus(TEST_SUB_ID);
+
+ assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
+ public void getAvailabilityStatus_smsNotAvailable_returnUnavailable() {
+ mCarrierConfig.putBoolean(
+ CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
+ true);
+ mCarrierConfig.putInt(
+ CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
+ mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
+ new int[]{SERVICE_TYPE_SMS});
int result = mController.getAvailabilityStatus(TEST_SUB_ID);
@@ -115,22 +148,25 @@ public class SatelliteSettingsPreferenceControllerTest {
@Test
@EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG)
- public void getAvailabilityStatus_carrierIsSupport_returnAvailable() {
- when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null);
+ public void getAvailabilityStatus_matchAllConditions_returnAvailable() {
mCarrierConfig.putBoolean(
CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
true);
- when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mCarrierConfig);
+ mCarrierConfig.putInt(
+ CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
+
+ mController.mCarrierRoamingNtnModeCallback.onCarrierRoamingNtnAvailableServicesChanged(
+ new int[]{SERVICE_TYPE_SMS});
int result = mController.getAvailabilityStatus(TEST_SUB_ID);
- assertThat(result).isEqualTo(AVAILABLE);
+ assertThat(result).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
- @Ignore("avoid post submit failed")
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
- public void getAvailabilityStatus_registerTelephonyCallback_success() {
+ public void onResume_registerTelephonyCallback_success() {
mController.init(TEST_SUB_ID);
mController.onResume(null);
@@ -138,7 +174,6 @@ public class SatelliteSettingsPreferenceControllerTest {
}
@Test
- @Ignore("avoid post submit failed")
@EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
public void getAvailabilityStatus_unregisterTelephonyCallback_success() {
mController.init(TEST_SUB_ID);
@@ -178,4 +213,66 @@ public class SatelliteSettingsPreferenceControllerTest {
assertThat(preference.getTitle()).isEqualTo(
mContext.getString(R.string.satellite_setting_title));
}
+
+ @Test
+ @EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
+ public void getAvailabilityStatus_noEntitlement_showSummaryWithoutEntitlement() {
+ mCarrierConfig.putBoolean(
+ KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
+ false);
+ mController.init(TEST_SUB_ID);
+ Preference preference = new Preference(mContext);
+ preference.setKey(KEY);
+ preference.setTitle("test title");
+ mController.updateState(preference);
+
+ assertThat(preference.getSummary()).isEqualTo(
+ mContext.getString(R.string.satellite_setting_summary_without_entitlement));
+ }
+
+ @Test
+ @EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
+ public void getAvailabilityStatus_smsAvailableForManualType_showSummaryWithAccount() {
+ mCarrierConfig.putBoolean(
+ KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
+ true);
+ mCarrierConfig.putInt(
+ CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_MANUAL);
+ mController.init(TEST_SUB_ID);
+ PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
+ Preference preference = new Preference(mContext);
+ preference.setKey(KEY);
+ preference.setTitle("test title");
+ preferenceScreen.addPreference(preference);
+ mController.mIsSatelliteSmsAvailableForManualType = true;
+ mController.displayPreference(preferenceScreen);
+
+ assertThat(preference.getSummary()).isEqualTo(
+ mContext.getString(R.string.satellite_setting_enabled_summary));
+ }
+
+ @Test
+ @EnableFlags(com.android.settings.flags.Flags.FLAG_SATELLITE_OEM_SETTINGS_UX_MIGRATION)
+ public void getAvailabilityStatus_smsAvailableForAutoType_showSummaryWithoutAccount() {
+ mCarrierConfig.putBoolean(
+ KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
+ true);
+ mCarrierConfig.putInt(
+ CarrierConfigManager.KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT,
+ CARRIER_ROAMING_NTN_CONNECT_MANUAL);
+ mController.init(TEST_SUB_ID);
+ PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
+ Preference preference = new Preference(mContext);
+ preference.setKey(KEY);
+ preference.setTitle("test title");
+ preferenceScreen.addPreference(preference);
+ mController.mIsSatelliteSmsAvailableForManualType = false;
+ mController.displayPreference(preferenceScreen);
+
+ assertThat(preference.getSummary()).isEqualTo(
+ mContext.getString(R.string.satellite_setting_disabled_summary));
+ }
}