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

Commit 77ac7814 authored by tom hsu's avatar tom hsu
Browse files

[Satellite] Fix mismatched content started from external and internal.

  - Satellite settings register CarrierRoamingNtnCallback and receive
    the result

Flag: EXEMPT bug fix
Fix: b/408276819
Test: atest pass.
Change-Id: Ieb7d97aafa68b5dd7eab0d4826d32e985fc3a713
parent 2ba51d3c
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -58,13 +58,15 @@ public class SatelliteAppListCategoryController extends TelephonyBasePreferenceC
    }
    }


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

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


+79 −17
Original line number Original line 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_ATTACH_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ENTITLEMENT_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.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;
import static com.android.settings.network.telephony.satellite.SatelliteCarrierSettingUtils.isSatelliteDataRestricted;


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


import androidx.annotation.VisibleForTesting;

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


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

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


    @VisibleForTesting
    final CarrierRoamingNtnModeCallback mCarrierRoamingNtnModeCallback =
            new CarrierRoamingNtnModeCallback();

    static final String SUB_ID = "sub_id";
    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 Activity mActivity;
    private SatelliteManager mSatelliteManager;
    private SatelliteManager mSatelliteManager;
    private TelephonyManager mTelephonyManager;
    private PersistableBundle mConfigBundle;
    private PersistableBundle mConfigBundle;
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private boolean mIsSmsAvailableForManualType = false;


    public SatelliteSetting() {
    public SatelliteSetting() {
        super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
        super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
@@ -73,23 +85,51 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        mSubId = mActivity.getIntent().getIntExtra(SUB_ID,
        mSubId = mActivity.getIntent().getIntExtra(SUB_ID,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        mConfigBundle = fetchCarrierConfigData(mSubId);
        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, "
            Log.d(TAG, "SatelliteSettings: KEY_SATELLITE_ATTACH_SUPPORTED_BOOL is false, "
                    + "do nothing.");
                    + "do nothing.");
            finish();
            finish();
        }
        }
        mIsSmsAvailableForManualType = getIntent().getBooleanExtra(
        mTelephonyManager = getContext().getSystemService(TelephonyManager.class);
                EXTRA_IS_SMS_AVAILABLE_FOR_MANUAL_TYPE, false);
        if (mTelephonyManager != null) {
        boolean isDataAvailableAndNotRestricted = isDataAvailableAndNotRestricted();
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId);
        use(SatelliteAppListCategoryController.class).init(mSubId, mConfigBundle,
        }
                mIsSmsAvailableForManualType, isDataAvailableAndNotRestricted);

        use(SatelliteAppListCategoryController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingAboutContentController.class).init(mSubId);
        use(SatelliteSettingAboutContentController.class).init(mSubId);
        use(SatelliteSettingAccountInfoController.class).init(mSubId, mConfigBundle,
        use(SatelliteSettingAccountInfoController.class).init(mSubId, mConfigBundle);
                mIsSmsAvailableForManualType, isDataAvailableAndNotRestricted);
        use(SatelliteSettingFooterController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingFooterController.class).init(mSubId, mConfigBundle);
        use(SatelliteSettingIndicatorController.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
    @Override
    protected String getLogTag() {
    protected String getLogTag() {
        return TAG;
        return TAG;
@@ -121,12 +161,34 @@ public class SatelliteSetting extends RestrictedDashboardFragment {
        return bundle;
        return bundle;
    }
    }


    private boolean isSatelliteAttachSupported() {
    private class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
        return mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false);
            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() {
        @Override
        return getIntent().getBooleanExtra(EXTRA_IS_SERVICE_DATA_TYPE, false)
        public void onCarrierRoamingNtnEligibleStateChanged(boolean eligible) {
                && !isSatelliteDataRestricted(getContext(), mSubId);
            // Do nothing
        }

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

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


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

    void setCarrierRoamingNtnAvailability(boolean isSmsAvailable, boolean isDataAvailable) {
        mIsSmsAvailable = isSmsAvailable;
        mIsSmsAvailable = isSmsAvailable;
        mIsDataAvailable = isDataAvailable;
        mIsDataAvailable = isDataAvailable;
        mIsSatelliteEligible = isSatelliteEligible();
        mIsSatelliteEligible = isSatelliteEligible();
@@ -82,17 +84,13 @@ public class SatelliteSettingAccountInfoController extends TelephonyBasePreferen
    public void displayPreference(@NonNull PreferenceScreen screen) {
    public void displayPreference(@NonNull PreferenceScreen screen) {
        mScreen = screen;
        mScreen = screen;
        super.displayPreference(screen);
        super.displayPreference(screen);
        PreferenceCategory prefCategory = screen.findPreference(
        updatePreferences();
                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();

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


    @Override
    @Override
@@ -106,6 +104,23 @@ public class SatelliteSettingAccountInfoController extends TelephonyBasePreferen
                : CONDITIONALLY_UNAVAILABLE;
                : 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() {
    private void handleEligibleUI() {
        Preference messagingPreference = mScreen.findPreference(PREF_KEY_YOUR_SATELLITE_PLAN);
        Preference messagingPreference = mScreen.findPreference(PREF_KEY_YOUR_SATELLITE_PLAN);
        Drawable icon = mContext.getDrawable(R.drawable.ic_check_circle_24px);
        Drawable icon = mContext.getDrawable(R.drawable.ic_check_circle_24px);
+0 −10
Original line number Original line Diff line number Diff line
@@ -170,10 +170,6 @@ public class SatelliteSettingPreferenceController extends
            // This will setup the Home and Search affordance
            // This will setup the Home and Search affordance
            intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, true);
            intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, true);
            intent.putExtra(SatelliteSetting.SUB_ID, mSubId);
            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);
            mContext.startActivity(intent);
            return true;
            return true;
        }
        }
@@ -238,7 +234,6 @@ public class SatelliteSettingPreferenceController extends
    static class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
    static class CarrierRoamingNtnModeCallback extends TelephonyCallback implements
            TelephonyCallback.CarrierRoamingNtnListener {
            TelephonyCallback.CarrierRoamingNtnListener {
        SatelliteSettingPreferenceController mSatelliteSettingPreferenceController;
        SatelliteSettingPreferenceController mSatelliteSettingPreferenceController;
        private boolean mIsSatelliteServiceDataType = false;
        private boolean mIsSatelliteSmsAvailable = false;
        private boolean mIsSatelliteSmsAvailable = false;


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


        boolean isSatelliteServiceDataType() {
            return mIsSatelliteServiceDataType;
        }

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


@@ -146,7 +148,8 @@ public class SatelliteAppListCategoryControllerTest {
                return List.of();
                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);
        int result = mController.getAvailabilityStatus(TEST_SUB_ID);


@@ -167,7 +170,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
                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);
        int result = mController.getAvailabilityStatus(TEST_SUB_ID);


@@ -189,7 +193,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
                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);
        int result = mController.getAvailabilityStatus(TEST_SUB_ID);


@@ -211,7 +216,8 @@ public class SatelliteAppListCategoryControllerTest {
                return PACKAGE_NAMES;
                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);
        int result = mController.getAvailabilityStatus(TEST_SUB_ID);


Loading