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

Commit 608588e9 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Revert "Switching to NetworkAgent API"

This reverts commit bce3d257.

Change-Id: Ia7d1752d4ba9f74f55657c7dbe4d64d60064394f
parent 220d43e0
Loading
Loading
Loading
Loading
+14 −123
Original line number Original line Diff line number Diff line
@@ -18,15 +18,8 @@ package com.android.internal.telephony.dataconnection;


import android.app.PendingIntent;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkAgent;
import android.net.NetworkCapabilities;
import android.net.NetworkConfig;
import android.net.NetworkConfig;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Looper;
import android.telephony.Rlog;
import android.telephony.Rlog;
import android.telephony.TelephonyManager;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.DctConstants;
@@ -41,11 +34,11 @@ import java.util.concurrent.atomic.AtomicInteger;
/**
/**
 * Maintain the Apn context
 * Maintain the Apn context
 */
 */
public class ApnContext extends NetworkAgent {
public class ApnContext {


    public final String LOG_TAG;
    public final String LOG_TAG;


    protected static final boolean DBG = true;
    protected static final boolean DBG = false;


    private final Context mContext;
    private final Context mContext;


@@ -64,6 +57,7 @@ public class ApnContext extends NetworkAgent {


    DcAsyncChannel mDcAc;
    DcAsyncChannel mDcAc;


    String mReason;


    PendingIntent mReconnectAlarmIntent;
    PendingIntent mReconnectAlarmIntent;


@@ -77,72 +71,16 @@ public class ApnContext extends NetworkAgent {
     */
     */
    AtomicBoolean mDependencyMet;
    AtomicBoolean mDependencyMet;


    private final DcTracker mDcTracker;
    public ApnContext(Context context, String apnType, String logTag, NetworkConfig config) {

    public final NetworkInfo networkInfo;

    public ApnContext(Looper looper, Context context, String apnType, String logTag,
            NetworkConfig config, DcTracker tracker, int netType) {
        super(looper, context, logTag);
        mDcTracker = tracker;
        mContext = context;
        mContext = context;
        mApnType = apnType;
        mApnType = apnType;
        mState = DctConstants.State.IDLE;
        mState = DctConstants.State.IDLE;
        setReason(Phone.REASON_DATA_ENABLED);
        mDataEnabled = new AtomicBoolean(false);
        mDataEnabled = new AtomicBoolean(false);
        mDependencyMet = new AtomicBoolean(config.dependencyMet);
        mDependencyMet = new AtomicBoolean(config.dependencyMet);
        mWaitingApnsPermanentFailureCountDown = new AtomicInteger(0);
        mWaitingApnsPermanentFailureCountDown = new AtomicInteger(0);
        priority = config.priority;
        priority = config.priority;
        LOG_TAG = logTag;
        LOG_TAG = logTag;
        // TODO - is there a better way to get the network type/name?
        networkInfo = new NetworkInfo(netType, TelephonyManager.getDefault().getNetworkType(),
                "Cellular", TelephonyManager.getDefault().getNetworkTypeName());
        setReason(Phone.REASON_DATA_ENABLED);
        NetworkCapabilities nc = new NetworkCapabilities();
        nc.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        switch (netType) {
            case ConnectivityManager.TYPE_MOBILE_HIPRI:
            case ConnectivityManager.TYPE_MOBILE: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_MMS: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_SUPL: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_DUN: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
                nc.removeNetworkCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_FOTA: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_FOTA);
                nc.removeNetworkCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_IMS: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
                nc.removeNetworkCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_CBS: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
                nc.removeNetworkCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
                break;
            }
            case ConnectivityManager.TYPE_MOBILE_IA: {
                nc.addNetworkCapability(NetworkCapabilities.NET_CAPABILITY_IA);
                nc.removeNetworkCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
                break;
            }
        }
        // updated per rat, later
        nc.setLinkUpstreamBandwidthKbps(10 * 1024);
        nc.setLinkDownstreamBandwidthKbps(20 * 1024);
        sendNetworkCapabilities(nc);
    }
    }


