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

Commit 3699c3d7 authored by Wink Saville's avatar Wink Saville Committed by Android Git Automerger
Browse files

am 5b4e2440: Merge "Refactor ServiceStateTracker handling of radio technology." into honeycomb-LTE

* commit '5b4e2440':
  Refactor ServiceStateTracker handling of radio technology.
parents 75273707 5b4e2440
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);
    }

    /**