Merge "[Satellite] Add satellite string for KDDI if no entitlement" into main

This commit is contained in:
Treehugger Robot
2025-02-10 19:30:27 -08:00
committed by Android (Google) Code Review
4 changed files with 166 additions and 51 deletions

View File

@@ -12533,12 +12533,14 @@
<!-- Summary to show the current network mode is invalid. [CHAR LIMIT=NONE]-->
<string name="mobile_network_mode_error">Invalid Network Mode <xliff:g id="networkModeId" example="0">%1$d</xliff:g>. Ignore.</string>
<!-- Title for _satellite_setting_preference_layout in mobile network settings [CHAR LIMIT=60] -->
<!-- Title for satellite setting preference in mobile network settings [CHAR LIMIT=60] -->
<string name="satellite_setting_title">Satellite messaging</string>
<!-- Summary for _satellite_setting_preference_layout. [CHAR LIMIT=NONE]-->
<!-- Summary for satellite setting preference. [CHAR LIMIT=NONE]-->
<string name="satellite_setting_enabled_summary">Send and receive text messages by satellite. Included with your account.</string>
<!-- Summary for _satellite_setting_preference_layout. [CHAR LIMIT=NONE]-->
<!-- Summary for satellite setting preference. [CHAR LIMIT=NONE]-->
<string name="satellite_setting_disabled_summary">Send and receive text messages by satellite. Not included with your account.</string>
<!-- Summary for satellite setting preference without entitlement [CHAR LIMIT=NONE]-->
<string name="satellite_setting_summary_without_entitlement">Send and receive text messages by satellite. Contact your carrier for details.</string>
<!-- Search keywords for "_satellite_setting_preference_layout" [CHAR_LIMIT=NONE] -->
<string name="keywords_satellite_setting">Satellite messaging, satellite connectivity</string>
<!-- Category name "About satellite messaging" [CHAR_LIMIT=NONE] -->
@@ -12565,6 +12567,8 @@
<string name="summary_supported_service">You can text anyone, including emergency services. Your phone will reconnect to a mobile network when available.</string>
<!-- learn more text - more about satellite messaging [CHAR_LIMIT=NONE] -->
<string name="satellite_setting_summary_more_information"><xliff:g id="subject" example="satellite messaging">%1$s</xliff:g> 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 <xliff:g id="carrier_name" example="T-Mobile">%2$s</xliff:g> for details.</string>
<!-- learn more text - more about satellite messaging without emergency messaging support. [CHAR_LIMIT=NONE] -->
<string name="satellite_setting_summary_more_information_no_emergency_messaging"><xliff:g id="subject" example="satellite messaging">%1$s</xliff:g> 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 <xliff:g id="carrier_name" example="T-Mobile">%2$s</xliff:g> for details.</string>
<!-- more about satellite messaging [CHAR_LIMIT=NONE] -->
<string name="more_about_satellite_messaging">More about <xliff:g id="subject" example="satellite messaging">%1$s</xliff:g></string>
<!-- Title for satellite warning dialog to avoid user using wifi/bluetooth/airplane mode [CHAR_LIMIT=NONE] -->

View File

@@ -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();

View File

@@ -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<Integer> 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 {

View File

@@ -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));
}
}