Separate voice and data radio technology/network type & registration state.
Change-Id: Ic9622e3fd637751b427c1627bbdf4d142acbc66e
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index a9a5e90..2c171b1 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -36,6 +36,7 @@
public class ServiceState implements Parcelable {
static final String LOG_TAG = "PHONE";
+ static final boolean DBG = true;
/**
* Normal operation condition, the phone is registered
@@ -61,6 +62,46 @@
*/
public static final int STATE_POWER_OFF = 3;
+ /**
+ * RIL level registration state values from ril.h
+ * ((const char **)response)[0] is registration state 0-6,
+ * 0 - Not registered, MT is not currently searching
+ * a new operator to register
+ * 1 - Registered, home network
+ * 2 - Not registered, but MT is currently searching
+ * a new operator to register
+ * 3 - Registration denied
+ * 4 - Unknown
+ * 5 - Registered, roaming
+ * 10 - Same as 0, but indicates that emergency calls
+ * are enabled.
+ * 12 - Same as 2, but indicates that emergency calls
+ * are enabled.
+ * 13 - Same as 3, but indicates that emergency calls
+ * are enabled.
+ * 14 - Same as 4, but indicates that emergency calls
+ * are enabled.
+ * @hide
+ */
+ public static final int RIL_REG_STATE_NOT_REG = 0;
+ /** @hide */
+ public static final int RIL_REG_STATE_HOME = 1;
+ /** @hide */
+ public static final int RIL_REG_STATE_SEARCHING = 2;
+ /** @hide */
+ public static final int RIL_REG_STATE_DENIED = 3;
+ /** @hide */
+ public static final int RIL_REG_STATE_UNKNOWN = 4;
+ /** @hide */
+ public static final int RIL_REG_STATE_ROAMING = 5;
+ /** @hide */
+ public static final int RIL_REG_STATE_NOT_REG_EMERGENCY_CALL_ENABLED = 10;
+ /** @hide */
+ public static final int RIL_REG_STATE_SEARCHING_EMERGENCY_CALL_ENABLED = 12;
+ /** @hide */
+ public static final int RIL_REG_STATE_DENIED_EMERGENCY_CALL_ENABLED = 13;
+ /** @hide */
+ public static final int RIL_REG_STATE_UNKNOWN_EMERGENCY_CALL_ENABLED = 14;
/**
* Available radio technologies for GSM, UMTS and CDMA.
@@ -122,7 +163,8 @@
/** @hide */
public static final int REGISTRATION_STATE_ROAMING = 5;
- private int mState = STATE_OUT_OF_SERVICE;
+ private int mVoiceRegState = STATE_OUT_OF_SERVICE;
+ private int mDataRegState = STATE_OUT_OF_SERVICE;
private boolean mRoaming;
private String mOperatorAlphaLong;
private String mOperatorAlphaShort;
@@ -131,8 +173,9 @@
private boolean mIsEmergencyOnly;
- //***** CDMA
- private int mRadioTechnology;
+ private int mRilVoiceRadioTechnology;
+ private int mRilDataRadioTechnology;
+
private boolean mCssIndicator;
private int mNetworkId;
private int mSystemId;
@@ -174,13 +217,15 @@
}
protected void copyFrom(ServiceState s) {
- mState = s.mState;
+ mVoiceRegState = s.mVoiceRegState;
+ mDataRegState = s.mDataRegState;
mRoaming = s.mRoaming;
mOperatorAlphaLong = s.mOperatorAlphaLong;
mOperatorAlphaShort = s.mOperatorAlphaShort;
mOperatorNumeric = s.mOperatorNumeric;
mIsManualNetworkSelection = s.mIsManualNetworkSelection;
- mRadioTechnology = s.mRadioTechnology;
+ mRilVoiceRadioTechnology = s.mRilVoiceRadioTechnology;
+ mRilDataRadioTechnology = s.mRilDataRadioTechnology;
mCssIndicator = s.mCssIndicator;
mNetworkId = s.mNetworkId;
mSystemId = s.mSystemId;
@@ -195,13 +240,15 @@
* Construct a ServiceState object from the given parcel.
*/
public ServiceState(Parcel in) {
- mState = in.readInt();
+ mVoiceRegState = in.readInt();
+ mDataRegState = in.readInt();
mRoaming = in.readInt() != 0;
mOperatorAlphaLong = in.readString();
mOperatorAlphaShort = in.readString();
mOperatorNumeric = in.readString();
mIsManualNetworkSelection = in.readInt() != 0;
- mRadioTechnology = in.readInt();
+ mRilVoiceRadioTechnology = in.readInt();
+ mRilDataRadioTechnology = in.readInt();
mCssIndicator = (in.readInt() != 0);
mNetworkId = in.readInt();
mSystemId = in.readInt();
@@ -213,13 +260,15 @@
}
public void writeToParcel(Parcel out, int flags) {
- out.writeInt(mState);
+ out.writeInt(mVoiceRegState);
+ out.writeInt(mDataRegState);
out.writeInt(mRoaming ? 1 : 0);
out.writeString(mOperatorAlphaLong);
out.writeString(mOperatorAlphaShort);
out.writeString(mOperatorNumeric);
out.writeInt(mIsManualNetworkSelection ? 1 : 0);
- out.writeInt(mRadioTechnology);
+ out.writeInt(mRilVoiceRadioTechnology);
+ out.writeInt(mRilDataRadioTechnology);
out.writeInt(mCssIndicator ? 1 : 0);
out.writeInt(mNetworkId);
out.writeInt(mSystemId);
@@ -246,15 +295,38 @@
};
/**
- * Get current service state of phone
+ * Get current voice service state
+ */
+ public int getState() {
+ return getVoiceRegState();
+ }
+
+ /**
+ * Get current voice service state
*
* @see #STATE_IN_SERVICE
* @see #STATE_OUT_OF_SERVICE
* @see #STATE_EMERGENCY_ONLY
* @see #STATE_POWER_OFF
+ *
+ * @hide
*/
- public int getState() {
- return mState;
+ public int getVoiceRegState() {
+ return mVoiceRegState;
+ }
+
+ /**
+ * Get current data service state
+ *
+ * @see #STATE_IN_SERVICE
+ * @see #STATE_OUT_OF_SERVICE
+ * @see #STATE_EMERGENCY_ONLY
+ * @see #STATE_POWER_OFF
+ *
+ * @hide
+ */
+ public int getDataRegState() {
+ return mDataRegState;
}
/**
@@ -354,7 +426,8 @@
@Override
public int hashCode() {
- return ((mState * 0x1234)
+ return ((mVoiceRegState * 31)
+ + (mDataRegState * 37)
+ (mRoaming ? 1 : 0)
+ (mIsManualNetworkSelection ? 1 : 0)
+ ((null == mOperatorAlphaLong) ? 0 : mOperatorAlphaLong.hashCode())
@@ -379,13 +452,15 @@
return false;
}
- return (mState == s.mState
+ return (mVoiceRegState == s.mVoiceRegState
+ && mDataRegState == s.mDataRegState
&& mRoaming == s.mRoaming
&& mIsManualNetworkSelection == s.mIsManualNetworkSelection
&& equalsHandlesNulls(mOperatorAlphaLong, s.mOperatorAlphaLong)
&& equalsHandlesNulls(mOperatorAlphaShort, s.mOperatorAlphaShort)
&& equalsHandlesNulls(mOperatorNumeric, s.mOperatorNumeric)
- && equalsHandlesNulls(mRadioTechnology, s.mRadioTechnology)
+ && equalsHandlesNulls(mRilVoiceRadioTechnology, s.mRilVoiceRadioTechnology)
+ && equalsHandlesNulls(mRilDataRadioTechnology, s.mRilDataRadioTechnology)
&& equalsHandlesNulls(mCssIndicator, s.mCssIndicator)
&& equalsHandlesNulls(mNetworkId, s.mNetworkId)
&& equalsHandlesNulls(mSystemId, s.mSystemId)
@@ -468,14 +543,16 @@
@Override
public String toString() {
- String radioTechnology = rilRadioTechnologyToString(mRadioTechnology);
+ String radioTechnology = rilRadioTechnologyToString(mRilVoiceRadioTechnology);
+ String dataRadioTechnology = rilRadioTechnologyToString(mRilDataRadioTechnology);
- return (mState + " " + (mRoaming ? "roaming" : "home")
+ return (mVoiceRegState + " " + mDataRegState + " " + (mRoaming ? "roaming" : "home")
+ " " + mOperatorAlphaLong
+ " " + mOperatorAlphaShort
+ " " + mOperatorNumeric
+ " " + (mIsManualNetworkSelection ? "(manual)" : "")
+ " " + radioTechnology
+ + " " + dataRadioTechnology
+ " " + (mCssIndicator ? "CSS supported" : "CSS not supported")
+ " " + mNetworkId
+ " " + mSystemId
@@ -485,13 +562,16 @@
}
private void setNullState(int state) {
- mState = state;
+ if (DBG) Log.d(LOG_TAG, "[ServiceState] setNullState=" + state);
+ mVoiceRegState = state;
+ mDataRegState = state;
mRoaming = false;
mOperatorAlphaLong = null;
mOperatorAlphaShort = null;
mOperatorNumeric = null;
mIsManualNetworkSelection = false;
- mRadioTechnology = 0;
+ mRilVoiceRadioTechnology = 0;
+ mRilDataRadioTechnology = 0;
mCssIndicator = false;
mNetworkId = -1;
mSystemId = -1;
@@ -511,7 +591,20 @@
}
public void setState(int state) {
- mState = state;
+ setVoiceRegState(state);
+ if (DBG) Log.e(LOG_TAG, "[ServiceState] setState deprecated use setVoiceRegState()");
+ }
+
+ /** @hide */
+ public void setVoiceRegState(int state) {
+ mVoiceRegState = state;
+ if (DBG) Log.d(LOG_TAG, "[ServiceState] setVoiceRegState=" + mVoiceRegState);
+ }
+
+ /** @hide */
+ public void setDataRegState(int state) {
+ mDataRegState = state;
+ if (DBG) Log.d(LOG_TAG, "[ServiceState] setDataRegState=" + mDataRegState);
}
public void setRoaming(boolean roaming) {
@@ -592,13 +685,15 @@
* @hide
*/
private void setFromNotifierBundle(Bundle m) {
- mState = m.getInt("state");
+ mVoiceRegState = m.getInt("voiceRegState");
+ mDataRegState = m.getInt("dataRegState");
mRoaming = m.getBoolean("roaming");
mOperatorAlphaLong = m.getString("operator-alpha-long");
mOperatorAlphaShort = m.getString("operator-alpha-short");
mOperatorNumeric = m.getString("operator-numeric");
mIsManualNetworkSelection = m.getBoolean("manual");
- mRadioTechnology = m.getInt("radioTechnology");
+ mRilVoiceRadioTechnology = m.getInt("radioTechnology");
+ mRilVoiceRadioTechnology = m.getInt("dataRadioTechnology");
mCssIndicator = m.getBoolean("cssIndicator");
mNetworkId = m.getInt("networkId");
mSystemId = m.getInt("systemId");
@@ -614,13 +709,15 @@
* @hide
*/
public void fillInNotifierBundle(Bundle m) {
- m.putInt("state", mState);
+ m.putInt("voiceRegState", mVoiceRegState);
+ m.putInt("dataRegState", mDataRegState);
m.putBoolean("roaming", Boolean.valueOf(mRoaming));
m.putString("operator-alpha-long", mOperatorAlphaLong);
m.putString("operator-alpha-short", mOperatorAlphaShort);
m.putString("operator-numeric", mOperatorNumeric);
m.putBoolean("manual", Boolean.valueOf(mIsManualNetworkSelection));
- m.putInt("radioTechnology", mRadioTechnology);
+ m.putInt("radioTechnology", mRilVoiceRadioTechnology);
+ m.putInt("dataRadioTechnology", mRilDataRadioTechnology);
m.putBoolean("cssIndicator", mCssIndicator);
m.putInt("networkId", mNetworkId);
m.putInt("systemId", mSystemId);
@@ -629,10 +726,15 @@
m.putBoolean("emergencyOnly", Boolean.valueOf(mIsEmergencyOnly));
}
- //***** CDMA
/** @hide */
- public void setRadioTechnology(int state) {
- this.mRadioTechnology = state;
+ public void setRilVoiceRadioTechnology(int rt) {
+ this.mRilVoiceRadioTechnology = rt;
+ }
+
+ /** @hide */
+ public void setRilDataRadioTechnology(int rt) {
+ this.mRilDataRadioTechnology = rt;
+ if (DBG) Log.d(LOG_TAG, "[ServiceState] setDataRadioTechnology=" + mRilDataRadioTechnology);
}
/** @hide */
@@ -647,17 +749,25 @@
}
/** @hide */
- public int getRilRadioTechnology() {
- return this.mRadioTechnology;
+ public int getRilVoiceRadioTechnology() {
+ return this.mRilVoiceRadioTechnology;
}
/** @hide */
+ public int getRilDataRadioTechnology() {
+ return this.mRilDataRadioTechnology;
+ }
+ /**
+ * @hide
+ * @Deprecated to be removed Q3 2013 use {@link #getRilDataRadioTechnology} or
+ * {@link #getRilVoiceRadioTechnology}
+ */
public int getRadioTechnology() {
- return getRilRadioTechnology();
+ Log.e(LOG_TAG, "ServiceState.getRadioTechnology() DEPRECATED will be removed *******");
+ return getRilDataRadioTechnology();
}
- /** @hide */
- public int getNetworkType() {
- switch(mRadioTechnology) {
+ private int rilRadioTechnologyToNetworkType(int rt) {
+ switch(rt) {
case ServiceState.RIL_RADIO_TECHNOLOGY_GPRS:
return TelephonyManager.NETWORK_TYPE_GPRS;
case ServiceState.RIL_RADIO_TECHNOLOGY_EDGE:
@@ -692,6 +802,25 @@
}
}
+ /**
+ * @Deprecated to be removed Q3 2013 use {@link #getVoiceNetworkType}
+ * @hide
+ */
+ public int getNetworkType() {
+ Log.e(LOG_TAG, "ServiceState.getNetworkType() DEPRECATED will be removed *******");
+ return rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology);
+ }
+
+ /** @hide */
+ public int getDataNetworkType() {
+ return rilRadioTechnologyToNetworkType(mRilDataRadioTechnology);
+ }
+
+ /** @hide */
+ public int getVoiceNetworkType() {
+ return rilRadioTechnologyToNetworkType(mRilVoiceRadioTechnology);
+ }
+
/** @hide */
public int getCssIndicator() {
return this.mCssIndicator ? 1 : 0;
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 2fa41e7..261174a 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -557,6 +557,13 @@
public static final int NETWORK_TYPE_HSPAP = 15;
/**
+ * Returns the NETWORK_TYPE_xxxx for data transmission
+ */
+ public int getNetworkType() {
+ return getDataNetworkType();
+ }
+
+ /**
* Returns a constant indicating the radio technology (network type)
* currently in use on the device for data transmission.
* @return the network type
@@ -577,12 +584,37 @@
* @see #NETWORK_TYPE_LTE
* @see #NETWORK_TYPE_EHRPD
* @see #NETWORK_TYPE_HSPAP
+ *
+ * @hide
*/
- public int getNetworkType() {
+ public int getDataNetworkType() {
try{
ITelephony telephony = getITelephony();
if (telephony != null) {
- return telephony.getNetworkType();
+ return telephony.getDataNetworkType();
+ } else {
+ // This can happen when the ITelephony interface is not up yet.
+ return NETWORK_TYPE_UNKNOWN;
+ }
+ } catch(RemoteException ex) {
+ // This shouldn't happen in the normal case
+ return NETWORK_TYPE_UNKNOWN;
+ } catch (NullPointerException ex) {
+ // This could happen before phone restarts due to crashing
+ return NETWORK_TYPE_UNKNOWN;
+ }
+ }
+
+ /**
+ * Returns the NETWORK_TYPE_xxxx for voice
+ *
+ * @hide
+ */
+ public int getVoiceNetworkType() {
+ try{
+ ITelephony telephony = getITelephony();
+ if (telephony != null) {
+ return telephony.getVoiceNetworkType();
} else {
// This can happen when the ITelephony interface is not up yet.
return NETWORK_TYPE_UNKNOWN;
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 12a7286..d5f0467 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -261,11 +261,21 @@
int getVoiceMessageCount();
/**
- * Returns the network type
+ * Returns the network type for data transmission
*/
int getNetworkType();
/**
+ * Returns the network type for data transmission
+ */
+ int getDataNetworkType();
+
+ /**
+ * Returns the network type for voice
+ */
+ int getVoiceNetworkType();
+
+ /**
* Return true if an ICC card is present
*/
boolean hasIccCard();