From ebe66345e7099ca6fc95e8aa4d31a5b5cbbd6224 Mon Sep 17 00:00:00 2001 From: Li Zhe Date: Fri, 14 Aug 2009 19:22:16 +0800 Subject: [PATCH] Framework changes to support HSDPA/HSUPA/HSPA HSDPA: High-Speed Downlink Packet Access HSUPA: High-Speend Uplink Packet Access HSPA: High-Speed Packet Access Add support for HSDPA/HSUPA/HSPA: 1) extend TelephonyManager.NETWORK_TYPE for HSDPA/HSUPA/HSPA 2) extend ServiceState.RADIO_TECHNOLOGY for HSDPA/HSUPA/HSPA 3) set radioTechnology into ServiceState in GsmServiceStateTracker 4) change the implementation of TelephonyManager.getNetworkType to solve the competition timing issue between the time of setting system property and the time of receiving notification through PhoneStateListener 4.1) add a getNetworkType interface in ITelephony.aidl 5) add icons resources for HSDPA/HSUPA/HSPA 6) make use of HSDPA/HSUPA/HSPA icons in StatusBarPolicy --- .../android/net/MobileDataStateTracker.java | 12 +++++ .../drawable/stat_sys_data_connected_h.png | Bin 0 -> 642 bytes core/res/res/drawable/stat_sys_data_in_h.png | Bin 0 -> 669 bytes .../res/drawable/stat_sys_data_inandout_h.png | Bin 0 -> 655 bytes core/res/res/drawable/stat_sys_data_out_h.png | Bin 0 -> 654 bytes .../server/status/StatusBarPolicy.java | 13 +++++ .../java/android/telephony/ServiceState.java | 15 ++++++ .../android/telephony/TelephonyManager.java | 49 ++++++++++-------- .../internal/telephony/ITelephony.aidl | 4 ++ .../telephony/ServiceStateTracker.java | 11 ++++ .../telephony/gsm/GsmServiceStateTracker.java | 12 ++++- 11 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 core/res/res/drawable/stat_sys_data_connected_h.png create mode 100644 core/res/res/drawable/stat_sys_data_in_h.png create mode 100644 core/res/res/drawable/stat_sys_data_inandout_h.png create mode 100644 core/res/res/drawable/stat_sys_data_out_h.png 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 0000000000000000000000000000000000000000..7d5413afcb6c765dc51d0bf852c8673db249f97a GIT binary patch literal 642 zcmV-|0)737P)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!BuPX;RCwCdRy&I_F%-QsDuVcId=wUH zWv7UZ51jo2*0x(%?@w6w_t-2pf)?Leh$7gCASkw?2(k)_;$t>9Y=+D@JB|yVuopsd zZ<2fFjVqHmU@*T8;L_Vo}#eb2^>i^?Gj~7be#N@TQ&PeL)b+ zY4R|T^ZESa!bYQ^^7*xLAM;7I zBFNKSAV!+#X(WoGq{{>;|76+^xOKDyL|6DvLfNZ5fOkU7S%nFiVIcF^nfU^E)3<}ijjmCI!ag+fXkwZRzP#?gyFA=k&cm!^DhbwOWPEW~1yu;Nft1rHS%rX)ifaO)`Jp zcm!^@n}Y23dnJyQRVtNWGMPZVURV9^Z!;J c0`eum06`3G^V>)Lm;e9(07*qoM6N<$f=Z4lI{*Lx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..695b80c36bcfae8321bcb2ff4aee43cd2ca43287 GIT binary patch literal 669 zcmV;O0%HA%P)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!KS@MERCwCdmOG0gK@fmzd?1L=NDUNJ z5Df$k1o45hp^5&6iw!i=z~J0e|A(oIVq$V7^ze$TGA8j@^>OWz@w{05Xr#*K`vXwR}cz?NMEbfLO2|T zNF+ky_wc=vf}oTAK%3@y^JvyH44`QmtX3=Ww%_k_ll*=^lu9L7E|*X)m*pX&(dYwx zK3F{v2rw)pnM@J@7LUh6JY*A~SS%9nuwZzj(YS-Cda5%tVFo4NqA{fKAbUF>Q z*$kr5C}%Ge3dH8~`IJN0CQesutJP{S9*^(V<@0$Q-{&E#)r!;$ESt@S*tXj(WV2aV zEEe3FYPAaWdi^dYT+tFgawwY^{(a+OW-^%w!0;N)?r3m&*n7`CM#%-|zPo0p!2`xAGFmrvL*0-0*R#<#r!L00000NkvXXu0mjf DjI=Bd literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..467acd137a1ccbae37fe22838c6ec93c953c7bc8 GIT binary patch literal 655 zcmV;A0&x9_P)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!F-b&0RCwCdRy(U=F%X_3f`y6-iVA9B zqZWd_iY|hsBKQYxZDAz}7VB*Uv9b3rh=pP!!mfpdt@;Zr1RL>DiH~e1>^UT7kFN_? z*n#0BGnx4^k0eJTgur)`4&Fd|dEj!nYUlI$=a(Jn^`GnYy2i`oEJ^Yp7K;&s!2lME zVyA?rxyaaNuCR#Pp>2yiWNHFAEq~5@z)KU=5!f$EFR&@#@kq8@`&1NW-N)V67 z;cz%SzOS@E=*~W<(;~MnDMy9??RFc2!5{;!R;$V)l$Fb6SglrqoCje>S~qbh6e58@ zfbnQFB0P1wT}3yYP8E5jQc>h+FZQPwUWZgFCFpXw9AvXursp^4cDofjz7g(% z7>!0)E|<{hbOc?i)nX2@_&f-v7iGvo_uWdD*Xt!7kB4zSpBK`FGFl^Yi_+;dLHnoE zrFDK#)@(Lmu~__LS1cA`Hk&;ciNoO_cDtRi-|r{e?UwCwKA#J6nocExMx&wV&|dbf zJX-2Y&StX_9^B{iF{U8wk&-DK4nx1+hrwU~g+f6%^_$H`5?)3%2t6D4ls@$wBRDpQ piaz)IeN6!Q@Bdcb0`fP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!FiAu~RCwCdmOHB=F%*E$h#>g3@lj~4 zjR-b^iY|hsVrRR*U@Hr;xZcLv#>#)7f?y+Pv1=jLqS%Oyod|MO6vW5eB-{*{xp5p9 zR@eh!Cg&viavqtCAc`XVYY|=wal75+%jNR+w+rd@`uEjpRc3W`Z3z;K#YBU_05+TL zX~1^7h12N-!{JciLG)DNa=GAqJ_GVbwm_%TAB42Q!3MxzlIB7IhrWf%wq zL<*_ZYLH5$BwM@PhGMZu-qYzc{_aUdu~;l5$ZR$vi|W)8ja#KskpZyeayiImv)__$ zG#aIOtW6bSGMQkxTtchWlG&=&DtJ5|l6>~6z@B3rZnA2-7cQ^YD^gn|5`kv3$=b-d z2?m4Q4K^AL*lad9S`+)8h?ct(rJRXxf1Iu(eCA#DBNW9za zcG4USrglx?LZvCP@%H(Aq)jFh35dn%bV5F#hxvRC-ELQQ>QTr9RR}s8_$t+O9b2td onMYspj&$YM|497zkWT>y0Cuc=Q5Rd!4*&oF07*qoM6N<$f@~r%6951J literal 0 HcmV?d00001 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); } /**