    public String getApnType() {
    public String getApnType() {
@@ -177,13 +115,6 @@ public class ApnContext extends NetworkAgent {
    public synchronized void setApnSetting(ApnSetting apnSetting) {
    public synchronized void setApnSetting(ApnSetting apnSetting) {
        log("setApnSetting: apnSetting=" + apnSetting);
        log("setApnSetting: apnSetting=" + apnSetting);
        mApnSetting = apnSetting;
        mApnSetting = apnSetting;
        boolean prov = false;
        if (mApnSetting != null && mApnSetting.apn != null) {
            String provisioningApn = mContext.getResources()
                    .getString(R.string.mobile_provisioning_apn);
            prov = mApnSetting.apn.equals(provisioningApn);
        }
        networkInfo.setIsConnectedToProvisioningNetwork(prov);
    }
    }


    public synchronized void setWaitingApns(ArrayList<ApnSetting> waitingApns) {
    public synchronized void setWaitingApns(ArrayList<ApnSetting> waitingApns) {
@@ -249,12 +180,11 @@ public class ApnContext extends NetworkAgent {
        if (DBG) {
        if (DBG) {
            log("set reason as " + reason + ",current state " + mState);
            log("set reason as " + reason + ",current state " + mState);
        }
        }
        networkInfo.setDetailedState(networkInfo.getDetailedState(), reason,
        mReason = reason;
                networkInfo.getExtraInfo());
    }
    }


    public synchronized String getReason() {
    public synchronized String getReason() {
        return networkInfo.getReason();
        return mReason;
    }
    }


    public boolean isReady() {
    public boolean isReady() {
@@ -298,51 +228,12 @@ public class ApnContext extends NetworkAgent {
    }
    }


    public boolean isProvisioningApn() {
    public boolean isProvisioningApn() {
        return networkInfo.isConnectedToProvisioningNetwork();
        String provisioningApn = mContext.getResources()
    }
                .getString(R.string.mobile_provisioning_apn);

        if ((mApnSetting != null) && (mApnSetting.apn != null)) {
    @Override
            return (mApnSetting.apn.equals(provisioningApn));
    protected void connect() {
        } else {
        if (DBG) log("connect");
            return false;
        mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), true);
    }

    @Override
    protected void disconnect() {
        if (DBG) log("disconnect");
        mDcTracker.setEnabled(mDcTracker.apnTypeToId(mApnType), false);
    }

    public void sendNetworkInfo() {
        sendNetworkInfo(networkInfo);
    }

    public void sendRat(int rilRat) {
        int up, down; // kbps
        switch (rilRat) {
            case TelephonyManager.NETWORK_TYPE_GPRS: up = 80; down = 80; break;
            case TelephonyManager.NETWORK_TYPE_EDGE: up = 59; down = 236; break;
            case TelephonyManager.NETWORK_TYPE_UMTS: up = 384; down = 384; break;
            case TelephonyManager.NETWORK_TYPE_CDMA: up = 14; down = 14; break;
            case TelephonyManager.NETWORK_TYPE_EVDO_0: up = 153; down = 2457; break;
            case TelephonyManager.NETWORK_TYPE_EVDO_A: up = 1843; down = 3174; break;
            case TelephonyManager.NETWORK_TYPE_1xRTT: up = 100; down = 100; break;
            case TelephonyManager.NETWORK_TYPE_HSDPA: up = 2048; down = 14336; break;
            case TelephonyManager.NETWORK_TYPE_HSUPA: up = 5898; down = 14336; break;
            case TelephonyManager.NETWORK_TYPE_HSPA: up = 5898; down = 14336; break;
            case TelephonyManager.NETWORK_TYPE_IDEN: up = 14; down = 14; break;
            case TelephonyManager.NETWORK_TYPE_EVDO_B: up = 1843; down = 5017; break;
            case TelephonyManager.NETWORK_TYPE_LTE: up = 51200; down = 102400; break;
            case TelephonyManager.NETWORK_TYPE_EHRPD: up = 153; down = 2516; break;
            case TelephonyManager.NETWORK_TYPE_HSPAP: up = 11264; down = 43008; break;
            default:
                return;  // unknown
        }
        synchronized (this) {
            NetworkCapabilities nc = getNetworkCapabilities();
            nc.setLinkUpstreamBandwidthKbps(up);
            nc.setLinkDownstreamBandwidthKbps(down);
            sendNetworkCapabilities(nc);
        }
        }
    }
    }


@@ -351,7 +242,7 @@ public class ApnContext extends NetworkAgent {
        // We don't print mDataConnection because its recursive.
        // We don't print mDataConnection because its recursive.
        return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns +
        return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns={" + mWaitingApns +
                "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown +
                "} mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown +
                " mApnSetting={" + mApnSetting + "} mReason=" + networkInfo.getReason() +
                " mApnSetting={" + mApnSetting + "} mReason=" + mReason +
                " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}";
                " mDataEnabled=" + mDataEnabled + " mDependencyMet=" + mDependencyMet + "}";
    }
    }


+20 −14
Original line number Original line Diff line number Diff line
@@ -157,6 +157,7 @@ public final class DataConnection extends StateMachine {


    private PhoneBase mPhone;
    private PhoneBase mPhone;
    private LinkProperties mLinkProperties = new LinkProperties();
    private LinkProperties mLinkProperties = new LinkProperties();
    private NetworkCapabilities mNetworkCapabilities = new NetworkCapabilities();
    private long mCreateTime;
    private long mCreateTime;
    private long mLastFailTime;
    private long mLastFailTime;
    private DcFailCause mLastFailCause;
    private DcFailCause mLastFailCause;
@@ -245,6 +246,10 @@ public final class DataConnection extends StateMachine {


    /* Getter functions */
    /* Getter functions */


    NetworkCapabilities getCopyNetworkCapabilities() {
        return new NetworkCapabilities(mNetworkCapabilities);
    }

    LinkProperties getCopyLinkProperties() {
    LinkProperties getCopyLinkProperties() {
        return new LinkProperties(mLinkProperties);
        return new LinkProperties(mLinkProperties);
    }
    }
@@ -263,7 +268,6 @@ public final class DataConnection extends StateMachine {


    void setLinkPropertiesHttpProxy(ProxyInfo proxy) {
    void setLinkPropertiesHttpProxy(ProxyInfo proxy) {
        mLinkProperties.setHttpProxy(proxy);
        mLinkProperties.setHttpProxy(proxy);
        for (ApnContext ac : mApnContexts) ac.sendLinkProperties(mLinkProperties);
    }
    }


    static class UpdateLinkPropertyResult {
    static class UpdateLinkPropertyResult {
@@ -298,7 +302,7 @@ public final class DataConnection extends StateMachine {
            log("updateLinkProperty new LP=" + result.newLp);
            log("updateLinkProperty new LP=" + result.newLp);
        }
        }
        mLinkProperties = result.newLp;
        mLinkProperties = result.newLp;
        for (ApnContext ac : mApnContexts) ac.sendLinkProperties(mLinkProperties);

        return result;
        return result;
    }
    }


@@ -484,10 +488,10 @@ public final class DataConnection extends StateMachine {
    }
    }


    private void notifyAllWithEvent(ApnContext alreadySent, int event, String reason) {
    private void notifyAllWithEvent(ApnContext alreadySent, int event, String reason) {
        for (ApnContext ac : mApnContexts) {
        for (ApnContext apnContext : mApnContexts) {
            if (ac == alreadySent) continue;
            if (apnContext == alreadySent) continue;
            if (reason != null) ac.setReason(reason);
            if (reason != null) apnContext.setReason(reason);
            Message msg = mDct.obtainMessage(event, ac);
            Message msg = mDct.obtainMessage(event, apnContext);
            AsyncResult.forMessage(msg);
            AsyncResult.forMessage(msg);
            msg.sendToTarget();
            msg.sendToTarget();
        }
        }
@@ -741,8 +745,6 @@ public final class DataConnection extends StateMachine {


        if (!mApnContexts.contains(apnContext)) {
        if (!mApnContexts.contains(apnContext)) {
            mApnContexts.add(apnContext);
            mApnContexts.add(apnContext);
            apnContext.sendRat(mRilRat);
            apnContext.sendLinkProperties(mLinkProperties);
        }
        }
        configureRetry(mApnSetting.canHandleType(PhoneConstants.APN_TYPE_DEFAULT));
        configureRetry(mApnSetting.canHandleType(PhoneConstants.APN_TYPE_DEFAULT));
        mRetryManager.setRetryCount(0);
        mRetryManager.setRetryCount(0);
@@ -795,6 +797,7 @@ public final class DataConnection extends StateMachine {
            mApnSetting = null;
            mApnSetting = null;
            mPhone = null;
            mPhone = null;
            mLinkProperties = null;
            mLinkProperties = null;
            mNetworkCapabilities = null;
            mLastFailCause = null;
            mLastFailCause = null;
            mUserData = null;
            mUserData = null;
            mDcController = null;
            mDcController = null;
@@ -860,6 +863,12 @@ public final class DataConnection extends StateMachine {
                    mAc.replyToMessage(msg, DcAsyncChannel.RSP_SET_LINK_PROPERTIES_HTTP_PROXY);
                    mAc.replyToMessage(msg, DcAsyncChannel.RSP_SET_LINK_PROPERTIES_HTTP_PROXY);
                    break;
                    break;
                }
                }
                case DcAsyncChannel.REQ_GET_NETWORK_CAPABILITIES: {
                    NetworkCapabilities nc = getCopyNetworkCapabilities();
                    if (VDBG) log("REQ_GET_NETWORK_CAPABILITIES networkCapabilities" + nc);
                    mAc.replyToMessage(msg, DcAsyncChannel.RSP_GET_NETWORK_CAPABILITIES, nc);
                    break;
                }
                case DcAsyncChannel.REQ_RESET:
                case DcAsyncChannel.REQ_RESET:
                    if (VDBG) log("DcDefaultState: msg.what=REQ_RESET");
                    if (VDBG) log("DcDefaultState: msg.what=REQ_RESET");
                    transitionTo(mInactiveState);
                    transitionTo(mInactiveState);
@@ -912,7 +921,6 @@ public final class DataConnection extends StateMachine {
                    Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>)ar.result;
                    Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>)ar.result;
                    mDataRegState = drsRatPair.first;
                    mDataRegState = drsRatPair.first;
                    mRilRat = drsRatPair.second;
                    mRilRat = drsRatPair.second;
                    for (ApnContext ac : mApnContexts) ac.sendRat(mRilRat);
                    if (DBG) {
                    if (DBG) {
                        log("DcDefaultState: EVENT_DATA_CONNECTION_DRS_OR_RAT_CHANGED"
                        log("DcDefaultState: EVENT_DATA_CONNECTION_DRS_OR_RAT_CHANGED"
                                + " drs=" + mDataRegState
                                + " drs=" + mDataRegState
@@ -1113,7 +1121,6 @@ public final class DataConnection extends StateMachine {
                        }
                        }
                        mDataRegState = drs;
                        mDataRegState = drs;
                        mRilRat = rat;
                        mRilRat = rat;
                        for (ApnContext ac : mApnContexts) ac.sendRat(rat);
                    }
                    }
                    retVal = HANDLED;
                    retVal = HANDLED;
                    break;
                    break;
@@ -1421,9 +1428,6 @@ public final class DataConnection extends StateMachine {
                        log("DcActiveState ERROR already added apnContext=" + cp.mApnContext);
                        log("DcActiveState ERROR already added apnContext=" + cp.mApnContext);
                    } else {
                    } else {
                        mApnContexts.add(cp.mApnContext);
                        mApnContexts.add(cp.mApnContext);
                        cp.mApnContext.sendRat(mRilRat);
                        cp.mApnContext.sendLinkProperties(mLinkProperties);

                        if (DBG) {
                        if (DBG) {
                            log("DcActiveState msg.what=EVENT_CONNECT RefCount="
                            log("DcActiveState msg.what=EVENT_CONNECT RefCount="
                                    + mApnContexts.size());
                                    + mApnContexts.size());
@@ -1746,7 +1750,8 @@ public final class DataConnection extends StateMachine {
                + " mLastFailCause=" + mLastFailCause
                + " mLastFailCause=" + mLastFailCause
                + " mTag=" + mTag
                + " mTag=" + mTag
                + " mRetryManager=" + mRetryManager
                + " mRetryManager=" + mRetryManager
                + " mLinkProperties=" + mLinkProperties;
                + " mLinkProperties=" + mLinkProperties
                + " mNetworkCapabilities=" + mNetworkCapabilities;
    }
    }


    @Override
    @Override
@@ -1783,6 +1788,7 @@ public final class DataConnection extends StateMachine {
        pw.flush();
        pw.flush();
        pw.println(" mDataRegState=" + mDataRegState);
        pw.println(" mDataRegState=" + mDataRegState);
        pw.println(" mRilRat=" + mRilRat);
        pw.println(" mRilRat=" + mRilRat);
        pw.println(" mNetworkCapabilities=" + mNetworkCapabilities);
        pw.println(" mCreateTime=" + TimeUtils.logTimeOfDay(mCreateTime));
        pw.println(" mCreateTime=" + TimeUtils.logTimeOfDay(mCreateTime));
        pw.println(" mLastFailTime=" + TimeUtils.logTimeOfDay(mLastFailTime));
        pw.println(" mLastFailTime=" + TimeUtils.logTimeOfDay(mLastFailTime));
        pw.println(" mLastFailCause=" + mLastFailCause);
        pw.println(" mLastFailCause=" + mLastFailCause);
+49 −2
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
import com.android.internal.util.Protocol;


import android.net.LinkProperties;
import android.net.LinkProperties;
import android.net.NetworkCapabilities;
import android.net.ProxyInfo;
import android.net.ProxyInfo;
import android.os.Message;
import android.os.Message;


@@ -52,8 +53,11 @@ public class DcAsyncChannel extends AsyncChannel {
    public static final int REQ_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 8;
    public static final int REQ_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 8;
    public static final int RSP_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 9;
    public static final int RSP_SET_LINK_PROPERTIES_HTTP_PROXY = BASE + 9;


    public static final int REQ_RESET = BASE + 10;
    public static final int REQ_GET_NETWORK_CAPABILITIES = BASE + 10;
    public static final int RSP_RESET = BASE + 11;
    public static final int RSP_GET_NETWORK_CAPABILITIES = BASE + 11;

    public static final int REQ_RESET = BASE + 12;
    public static final int RSP_RESET = BASE + 13;


    private static final int CMD_TO_STRING_COUNT = RSP_RESET - BASE + 1;
    private static final int CMD_TO_STRING_COUNT = RSP_RESET - BASE + 1;
    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
    private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
@@ -70,6 +74,8 @@ public class DcAsyncChannel extends AsyncChannel {
                "REQ_SET_LINK_PROPERTIES_HTTP_PROXY";
                "REQ_SET_LINK_PROPERTIES_HTTP_PROXY";
        sCmdToString[RSP_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
        sCmdToString[RSP_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
                "RSP_SET_LINK_PROPERTIES_HTTP_PROXY";
                "RSP_SET_LINK_PROPERTIES_HTTP_PROXY";
        sCmdToString[REQ_GET_NETWORK_CAPABILITIES - BASE] = "REQ_GET_NETWORK_CAPABILITIES";
        sCmdToString[RSP_GET_NETWORK_CAPABILITIES - BASE] = "RSP_GET_NETWORK_CAPABILITIES";
        sCmdToString[REQ_RESET - BASE] = "REQ_RESET";
        sCmdToString[REQ_RESET - BASE] = "REQ_RESET";
        sCmdToString[RSP_RESET - BASE] = "RSP_RESET";
        sCmdToString[RSP_RESET - BASE] = "RSP_RESET";
    }
    }
@@ -300,6 +306,47 @@ public class DcAsyncChannel extends AsyncChannel {
        }
        }
    }
    }


    /**
     * Request the connections NetworkCapabilities.
     * Response {@link #rspNetworkCapabilities}
     */
    public void reqNetworkCapabilities() {
        sendMessage(REQ_GET_NETWORK_CAPABILITIES);
        if (DBG) log("reqNetworkCapabilities");
    }

    /**
     * Evaluate RSP_GET_NETWORK_CAPABILITIES
     *
     * @param response
     * @return NetworkCapabilites, maybe null.
     */
    public NetworkCapabilities rspNetworkCapabilities(Message response) {
        NetworkCapabilities retVal = (NetworkCapabilities) response.obj;
        if (DBG) log("rspNetworkCapabilities=" + retVal);
        return retVal;
    }

    /**
     * Get the connections NetworkCapabilities.
     *
     * @return NetworkCapabilities or null if an error
     */
    public NetworkCapabilities getNetworkCapabilitiesSync() {
        NetworkCapabilities value;
        if (isCallerOnDifferentThread()) {
            Message response = sendMessageSynchronously(REQ_GET_NETWORK_CAPABILITIES);
            if ((response != null) && (response.what == RSP_GET_NETWORK_CAPABILITIES)) {
                value = rspNetworkCapabilities(response);
            } else {
                value = null;
            }
        } else {
            value = mDc.getCopyNetworkCapabilities();
        }
        return value;
    }

    /**
    /**
     * Response RSP_RESET when complete
     * Response RSP_RESET when complete
     */
     */
+84 −154

File changed.

Preview size limit exceeded, changes collapsed.

+5 −7
Original line number Original line Diff line number Diff line
@@ -470,7 +470,6 @@ public abstract class DcTrackerBase extends Handler {
        String apnType = intent.getStringExtra(INTENT_RECONNECT_ALARM_EXTRA_TYPE);
        String apnType = intent.getStringExtra(INTENT_RECONNECT_ALARM_EXTRA_TYPE);


        ApnContext apnContext = mApnContexts.get(apnType);
        ApnContext apnContext = mApnContexts.get(apnType);
        if (apnContext == null) return;


        if (DBG) {
        if (DBG) {
            log("onActionIntentReconnectAlarm: mState=" + mState + " reason=" + reason +
            log("onActionIntentReconnectAlarm: mState=" + mState + " reason=" + reason +
@@ -478,7 +477,7 @@ public abstract class DcTrackerBase extends Handler {
                    " mDataConnectionAsyncChannels=" + mDataConnectionAcHashMap);
                    " mDataConnectionAsyncChannels=" + mDataConnectionAcHashMap);
        }
        }


        if (apnContext.isEnabled()) {
        if ((apnContext != null) && (apnContext.isEnabled())) {
            apnContext.setReason(reason);
            apnContext.setReason(reason);
            DctConstants.State apnContextState = apnContext.getState();
            DctConstants.State apnContextState = apnContext.getState();
            if (DBG) {
            if (DBG) {
@@ -508,8 +507,6 @@ public abstract class DcTrackerBase extends Handler {
    protected void onActionIntentRestartTrySetupAlarm(Intent intent) {
    protected void onActionIntentRestartTrySetupAlarm(Intent intent) {
        String apnType = intent.getStringExtra(INTENT_RESTART_TRYSETUP_ALARM_EXTRA_TYPE);
        String apnType = intent.getStringExtra(INTENT_RESTART_TRYSETUP_ALARM_EXTRA_TYPE);
        ApnContext apnContext = mApnContexts.get(apnType);
        ApnContext apnContext = mApnContexts.get(apnType);
        if (apnContext == null) return;

        if (DBG) {
        if (DBG) {
            log("onActionIntentRestartTrySetupAlarm: mState=" + mState +
            log("onActionIntentRestartTrySetupAlarm: mState=" + mState +
                    " apnType=" + apnType + " apnContext=" + apnContext +
                    " apnType=" + apnType + " apnContext=" + apnContext +
@@ -1056,9 +1053,10 @@ public abstract class DcTrackerBase extends Handler {
    }
    }


    public NetworkCapabilities getNetworkCapabilities(String apnType) {
    public NetworkCapabilities getNetworkCapabilities(String apnType) {
        ApnContext apnContext = mApnContexts.get(apnType);
        int id = apnTypeToId(apnType);
        if (apnContext != null) {
        if (isApnIdEnabled(id)) {
            return apnContext.getNetworkCapabilities();
            DcAsyncChannel dcac = mDataConnectionAcHashMap.get(0);
            return dcac.getNetworkCapabilitiesSync();
        } else {
        } else {
            return new NetworkCapabilities();
            return new NetworkCapabilities();
        }
        }