Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88a0a761 authored by tomhsu's avatar tomhsu
Browse files

NTN connected type is manual, UI status shall be checked by callback.

 - Manual type shall check with onCarrierRoamingNtnAvailableServicesChanged
 - Automatic type check shall check with getAttachRestrictionReasonsForCarrier

Flag: EXEMPT bug fix
Fix: b/387523217
Test: Manual test
Change-Id: Id28885a0972a7f7d6c43ae22149b6e3e49d7f374
parent 3ebad898
Loading
Loading
Loading
Loading
+44 −22
Original line number Diff line number Diff line
@@ -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 @@ public class SatelliteSetting extends RestrictedDashboardFragment {

    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 @@ public class SatelliteSetting extends RestrictedDashboardFragment {

        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 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        }

        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,12 +177,14 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
               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()) {
                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
               in user's mobile plan */
@@ -191,7 +199,7 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
            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 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
                            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 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
    }

    private boolean isSatelliteEligible() {
        if (isCarrierRoamingNtnConnectedTypeManual()) {
            return mIsSmsAvailableForManualType;
        }
        try {
            Set<Integer> restrictionReason =
                    mSatelliteManager.getAttachRestrictionReasonsForCarrier(mSubId);
@@ -254,26 +265,37 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        }
    }

    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 isSatelliteAttachSupported(int subId) {
        PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(subId,
                KEY_SATELLITE_ATTACH_SUPPORTED_BOOL);
        if (bundle.isEmpty()) {
            Log.d(TAG, "SatelliteSettings: getDefaultConfig");
            bundle = CarrierConfigManager.getDefaultConfig();
    private boolean isCarrierRoamingNtnConnectedTypeManual() {
        return CARRIER_ROAMING_NTN_CONNECT_MANUAL == mConfigBundle.getInt(
                KEY_CARRIER_ROAMING_NTN_CONNECT_TYPE_INT, CARRIER_ROAMING_NTN_CONNECT_AUTOMATIC);
    }
        return bundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);

    private boolean isSatelliteAttachSupported(int subId) {

        return mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);
    }

    // This is for a word which first letter is uppercase. e.g. Satellite messaging.
+63 −39
Original line number Diff line number Diff line
@@ -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.Context;
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 @@ import java.util.Set;
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 @@ public class SatelliteSettingPreferenceController extends
        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 @@ public class SatelliteSettingPreferenceController extends
            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 @@ public class SatelliteSettingPreferenceController extends
            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,13 +156,35 @@ 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);
    }

    private void updateSummary(Preference preference) {
        if (preference == null) {
            logd("updateSummary - no Preference");
            return;
        }
        if (mSatelliteManager == null) {
            logd("updateSummary - no SatelliteManager");
            return;
        }

        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);
@@ -170,13 +202,6 @@ public class SatelliteSettingPreferenceController extends
                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
@@ -197,12 +222,11 @@ public class SatelliteSettingPreferenceController extends
                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