diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java index f9effa2b667b7..3e4bbd526c40e 100644 --- a/core/java/android/net/MobileDataStateTracker.java +++ b/core/java/android/net/MobileDataStateTracker.java @@ -275,9 +275,21 @@ public class MobileDataStateTracker extends NetworkStateTracker { case TelephonyManager.NETWORK_TYPE_UMTS: networkTypeStr = "umts"; break; + case TelephonyManager.NETWORK_TYPE_HSDPA: + networkTypeStr = "hsdpa"; + break; + case TelephonyManager.NETWORK_TYPE_HSUPA: + networkTypeStr = "hsupa"; + break; + case TelephonyManager.NETWORK_TYPE_HSPA: + networkTypeStr = "hspa"; + break; case TelephonyManager.NETWORK_TYPE_CDMA: networkTypeStr = "cdma"; break; + case TelephonyManager.NETWORK_TYPE_1xRTT: + networkTypeStr = "1xrtt"; + break; case TelephonyManager.NETWORK_TYPE_EVDO_0: networkTypeStr = "evdo"; break; diff --git a/core/res/res/drawable/stat_sys_data_connected_h.png b/core/res/res/drawable/stat_sys_data_connected_h.png new file mode 100644 index 0000000000000..7d5413afcb6c7 Binary files /dev/null and b/core/res/res/drawable/stat_sys_data_connected_h.png differ diff --git a/core/res/res/drawable/stat_sys_data_in_h.png b/core/res/res/drawable/stat_sys_data_in_h.png new file mode 100644 index 0000000000000..695b80c36bcfa Binary files /dev/null and b/core/res/res/drawable/stat_sys_data_in_h.png differ diff --git a/core/res/res/drawable/stat_sys_data_inandout_h.png b/core/res/res/drawable/stat_sys_data_inandout_h.png new file mode 100644 index 0000000000000..467acd137a1cc Binary files /dev/null and b/core/res/res/drawable/stat_sys_data_inandout_h.png differ diff --git a/core/res/res/drawable/stat_sys_data_out_h.png b/core/res/res/drawable/stat_sys_data_out_h.png new file mode 100644 index 0000000000000..da503054bf6f1 Binary files /dev/null and b/core/res/res/drawable/stat_sys_data_out_h.png differ diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java index 33d899accc250..c6b085dd57288 100644 --- a/services/java/com/android/server/status/StatusBarPolicy.java +++ b/services/java/com/android/server/status/StatusBarPolicy.java @@ -262,6 +262,14 @@ public class StatusBarPolicy { com.android.internal.R.drawable.stat_sys_data_out_e, com.android.internal.R.drawable.stat_sys_data_inandout_e, }; + //3.5G + private static final int[] sDataNetType_h = new int[] { + com.android.internal.R.drawable.stat_sys_data_connected_h, + com.android.internal.R.drawable.stat_sys_data_in_h, + com.android.internal.R.drawable.stat_sys_data_out_h, + com.android.internal.R.drawable.stat_sys_data_inandout_h, + }; + //CDMA private static final int[] sDataNetType_evdo = new int[] { com.android.internal.R.drawable.stat_sys_data_connected_evdo, @@ -968,6 +976,11 @@ public class StatusBarPolicy { case TelephonyManager.NETWORK_TYPE_UMTS: mDataIconList = sDataNetType_3g; break; + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + mDataIconList = sDataNetType_h; + break; case TelephonyManager.NETWORK_TYPE_CDMA: // display 1xRTT for IS95A/B mDataIconList = this.sDataNetType_1xrtt; diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 50c4d417d86a6..06b5c2619689a 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -83,6 +83,12 @@ public class ServiceState implements Parcelable { public static final int RADIO_TECHNOLOGY_EVDO_0 = 7; /** @hide */ public static final int RADIO_TECHNOLOGY_EVDO_A = 8; + /** @hide */ + public static final int RADIO_TECHNOLOGY_HSDPA = 9; + /** @hide */ + public static final int RADIO_TECHNOLOGY_HSUPA = 10; + /** @hide */ + public static final int RADIO_TECHNOLOGY_HSPA = 11; /** * Available registration states for GSM, UMTS and CDMA. @@ -366,6 +372,15 @@ public class ServiceState implements Parcelable { case 8: radioTechnology = "EvDo rev. A"; break; + case 9: + radioTechnology = "HSDPA"; + break; + case 10: + radioTechnology = "HSUPA"; + break; + case 11: + radioTechnology = "HSPA"; + break; default: Log.w(LOG_TAG, "mRadioTechnology variable out of range."); break; diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index ed9af663c682a..f3304a3fb3235 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -382,6 +382,15 @@ public class TelephonyManager { /** Current network is 1xRTT*/ /** @hide */ public static final int NETWORK_TYPE_1xRTT = 7; + /** Current network is HSDPA */ + /** @hide */ + public static final int NETWORK_TYPE_HSDPA = 8; + /** Current network is HSUPA */ + /** @hide */ + public static final int NETWORK_TYPE_HSUPA = 9; + /** Current network is HSPA */ + /** @hide */ + public static final int NETWORK_TYPE_HSPA = 10; /** * Returns a constant indicating the radio technology (network type) @@ -392,35 +401,25 @@ public class TelephonyManager { * @see #NETWORK_TYPE_GPRS * @see #NETWORK_TYPE_EDGE * @see #NETWORK_TYPE_UMTS + * @see #NETWORK_TYPE_HSDPA + * @see #NETWORK_TYPE_HSUPA + * @see #NETWORK_TYPE_HSPA * @see #NETWORK_TYPE_CDMA * @see #NETWORK_TYPE_EVDO_0 * @see #NETWORK_TYPE_EVDO_A * @see #NETWORK_TYPE_1xRTT */ public int getNetworkType() { - String prop = SystemProperties.get(TelephonyProperties.PROPERTY_DATA_NETWORK_TYPE); - if ("GPRS".equals(prop)) { - return NETWORK_TYPE_GPRS; - } - else if ("EDGE".equals(prop)) { - return NETWORK_TYPE_EDGE; - } - else if ("UMTS".equals(prop)) { - return NETWORK_TYPE_UMTS; - } - else if ("CDMA".equals(prop)) { - return NETWORK_TYPE_CDMA; - } - else if ("CDMA - EvDo rev. 0".equals(prop)) { - return NETWORK_TYPE_EVDO_0; + try{ + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getNetworkType(); + } else { + // This can happen when the ITelephony interface is not up yet. + return NETWORK_TYPE_UNKNOWN; } - else if ("CDMA - EvDo rev. A".equals(prop)) { - return NETWORK_TYPE_EVDO_A; - } - else if ("CDMA - 1xRTT".equals(prop)) { - return NETWORK_TYPE_1xRTT; - } - else { + } catch(RemoteException ex){ + // This shouldn't happen in the normal case return NETWORK_TYPE_UNKNOWN; } } @@ -440,6 +439,12 @@ public class TelephonyManager { return "EDGE"; case NETWORK_TYPE_UMTS: return "UMTS"; + case NETWORK_TYPE_HSDPA: + return "HSDPA"; + case NETWORK_TYPE_HSUPA: + return "HSUPA"; + case NETWORK_TYPE_HSPA: + return "HSPA"; case NETWORK_TYPE_CDMA: return "CDMA"; case NETWORK_TYPE_EVDO_0: diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index d83b1354927d6..cac4de96d68a1 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -243,5 +243,9 @@ interface ITelephony { */ int getVoiceMessageCount(); + /** + * Returns the network type + */ + int getNetworkType(); } diff --git a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java index 39806e92ef681..c74bb8d6677d8 100644 --- a/telephony/java/com/android/internal/telephony/ServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/ServiceStateTracker.java @@ -34,6 +34,14 @@ public abstract class ServiceStateTracker extends Handler { * 1 = GPRS only * 2 = EDGE * 3 = UMTS + * 4 = IS95A + * 5 = IS95B + * 6 = 1xRTT + * 7 = EvDo_0 + * 8 = EvDo_A + * 9 = HSDPA + * 10 = HSUPA + * 11 = HSPA */ protected static final int DATA_ACCESS_UNKNOWN = 0; protected static final int DATA_ACCESS_GPRS = 1; @@ -44,6 +52,9 @@ public abstract class ServiceStateTracker extends Handler { protected static final int DATA_ACCESS_CDMA_1xRTT = 6; protected static final int DATA_ACCESS_CDMA_EvDo_0 = 7; protected static final int DATA_ACCESS_CDMA_EvDo_A = 8; + protected static final int DATA_ACCESS_HSDPA = 9; + protected static final int DATA_ACCESS_HSUPA = 10; + protected static final int DATA_ACCESS_HSPA = 11; //***** Instance Variables protected CommandsInterface cm; diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java index 0c040e68a06ed..e7406e252d28e 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java @@ -677,6 +677,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker { newGPRSState = regCodeToServiceState(regState); newDataRoaming = regCodeIsRoaming(regState); newNetworkType = type; + newSS.setRadioTechnology(type); break; case EVENT_POLL_STATE_OPERATOR: @@ -810,6 +811,15 @@ final class GsmServiceStateTracker extends ServiceStateTracker { case DATA_ACCESS_UMTS: ret = "UMTS"; break; + case DATA_ACCESS_HSDPA: + ret = "HSDPA"; + break; + case DATA_ACCESS_HSUPA: + ret = "HSUPA"; + break; + case DATA_ACCESS_HSPA: + ret = "HSPA"; + break; default: Log.e(LOG_TAG, "Wrong network type: " + Integer.toString(type)); break; @@ -1288,7 +1298,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker { * that could support voice and data simultaniously. */ boolean isConcurrentVoiceAndData() { - return (networkType == DATA_ACCESS_UMTS); + return (networkType >= DATA_ACCESS_UMTS); } /**