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

Commit 3fc7ba2f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Added data setup/handover throttling support"

parents c8360736 17e2fc16
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -406,6 +406,24 @@ public class AccessNetworksManager extends Handler {
            }
            bindQualifiedNetworksService();
        }

        if (phone.isUsingNewDataStack()) {
            // Using post to delay the registering because data retry manager instance is created
            // later than access networks manager.
            post(() -> mPhone.getDataNetworkController().getDataRetryManager().registerCallback(
                    new DataRetryManager.DataRetryManagerCallback(this::post) {
                        @Override
                        public void onThrottleStatusChanged(List<ThrottleStatus> throttleStatuses) {
                            try {
                                logl("onThrottleStatusChanged: " + throttleStatuses);
                                mIQualifiedNetworksService.reportThrottleStatusChanged(
                                        mPhone.getPhoneId(), throttleStatuses);
                            } catch (Exception ex) {
                                loge("onThrottleStatusChanged: ", ex);
                            }
                        }
                    }));
        }
    }

    /**
+3 −1
Original line number Diff line number Diff line
@@ -223,7 +223,9 @@ public class DataEvaluation {
        /** Device is currently in an emergency call. */
        EMERGENCY_CALL(true),
        /** There is already a retry setup scheduled for this data profile. */
        RETRY_SCHEDULED(true);
        RETRY_SCHEDULED(true),
        /** Network has explicitly request to throttle setup attempt. */
        DATA_THROTTLED(true);

        private final boolean mIsHardReason;

