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

Commit 6dc71cd4 authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge "Add auto data switch feature"

parents f36b2d32 a79bf701
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -931,6 +931,9 @@ message TelephonyEvent {

      /** Data switch caused by CBRS switch. */
      DATA_SWITCH_REASON_CBRS = 3;

      /** Data switch caused by non-default SIM having better availability(e.g.signal). */
      DATA_SWITCH_REASON_AUTO = 4;
    }

    /** The reason for data switch. */
+3 −2
Original line number Diff line number Diff line
@@ -4947,9 +4947,10 @@ public class ServiceStateTracker extends Handler {
     *
     * @param h handler to notify
     * @param what what code of message when delivered
     * @param userobj the user obj that will be passed back when notify
     */
    public void registerForServiceStateChanged(Handler h, int what) {
        mServiceStateChangedRegistrants.addUnique(h, what, null);
    public void registerForServiceStateChanged(Handler h, int what, Object userobj) {
        mServiceStateChangedRegistrants.addUnique(h, what, userobj);
    }

    /**
+49 −0
Original line number Diff line number Diff line
@@ -76,6 +76,12 @@ public class DataConfigManager extends Handler {
    /** The default timeout in ms for data network stuck in a transit state. */
    private static final int DEFAULT_NETWORK_TRANSIT_STATE_TIMEOUT_MS = 300000;

    /** Default time threshold in ms to define a internet connection status to be stable. */
    public static int DEFAULT_AUTO_DATA_SWITCH_STABILITY_TIME_MS = 10000;

    /** The max number of retries when a pre-switching validation fails. */
    public static int DEFAULT_AUTO_DATA_SWITCH_MAX_RETRY = 7;

    /** Event for carrier config changed. */
    private static final int EVENT_CARRIER_CONFIG_CHANGED = 1;

@@ -218,6 +224,12 @@ public class DataConfigManager extends Handler {
            "anomaly_network_handover_timeout";
    /** DeviceConfig key of anomaly report: True for enabling APN config invalidity detection */
    private static final String KEY_ANOMALY_APN_CONFIG_ENABLED = "anomaly_apn_config_enabled";
    /** DeviceConfig key of the time threshold in ms for defining a network status to be stable. **/
    private static final String KEY_AUTO_DATA_SWITCH_AVAILABILITY_STABILITY_TIME_THRESHOLD =
            "auto_data_switch_availability_stability_time_threshold";
    /** DeviceConfig key of the maximum number of retries when a validation for switching failed.**/
    private static final String KEY_AUTO_DATA_SWITCH_VALIDATION_MAX_RETRY =
            "auto_data_switch_validation_max_retry";

    /** Anomaly report thresholds for frequent setup data call failure. */
    private EventFrequency mSetupDataCallAnomalyReportThreshold;
@@ -260,6 +272,18 @@ public class DataConfigManager extends Handler {
     */
    private boolean mIsApnConfigAnomalyReportEnabled;

    /**
     * Time threshold in ms to define a internet connection status to be stable(e.g. out of service,
     * in service, wifi is the default active network.etc), while -1 indicates auto switch feature
     * disabled.
     */
    private long mAutoDataSwitchAvailabilityStabilityTimeThreshold;

    /**
     * The maximum number of retries when a pre-switching validation fails.
     */
    private int mAutoDataSwitchValidationMaxRetry;

    private @NonNull final Phone mPhone;
    private @NonNull final String mLogTag;

@@ -425,6 +449,12 @@ public class DataConfigManager extends Handler {
                KEY_ANOMALY_NETWORK_HANDOVER_TIMEOUT, DEFAULT_NETWORK_TRANSIT_STATE_TIMEOUT_MS);
        mIsApnConfigAnomalyReportEnabled = properties.getBoolean(
                KEY_ANOMALY_APN_CONFIG_ENABLED, false);
        mAutoDataSwitchAvailabilityStabilityTimeThreshold = properties.getInt(
                KEY_AUTO_DATA_SWITCH_AVAILABILITY_STABILITY_TIME_THRESHOLD,
                DEFAULT_AUTO_DATA_SWITCH_STABILITY_TIME_MS);
        mAutoDataSwitchValidationMaxRetry = properties.getInt(
                KEY_AUTO_DATA_SWITCH_VALIDATION_MAX_RETRY,
                DEFAULT_AUTO_DATA_SWITCH_MAX_RETRY);
    }

    /**
@@ -900,6 +930,22 @@ public class DataConfigManager extends Handler {
        return mIsApnConfigAnomalyReportEnabled;
    }

    /**
     * @return The maximum number of retries when a validation for switching failed.
     */
    public int getAutoDataSwitchValidationMaxRetry() {
        return mAutoDataSwitchValidationMaxRetry;
    }

    /**
     * @return Time threshold in ms to define a internet connection status to be stable
     * (e.g. out of service, in service, wifi is the default active network.etc), while -1 indicates
     * auto switch feature disabled.
     */
    public long getAutoDataSwitchAvailabilityStabilityTimeThreshold() {
        return mAutoDataSwitchAvailabilityStabilityTimeThreshold;
    }

    /**
     * Get the TCP config string, used by {@link LinkProperties#setTcpBufferSizes(String)}.
     * The config string will have the following form, with values in bytes:
@@ -1280,6 +1326,9 @@ public class DataConfigManager extends Handler {
        pw.println("mNetworkDisconnectingTimeout=" + mNetworkDisconnectingTimeout);
        pw.println("mNetworkHandoverTimeout=" + mNetworkHandoverTimeout);
        pw.println("mIsApnConfigAnomalyReportEnabled=" + mIsApnConfigAnomalyReportEnabled);
        pw.println("mAutoDataSwitchAvailabilityStabilityTimeThreshold="
                + mAutoDataSwitchAvailabilityStabilityTimeThreshold);
        pw.println("mAutoDataSwitchValidationMaxRetry=" + mAutoDataSwitchValidationMaxRetry);
        pw.println("Metered APN types=" + mMeteredApnTypes.stream()
                .map(ApnSetting::getApnTypeString).collect(Collectors.joining(",")));
        pw.println("Roaming metered APN types=" + mRoamingMeteredApnTypes.stream()
+1 −1
Original line number Diff line number Diff line
@@ -1024,7 +1024,7 @@ public class DataNetwork extends StateMachine {
            mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged(
                    getHandler(), EVENT_DISPLAY_INFO_CHANGED, null);
            mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(),
                    EVENT_SERVICE_STATE_CHANGED);
                    EVENT_SERVICE_STATE_CHANGED, null);
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                mDataServiceManagers.get(transport)
                        .registerForDataCallListChanged(getHandler(), EVENT_DATA_STATE_CHANGED);
+2 −2
Original line number Diff line number Diff line
@@ -969,7 +969,7 @@ public class DataNetworkController extends Handler {
        });

        mPhone.getServiceStateTracker().registerForServiceStateChanged(this,
                EVENT_SERVICE_STATE_CHANGED);
                EVENT_SERVICE_STATE_CHANGED, null);
        mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) {
            @Override
            public void onCarrierConfigChanged() {
@@ -991,7 +991,7 @@ public class DataNetworkController extends Handler {

        if (!mAccessNetworksManager.isInLegacyMode()) {
            mPhone.getServiceStateTracker().registerForServiceStateChanged(this,
                    EVENT_SERVICE_STATE_CHANGED);
                    EVENT_SERVICE_STATE_CHANGED, null);
            mDataServiceManagers.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)
                    .registerForServiceBindingChanged(this, EVENT_DATA_SERVICE_BINDING_CHANGED);
        }
Loading