Merge cherrypicks of ['googleplex-android-review.googlesource.com/31162558'] into 25Q1-release.

Change-Id: I31785a2978327b7f62e58c9e2e4e6ba089cd1fea
diff --git a/src/com/android/settings/network/telephony/SatelliteSetting.java b/src/com/android/settings/network/telephony/SatelliteSetting.java
index a6e2f82..52957d9 100644
--- a/src/com/android/settings/network/telephony/SatelliteSetting.java
+++ b/src/com/android/settings/network/telephony/SatelliteSetting.java
@@ -16,6 +16,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_INFORMATION_REDIRECT_URL_STRING;
 
@@ -68,14 +71,15 @@
 
     static final String SUB_ID = "sub_id";
     static final String EXTRA_IS_SERVICE_DATA_TYPE = "is_service_data_type";
+    static final String EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE = "is_sms_available";
 
     private Activity mActivity;
-    private CarrierConfigManager mCarrierConfigManager;
     private SatelliteManager mSatelliteManager;
     private PersistableBundle mConfigBundle;
     private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     private String mSimOperatorName = "";
     private boolean mIsServiceDataType = false;
+    private boolean mIsSmsAvailableForManualType = false;
 
     public SatelliteSetting() {
         super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
@@ -108,8 +112,8 @@
 
         mSubId = mActivity.getIntent().getIntExtra(SUB_ID,
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        mConfigBundle = fetchCarrierConfigData(mSubId);
 
-        mCarrierConfigManager = mActivity.getSystemService(CarrierConfigManager.class);
         if (!isSatelliteAttachSupported(mSubId)) {
             Log.d(TAG, "SatelliteSettings: KEY_SATELLITE_ATTACH_SUPPORTED_BOOL is false, "
                     + "do nothing.");
@@ -118,6 +122,8 @@
         }
 
         mIsServiceDataType = getIntent().getBooleanExtra(EXTRA_IS_SERVICE_DATA_TYPE, false);
+        mIsSmsAvailableForManualType = getIntent().getBooleanExtra(
+                EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE, false);
         mSimOperatorName = getSystemService(TelephonyManager.class).getSimOperatorName(mSubId);
     }
 
@@ -171,11 +177,13 @@
                the check icon with guidance that satellite is included in user's mobile plan */
             messagingPreference.setTitle(R.string.title_have_satellite_plan);
             if (com.android.settings.flags.Flags.satelliteOemSettingsUxMigration()) {
-                Preference connectivityPreference = findPreference(
-                        PREF_KEY_YOUR_SATELLITE_DATA_PLAN);
-                connectivityPreference.setTitle(R.string.title_have_satellite_data_plan);
-                connectivityPreference.setIcon(icon);
-                connectivityPreference.setVisible(true);
+                if (mIsServiceDataType) {
+                    Preference connectivityPreference = findPreference(
+                            PREF_KEY_YOUR_SATELLITE_DATA_PLAN);
+                    connectivityPreference.setTitle(R.string.title_have_satellite_data_plan);
+                    connectivityPreference.setIcon(icon);
+                    connectivityPreference.setVisible(true);
+                }
             }
         } else {
             /* Or, it will show the blocked icon with the guidance that satellite is not included
@@ -191,7 +199,7 @@
             messagingPreference.setSummary(spannable);
             /* The link will lead users to a guide page */
             messagingPreference.setOnPreferenceClickListener(pref -> {
-                String url = readSatelliteMoreInfoString(mSubId);
+                String url = readSatelliteMoreInfoString();
                 if (!url.isEmpty()) {
                     Uri uri = Uri.parse(url);
                     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
@@ -224,7 +232,7 @@
                             getSubjectString(), mSimOperatorName));
 
             final String[] link = new String[1];
-            link[0] = readSatelliteMoreInfoString(mSubId);
+            link[0] = readSatelliteMoreInfoString();
             if (link[0] != null && !link[0].isEmpty()) {
                 footerPreference.setLearnMoreAction(view -> {
                     if (!link[0].isEmpty()) {
@@ -243,6 +251,9 @@
     }
 
     private boolean isSatelliteEligible() {
+        if (isCarrierRoamingNtnConnectedTypeManual()) {
+            return mIsSmsAvailableForManualType;
+        }
         try {
             Set<Integer> restrictionReason =
                     mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
@@ -254,26 +265,37 @@
         }
     }
 
-    private String readSatelliteMoreInfoString(int subId) {
-        if (mConfigBundle == null) {
-            mConfigBundle = mCarrierConfigManager.getConfigForSubId(subId,
-                    KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING);
-            if (mConfigBundle.isEmpty()) {
+    private PersistableBundle fetchCarrierConfigData(int subId) {
+        CarrierConfigManager carrierConfigManager = mActivity.getSystemService(
+                CarrierConfigManager.class);
+        PersistableBundle bundle = CarrierConfigManager.getDefaultConfig();
+        try {
+            bundle = carrierConfigManager.getConfigForSubId(subId,
+                    KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
+                    KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING,
+                    KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT);
+            if (bundle.isEmpty()) {
                 Log.d(TAG, "SatelliteSettings: getDefaultConfig");
-                mConfigBundle = CarrierConfigManager.getDefaultConfig();
+                bundle = CarrierConfigManager.getDefaultConfig();
             }
+        } catch (IllegalStateException exception) {
+            Log.d(TAG, "SatelliteSettings exception : " + exception);
         }
+        return bundle;
+    }
+
+    private String readSatelliteMoreInfoString() {
         return mConfigBundle.getString(KEY_SATELLITE_INFORMATION_REDIRECT_URL_STRING, "");
     }
 
+    private boolean isCarrierRoamingNtnConnectedTypeManual() {
+        return CARRIER_ROAMING_NTN_CONNECT_MANUAL == mConfigBundle.getInt(
+                KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT, CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
+    }
+
     private boolean isSatelliteAttachSupported(int subId) {
-        PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(subId,
-                KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
-        if (bundle.isEmpty()) {
-            Log.d(TAG, "SatelliteSettings: getDefaultConfig");
-            bundle = CarrierConfigManager.getDefaultConfig();
-        }
-        return bundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);
+
+        return mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);
     }
 
     // This is for a word which first letter is uppercase. e.g. Satellite messaging.
diff --git a/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java b/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
index 017d478..b84c780 100644
--- a/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/SatelliteSettingPreferenceController.java
@@ -16,6 +16,10 @@
 
 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.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
 import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;
 
@@ -23,7 +27,6 @@
 import android.content.Intent;
 import android.os.PersistableBundle;
 import android.provider.Settings;
-import android.telephony.CarrierConfigManager;
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.telephony.satellite.NtnSignalStrength;
@@ -53,17 +56,18 @@
 public class SatelliteSettingPreferenceController extends
         TelephonyBasePreferenceController implements DefaultLifecycleObserver {
     private static final String TAG = "SatelliteSettingPreferenceController";
-
-    CarrierConfigCache mCarrierConfigCache;
-    SatelliteManager mSatelliteManager;
-    private TelephonyManager mTelephonyManager = null;
     @VisibleForTesting
     final CarrierRoamingNtnModeCallback mCarrierRoamingNtnModeCallback =
             new CarrierRoamingNtnModeCallback();
-
+    CarrierConfigCache mCarrierConfigCache;
+    SatelliteManager mSatelliteManager;
+    private TelephonyManager mTelephonyManager = null;
     @Nullable
     private Boolean mIsSatelliteEligible = null;
     private boolean mIsServiceDataType = false;
+    private boolean mIsSatelliteSmsAvailableForManualType = false;
+    private boolean mIsCarrierSatelliteAttachSupported = false;
+    private boolean mIsCarrierRoamingNtnConnectedTypeManual = false;
 
     public SatelliteSettingPreferenceController(@NonNull Context context, @NonNull String key) {
         super(context, key);
@@ -72,6 +76,14 @@
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
     }
 
+    private static void logd(String message) {
+        Log.d(TAG, message);
+    }
+
+    private static void loge(String message) {
+        Log.e(TAG, message);
+    }
+
     @Override
     public int getAvailabilityStatus(int subId) {
         if (!Flags.carrierEnabledSatelliteFlag()) {
@@ -83,11 +95,7 @@
             return UNSUPPORTED_ON_DEVICE;
         }
 
-        final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(subId);
-        final boolean isSatelliteAttachSupported = carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
-
-        return isSatelliteAttachSupported ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return mIsCarrierSatelliteAttachSupported ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
@@ -130,6 +138,8 @@
             intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, true);
             intent.putExtra(SatelliteSetting.SUB_ID, mSubId);
             intent.putExtra(SatelliteSetting.EXTRA_IS_SERVICE_DATA_TYPE, mIsServiceDataType);
+            intent.putExtra(SatelliteSetting.EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE,
+                    mIsSatelliteSmsAvailableForManualType);
             mContext.startActivity(intent);
             return true;
         }
@@ -146,39 +156,54 @@
         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);
     }
 
     private void updateSummary(Preference preference) {
+        if (preference == null) {
+            logd("updateSummary - no Preference");
+            return;
+        }
         if (mSatelliteManager == null) {
             logd("updateSummary - no SatelliteManager");
             return;
         }
-        try {
-            Set<Integer> restrictionReason =
-                    mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
-            boolean isSatelliteEligible = !restrictionReason.contains(
-                    SatelliteManager.SATELLITE_COMMUNICATION_RESTRICTION_REASON_ENTITLEMENT);
-            if (mIsSatelliteEligible == null || mIsSatelliteEligible != isSatelliteEligible) {
-                mIsSatelliteEligible = isSatelliteEligible;
-                String summary = mContext.getString(
-                        mIsSatelliteEligible ? R.string.satellite_setting_enabled_summary
-                                : R.string.satellite_setting_disabled_summary);
-                preference.setSummary(summary);
+
+        if (mIsCarrierRoamingNtnConnectedTypeManual) {
+            preference.setSummary(mIsSatelliteSmsAvailableForManualType
+                    ? R.string.satellite_setting_enabled_summary
+                    : R.string.satellite_setting_disabled_summary);
+        } else {
+            try {
+                Set<Integer> restrictionReason =
+                        mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
+                boolean isSatelliteEligible = !restrictionReason.contains(
+                        SatelliteManager.SATELLITE_COMMUNICATION_RESTRICTION_REASON_ENTITLEMENT);
+                if (mIsSatelliteEligible == null || mIsSatelliteEligible != isSatelliteEligible) {
+                    mIsSatelliteEligible = isSatelliteEligible;
+                    String summary = mContext.getString(
+                            mIsSatelliteEligible ? R.string.satellite_setting_enabled_summary
+                                    : R.string.satellite_setting_disabled_summary);
+                    preference.setSummary(summary);
+                }
+            } catch (SecurityException | IllegalStateException | IllegalArgumentException ex) {
+                loge(ex.toString());
+                preference.setSummary(R.string.satellite_setting_disabled_summary);
             }
-        } catch (SecurityException | IllegalStateException | IllegalArgumentException ex) {
-            loge(ex.toString());
-            preference.setSummary(R.string.satellite_setting_disabled_summary);
         }
     }
 
-    private static void logd(String message) {
-        Log.d(TAG, message);
-    }
-
-    private static void loge(String message) {
-        Log.e(TAG, message);
-    }
-
     @VisibleForTesting
     class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
             TelephonyCallback.CarrierRoamingNtnModeListener {
@@ -197,12 +222,11 @@
                 logd("Satellite preference is not initialized yet");
                 return;
             }
-            if (isDataAvailable) {
-                mIsServiceDataType = true;
-                mPref.setTitle(R.string.title_satellite_setting_connectivity);
-            } else if (isSmsAvailable) {
-                mPref.setTitle(R.string.satellite_setting_title);
-            }
+            mIsServiceDataType = isDataAvailable;
+            mIsSatelliteSmsAvailableForManualType = isSmsAvailable;
+            mPref.setTitle(isDataAvailable ? R.string.title_satellite_setting_connectivity
+                    : R.string.satellite_setting_title);
+            updateSummary(mPref);
         }
 
         @Override