+1 −3
Original line number Diff line number Diff line
@@ -2039,9 +2039,7 @@ public class DataNetwork extends StateMachine {
            mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport),
                    DataService.REQUEST_REASON_HANDOVER, null);
            // Switch the transport to the target.
            mTransport = mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN
                    ? AccessNetworkConstants.TRANSPORT_TYPE_WLAN
                    : AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
            mTransport = DataUtils.getTargetTransport(mTransport);
            updateDataNetwork(response);
            if (retryEntry != null) retryEntry.setState(DataRetryEntry.RETRY_STATE_SUCCEEDED);
            mDataNetworkCallback.invokeFromExecutor(
+18 −6
Original line number Diff line number Diff line
@@ -688,7 +688,8 @@ public class DataNetworkController extends Handler {
                        DataNetworkController.this.onDataStallReestablishInternet();
                    }
                });
        mDataRetryManager = new DataRetryManager(mPhone, this, looper,
        mDataRetryManager = new DataRetryManager(mPhone, this,
                mDataServiceManagers, looper,
                new DataRetryManagerCallback(this::post) {
                    @Override
                    public void onDataNetworkSetupRetry(
@@ -1132,6 +1133,8 @@ public class DataNetworkController extends Handler {
            // other evaluation reasons, since they are all condition changes, so if there is any
            // retry scheduled, we still want to go ahead and setup the data network.
            evaluation.addDataDisallowedReason(DataDisallowedReason.RETRY_SCHEDULED);
        } else if (mDataRetryManager.isDataProfileThrottled(dataProfile)) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_THROTTLED);
        }

        if (evaluation.isDataAllowed()) {
@@ -1865,6 +1868,7 @@ public class DataNetworkController extends Handler {
                + DataFailCause.toString(cause) + "(" + cause + ")");
        mDataNetworkList.remove(dataNetwork);
        mPendingImsDeregDataNetworks.remove(dataNetwork);
        mDataRetryManager.cancelPendingHandoverRetry(dataNetwork);
        updateOverallInternetDataState();

        if (dataNetwork.getNetworkCapabilities().hasCapability(
@@ -1930,11 +1934,13 @@ public class DataNetworkController extends Handler {
        } else if (handoverFailureMode == DataCallResponse
                .HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL || handoverFailureMode
                == DataCallResponse.HANDOVER_FAILURE_MODE_LEGACY) {
            // Tear down the data network on source transport. After disconnected, a new data
            // network will be brought up on the target transport.
            int targetTransport = DataUtils.getTargetTransport(dataNetwork.getTransport());
            mDataRetryManager.evaluateDataSetupRetry(dataNetwork.getDataProfile(), targetTransport,
                    dataNetwork.getAttachedNetworkRequestList(), cause, retryDelayMillis);
            // Tear down the data network on source transport. Retry manager will schedule
            // setup a new data network on the target transport.
            tearDownGracefully(dataNetwork, DataNetwork.TEAR_DOWN_REASON_HANDOVER_FAILED);
        } else {
            // Delegate to data retry manager to evaluate if handover retry should be performed.
            mDataRetryManager.evaluateDataHandoverRetry(dataNetwork, cause, retryDelayMillis);
        }
    }
@@ -1985,8 +1991,7 @@ public class DataNetworkController extends Handler {
                }
            }
        } else {
            // reset throttling after binding to data service
            // mDataThrottler.reset();
            mDataRetryManager.reset();
        }
        mDataServiceBound.put(transport, bound);
    }
@@ -2226,6 +2231,13 @@ public class DataNetworkController extends Handler {
        return mDataSettingsManager;
    }

    /**
     * @return Data retry manager instance.
     */
    public @NonNull DataRetryManager getDataRetryManager() {
        return mDataRetryManager;
    }

    /**
     * Get data network type based on transport.
     *
+26 −8
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataProfile;
import android.telephony.data.TrafficDescriptor;
import android.util.ArraySet;
import android.util.IndentingPrintWriter;
import android.util.LocalLog;

@@ -46,6 +47,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;

@@ -91,8 +93,9 @@ public class DataProfileManager extends Handler {
    /** Preferred data profile set id. */
    private int mPreferredDataProfileSetId = Telephony.Carriers.NO_APN_SET_ID;

    /** Data profile manager callback. */
    private final @NonNull DataProfileManagerCallback mDataProfileManagerCallback;
    /** Data profile manager callbacks. */
    private final @NonNull Set<DataProfileManagerCallback> mDataProfileManagerCallbacks =
            new ArraySet<>();

    /**
     * Data profile manager callback. This should be only used by {@link DataNetworkController}.
@@ -134,7 +137,7 @@ public class DataProfileManager extends Handler {
        mWwanDataServiceManager = dataServiceManager;
        mDataConfigManager = dataNetworkController.getDataConfigManager();
        mAccessNetworksManager = phone.getAccessNetworksManager();
        mDataProfileManagerCallback = callback;
        mDataProfileManagerCallbacks.add(callback);
        registerAllEvents();
    }

@@ -247,8 +250,8 @@ public class DataProfileManager extends Handler {
            log("Data profiles changed.");
            mAllDataProfiles.clear();
            mAllDataProfiles.addAll(profiles);
            mDataProfileManagerCallback.invokeFromExecutor(
                    mDataProfileManagerCallback::onDataProfilesChanged);
            mDataProfileManagerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                    callback::onDataProfilesChanged));
        }

        mPreferredDataProfileSetId = getPreferredDataProfileSetId();
@@ -429,9 +432,6 @@ public class DataProfileManager extends Handler {
            return null;
        }

        // TODO: Need a lot more works here.
        //   1. Should consider data throttling.

        return dataProfiles.get(0);
    }

@@ -450,6 +450,24 @@ public class DataProfileManager extends Handler {
                .collect(Collectors.toList());
    }

    /**
     * Register the callback for receiving information from {@link DataProfileManager}.
     *
     * @param callback The callback.
     */
    public void registerCallback(@NonNull DataProfileManagerCallback callback) {
        mDataProfileManagerCallbacks.add(callback);
    }

    /**
     * Unregister the previously registered {@link DataProfileManagerCallback}.
     *
     * @param callback The callback to unregister.
     */
    public void unregisterCallback(@NonNull DataProfileManagerCallback callback) {
        mDataProfileManagerCallbacks.remove(callback);
    }

    /**
     * Log debug messages.
     * @param s debug messages
Loading