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
This commit is contained in:
@@ -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;
|
||||
|
||||
BIN
core/res/res/drawable/stat_sys_data_connected_h.png
Normal file
BIN
core/res/res/drawable/stat_sys_data_connected_h.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 642 B |
BIN
core/res/res/drawable/stat_sys_data_in_h.png
Normal file
BIN
core/res/res/drawable/stat_sys_data_in_h.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 669 B |
BIN
core/res/res/drawable/stat_sys_data_inandout_h.png
Normal file
BIN
core/res/res/drawable/stat_sys_data_inandout_h.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 655 B |
BIN
core/res/res/drawable/stat_sys_data_out_h.png
Normal file
BIN
core/res/res/drawable/stat_sys_data_out_h.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 654 B |
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -243,5 +243,9 @@ interface ITelephony {
|
||||
*/
|
||||
int getVoiceMessageCount();
|
||||
|
||||
/**
|
||||
* Returns the network type
|
||||
*/
|
||||
int getNetworkType();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user