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

Commit b8e2f149 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I67936863,I3b417ee5,Ib3469de3

* changes:
  Separate AccessNetworkManager from TransportManager
  Renamed DataStallMonitor to DataStallRecoveryManager
  Add New Event for Data Stall Recovery Action Reestablish
parents 6a343b5c a88393db
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cdma.CdmaMmiCode;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.internal.telephony.dataconnection.DataEnabledSettings;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.LinkBandwidthEstimator;
@@ -307,6 +308,9 @@ public class GsmCdmaPhone extends Phone {
                .makeCarrierActionAgent(this);
        mCarrierSignalAgent = mTelephonyComponentFactory.inject(CarrierSignalAgent.class.getName())
                .makeCarrierSignalAgent(this);
        mAccessNetworksManager = mTelephonyComponentFactory
                .inject(AccessNetworksManager.class.getName())
                .makeAccessNetworksManager(this);
        mTransportManager = mTelephonyComponentFactory.inject(TransportManager.class.getName())
                .makeTransportManager(this);
        // SST/DSM depends on SSC, so SSC is instanced before SST/DSM
@@ -654,6 +658,11 @@ public class GsmCdmaPhone extends Phone {
        return mTransportManager;
    }

    @Override
    public AccessNetworksManager getAccessNetworksManager() {
        return mAccessNetworksManager;
    }

    @Override
    public DeviceStateMonitor getDeviceStateMonitor() {
        return mDeviceStateMonitor;
+10 −1
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ import com.android.ims.ImsManager;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.internal.telephony.dataconnection.DataConnectionReasons;
import com.android.internal.telephony.dataconnection.DataEnabledSettings;
import com.android.internal.telephony.dataconnection.DcTracker;
@@ -345,6 +346,7 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    protected DeviceStateMonitor mDeviceStateMonitor;
    protected DisplayInfoController mDisplayInfoController;
    protected TransportManager mTransportManager;
    protected AccessNetworksManager mAccessNetworksManager;
    protected DataEnabledSettings mDataEnabledSettings;
    // Used for identify the carrier of current subscription
    protected CarrierResolver mCarrierResolver;
@@ -1885,12 +1887,19 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    }

    /**
     * @return The instance of transport manager
     * @return The instance of transport manager.
     */
    public TransportManager getTransportManager() {
        return null;
    }

    /**
     * @return The instance of access networks manager.
     */
    public AccessNetworksManager getAccessNetworksManager() {
        return null;
    }

    /**
     * Retrieves the DeviceStateMonitor of the phone instance.
     */
+11 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.ims.ImsManager;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.cdma.EriManager;
import com.android.internal.telephony.data.DataNetworkController;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.internal.telephony.dataconnection.DataEnabledSettings;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.LinkBandwidthEstimator;
@@ -403,6 +404,16 @@ public class TelephonyComponentFactory {
        return new TransportManager(phone);
    }

    /**
     * Make access networks manager
     *
     * @param phone The phone instance
     * @return The access networks manager
     */
    public AccessNetworksManager makeAccessNetworksManager(Phone phone) {
        return new AccessNetworksManager(phone);
    }

    public CdmaSubscriptionSourceManager
    getCdmaSubscriptionSourceManagerInstance(Context context, CommandsInterface ci, Handler h,
                                             int what, Object obj) {
+19 −61
Original line number Diff line number Diff line
@@ -17,14 +17,12 @@
package com.android.internal.telephony.data;

import android.annotation.NonNull;
import android.annotation.StringDef;
import android.net.NetworkAgent;
import android.net.NetworkRequest;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RegistrantList;
import android.os.SystemProperties;
import android.telephony.AccessNetworkConstants;
import android.telephony.data.DataProfile;
import android.util.IndentingPrintWriter;
@@ -34,13 +32,11 @@ import android.util.SparseArray;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RIL;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.telephony.Rlog;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -52,36 +48,6 @@ import java.util.List;
public class DataNetworkController extends Handler {
    private final boolean VDBG;

    public static final String SYSTEM_PROPERTIES_IWLAN_OPERATION_MODE =
            "ro.telephony.iwlan_operation_mode";

    @Retention(RetentionPolicy.SOURCE)
    @StringDef(prefix = {"IWLAN_OPERATION_MODE_"},
            value = {
                    IWLAN_OPERATION_MODE_DEFAULT,
                    IWLAN_OPERATION_MODE_LEGACY,
                    IWLAN_OPERATION_MODE_AP_ASSISTED})
    public @interface IwlanOperationMode {}

    /**
     * IWLAN default mode. On device that has IRadio 1.4 or above, it means
     * {@link #IWLAN_OPERATION_MODE_AP_ASSISTED}. On device that has IRadio 1.3 or below, it means
     * {@link #IWLAN_OPERATION_MODE_LEGACY}.
     */
    public static final String IWLAN_OPERATION_MODE_DEFAULT = "default";

    /**
     * IWLAN legacy mode. IWLAN is completely handled by the modem, and when the device is on
     * IWLAN, modem reports IWLAN as a RAT.
     */
    public static final String IWLAN_OPERATION_MODE_LEGACY = "legacy";

    /**
     * IWLAN application processor assisted mode. IWLAN is handled by the bound IWLAN data service
     * and network service separately.
     */
    public static final String IWLAN_OPERATION_MODE_AP_ASSISTED = "AP-assisted";

    /** Event for data config updated. */
    private static final int EVENT_DATA_CONFIG_UPDATED = 1;

@@ -97,7 +63,8 @@ public class DataNetworkController extends Handler {
    /** Event for setup a data network. */
    private static final int EVENT_SETUP_DATA_NETWORK = 5;


    /** Event for data stall action reestablish. */
    private static final int EVENT_DATA_STALL_ACTION_REESTABLISH = 6;

    private final Phone mPhone;
    private final String mLogTag;
@@ -106,8 +73,9 @@ public class DataNetworkController extends Handler {
    private final @NonNull DataConfigManager mDataConfigManager;
    private final @NonNull DataSettingsManager mDataSettingsManager;
    private final @NonNull DataProfileManager mDataProfileManager;
    private final @NonNull DataStallMonitor mDataStallMonitor;
    private final @NonNull DataStallRecoveryManager mDataStallRecoveryManager;
    private final @NonNull DataTaskManager mDataTaskManager;
    private final @NonNull AccessNetworksManager mAccessNetworksManager;
    private final @NonNull SparseArray<DataServiceManager> mDataServiceManagers =
            new SparseArray<>();

@@ -208,9 +176,10 @@ public class DataNetworkController extends Handler {
        VDBG = Rlog.isLoggable(mLogTag, Log.VERBOSE);
        log("DataNetworkController created.");

        mAccessNetworksManager = phone.getAccessNetworksManager();
        mDataServiceManagers.put(AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                new DataServiceManager(mPhone, looper, AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
        if (!isIwlanLegacyMode()) {
        if (!mAccessNetworksManager.isInLegacyMode()) {
            mDataServiceManagers.put(AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
                    new DataServiceManager(mPhone, looper,
                            AccessNetworkConstants.TRANSPORT_TYPE_WWAN));
@@ -218,7 +187,7 @@ public class DataNetworkController extends Handler {
        mDataConfigManager = new DataConfigManager(mPhone, looper);
        mDataSettingsManager = new DataSettingsManager(mPhone, looper);
        mDataProfileManager = new DataProfileManager(mPhone, looper);
        mDataStallMonitor = new DataStallMonitor(mPhone, this, mDataServiceManagers
        mDataStallRecoveryManager = new DataStallRecoveryManager(mPhone, this, mDataServiceManagers
                .get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN), looper);
        mDataTaskManager = new DataTaskManager(mPhone, looper);

@@ -230,6 +199,8 @@ public class DataNetworkController extends Handler {
     */
    private void registerAllEvents() {
        mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED);
        mDataStallRecoveryManager.registerForDataStallReestablishEvent(this,
                EVENT_DATA_STALL_ACTION_REESTABLISH);
    }

    @Override
@@ -250,6 +221,9 @@ public class DataNetworkController extends Handler {
            case EVENT_SETUP_DATA_NETWORK:
                onSetupDataNetwork((DataProfile) msg.obj);
                break;
            case EVENT_DATA_STALL_ACTION_REESTABLISH:
                onDataStallActionReestablish();
                break;
            default:
                loge("Unexpected event " + msg.what);
        }
@@ -384,30 +358,16 @@ public class DataNetworkController extends Handler {
    }

    /**
     * @return Data config manager instance.
     * Handle data stall action reestablish event.
     */
    public @NonNull DataConfigManager getDataConfigManager() {
        return mDataConfigManager;
    private void onDataStallActionReestablish() {
    }

    /**
     * @return {@code true} if the device operates in IWLAN legacy mode, otherwise {@code false}. In
     * legacy mode, IWLAN registration state is reported through cellular
     * {@link android.telephony.NetworkRegistrationInfo}.
     * @return Data config manager instance.
     */
    public boolean isIwlanLegacyMode() {
        // Get IWLAN operation mode from the system property. If the system property is configured
        // to default or not configured, the mode is tied to IRadio version. For 1.4 or above, it's
        // AP-assisted mode, for 1.3 or below, it's legacy mode.
        String mode = SystemProperties.get(SYSTEM_PROPERTIES_IWLAN_OPERATION_MODE);

        if (mode.equals(IWLAN_OPERATION_MODE_AP_ASSISTED)) {
            return false;
        } else if (mode.equals(IWLAN_OPERATION_MODE_LEGACY)) {
            return true;
        }

        return mPhone.getHalVersion().less(RIL.RADIO_HAL_VERSION_1_4);
    public @NonNull DataConfigManager getDataConfigManager() {
        return mDataConfigManager;
    }

    /**
@@ -464,8 +424,6 @@ public class DataNetworkController extends Handler {
        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
        pw.println(DataNetworkController.class.getSimpleName() + "-" + mPhone.getPhoneId() + ":");
        pw.increaseIndent();
        pw.println("IWLAN operation mode="
                + SystemProperties.get(SYSTEM_PROPERTIES_IWLAN_OPERATION_MODE));
        pw.println("Current data networks:");
        pw.increaseIndent();
        for (DataNetwork dn : mDataNetworkList) {
@@ -499,7 +457,7 @@ public class DataNetworkController extends Handler {
        pw.println("-------------------------------------");
        mDataSettingsManager.dump(fd, pw, args);
        pw.println("-------------------------------------");
        mDataStallMonitor.dump(fd, pw, args);
        mDataStallRecoveryManager.dump(fd, pw, args);
        pw.println("-------------------------------------");
        mDataConfigManager.dump(fd, pw, args);

+28 −7
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.os.AsyncResult;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RegistrantList;
import android.util.IndentingPrintWriter;
import android.util.LocalLog;

@@ -31,17 +32,16 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;

/**
 * DataStallMonitor monitors the data network activities, detects potential data stall, and takes
 * actions to recover
 * DataStallRecoveryManager monitors the network validation result from connectivity service and
 * takes actions to recovery data network.
 */
public class DataStallMonitor extends Handler {
public class DataStallRecoveryManager extends Handler {
    /** Event for data config updated. */
    private static final int EVENT_DATA_CONFIG_UPDATED = 1;

    /** Event for internet validation status changed. */
    private static final int EVENT_INTERNET_VALIDATION_STATUS_CHANGED = 2;


    private final @NonNull Phone mPhone;
    private final @NonNull String mLogTag;
    private final @NonNull LocalLog mLocalLog = new LocalLog(128);
@@ -55,6 +55,9 @@ public class DataStallMonitor extends Handler {
    /** Cellular data service */
    private final @NonNull DataServiceManager mWwanDataServiceManager;

    /** The RegistrantList for recovery action reestablish */
    private final RegistrantList mDataStallReestablishRegistrants = new RegistrantList();

    /**
     * Constructor
     *
@@ -63,7 +66,7 @@ public class DataStallMonitor extends Handler {
     * @param looper The looper to be used by the handler. Currently the handler thread is the
     * phone process's main thread.
     */
    public DataStallMonitor(@NonNull Phone phone,
    public DataStallRecoveryManager(@NonNull Phone phone,
            @NonNull DataNetworkController dataNetworkController,
            @NonNull DataServiceManager dataServiceManager, @NonNull Looper looper) {
        super(looper);
@@ -73,6 +76,13 @@ public class DataStallMonitor extends Handler {
        mWwanDataServiceManager = dataServiceManager;
        mDataConfigManager = mDataNetworkController.getDataConfigManager();

        registerAllEvents();
    }

    /**
     * Register for all events that data stall monitor is interested.
     */
    private void registerAllEvents() {
        mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED);
        mDataNetworkController.registerForInternetValidationStatusChanged(this,
                EVENT_INTERNET_VALIDATION_STATUS_CHANGED);
@@ -107,6 +117,16 @@ public class DataStallMonitor extends Handler {

    }

    /**
     * Register for data stall reestablish event.
     *
     * @param handler The handler to handle the event.
     * @param what The event.
     */
    public void registerForDataStallReestablishEvent(@NonNull Handler handler, int what) {
        mDataStallReestablishRegistrants.addUnique(handler, what, null);
    }

    /**
     * Log debug messages.
     * @param s debug messages
@@ -133,7 +153,7 @@ public class DataStallMonitor extends Handler {
    }

    /**
     * Dump the state of DataStallMonitor
     * Dump the state of DataStallRecoveryManager
     *
     * @param fd File descriptor
     * @param printWriter Print writer
@@ -141,7 +161,8 @@ public class DataStallMonitor extends Handler {
     */
    public void dump(FileDescriptor fd, PrintWriter printWriter, String[] args) {
        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
        pw.println(DataStallMonitor.class.getSimpleName() + "-" + mPhone.getPhoneId() + ":");
        pw.println(DataStallRecoveryManager.class.getSimpleName() + "-" + mPhone.getPhoneId()
                + ":");
        pw.increaseIndent();
        pw.println("Local logs:");
        pw.increaseIndent();
Loading