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

Commit d01e8d71 authored by Jack Yu's avatar Jack Yu
Browse files

Moved access network manager into transport manager

1. Now phone creates transport manager, and transport
   manager creates access network manager.
2. Added dump for transport manager and access network
   manager.

Test: Manual
Bug: 73659459
Change-Id: If4972969a23ff95e71cca3182cbef9a583fa8295
parent 61307040
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -232,7 +232,6 @@ public class GsmCdmaPhone extends Phone {

        mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null);
        mDeviceStateMonitor = mTelephonyComponentFactory.makeDeviceStateMonitor(this);
        mAccessNetworksManager = mTelephonyComponentFactory.makeAccessNetworksManager(this);

        mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null);
        logd("GsmCdmaPhone: constructor: sub = " + mPhoneId);
+4 −2
Original line number Diff line number Diff line
@@ -61,7 +61,6 @@ import com.android.ims.ImsCall;
import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.internal.R;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.internal.telephony.dataconnection.DataConnectionReasons;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.TransportManager;
@@ -283,7 +282,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    private final String mActionAttached;
    protected DeviceStateMonitor mDeviceStateMonitor;
    protected TransportManager mTransportManager;
    protected AccessNetworksManager mAccessNetworksManager;

    protected int mPhoneId;

@@ -3852,6 +3850,10 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
            pw.println("++++++++++++++++++++++++++++++++");
        }

        if (mTransportManager != null) {
            mTransportManager.dump(fd, pw, args);
        }

        if (mCi != null && mCi instanceof RIL) {
            try {
                ((RIL)mCi).dump(fd, pw, args);
+0 −5
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.telephony.AccessNetworkConstants.TransportType;

import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.cdma.EriManager;
import com.android.internal.telephony.dataconnection.AccessNetworksManager;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
@@ -177,10 +176,6 @@ public class TelephonyComponentFactory {
        return new TransportManager(phone);
    }

    public AccessNetworksManager makeAccessNetworksManager(Phone phone) {
        return new AccessNetworksManager(phone);
    }

    public CdmaSubscriptionSourceManager
    getCdmaSubscriptionSourceManagerInstance(Context context, CommandsInterface ci, Handler h,
                                             int what, Object obj) {
+72 −6
Original line number Diff line number Diff line
@@ -16,26 +16,38 @@

package com.android.internal.telephony.dataconnection;


import android.annotation.IntDef;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
import android.telephony.AccessNetworkConstants.TransportType;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.text.TextUtils;

import com.android.internal.telephony.Phone;
import com.android.internal.telephony.dataconnection.AccessNetworksManager.QualifiedNetworks;
import com.android.internal.util.IndentingPrintWriter;

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.List;

/**
 * This class represents the transport manager which manages available transports and
 * route requests to correct transport.
 * This class represents the transport manager which manages available transports (i.e. WWAN or
 * WLAN)and determine the correct transport for {@link TelephonyNetworkFactory} to handle the data
 * requests.
 */
public class TransportManager {
public class TransportManager extends Handler {
    private static final String TAG = TransportManager.class.getSimpleName();

    private static final boolean DBG = true;

    private static final int EVENT_QUALIFIED_NETWORKS_CHANGED = 1;

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

@@ -70,13 +82,45 @@ public class TransportManager {

    private final List<Integer> mAvailableTransports = new ArrayList<>();

    private final AccessNetworksManager mAccessNetworksManager;

    public TransportManager(Phone phone) {
        mPhone = phone;
        // TODO: get transpot list from AccessNetworkManager.
        mAccessNetworksManager = new AccessNetworksManager(phone);

        mAccessNetworksManager.registerForQualifiedNetworksChanged(this,
                EVENT_QUALIFIED_NETWORKS_CHANGED);

        // WWAN should be always available.
        mAvailableTransports.add(TransportType.WWAN);

        // TODO: Add more logic to check whether we should add WLAN as a transport. For now, if
        // the device operate in non-legacy mode, then we always add WLAN as a transport.
        if (!isInLegacyMode()) {
            mAvailableTransports.add(TransportType.WLAN);
        }
    }

    public List<Integer> getAvailableTransports() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case EVENT_QUALIFIED_NETWORKS_CHANGED:
                AsyncResult ar = (AsyncResult) msg.obj;
                List<QualifiedNetworks> networks = (List<QualifiedNetworks>) ar.result;
                updateAvailableNetworks(networks);
                break;
            default:
                loge("Unexpected event " + msg.what);
                break;
        }
    }

    private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networks) {
        log("updateAvailableNetworks: " + networks);
        //TODO: Update available networks and transports.
    }

    public synchronized List<Integer> getAvailableTransports() {
        return new ArrayList<>(mAvailableTransports);
    }

@@ -97,6 +141,28 @@ public class TransportManager {
        return (mPhone.mCi.getIwlanOperationMode() == IWLAN_OPERATION_MODE_LEGACY);
    }

    /**
     * Dump the state of transport manager
     *
     * @param fd File descriptor
     * @param printwriter Print writer
     * @param args Arguments
     */
    public void dump(FileDescriptor fd, PrintWriter printwriter, String[] args) {
        IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, "  ");
        pw.println("TransportManager:");
        pw.increaseIndent();
        pw.print("mAvailableTransports=");
        List<String> transportsStrings = new ArrayList<>();
        for (int i = 0; i < mAvailableTransports.size(); i++) {
            transportsStrings.add(TransportType.toString(mAvailableTransports.get(i)));
        }
        pw.println("[" + TextUtils.join(",", transportsStrings) + "]");
        mAccessNetworksManager.dump(fd, pw, args);
        pw.decreaseIndent();
        pw.flush();
    }

    private void log(String s) {
        Rlog.d(TAG, s);
    }
+38 −5
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.os.PersistableBundle;
import android.os.RegistrantList;
import android.os.RemoteException;
import android.os.UserHandle;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.data.ApnSetting;
@@ -40,7 +41,9 @@ import android.text.TextUtils;
import android.util.SparseArray;

import com.android.internal.telephony.Phone;
import com.android.internal.util.IndentingPrintWriter;

import java.io.FileDescriptor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -106,6 +109,19 @@ public class AccessNetworksManager {
            this.apnType = apnType;
            this.qualifiedNetworks = qualifiedNetworks;
        }

        @Override
        public String toString() {
            List<String> accessNetworkStrings = new ArrayList<>();
            for (int network : qualifiedNetworks) {
                accessNetworkStrings.add(AccessNetworkType.toString(network));
            }
            return "[QualifiedNetworks: apnType="
                    + ApnSetting.getApnTypeString(apnType)
                    + ", networks="
                    + TextUtils.join(", ", accessNetworkStrings)
                    + "]";
        }
    }

    private class AccessNetworksManagerDeathRecipient implements IBinder.DeathRecipient {
@@ -287,12 +303,29 @@ public class AccessNetworksManager {
    }

    /**
     * @return True if IWLAN legacy mode is used. No qualified network service there to provide
     * information for platform to setup data connection. All data connection requests will be
     * routed to the default (i.e. cellular) data/network service.
     * Dump the state of transport manager
     *
     * @param fd File descriptor
     * @param pw Print writer
     * @param args Arguments
     */
    public boolean isInLegacyMode() {
        return TextUtils.isEmpty(getQualifiedNetworksServicePackageName());
    public void dump(FileDescriptor fd, IndentingPrintWriter pw, String[] args) {
        pw.println("AccessNetworksManager:");
        pw.increaseIndent();
        pw.println("Available networks:");
        pw.increaseIndent();

        for (int i = 0; i < mAvailableNetworks.size(); i++) {
            pw.print("APN type "
                    + ApnSetting.getApnTypeString(mAvailableNetworks.keyAt(i)) + ": ");
            List<String> networksStrings = new ArrayList<>();
            for (int network : mAvailableNetworks.valueAt(i)) {
                networksStrings.add(AccessNetworkType.toString(network));
            }
            pw.println("[" + TextUtils.join(",", networksStrings) + "]");
        }
        pw.decreaseIndent();
        pw.decreaseIndent();
    }

    private void log(String s) {
Loading