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

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

Merge "[Satellite] Fix mismatched content started from external and internal." into main

parents 76ccf06e 77ac7814
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -58,13 +58,15 @@ public class SatelliteAppListCategoryController extends TelephonyBasePreferenceC
    }

    /** Initialize the necessary applications' data */
    public void init(int subId, @NonNull PersistableBundle configBundle, boolean isSmsAvailable,
            boolean isDataAvailable) {
    public void init(int subId, @NonNull PersistableBundle configBundle) {
        mSubId = subId;
        mConfigBundle = configBundle;
        mPackageNameList = getSatelliteDataOptimizedApps();
    }

    void setCarrierRoamingNtnAvailability(boolean isSmsAvailable, boolean isDataAvailable) {
        mIsSmsAvailable = isSmsAvailable;
        mIsDataAvailable = isDataAvailable;
        mPackageNameList = getSatelliteDataOptimizedApps();
        mIsSatelliteEligible = isSatelliteEligible();
    }

+79 −17
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import static android.telephony.CarrierConfigManager.KEY_EMERGENCY_MESSAGING_SUP
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 static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_DATA;
import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS;

import static com.android.settings.network.telephony.satellite.SatelliteCarrierSettingUtils.isSatelliteDataRestricted;

@@ -31,25 +33,35 @@ import android.os.PersistableBundle;
import android.os.UserManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.util.Log;

import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
import com.android.settings.dashboard.RestrictedDashboardFragment;

import java.util.Arrays;
import java.util.List;

/** Handle Satellite Setting Preference Layout. */
public class SatelliteSetting extends RestrictedDashboardFragment {
    private static final String TAG = "SatelliteSetting";

    @VisibleForTesting
    final CarrierRoamingNtnModeCallback mCarrierRoamingNtnModeCallback =
            new CarrierRoamingNtnModeCallback();

    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 SatelliteManager mSatelliteManager;
    private TelephonyManager mTelephonyManager;
    private PersistableBundle mConfigBundle;
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private boolean mIsSmsAvailableForManualType = false;

    public SatelliteSetting() {
        super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
@@ -73,23 +85,51 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        mSubId = mActivity.getIntent().getIntExtra(SUB_ID,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        mConfigBundle = fetchCarrierConfigData(mSubId);
        if (!isSatelliteAttachSupported()) {

        if (!mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false)) {
            Log.d(TAG, "SatelliteSettings: KEY_SATELLITE_ATTACH_SUPPORTED_BOOL is false, "
                    + "do nothing.");
            finish();
        }
        mIsSmsAvailableForManualType = getIntent().getBooleanExtra(
                EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE, false);
        boolean isDataAvailableAndNotRestricted = isDataAvailableAndNotRestricted();
        use(SatelliteAppListCategoryController.class).init(mSubId, mConfigBundle,
                mIsSmsAvailableForManualType, isDataAvailableAndNotRestricted);
        mTelephonyManager = getContext().getSystemService(TelephonyManager.class);
        if (mTelephonyManager != null) {
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId);
        }

        use(SatelliteAppListCategoryController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingAboutContentController.class).init(mSubId);
        use(SatelliteSettingAccountInfoController.class).init(mSubId, mConfigBundle,
                mIsSmsAvailableForManualType, isDataAvailableAndNotRestricted);
        use(SatelliteSettingAccountInfoController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingFooterController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingIndicatorController.class).init(mSubId, mConfigBundle);
    }

    @Override
    public void onStart() {
        super.onStart();
        if (mTelephonyManager != null) {
            mTelephonyManager.registerTelephonyCallback(getContext().getMainExecutor(),
                    mCarrierRoamingNtnModeCallback);
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if (mTelephonyManager != null) {
            mTelephonyManager.unregisterTelephonyCallback(mCarrierRoamingNtnModeCallback);
        }
    }

    void updateRoamingNtnAvailabilityToController(boolean isSmsAvailable, boolean isDataAvailable) {
        boolean isDataAvailableAndNotRestricted = isDataAvailable && !isSatelliteDataRestricted(
                getContext(), mSubId);
        use(SatelliteAppListCategoryController.class).setCarrierRoamingNtnAvailability(
                isSmsAvailable, isDataAvailableAndNotRestricted);
        use(SatelliteSettingAccountInfoController.class).setCarrierRoamingNtnAvailability(
                isSmsAvailable, isDataAvailableAndNotRestricted);
        forceUpdatePreferences();
    }

    @Override
    protected String getLogTag() {
        return TAG;
@@ -121,12 +161,34 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        return bundle;
    }

    private boolean isSatelliteAttachSupported() {
        return mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);
    private class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
            TelephonyCallback.CarrierRoamingNtnListener {

        @Override
        public void onCarrierRoamingNtnAvailableServicesChanged(int[] availableServices) {
            CarrierRoamingNtnListener.super.onCarrierRoamingNtnAvailableServicesChanged(
                    availableServices);
            List<Integer> availableServicesList = Arrays.stream(availableServices).boxed().toList();
            boolean isSmsAvailable = availableServicesList.contains(SERVICE_TYPE_SMS);
            boolean isDataAvailable = availableServicesList.contains(SERVICE_TYPE_DATA);
            Log.d(TAG, "isSmsAvailable : " + isSmsAvailable
                    + " / isDataAvailable " + isDataAvailable);
            updateRoamingNtnAvailabilityToController(isSmsAvailable, isDataAvailable);
        }

    private boolean isDataAvailableAndNotRestricted() {
        return getIntent().getBooleanExtra(EXTRA_IS_SERVICE_DATA_TYPE, false)
                && !isSatelliteDataRestricted(getContext(), mSubId);
        @Override
        public void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {
            // Do nothing
        }

        @Override
        public void onCarrierRoamingNtnModeChanged(boolean active) {
            // Do nothing
        }

        @Override
        public void onCarrierRoamingNtnSignalStrengthChanged(NtnSignalStrength ntnSignalStrength) {
            // Do nothing
        }
    }
}
+27 −12
Original line number Diff line number Diff line
@@ -67,12 +67,14 @@ public class SatelliteSettingAccountInfoController extends TelephonyBasePreferen
    }

    /** Initialize the UI settings. */
    public void init(int subId, @NonNull PersistableBundle configBundle, boolean isSmsAvailable,
            boolean isDataAvailable) {
    public void init(int subId, @NonNull PersistableBundle configBundle) {
        mSubId = subId;
        mConfigBundle = configBundle;
        mSimOperatorName = mContext.getSystemService(TelephonyManager.class).getSimOperatorName(
                mSubId);
    }

    void setCarrierRoamingNtnAvailability(boolean isSmsAvailable, boolean isDataAvailable) {
        mIsSmsAvailable = isSmsAvailable;
        mIsDataAvailable = isDataAvailable;
        mIsSatelliteEligible = isSatelliteEligible();
@@ -82,17 +84,13 @@ public class SatelliteSettingAccountInfoController extends TelephonyBasePreferen
    public void displayPreference(@NonNull PreferenceScreen screen) {
        mScreen = screen;
        super.displayPreference(screen);
        PreferenceCategory prefCategory = screen.findPreference(
                PREF_KEY_CATEGORY_YOUR_SATELLITE_PLAN);
        // Your mobile plan
        prefCategory.setTitle(mContext.getString(R.string.category_title_your_satellite_plan,
                mSimOperatorName));

        if (mIsSatelliteEligible) {
            handleEligibleUI();
            return;
        updatePreferences();
    }
        handleIneligibleUI();

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        updatePreferences();
    }

    @Override
@@ -106,6 +104,23 @@ public class SatelliteSettingAccountInfoController extends TelephonyBasePreferen
                : CONDITIONALLY_UNAVAILABLE;
    }

    private void updatePreferences() {
        if (mScreen == null) {
            return;
        }
        PreferenceCategory prefCategory = mScreen.findPreference(
                PREF_KEY_CATEGORY_YOUR_SATELLITE_PLAN);
        // Your mobile plan
        prefCategory.setTitle(mContext.getString(R.string.category_title_your_satellite_plan,
                mSimOperatorName));

        if (mIsSatelliteEligible) {
            handleEligibleUI();
            return;
        }
        handleIneligibleUI();
    }

    private void handleEligibleUI() {
        Preference messagingPreference = mScreen.findPreference(PREF_KEY_YOUR_SATELLITE_PLAN);
        Drawable icon = mContext.getDrawable(R.drawable.ic_check_circle_24px);
+0 −10
Original line number Diff line number Diff line
@@ -170,10 +170,6 @@ public class SatelliteSettingPreferenceController extends
            // This will setup the Home and Search affordance
            intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, true);
            intent.putExtra(SatelliteSetting.SUB_ID, mSubId);
            intent.putExtra(SatelliteSetting.EXTRA_IS_SERVICE_DATA_TYPE,
                    mCarrierRoamingNtnModeCallback.isSatelliteServiceDataType());
            intent.putExtra(SatelliteSetting.EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE,
                    mCarrierRoamingNtnModeCallback.isSatelliteSmsAvailable());
            mContext.startActivity(intent);
            return true;
        }
@@ -238,7 +234,6 @@ public class SatelliteSettingPreferenceController extends
    static class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
            TelephonyCallback.CarrierRoamingNtnListener {
        SatelliteSettingPreferenceController mSatelliteSettingPreferenceController;
        private boolean mIsSatelliteServiceDataType = false;
        private boolean mIsSatelliteSmsAvailable = false;

        CarrierRoamingNtnModeCallback(
@@ -246,10 +241,6 @@ public class SatelliteSettingPreferenceController extends
            mSatelliteSettingPreferenceController = satelliteSettingPreferenceController;
        }

        boolean isSatelliteServiceDataType() {
            return mIsSatelliteServiceDataType;
        }

        boolean isSatelliteSmsAvailable() {
            return mIsSatelliteSmsAvailable;
        }
@@ -263,7 +254,6 @@ public class SatelliteSettingPreferenceController extends
            boolean isDataAvailable = availableServicesList.contains(SERVICE_TYPE_DATA);
            logd("isSmsAvailable : " + isSmsAvailable
                    + " / isDataAvailable " + isDataAvailable);
            mIsSatelliteServiceDataType = isDataAvailable;
            mIsSatelliteSmsAvailable = isSmsAvailable;
            mSatelliteSettingPreferenceController.displayPreference();
        }
+12 −6
Original line number Diff line number Diff line
@@ -98,7 +98,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, true);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, true);
        PreferenceManager preferenceManager = new PreferenceManager(mContext);
        PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
        PreferenceCategory category = new PreferenceCategory(mContext);
@@ -125,7 +126,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, true);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, true);

        int result = mController.getAvailabilityStatus(TEST_SUB_ID);

@@ -146,7 +148,8 @@ public class SatelliteAppListCategoryControllerTest {
                return List.of();
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, true);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, true);

        int result = mController.getAvailabilityStatus(TEST_SUB_ID);

@@ -167,7 +170,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, false);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, false);

        int result = mController.getAvailabilityStatus(TEST_SUB_ID);

@@ -189,7 +193,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, true);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, true);

        int result = mController.getAvailabilityStatus(TEST_SUB_ID);

@@ -211,7 +216,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
            }
        };
        mController.init(TEST_SUB_ID, mPersistableBundle, true, true);
        mController.init(TEST_SUB_ID, mPersistableBundle);
        mController.setCarrierRoamingNtnAvailability(true, true);

        int result = mController.getAvailabilityStatus(TEST_SUB_ID);

Loading