From 7965fa41c32493f723a883ca71e7c246b940331c Mon Sep 17 00:00:00 2001 From: Ajay Nambi Date: Thu, 14 May 2015 18:48:33 -0700 Subject: [PATCH] Add support for LTE CarrierAgregation Note this may be redesigned in O to better handle the various bitrate/channel combinations in a sane way. bug:27360321 Change-Id: If6ffbd02e3a7f170cc041747e32bb624234c3e09 --- .../res/drawable/ic_qs_signal_4g_plus.xml | 37 ++++++++++++++++ .../stat_sys_data_fully_connected_4g_plus.xml | 37 ++++++++++++++++ packages/SystemUI/res/values/strings.xml | 3 ++ .../policy/MobileSignalController.java | 3 ++ .../policy/NetworkControllerImpl.java | 1 + .../statusbar/policy/TelephonyIcons.java | 30 +++++++++++++ .../telephony/CarrierConfigManager.java | 5 ++- .../android/telephony/RadioAccessFamily.java | 44 ++++++++++--------- .../java/android/telephony/ServiceState.java | 21 ++++++++- .../android/telephony/TelephonyManager.java | 6 ++- 10 files changed, 163 insertions(+), 24 deletions(-) create mode 100644 packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml create mode 100644 packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml diff --git a/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml b/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml new file mode 100644 index 0000000000000..258bd0f7902e5 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_qs_signal_4g_plus.xml @@ -0,0 +1,37 @@ + + + + + + + diff --git a/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml new file mode 100644 index 0000000000000..17a4394ce6dfc --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_data_fully_connected_4g_plus.xml @@ -0,0 +1,37 @@ + + + + + + + diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index f7a169cb4d5b6..8927a2c57e192 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -348,6 +348,9 @@ 4G + + 4G+ + LTE diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 83e25ebd7497f..ac3246d5ff6ba 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -197,8 +197,11 @@ public class MobileSignalController extends SignalController< if (mConfig.show4gForLte) { mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.FOUR_G); + mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, + TelephonyIcons.FOUR_G_PLUS); } else { mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.LTE); + mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, TelephonyIcons.LTE); } mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_IWLAN, TelephonyIcons.WFC); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index b27bfcb311cfe..7a042af7f42e6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -781,6 +781,7 @@ public class NetworkControllerImpl extends BroadcastReceiver datatype.equals("1x") ? TelephonyIcons.ONE_X : datatype.equals("3g") ? TelephonyIcons.THREE_G : datatype.equals("4g") ? TelephonyIcons.FOUR_G : + datatype.equals("4g+") ? TelephonyIcons.FOUR_G_PLUS : datatype.equals("e") ? TelephonyIcons.E : datatype.equals("g") ? TelephonyIcons.G : datatype.equals("h") ? TelephonyIcons.H : diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java index 6ff8f77bff4ee..d91b3329d1ac3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -182,6 +182,19 @@ class TelephonyIcons { static final int QS_DATA_4G = R.drawable.ic_qs_signal_4g; + static final int[][] DATA_4G_PLUS = { + { R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus }, + { R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus, + R.drawable.stat_sys_data_fully_connected_4g_plus } + }; + + static final int QS_DATA_4G_PLUS = R.drawable.ic_qs_signal_4g_plus; + // LTE branded "LTE" static final int[][] DATA_LTE = { { R.drawable.stat_sys_data_fully_connected_lte, @@ -204,6 +217,7 @@ class TelephonyIcons { static final int ICON_H = R.drawable.stat_sys_data_fully_connected_h; static final int ICON_3G = R.drawable.stat_sys_data_fully_connected_3g; static final int ICON_4G = R.drawable.stat_sys_data_fully_connected_4g; + static final int ICON_4G_PLUS = R.drawable.stat_sys_data_fully_connected_4g_plus; static final int ICON_1X = R.drawable.stat_sys_data_fully_connected_1x; static final int ICON_CARRIER_NETWORK_CHANGE = R.drawable.stat_sys_signal_carrier_network_change_animation; @@ -213,6 +227,7 @@ class TelephonyIcons { static final int QS_ICON_LTE = R.drawable.ic_qs_signal_lte; static final int QS_ICON_3G = R.drawable.ic_qs_signal_3g; static final int QS_ICON_4G = R.drawable.ic_qs_signal_4g; + static final int QS_ICON_4G_PLUS = R.drawable.ic_qs_signal_4g_plus; static final int QS_ICON_1X = R.drawable.ic_qs_signal_1x; static final int QS_ICON_CARRIER_NETWORK_CHANGE = R.drawable.ic_qs_signal_carrier_network_change_animation; @@ -348,6 +363,21 @@ class TelephonyIcons { TelephonyIcons.QS_DATA_4G ); + static final MobileIconGroup FOUR_G_PLUS = new MobileIconGroup( + "4G+", + TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH, + TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH, + 0,0, + TelephonyIcons.TELEPHONY_NO_NETWORK, + TelephonyIcons.QS_TELEPHONY_NO_NETWORK, + AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0], + R.string.accessibility_data_connection_4g_plus, + TelephonyIcons.ICON_4G_PLUS, + true, + TelephonyIcons.QS_DATA_4G_PLUS + ); + static final MobileIconGroup LTE = new MobileIconGroup( "LTE", TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH, diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index e0de2611cf2d6..2c96b3cf6033a 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -933,10 +933,11 @@ public class CarrierConfigManager { sDefaults.putStringArray(KEY_SIGNAL_PCO_RECEIVER_STRING_ARRAY, null); sDefaults.putString(KEY_CARRIER_SETUP_APP_STRING, ""); - // Rat families: {GPRS, EDGE}, {EVDO, EVDO_A, EVDO_B}, {UMTS, HSPA, HSDPA, HSUPA, HSPAP} + // Rat families: {GPRS, EDGE}, {EVDO, EVDO_A, EVDO_B}, {UMTS, HSPA, HSDPA, HSUPA, HSPAP}, + // {LTE, LTE_CA} // Order is important - lowest precidence first sDefaults.putStringArray(KEY_RATCHET_RAT_FAMILIES, - new String[]{"1,2","7,8,12","3,11,9,10,15"}); + new String[]{"1,2","7,8,12","3,11,9,10,15","14,19"}); } /** diff --git a/telephony/java/android/telephony/RadioAccessFamily.java b/telephony/java/android/telephony/RadioAccessFamily.java index 2bfaf1bfd86da..b530a6405a620 100644 --- a/telephony/java/android/telephony/RadioAccessFamily.java +++ b/telephony/java/android/telephony/RadioAccessFamily.java @@ -47,6 +47,7 @@ public class RadioAccessFamily implements Parcelable { public static final int RAF_HSPAP = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_HSPAP); public static final int RAF_GSM = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_GSM); public static final int RAF_TD_SCDMA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_TD_SCDMA); + public static final int RAF_LTE_CA = (1 << ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA); // Grouping of RAFs private static final int GSM = RAF_GSM | RAF_GPRS | RAF_EDGE; @@ -54,6 +55,7 @@ public class RadioAccessFamily implements Parcelable { private static final int CDMA = RAF_IS95A | RAF_IS95B | RAF_1xRTT; private static final int EVDO = RAF_EVDO_0 | RAF_EVDO_A | RAF_EVDO_B | RAF_EHRPD; private static final int WCDMA = HS | RAF_UMTS; + private static final int LTE = RAF_LTE | RAF_LTE_CA; /* Phone ID of phone */ private int mPhoneId; @@ -162,19 +164,19 @@ public class RadioAccessFamily implements Parcelable { raf = CDMA | EVDO; break; case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO: - raf = RAF_LTE | CDMA | EVDO; + raf = LTE | CDMA | EVDO; break; case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA: - raf = RAF_LTE | GSM | WCDMA; + raf = LTE | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA: - raf = RAF_LTE | CDMA | EVDO | GSM | WCDMA; + raf = LTE | CDMA | EVDO | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_ONLY: - raf = RAF_LTE; + raf = LTE; break; case RILConstants.NETWORK_MODE_LTE_WCDMA: - raf = RAF_LTE | WCDMA; + raf = LTE | WCDMA; break; case RILConstants.NETWORK_MODE_CDMA_NO_EVDO: raf = CDMA; @@ -192,28 +194,28 @@ public class RadioAccessFamily implements Parcelable { raf = RAF_TD_SCDMA | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA: - raf = RAF_LTE | RAF_TD_SCDMA; + raf = LTE | RAF_TD_SCDMA; break; case RILConstants.NETWORK_MODE_TDSCDMA_GSM: raf = RAF_TD_SCDMA | GSM; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM: - raf = RAF_LTE | RAF_TD_SCDMA | GSM; + raf = LTE | RAF_TD_SCDMA | GSM; break; case RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA: raf = RAF_TD_SCDMA | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | WCDMA; + raf = LTE | RAF_TD_SCDMA | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA; + raf = LTE | RAF_TD_SCDMA | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: raf = RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; break; case RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: - raf = RAF_LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; + raf = LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA; break; default: raf = RAF_UNKNOWN; @@ -232,6 +234,7 @@ public class RadioAccessFamily implements Parcelable { raf = ((WCDMA & raf) > 0) ? (WCDMA | raf) : raf; raf = ((CDMA & raf) > 0) ? (CDMA | raf) : raf; raf = ((EVDO & raf) > 0) ? (EVDO | raf) : raf; + raf = ((LTE & raf) > 0) ? (LTE | raf) : raf; return raf; } @@ -254,19 +257,19 @@ public class RadioAccessFamily implements Parcelable { case (CDMA | EVDO): type = RILConstants.NETWORK_MODE_CDMA; break; - case (RAF_LTE | CDMA | EVDO): + case (LTE | CDMA | EVDO): type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO; break; - case (RAF_LTE | GSM | WCDMA): + case (LTE | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_GSM_WCDMA; break; - case (RAF_LTE | CDMA | EVDO | GSM | WCDMA): + case (LTE | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA; break; - case RAF_LTE: + case LTE: type = RILConstants.NETWORK_MODE_LTE_ONLY; break; - case (RAF_LTE | WCDMA): + case (LTE | WCDMA): type = RILConstants.NETWORK_MODE_LTE_WCDMA; break; case CDMA: @@ -284,28 +287,28 @@ public class RadioAccessFamily implements Parcelable { case (RAF_TD_SCDMA | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA): + case (LTE | RAF_TD_SCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA; break; case (RAF_TD_SCDMA | GSM): type = RILConstants.NETWORK_MODE_TDSCDMA_GSM; break; - case (RAF_LTE | RAF_TD_SCDMA | GSM): + case (LTE | RAF_TD_SCDMA | GSM): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM; break; case (RAF_TD_SCDMA | GSM | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | WCDMA): + case (LTE | RAF_TD_SCDMA | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | GSM | WCDMA): + case (LTE | RAF_TD_SCDMA | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA; break; case (RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA; break; - case (RAF_LTE | RAF_TD_SCDMA | RAF_LTE | CDMA | EVDO | GSM | WCDMA): + case (LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA): type = RILConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA; break; default: @@ -339,6 +342,7 @@ public class RadioAccessFamily implements Parcelable { case "CDMA": return CDMA; case "EVDO": return EVDO; case "WCDMA": return WCDMA; + case "LTE_CA": return RAF_LTE_CA; default: return RAF_UNKNOWN; } } diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 39a9295ed8b67..8446dd04326ca 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -155,6 +155,12 @@ public class ServiceState implements Parcelable { */ public static final int RIL_RADIO_TECHNOLOGY_IWLAN = 18; + /** + * LTE_CA + * @hide + */ + public static final int RIL_RADIO_TECHNOLOGY_LTE_CA = 19; + /** @hide */ public static final int RIL_RADIO_CDMA_TECHNOLOGY_BITMASK = (1 << (RIL_RADIO_TECHNOLOGY_IS95A - 1)) @@ -746,6 +752,9 @@ public class ServiceState implements Parcelable { case RIL_RADIO_TECHNOLOGY_TD_SCDMA: rtString = "TD-SCDMA"; break; + case RIL_RADIO_TECHNOLOGY_LTE_CA: + rtString = "LTE_CA"; + break; default: rtString = "Unexpected"; Rlog.w(LOG_TAG, "Unexpected radioTechnology=" + rt); @@ -1088,6 +1097,8 @@ public class ServiceState implements Parcelable { return TelephonyManager.NETWORK_TYPE_TD_SCDMA; case ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN: return TelephonyManager.NETWORK_TYPE_IWLAN; + case ServiceState.RIL_RADIO_TECHNOLOGY_LTE_CA: + return TelephonyManager.NETWORK_TYPE_LTE_CA; default: return TelephonyManager.NETWORK_TYPE_UNKNOWN; } @@ -1139,7 +1150,9 @@ public class ServiceState implements Parcelable { || radioTechnology == RIL_RADIO_TECHNOLOGY_HSPAP || radioTechnology == RIL_RADIO_TECHNOLOGY_GSM || radioTechnology == RIL_RADIO_TECHNOLOGY_TD_SCDMA - || radioTechnology == RIL_RADIO_TECHNOLOGY_IWLAN; + || radioTechnology == RIL_RADIO_TECHNOLOGY_IWLAN + || radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA; + } /** @hide */ @@ -1153,6 +1166,12 @@ public class ServiceState implements Parcelable { || radioTechnology == RIL_RADIO_TECHNOLOGY_EHRPD; } + /** @hide */ + public static boolean isLte(int radioTechnology) { + return radioTechnology == RIL_RADIO_TECHNOLOGY_LTE || + radioTechnology == RIL_RADIO_TECHNOLOGY_LTE_CA; + } + /** @hide */ public static boolean bearerBitmapHasCdma(int radioTechnologyBitmap) { return (RIL_RADIO_CDMA_TECHNOLOGY_BITMASK & radioTechnologyBitmap) != 0; diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 8810cd9d57274..8e36f48f9fca7 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -1451,7 +1451,8 @@ public class TelephonyManager { public static final int NETWORK_TYPE_TD_SCDMA = 17; /** Current network is IWLAN */ public static final int NETWORK_TYPE_IWLAN = 18; - + /** Current network is LTE_CA {@hide} */ + public static final int NETWORK_TYPE_LTE_CA = 19; /** * @return the NETWORK_TYPE_xxxx for current data connection. */ @@ -1654,6 +1655,7 @@ public class TelephonyManager { return NETWORK_CLASS_3_G; case NETWORK_TYPE_LTE: case NETWORK_TYPE_IWLAN: + case NETWORK_TYPE_LTE_CA: return NETWORK_CLASS_4_G; default: return NETWORK_CLASS_UNKNOWN; @@ -1717,6 +1719,8 @@ public class TelephonyManager { return "TD_SCDMA"; case NETWORK_TYPE_IWLAN: return "IWLAN"; + case NETWORK_TYPE_LTE_CA: + return "LTE_CA"; default: return "UNKNOWN"; }