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

Commit 0e5dce52 authored by Jack Yu's avatar Jack Yu Committed by Automerger Merge Worker
Browse files

Merge "Add auto data switch feature" am: 6dc71cd4

parents dad5fa3b 6dc71cd4
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;

@@ -427,6 +451,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);
    }

    /**
@@ -918,6 +948,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:
@@ -1298,6 +1344,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