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

Commit 5b4e2440 authored by Wink Saville's avatar Wink Saville Committed by Android (Google) Code Review
Browse files

Merge "Refactor ServiceStateTracker handling of radio technology." into honeycomb-LTE

parents e10de072 db09b5db
Loading
Loading
Loading
Loading
+69 −54
Original line number Diff line number Diff line
@@ -387,62 +387,77 @@ public class ServiceState implements Parcelable {
                && mIsEmergencyOnly == s.mIsEmergencyOnly);
    }

    @Override
    public String toString() {
        String radioTechnology = new String("Error in radioTechnology");
        switch(this.mRadioTechnology) {
    /**
     * Convert radio technology to String
     *
     * @param radioTechnology
     * @return String representation of the RAT
     *
     * @hide
     */
    public static String radioTechnologyToString(int rt) {
        String rtString;

        switch(rt) {
            case 0:
            radioTechnology = "Unknown";
                rtString = "Unknown";
                break;
            case 1:
            radioTechnology = "GPRS";
                rtString = "GPRS";
                break;
            case 2:
            radioTechnology = "EDGE";
                rtString = "EDGE";
                break;
            case 3:
            radioTechnology = "UMTS";
                rtString = "UMTS";
                break;
            case 4:
            radioTechnology = "IS95A";
                rtString = "CDMA-IS95A";
                break;
            case 5:
            radioTechnology = "IS95B";
                rtString = "CDMA-IS95B";
                break;
            case 6:
            radioTechnology = "1xRTT";
                rtString = "1xRTT";
                break;
            case 7:
            radioTechnology = "EvDo rev. 0";
                rtString = "EvDo-rev.0";
                break;
            case 8:
            radioTechnology = "EvDo rev. A";
                rtString = "EvDo-rev.A";
                break;
            case 9:
            radioTechnology = "HSDPA";
                rtString = "HSDPA";
                break;
            case 10:
            radioTechnology = "HSUPA";
                rtString = "HSUPA";
                break;
            case 11:
            radioTechnology = "HSPA";
                rtString = "HSPA";
                break;
            case 12:
            radioTechnology = "EvDo rev. B";
                rtString = "EvDo-rev.B";
                break;
            case 13:
            radioTechnology = "eHRPD";
                rtString = "eHRPD";
                break;
            case 14:
            radioTechnology = "LTE";
                rtString = "LTE";
                break;
            case 15:
            radioTechnology = "HSPAP";
                rtString = "HSPAP";
                break;
            default:
            Log.w(LOG_TAG, "mRadioTechnology variable out of range.");
                rtString = "Unexpected";
                Log.w(LOG_TAG, "Unexpected radioTechnology=" + rt);
                break;
        }
        return rtString + ":" + rt;
    }

    @Override
    public String toString() {
        String radioTechnology = radioTechnologyToString(mRadioTechnology);

        return (mState + " " + (mRoaming ? "roaming" : "home")
                + " " + mOperatorAlphaLong
+6 −0
Original line number Diff line number Diff line
@@ -53,6 +53,12 @@ public abstract class ServiceStateTracker extends Handler {
    protected int[] pollingContext;
    protected boolean mDesiredPowerState;

    /**
     *  Values correspond to ServiceState.RADIO_TECHNOLOGY_ definitions.
     */
    protected int mRadioTechnology = 0;
    protected int mNewRadioTechnology = 0;

    /**
     * By default, strength polling is enabled.  However, if we're
     * getting unsolicited signal strength updates from the radio, set
+18 −42
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.Registrant;
import android.os.RegistrantList;
import android.os.AsyncResult;
import android.os.Message;
import android.os.SystemProperties;

import android.util.Log;
import android.util.EventLog;
@@ -72,6 +73,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
            handlePollStateResult(msg.what, ar);
            break;
        case EVENT_SIM_READY:
            if (DBG) log("handleMessage EVENT_SIM_READY");
            isSubscriptionFromRuim = false;
            cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
            pollState();
@@ -186,39 +188,6 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
        }
    }

    protected static String networkTypeToString(int type) {
        String ret = "unknown";

        switch (type) {
            case ServiceState.RADIO_TECHNOLOGY_IS95A:
            case ServiceState.RADIO_TECHNOLOGY_IS95B:
                ret = "CDMA";
                break;
            case ServiceState.RADIO_TECHNOLOGY_1xRTT:
                ret = "CDMA - 1xRTT";
                break;
            case ServiceState.RADIO_TECHNOLOGY_EVDO_0:
                ret = "CDMA - EvDo rev. 0";
                break;
            case ServiceState.RADIO_TECHNOLOGY_EVDO_A:
                ret = "CDMA - EvDo rev. A";
                break;
            case ServiceState.RADIO_TECHNOLOGY_EVDO_B:
                ret = "CDMA - EvDo rev. B";
                break;
            case ServiceState.RADIO_TECHNOLOGY_LTE:
                ret = "LTE";
                break;
            case ServiceState.RADIO_TECHNOLOGY_EHRPD:
                ret = "CDMA - eHRPD";
                break;
            default:
                sloge("networkTypeToString: Wrong network, can not return a string.");
                break;
        }
        return ret;
    }

    @Override
    protected void pollStateDone() {
        // determine data NetworkType from both LET and CDMA SS
@@ -282,13 +251,20 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
             (newNetworkType <= ServiceState.RADIO_TECHNOLOGY_EVDO_A));

        if (DBG) {
            log("pollStateDone: hasRegistered = "
                + hasRegistered + " hasCdmaDataConnectionAttached = "
                + hasCdmaDataConnectionAttached + " hasCdmaDataConnectionChanged = "
                + hasCdmaDataConnectionChanged + " hasNetworkTypeChanged = "
                + hasNetworkTypeChanged + " has4gHandoff = " + has4gHandoff
                + " hasMultiApnSupport = " + hasMultiApnSupport + " hasLostMultiApnSupport = "
                + hasLostMultiApnSupport);
            log("pollStateDone:"
                + " hasRegistered=" + hasRegistered
                + " hasDeegistered=" + hasDeregistered
                + " hasCdmaDataConnectionAttached=" + hasCdmaDataConnectionAttached
                + " hasCdmaDataConnectionDetached=" + hasCdmaDataConnectionDetached
                + " hasCdmaDataConnectionChanged=" + hasCdmaDataConnectionChanged
                + " hasNetworkTypeChanged = " + hasNetworkTypeChanged
                + " hasChanged=" + hasChanged
                + " hasRoamingOn=" + hasRoamingOn
                + " hasRoamingOff=" + hasRoamingOff
                + " hasLocationChanged=" + hasLocationChanged
                + " has4gHandoff = " + has4gHandoff
                + " hasMultiApnSupport=" + hasMultiApnSupport
                + " hasLostMultiApnSupport=" + hasLostMultiApnSupport);
        }
        // Add an event log when connection state changes
        if (ss.getState() != newSS.getState()
@@ -316,7 +292,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
                && (phone.mDataConnectionTracker instanceof GsmDataConnectionTracker)) {
            if (DBG)log("GsmDataConnectionTracker disposed");
            phone.mDataConnectionTracker.dispose();
            phone.mDataConnectionTracker = new CdmaDataConnectionTracker((CDMAPhone)phone);
            phone.mDataConnectionTracker = new CdmaDataConnectionTracker(phone);
        }

        CdmaCellLocation tcl = cellLoc;
@@ -330,7 +306,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {

        if (hasNetworkTypeChanged) {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
                    networkTypeToString(networkType));
                    ServiceState.radioTechnologyToString(networkType));
        }

        if (hasRegistered) {
+4 −32
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {

        switch (msg.what) {
        case EVENT_RADIO_AVAILABLE:
            if (DBG) log("handleMessage: EVENT_RADIO_AVAILABLE");
            break;

        case EVENT_RUIM_READY:
@@ -266,7 +267,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
            }

            cm.getCDMASubscription(obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
            if (DBG) log("Receive EVENT_RUIM_READY and Send Request getCDMASubscription.");
            if (DBG) log("handleMessage: EVENT_RUIM_READY, Send Request getCDMASubscription.");

            // Restore the previous network selection.
            pollState();
@@ -280,6 +281,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
            // For Non-RUIM phones, the subscription information is stored in
            // Non Volatile. Here when Non-Volatile is ready, we can poll the CDMA
            // subscription info.
            if (DBG) log("handleMessage: EVENT_NV_READY, Send Request getCDMASubscription.");
            cm.getCDMASubscription( obtainMessage(EVENT_POLL_STATE_CDMA_SUBSCRIPTION));
            pollState();
            // Signal strength polling stops when radio is off.
@@ -871,36 +873,6 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
        }
    }

    protected static String networkTypeToString(int type) {
        String ret = "unknown";

        switch (type) {
        case ServiceState.RADIO_TECHNOLOGY_IS95A:
        case ServiceState.RADIO_TECHNOLOGY_IS95B:
            ret = "CDMA";
            break;
        case ServiceState.RADIO_TECHNOLOGY_1xRTT:
            ret = "CDMA - 1xRTT";
            break;
        case ServiceState.RADIO_TECHNOLOGY_EVDO_0:
            ret = "CDMA - EvDo rev. 0";
            break;
        case ServiceState.RADIO_TECHNOLOGY_EVDO_A:
            ret = "CDMA - EvDo rev. A";
            break;
        case ServiceState.RADIO_TECHNOLOGY_EVDO_B:
            ret = "CDMA - EvDo rev. B";
            break;
        default:
            if (DBG) {
                slog("Wrong network. Can not return a string.");
            }
        break;
        }

        return ret;
    }

    protected void fixTimeZone(String isoCountryCode) {
        TimeZone zone = null;
        // If the offset is (0, false) and the time zone property
@@ -998,7 +970,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {

        if (hasNetworkTypeChanged) {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
                    networkTypeToString(networkType));
                    ServiceState.radioTechnologyToString(networkType));
        }

        if (hasRegistered) {
+16 −51
Original line number Diff line number Diff line
@@ -84,12 +84,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
    private int mReasonDataDenied = -1;
    private int mNewReasonDataDenied = -1;

    /**
     *  Values correspond to ServiceState.RADIO_TECHNOLOGY_ definitions.
     */
    private int networkType = 0;
    private int newNetworkType = 0;

    /**
     * GSM roaming status solely based on TS 27.007 7.2 CREG. Only used by
     * handlePollStateResult to store CREG roaming result.
@@ -629,7 +623,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                    }
                    newGPRSState = regCodeToServiceState(regState);
                    mDataRoaming = regCodeIsRoaming(regState);
                    newNetworkType = type;
                    mNewRadioTechnology = type;
                    newSS.setRadioTechnology(type);
                break;

@@ -749,37 +743,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
        }
    }

    private static String networkTypeToString(int type) {
        //Network Type from GPRS_REGISTRATION_STATE
        String ret = "unknown";

        switch (type) {
            case ServiceState.RADIO_TECHNOLOGY_GPRS:
                ret = "GPRS";
                break;
            case ServiceState.RADIO_TECHNOLOGY_EDGE:
                ret = "EDGE";
                break;
            case ServiceState.RADIO_TECHNOLOGY_UMTS:
                ret = "UMTS";
                break;
            case ServiceState.RADIO_TECHNOLOGY_HSDPA:
                ret = "HSDPA";
                break;
            case ServiceState.RADIO_TECHNOLOGY_HSUPA:
                ret = "HSUPA";
                break;
            case ServiceState.RADIO_TECHNOLOGY_HSPA:
                ret = "HSPA";
                break;
            default:
                sloge("Wrong network type: " + Integer.toString(type));
                break;
        }

        return ret;
    }

    private void pollStateDone() {
        if (DBG) {
            log("Poll ServiceState done: " +
@@ -789,8 +752,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                " mNewMaxDataCalls=" + mNewMaxDataCalls +
                " oldReasonDataDenied=" + mReasonDataDenied +
                " mNewReasonDataDenied=" + mNewReasonDataDenied +
                " oldType=" + networkTypeToString(networkType) +
                " newType=" + networkTypeToString(newNetworkType));
                " oldType=" + ServiceState.radioTechnologyToString(mRadioTechnology) +
                " newType=" + ServiceState.radioTechnologyToString(mNewRadioTechnology));
        }

        boolean hasRegistered =
@@ -809,7 +772,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                gprsState == ServiceState.STATE_IN_SERVICE
                && newGPRSState != ServiceState.STATE_IN_SERVICE;

        boolean hasNetworkTypeChanged = networkType != newNetworkType;
        boolean hasRadioTechnologyChanged = mRadioTechnology != mNewRadioTechnology;

        boolean hasChanged = !newSS.equals(ss);

@@ -839,30 +802,32 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
        // Add an event log when network type switched
        // TODO: we may add filtering to reduce the event logged,
        // i.e. check preferred network setting, only switch to 2G, etc
        if (hasNetworkTypeChanged) {
        if (hasRadioTechnologyChanged) {
            int cid = -1;
            GsmCellLocation loc = ((GsmCellLocation)phone.getCellLocation());
            if (loc != null) cid = loc.getCid();
            EventLog.writeEvent(EventLogTags.GSM_RAT_SWITCHED, cid, networkType, newNetworkType);
            EventLog.writeEvent(EventLogTags.GSM_RAT_SWITCHED, cid, mRadioTechnology,
                    mNewRadioTechnology);
            if (DBG) {
                log("RAT switched " + networkTypeToString(networkType) + " -> "
                    + networkTypeToString(newNetworkType) + " at cell " + cid);
                log("RAT switched " + ServiceState.radioTechnologyToString(mRadioTechnology) +
                        " -> " + ServiceState.radioTechnologyToString(mNewRadioTechnology) +
                        " at cell " + cid);
            }
        }

        gprsState = newGPRSState;
        mReasonDataDenied = mNewReasonDataDenied;
        mMaxDataCalls = mNewMaxDataCalls;
        networkType = newNetworkType;
        mRadioTechnology = mNewRadioTechnology;
        // this new state has been applied - forget it until we get a new new state
        newNetworkType = 0;
        mNewRadioTechnology = 0;


        newSS.setStateOutOfService(); // clean slate for next time

        if (hasNetworkTypeChanged) {
        if (hasRadioTechnologyChanged) {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE,
                    networkTypeToString(networkType));
                    ServiceState.radioTechnologyToString(mRadioTechnology));
        }

        if (hasRegistered) {
@@ -950,7 +915,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
            mDetachedRegistrants.notifyRegistrants();
        }

        if (hasNetworkTypeChanged) {
        if (hasRadioTechnologyChanged) {
            phone.notifyDataConnection(Phone.REASON_NW_TYPE_CHANGED, Phone.APN_TYPE_ALL);
        }

@@ -1286,7 +1251,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
     * that could support voice and data simultaneously.
     */
    public boolean isConcurrentVoiceAndDataAllowed() {
        return (networkType >= ServiceState.RADIO_TECHNOLOGY_UMTS);
        return (mRadioTechnology >= ServiceState.RADIO_TECHNOLOGY_UMTS);
    }

    /**