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

Commit e2ba1a89 authored by Tom Hsu's avatar Tom Hsu Committed by Android (Google) Code Review
Browse files

Merge "NTN connected type is manual, UI status shall be checked by callback." into main

parents 856a577b 88a0a761
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