summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShufeng Hou <shou@codeaurora.org>2015-10-28 17:30:24 +0800
committerGerrit - the friendly Code Review server <code-review@localhost>2015-11-02 18:32:26 -0800
commitd473d0b22ac8704c39d5eedd0d7b12f60a2fa215 (patch)
tree5f3c9f58fe992ef50ae729da37c73d159261ef30
parenta73c9bcc3737c1adfd1e2a847eba5605416ad46b (diff)
downloadframeworks_base-d473d0b22ac8704c39d5eedd0d7b12f60a2fa215.zip
frameworks_base-d473d0b22ac8704c39d5eedd0d7b12f60a2fa215.tar.gz
frameworks_base-d473d0b22ac8704c39d5eedd0d7b12f60a2fa215.tar.bz2
SystemUI: Customize StatusBar for Chinese carrier
1. Show carrier label in notification panel. 2. Add values-w320dp to adapt lower resolution device. 3. Update Chinese roaming string. 4. Show wifi activity in status bar. 5. Show indicator for Wifi on but not connected. 6. Show rsrp level for LTE. 7. Redesign the scheme of selecting icons on signal cluster. Customized SigalClusterView and MobileSignalController to adapt requirement from Chinese carriers. The customization is controller by config values defined in overlayed config.xml. CRs-Fixed: 653747 Change-Id: I4b228cc4afa552b348a96302a4858a0ab0c7e7f0
-rw-r--r--packages/SystemUI/res/layout/mobile_signal_group.xml82
-rw-r--r--packages/SystemUI/res/layout/signal_cluster_view.xml8
-rw-r--r--packages/SystemUI/res/layout/status_bar_expanded.xml14
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml2
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml2
-rw-r--r--packages/SystemUI/res/values/arrays.xml1091
-rw-r--r--packages/SystemUI/res/values/config.xml29
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java122
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java282
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java421
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java8
19 files changed, 2102 insertions, 45 deletions
diff --git a/packages/SystemUI/res/layout/mobile_signal_group.xml b/packages/SystemUI/res/layout/mobile_signal_group.xml
index 6ae5cf3..3d25f9f 100644
--- a/packages/SystemUI/res/layout/mobile_signal_group.xml
+++ b/packages/SystemUI/res/layout/mobile_signal_group.xml
@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
+/*
+ * Copyright (c) 2015 The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+*/
/* apps/common/assets/default/default/skins/StatusBar.xml
**
** Copyright 2011, The Android Open Source Project
@@ -17,31 +21,73 @@
** limitations under the License.
*/
-->
-<FrameLayout
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res-auto"
android:id="@+id/mobile_combo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
- <com.android.systemui.statusbar.AnimatedImageView
- android:theme="@style/DualToneLightTheme"
- android:id="@+id/mobile_signal"
- android:layout_height="wrap_content"
+ <ImageView
android:layout_width="wrap_content"
- systemui:hasOverlappingRendering="false"
- />
- <com.android.systemui.statusbar.AnimatedImageView
- android:theme="@style/DualToneDarkTheme"
- android:id="@+id/mobile_signal_dark"
android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:alpha="0.0"
- systemui:hasOverlappingRendering="false"
+ android:layout_marginStart="2dp"
+ android:id="@+id/data_inout"
+ android:visibility="gone"
/>
- <ImageView
- android:id="@+id/mobile_type"
- android:layout_height="wrap_content"
+ <FrameLayout
android:layout_width="wrap_content"
- />
-</FrameLayout>
+ android:layout_height="wrap_content"
+ >
+ <FrameLayout
+ android:id="@+id/mobile_signal_single"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ >
+ <com.android.systemui.statusbar.AnimatedImageView
+ android:theme="@style/DualToneLightTheme"
+ android:id="@+id/mobile_signal"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ systemui:hasOverlappingRendering="false"
+ />
+ <com.android.systemui.statusbar.AnimatedImageView
+ android:theme="@style/DualToneDarkTheme"
+ android:id="@+id/mobile_signal_dark"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:alpha="0.0"
+ systemui:hasOverlappingRendering="false"
+ />
+ <ImageView
+ android:id="@+id/mobile_type"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ />
+ <ImageView
+ android:id="@+id/mobile_inout"
+ android:layout_height="17dp"
+ android:layout_width="17dp"
+ android:layout_gravity="end|bottom"
+ />
+ </FrameLayout>
+ <LinearLayout
+ android:id="@+id/mobile_signal_stacked"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="gone"
+ >
+ <ImageView
+ android:id="@+id/mobile_signal_data"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+ <ImageView
+ android:id="@+id/mobile_signal_voice"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+ </FrameLayout>
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml
index f8bd6fd..621a739 100644
--- a/packages/SystemUI/res/layout/signal_cluster_view.xml
+++ b/packages/SystemUI/res/layout/signal_cluster_view.xml
@@ -75,6 +75,14 @@
android:alpha="0.0"
systemui:hasOverlappingRendering="false"
/>
+ <com.android.systemui.statusbar.AlphaOptimizedImageView
+ android:theme="@style/DualToneLightTheme"
+ android:id="@+id/wifi_inout"
+ android:layout_height="17dp"
+ android:layout_width="18.41dp"
+ android:layout_gravity="center|bottom"
+ systemui:hasOverlappingRendering="false"
+ />
</FrameLayout>
<View
android:id="@+id/wifi_signal_spacer"
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index f7bbce0..148212e 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -20,6 +20,7 @@
<com.android.systemui.statusbar.phone.NotificationPanelView
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/res-auto"
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
android:id="@+id/notification_panel"
android:layout_width="match_parent"
@@ -27,6 +28,19 @@
android:background="@android:color/transparent"
>
+ <com.android.keyguard.CarrierText
+ android:id="@+id/carrier_label"
+ android:layout_height="@dimen/carrier_label_height"
+ android:layout_width="match_parent"
+ android:layout_marginBottom="@dimen/close_handle_height"
+ android:layout_gravity="bottom"
+ android:gravity="center"
+ android:ellipsize="marquee"
+ android:singleLine="true"
+ android:visibility="invisible"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="#999999" />
+
<include
layout="@layout/keyguard_status_view"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 84e0eea..5637222 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -142,7 +142,7 @@
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫游中"</string>
+ <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"数据漫游"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WLAN"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"无 SIM 卡。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index e0464b7..b39c088 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -142,7 +142,7 @@
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
- <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫遊中"</string>
+ <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"數據漫遊"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"沒有 SIM 卡。"</string>
diff --git a/packages/SystemUI/res/values/arrays.xml b/packages/SystemUI/res/values/arrays.xml
index 6102aa6..a0a3397 100644
--- a/packages/SystemUI/res/values/arrays.xml
+++ b/packages/SystemUI/res/values/arrays.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
+/*
+ * Copyright (c) 2014, 2015 The Linux Foundation. All rights reserved.
+ * Not a Contribution.
/* //device/apps/common/assets/res/any/colors.xml
**
** Copyright 2012, The Android Open Source Project
@@ -37,4 +40,1092 @@
<item>157</item><item>334</item>
<item>0</item> <item>334</item>
</array>
+
+ <!-- added for customized status bar -->
+ <!--data type-->
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_data_type">
+ <item>array/telephony_data_type_sim1</item>
+ <item>array/telephony_data_type_sim1</item>
+ <item>array/telephony_data_type_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_data_type_sim1">
+ <!--NETWORK_TYPE_UNKNOWN-->
+ <item>0</item>
+ <!--NETWORK_TYPE_GPRS-->
+ <item>drawable/stat_sys_data_fully_connected_g</item>
+ <!--NETWORK_TYPE_EDGE-->
+ <item>drawable/stat_sys_data_fully_connected_e</item>
+ <!--NETWORK_TYPE_UMTS-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_CDMA-->
+ <item>drawable/stat_sys_data_fully_connected_1x</item>
+ <!--NETWORK_TYPE_EVDO_0-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_EVDO_A-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_1xRTT-->
+ <item>drawable/stat_sys_data_fully_connected_1x</item>
+ <!--NETWORK_TYPE_HSDPA-->
+ <item>drawable/stat_sys_data_fully_connected_h</item>
+ <!--NETWORK_TYPE_HSUPA-->
+ <item>drawable/stat_sys_data_fully_connected_h</item>
+ <!--NETWORK_TYPE_HSPA-->
+ <item>drawable/stat_sys_data_fully_connected_h</item>
+ <!--NETWORK_TYPE_IDEN-->
+ <item>0</item>
+ <!--NETWORK_TYPE_EVDO_B-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_LTE-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_EHRPD-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_HSPAP-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_GSM-->
+ <item>drawable/stat_sys_data_fully_connected_g</item>
+ <!--NETWORK_TYPE_TD_SCDMA-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--NETWORK_TYPE_IWLAN-->
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_type_sim2">
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_type_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_type_generation">
+ <!--3G-->
+ <item>drawable/stat_sys_data_fully_connected_3g</item>
+ <!--4G-->
+ <item>drawable/stat_sys_data_fully_connected_4g</item>
+ <!--4G+-->
+ <item>drawable/stat_sys_data_fully_connected_4g_plus</item>
+ </string-array>
+
+ <!--data type description-->
+ <string-array name="telephony_data_type_description">
+ <!--NETWORK_TYPE_UNKNOWN-->
+ <item>0</item>
+ <!--NETWORK_TYPE_GPRS-->
+ <item>string/accessibility_data_connection_gprs</item>
+ <!--NETWORK_TYPE_EDGE-->
+ <item>string/accessibility_data_connection_edge</item>
+ <!--NETWORK_TYPE_UMTS-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_CDMA-->
+ <item>string/accessibility_data_connection_cdma</item>
+ <!--NETWORK_TYPE_EVDO_0-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_EVDO_A-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_1xRTT-->
+ <item>string/accessibility_data_connection_cdma</item>
+ <!--NETWORK_TYPE_HSDPA-->
+ <item>string/accessibility_data_connection_3.5g</item>
+ <!--NETWORK_TYPE_HSUPA-->
+ <item>string/accessibility_data_connection_3.5g</item>
+ <!--NETWORK_TYPE_HSPA-->
+ <item>string/accessibility_data_connection_3.5g</item>
+ <!--NETWORK_TYPE_IDEN-->
+ <item>0</item>
+ <!--NETWORK_TYPE_EVDO_B-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_LTE-->
+ <item>string/accessibility_data_connection_lte</item>
+ <!--NETWORK_TYPE_EHRPD-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_HSPAP-->
+ <item>string/accessibility_data_connection_3.5g</item>
+ <!--NETWORK_TYPE_GSM-->
+ <item>string/accessibility_data_connection_gprs</item>
+ <!--NETWORK_TYPE_TD_SCDMA-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--NETWORK_TYPE_IWLAN-->
+ <item>0</item>
+ </string-array>
+
+ <string-array name="telephony_data_type_generation_description">
+ <!--3G-->
+ <item>string/accessibility_data_connection_3g</item>
+ <!--4G-->
+ <item>string/accessibility_data_connection_4g</item>
+ </string-array>
+
+ <!--data activity-->
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_data_activity">
+ <item>array/data_activity_sim1</item>
+ <item>array/data_activity_sim1</item>
+ <item>array/data_activity_sim1</item>
+ </string-array>
+
+ <string-array name="data_activity_sim1">
+ <item>array/telephony_data_activity_unknown_sim1</item>
+ <item>array/telephony_data_activity_g_sim1</item>
+ <item>array/telephony_data_activity_e_sim1</item>
+ <item>array/telephony_data_activity_2g_sim1</item>
+ <item>array/telephony_data_activity_3g_sim1</item>
+ <item>array/telephony_data_activity_4g_sim1</item>
+ <item>array/telephony_data_activity_h_sim1</item>
+ <item>array/telephony_data_activity_hp_sim1</item>
+ <item>array/telephony_data_activity_1x_sim1</item>
+ <item>array/telephony_data_activity_lte_sim1</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="data_activity_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="data_activity_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_unknown_sim1">
+ <item>0</item><!--none-->
+ <item>0</item><!--in-->
+ <item>0</item><!--out-->
+ <item>0</item><!--inout-->
+ <item>0</item><!--dormant-->
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_unknown_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_unknown_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_g_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_g_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_g_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_e_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_e_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_e_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_2g_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_2g_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_2g_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_3g_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_3g_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_3g_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_4g_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_4g_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_4g_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_h_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_h_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_h_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_hp_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_hp_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_hp_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_1x_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_1x_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_1x_sim3">
+ </string-array>
+
+ <string-array name="telephony_data_activity_lte_sim1">
+ <item>0</item>
+ <item>drawable/stat_sys_signal_in_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_out_auto_mirrored</item>
+ <item>drawable/stat_sys_signal_inout_auto_mirrored</item>
+ <item>0</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_lte_sim2">
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="telephony_data_activity_lte_sim3">
+ </string-array>
+
+ <!--signal strength-->
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_signal_strength">
+ <item>array/telephony_siganl_strength_sim1</item>
+ <item>array/telephony_siganl_strength_sim1</item>
+ <item>array/telephony_siganl_strength_sim1</item>
+ </string-array>
+
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_signal_strength_roaming">
+ <item>array/telephony_siganl_strength_roaming_sim1</item>
+ <item>array/telephony_siganl_strength_roaming_sim1</item>
+ <item>array/telephony_siganl_strength_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_siganl_strength_sim1">
+ <item>array/telephony_signal_strength_g_sim1</item>
+ <item>array/telephony_signal_strength_e_sim1</item>
+ <item>array/telephony_signal_strength_3g_sim1</item>
+ <item>array/telephony_signal_strength_4g_sim1</item>
+ <item>array/telephony_signal_strength_h_sim1</item>
+ <item>array/telephony_signal_strength_hp_sim1</item>
+ <item>array/telephony_signal_strength_1x_sim1</item>
+ <item>array/telephony_signal_strength_cdma_sim1</item>
+ <item>array/telephony_signal_strength_umts_sim1</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_siganl_strength_sim2">
+ </string-array>
+ <string-array name="telephony_siganl_strength_sim3">
+ </string-array>
+
+ <string-array name="telephony_siganl_strength_roaming_sim1">
+ <item>array/telephony_signal_strength_g_roaming_sim1</item>
+ <item>array/telephony_signal_strength_e_roaming_sim1</item>
+ <item>array/telephony_signal_strength_3g_roaming_sim1</item>
+ <item>array/telephony_signal_strength_4g_roaming_sim1</item>
+ <item>array/telephony_signal_strength_h_roaming_sim1</item>
+ <item>array/telephony_signal_strength_hp_roaming_sim1</item>
+ <item>array/telephony_signal_strength_1x_roaming_sim1</item>
+ <item>array/telephony_signal_strength_cdma_roaming_sim1</item>
+ <item>array/telephony_signal_strength_umts_roaming_sim1</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_siganl_strength_roaming_sim2">
+ </string-array>
+ <string-array name="telephony_siganl_strength_roaming_sim3">
+ </string-array>
+
+ <string-array name="telephony_signal_strength_g_sim1">
+ <item>array/signal_strength_g_normal_sim1</item>
+ <item>array/signal_strength_g_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_g_roaming_sim1">
+ <item>array/signal_strength_g_normal_roaming_sim1</item>
+ <item>array/signal_strength_g_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_e_sim1">
+ <item>array/signal_strength_e_normal_sim1</item>
+ <item>array/signal_strength_e_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_e_roaming_sim1">
+ <item>array/signal_strength_e_normal_roaming_sim1</item>
+ <item>array/signal_strength_e_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_3g_sim1">
+ <item>array/signal_strength_3g_normal_sim1</item>
+ <item>array/signal_strength_3g_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_3g_roaming_sim1">
+ <item>array/signal_strength_3g_normal_roaming_sim1</item>
+ <item>array/signal_strength_3g_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_4g_sim1">
+ <item>array/signal_strength_4g_normal_sim1</item>
+ <item>array/signal_strength_4g_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_4g_roaming_sim1">
+ <item>array/signal_strength_4g_normal_roaming_sim1</item>
+ <item>array/signal_strength_4g_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_h_sim1">
+ <item>array/signal_strength_h_normal_sim1</item>
+ <item>array/signal_strength_h_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_h_roaming_sim1">
+ <item>array/signal_strength_h_normal_roaming_sim1</item>
+ <item>array/signal_strength_h_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_hp_sim1">
+ <item>array/signal_strength_hp_normal_sim1</item>
+ <item>array/signal_strength_hp_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_hp_roaming_sim1">
+ <item>array/signal_strength_hp_normal_roaming_sim1</item>
+ <item>array/signal_strength_hp_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_1x_sim1">
+ <item>array/signal_strength_1x_normal_sim1</item>
+ <item>array/signal_strength_1x_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_1x_roaming_sim1">
+ <item>array/signal_strength_1x_normal_roaming_sim1</item>
+ <item>array/signal_strength_1x_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_cdma_sim1">
+ <item>array/signal_strength_cdma_normal_sim1</item>
+ <item>array/signal_strength_cdma_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_cdma_roaming_sim1">
+ <item>array/signal_strength_cdma_normal_roaming_sim1</item>
+ <item>array/signal_strength_cdma_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_umts_sim1">
+ <item>array/signal_strength_umts_normal_sim1</item>
+ <item>array/signal_strength_umts_fully_sim1</item>
+ </string-array>
+
+ <string-array name="telephony_signal_strength_umts_roaming_sim1">
+ <item>array/signal_strength_umts_normal_roaming_sim1</item>
+ <item>array/signal_strength_umts_fully_roaming_sim1</item>
+ </string-array>
+
+ <string-array name="signal_strength_g_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_g_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_g_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_g_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_e_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_e_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_e_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_e_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_3g_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_3g_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_3g_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_3g_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_4g_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_4g_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_4g_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_4g_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_h_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_h_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_h_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_h_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_hp_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_hp_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_hp_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_hp_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_1x_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_1x_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_1x_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_1x_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_cdma_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_cdma_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_cdma_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_cdma_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_umts_normal_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_umts_fully_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_umts_normal_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <string-array name="signal_strength_umts_fully_roaming_sim1">
+ <item>drawable/stat_sys_signal_0_fully</item>
+ <item>drawable/stat_sys_signal_1_fully</item>
+ <item>drawable/stat_sys_signal_2_fully</item>
+ <item>drawable/stat_sys_signal_3_fully</item>
+ <item>drawable/stat_sys_signal_4_fully</item>
+ </string-array>
+
+ <!--signal strength description-->
+ <string-array name="signal_strength_description">
+ <item>string/accessibility_no_phone</item>
+ <item>string/accessibility_phone_one_bar</item>
+ <item>string/accessibility_phone_two_bars</item>
+ <item>string/accessibility_phone_three_bars</item>
+ <item>string/accessibility_phone_signal_full</item>
+ </string-array>
+
+ <!--null signal-->
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_signal_null">
+ <item>drawable/stat_sys_signal_null</item>
+ <item>drawable/stat_sys_signal_null</item>
+ <item>drawable/stat_sys_signal_null</item>
+ </string-array>
+
+ <!--no sim-->
+ <!--Add three items to support TSTS-->
+ <string-array name="multi_no_sim">
+ <item>drawable/stat_sys_no_sims</item>
+ <item>drawable/stat_sys_no_sims</item>
+ <item>drawable/stat_sys_no_sims</item>
+ </string-array>
+
+ <!--reserved for overlay-->
+ <string-array name="telephony_signal_strength_g_sim2">
+ <item>array/signal_strength_g_normal_sim2</item>
+ <item>array/signal_strength_g_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_g_roaming_sim2">
+ <item>array/signal_strength_g_normal_roaming_sim2</item>
+ <item>array/signal_strength_g_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_e_sim2">
+ <item>array/signal_strength_e_normal_sim2</item>
+ <item>array/signal_strength_e_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_e_roaming_sim2">
+ <item>array/signal_strength_e_normal_roaming_sim2</item>
+ <item>array/signal_strength_e_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_3g_sim2">
+ <item>array/signal_strength_3g_normal_sim2</item>
+ <item>array/signal_strength_3g_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_3g_roaming_sim2">
+ <item>array/signal_strength_3g_normal_roaming_sim2</item>
+ <item>array/signal_strength_3g_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_4g_sim2">
+ <item>array/signal_strength_4g_normal_sim2</item>
+ <item>array/signal_strength_4g_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_4g_roaming_sim2">
+ <item>array/signal_strength_4g_normal_roaming_sim2</item>
+ <item>array/signal_strength_4g_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_h_sim2">
+ <item>array/signal_strength_h_normal_sim2</item>
+ <item>array/signal_strength_h_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_h_roaming_sim2">
+ <item>array/signal_strength_h_normal_roaming_sim2</item>
+ <item>array/signal_strength_h_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_hp_sim2">
+ <item>array/signal_strength_hp_normal_sim2</item>
+ <item>array/signal_strength_hp_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_hp_roaming_sim2">
+ <item>array/signal_strength_hp_normal_roaming_sim2</item>
+ <item>array/signal_strength_hp_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_1x_sim2">
+ <item>array/signal_strength_1x_normal_sim2</item>
+ <item>array/signal_strength_1x_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_1x_roaming_sim2">
+ <item>array/signal_strength_1x_normal_roaming_sim2</item>
+ <item>array/signal_strength_1x_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_cdma_sim2">
+ <item>array/signal_strength_cdma_normal_sim2</item>
+ <item>array/signal_strength_cdma_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_cdma_roaming_sim2">
+ <item>array/signal_strength_cdma_normal_roaming_sim2</item>
+ <item>array/signal_strength_cdma_fully_roaming_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_umts_sim2">
+ <item>array/signal_strength_umts_normal_sim2</item>
+ <item>array/signal_strength_umts_fully_sim2</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_umts_roaming_sim2">
+ <item>array/signal_strength_umts_normal_roaming_sim2</item>
+ <item>array/signal_strength_umts_fully_roaming_sim2</item>
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="signal_strength_g_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_g_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_g_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_g_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_e_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_e_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_e_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_e_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_3g_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_3g_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_3g_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_3g_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_4g_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_4g_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_4g_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_4g_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_h_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_h_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_h_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_h_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_hp_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_hp_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_hp_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_hp_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_1x_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_1x_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_1x_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_1x_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_cdma_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_cdma_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_cdma_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_cdma_fully_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_umts_normal_sim2">
+ </string-array>
+ <string-array name="signal_strength_umts_fully_sim2">
+ </string-array>
+ <string-array name="signal_strength_umts_normal_roaming_sim2">
+ </string-array>
+ <string-array name="signal_strength_umts_fully_roaming_sim2">
+ </string-array>
+
+ <string-array name="telephony_signal_strength_g_sim3">
+ <item>array/signal_strength_g_normal_sim3</item>
+ <item>array/signal_strength_g_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_g_roaming_sim3">
+ <item>array/signal_strength_g_normal_roaming_sim3</item>
+ <item>array/signal_strength_g_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_e_sim3">
+ <item>array/signal_strength_e_normal_sim3</item>
+ <item>array/signal_strength_e_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_e_roaming_sim3">
+ <item>array/signal_strength_e_normal_roaming_sim3</item>
+ <item>array/signal_strength_e_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_3g_sim3">
+ <item>array/signal_strength_3g_normal_sim3</item>
+ <item>array/signal_strength_3g_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_3g_roaming_sim3">
+ <item>array/signal_strength_3g_normal_roaming_sim3</item>
+ <item>array/signal_strength_3g_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_4g_sim3">
+ <item>array/signal_strength_4g_normal_sim3</item>
+ <item>array/signal_strength_4g_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_4g_roaming_sim3">
+ <item>array/signal_strength_4g_normal_roaming_sim3</item>
+ <item>array/signal_strength_4g_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_h_sim3">
+ <item>array/signal_strength_h_normal_sim3</item>
+ <item>array/signal_strength_h_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_h_roaming_sim3">
+ <item>array/signal_strength_h_normal_roaming_sim3</item>
+ <item>array/signal_strength_h_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_hp_sim3">
+ <item>array/signal_strength_hp_normal_sim3</item>
+ <item>array/signal_strength_hp_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_hp_roaming_sim3">
+ <item>array/signal_strength_hp_normal_roaming_sim3</item>
+ <item>array/signal_strength_hp_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_1x_sim3">
+ <item>array/signal_strength_1x_normal_sim3</item>
+ <item>array/signal_strength_1x_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_1x_roaming_sim3">
+ <item>array/signal_strength_1x_normal_roaming_sim3</item>
+ <item>array/signal_strength_1x_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_cdma_sim3">
+ <item>array/signal_strength_cdma_normal_sim3</item>
+ <item>array/signal_strength_cdma_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_cdma_roaming_sim3">
+ <item>array/signal_strength_cdma_normal_roaming_sim3</item>
+ <item>array/signal_strength_cdma_fully_roaming_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_umts_sim3">
+ <item>array/signal_strength_umts_normal_sim3</item>
+ <item>array/signal_strength_umts_fully_sim3</item>
+ </string-array>
+ <string-array name="telephony_signal_strength_umts_roaming_sim3">
+ <item>array/signal_strength_umts_normal_roaming_sim3</item>
+ <item>array/signal_strength_umts_fully_roaming_sim3</item>
+ </string-array>
+ <!--reserved for overlay-->
+ <string-array name="signal_strength_g_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_g_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_g_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_g_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_e_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_e_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_e_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_e_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_3g_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_3g_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_3g_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_3g_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_4g_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_4g_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_4g_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_4g_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_h_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_h_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_h_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_h_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_hp_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_hp_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_hp_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_hp_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_1x_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_1x_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_1x_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_1x_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_cdma_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_cdma_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_cdma_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_cdma_fully_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_umts_normal_sim3">
+ </string-array>
+ <string-array name="signal_strength_umts_fully_sim3">
+ </string-array>
+ <string-array name="signal_strength_umts_normal_roaming_sim3">
+ </string-array>
+ <string-array name="signal_strength_umts_fully_roaming_sim3">
+ </string-array>
+
+ <!--convert stacked icons to single icons-->
+ <array name="stacked_signal_icons">
+ <item>@drawable/stat_sys_signal_0_3g</item>
+ <item>@drawable/stat_sys_signal_0_4g</item>
+ <item>@drawable/stat_sys_signal_1_3g</item>
+ <item>@drawable/stat_sys_signal_1_4g</item>
+ <item>@drawable/stat_sys_signal_2_3g</item>
+ <item>@drawable/stat_sys_signal_2_4g</item>
+ <item>@drawable/stat_sys_signal_3_3g</item>
+ <item>@drawable/stat_sys_signal_3_4g</item>
+ <item>@drawable/stat_sys_signal_4_3g</item>
+ <item>@drawable/stat_sys_signal_4_4g</item>
+ <item>@drawable/stat_sys_signal_0_3g_fully</item>
+ <item>@drawable/stat_sys_signal_0_4g_fully</item>
+ <item>@drawable/stat_sys_signal_1_3g_fully</item>
+ <item>@drawable/stat_sys_signal_1_4g_fully</item>
+ <item>@drawable/stat_sys_signal_2_3g_fully</item>
+ <item>@drawable/stat_sys_signal_2_4g_fully</item>
+ <item>@drawable/stat_sys_signal_3_3g_fully</item>
+ <item>@drawable/stat_sys_signal_3_4g_fully</item>
+ <item>@drawable/stat_sys_signal_4_3g_fully</item>
+ <item>@drawable/stat_sys_signal_4_4g_fully</item>
+ </array>
+
+ <array name="single_signal_icons">
+ <item>@drawable/stat_sys_signal_0_3g_default</item>
+ <item>@drawable/stat_sys_signal_0_4g_default</item>
+ <item>@drawable/stat_sys_signal_1_3g_default</item>
+ <item>@drawable/stat_sys_signal_1_4g_default</item>
+ <item>@drawable/stat_sys_signal_2_3g_default</item>
+ <item>@drawable/stat_sys_signal_2_4g_default</item>
+ <item>@drawable/stat_sys_signal_3_3g_default</item>
+ <item>@drawable/stat_sys_signal_3_4g_default</item>
+ <item>@drawable/stat_sys_signal_4_3g_default</item>
+ <item>@drawable/stat_sys_signal_4_4g_default</item>
+ <item>@drawable/stat_sys_signal_0_3g_default_fully</item>
+ <item>@drawable/stat_sys_signal_0_4g_default_fully</item>
+ <item>@drawable/stat_sys_signal_1_3g_default_fully</item>
+ <item>@drawable/stat_sys_signal_1_4g_default_fully</item>
+ <item>@drawable/stat_sys_signal_2_3g_default_fully</item>
+ <item>@drawable/stat_sys_signal_2_4g_default_fully</item>
+ <item>@drawable/stat_sys_signal_3_3g_default_fully</item>
+ <item>@drawable/stat_sys_signal_3_4g_default_fully</item>
+ <item>@drawable/stat_sys_signal_4_3g_default_fully</item>
+ <item>@drawable/stat_sys_signal_4_4g_default_fully</item>
+ </array>
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 260d81b..0f75f63 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -138,6 +138,35 @@
<!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
<bool name="config_show4GForLTE">true</bool>
+ <!-- Whether or not we also show rsrp level for LTE. -->
+ <bool name="config_showRsrpSignalLevelforLTE">false</bool>
+
+ <!-- Whether or not we show carrier label in notification panel. -->
+ <bool name="config_showCarrierLabel">false</bool>
+
+ <!-- Whether or not we also show wifi activity in status bar. -->
+ <bool name="config_showWifiActivity">false</bool>
+
+ <!-- Show indicator for Wifi on but not connected. -->
+ <bool name="config_showWifiIndicatorWhenEnabled">false</bool>
+
+ <!-- style of status bar:
+ 0: Default Android style
+ 1: Show data activity with data type at the left side of
+ signal icon, and signal icon may be two icons
+ stacked, the upper one is to show 3G, and the lower one
+ is to show 2G.
+ 2: Do not show data activity besides signal icon, instead,
+ it shows data activity within signal view.
+ 3: Show data activity with data type at the left side
+ of signal icon, and do not show two stacked icon on
+ one slot.
+ -->
+ <integer name="status_bar_style">0</integer>
+
+ <!-- Control whether status bar should fetch mobile signal icons from xml file dynamically -->
+ <bool name="config_read_icons_from_xml">false</bool>
+
<!-- milliseconds before the heads up notification auto-dismisses. -->
<integer name="heads_up_notification_decay">5000</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index f3ad9d8..fb46729 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -167,8 +167,9 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
@Override
public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
- int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
- String description, boolean isWide, int subId) {
+ int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
+ int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon,
+ String typeContentDescription, String description, boolean isWide, int subId) {
if (qsIcon == null) {
// Not data sim, don't display.
return;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index cc30882..787ec07 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar;
import android.content.Context;
import android.content.res.ColorStateList;
+import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Animatable;
@@ -67,8 +68,8 @@ public class SignalClusterView
private int mEthernetIconId = 0;
private int mLastEthernetIconId = -1;
private boolean mWifiVisible = false;
- private int mWifiStrengthId = 0;
- private int mLastWifiStrengthId = -1;
+ private int mWifiStrengthId = 0, mWifiActivityId = 0;
+ private int mLastWifiStrengthId = -1, mLastWifiActivityId = -1;
private boolean mIsAirplaneMode = false;
private int mAirplaneIconId = 0;
private int mLastAirplaneIconId = -1;
@@ -78,10 +79,12 @@ public class SignalClusterView
private ArrayList<PhoneState> mPhoneStates = new ArrayList<PhoneState>();
private int mIconTint = Color.WHITE;
private float mDarkIntensity;
+ private int mNoSimsIcon;
ViewGroup mEthernetGroup, mWifiGroup;
View mNoSimsCombo;
ImageView mVpn, mEthernet, mWifi, mAirplane, mNoSims, mEthernetDark, mWifiDark, mNoSimsDark;
+ ImageView mWifiActivity;
View mWifiAirplaneSpacer;
View mWifiSignalSpacer;
LinearLayout mMobileSignalGroup;
@@ -167,6 +170,7 @@ public class SignalClusterView
mWifiGroup = (ViewGroup) findViewById(R.id.wifi_combo);
mWifi = (ImageView) findViewById(R.id.wifi_signal);
mWifiDark = (ImageView) findViewById(R.id.wifi_signal_dark);
+ mWifiActivity = (ImageView) findViewById(R.id.wifi_inout);
mAirplane = (ImageView) findViewById(R.id.airplane);
mNoSims = (ImageView) findViewById(R.id.no_sims);
mNoSimsDark = (ImageView) findViewById(R.id.no_sims_dark);
@@ -190,6 +194,7 @@ public class SignalClusterView
mEthernet = null;
mWifiGroup = null;
mWifi = null;
+ mWifiActivity = null;
mAirplane = null;
mMobileSignalGroup.removeAllViews();
mMobileSignalGroup = null;
@@ -215,6 +220,7 @@ public class SignalClusterView
boolean activityIn, boolean activityOut, String description) {
mWifiVisible = statusIcon.visible && !mBlockWifi;
mWifiStrengthId = statusIcon.icon;
+ mWifiActivityId = getWifiActivityId(activityIn, activityOut);
mWifiDescription = statusIcon.contentDescription;
apply();
@@ -222,8 +228,9 @@ public class SignalClusterView
@Override
public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
- int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
- String description, boolean isWide, int subId) {
+ int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
+ int mobileActivityId, int stackedDataId, int stackedVoiceId,
+ String typeContentDescription, String description, boolean isWide, int subId) {
PhoneState state = getState(subId);
if (state == null) {
return;
@@ -234,6 +241,10 @@ public class SignalClusterView
state.mMobileDescription = statusIcon.contentDescription;
state.mMobileTypeDescription = typeContentDescription;
state.mIsMobileTypeIconWide = statusType != 0 && isWide;
+ state.mDataActivityId = dataActivityId;
+ state.mMobileActivityId = mobileActivityId;
+ state.mStackedDataId = stackedDataId;
+ state.mStackedVoiceId = stackedVoiceId;
apply();
}
@@ -295,6 +306,43 @@ public class SignalClusterView
return null;
}
+
+ private int getWifiActivityId(boolean activityIn, boolean activityOut) {
+ if (!getContext().getResources().getBoolean(R.bool.config_showWifiActivity)) {
+ return 0;
+ }
+ int activityId = 0;
+ if (activityIn && activityOut) {
+ activityId = R.drawable.stat_sys_wifi_inout;
+ } else if (activityIn) {
+ activityId = R.drawable.stat_sys_wifi_in;
+ } else if (activityOut) {
+ activityId = R.drawable.stat_sys_wifi_out;
+ }
+ return activityId;
+ }
+
+ private int getNoSimIcon() {
+ int resId = 0;
+ final String[] noSimArray;
+ Resources res = getContext().getResources();
+
+ if (!res.getBoolean(R.bool.config_read_icons_from_xml)) return resId;
+
+ try {
+ noSimArray = res.getStringArray(R.array.multi_no_sim);
+ } catch (android.content.res.Resources.NotFoundException e) {
+ return resId;
+ }
+
+ if (noSimArray == null) return resId;
+
+ String resName = noSimArray[0];
+ resId = res.getIdentifier(resName, null, getContext().getPackageName());
+ if (DEBUG) Log.d(TAG, "getNoSimIcon resId = " + resId + " resName = " + resName);
+ return resId;
+ }
+
private PhoneState inflatePhoneState(int subId) {
PhoneState state = new PhoneState(subId, mContext);
if (mMobileSignalGroup != null) {
@@ -349,6 +397,11 @@ public class SignalClusterView
mLastWifiStrengthId = -1;
}
+ if (mWifiActivity != null) {
+ mWifiActivity.setImageDrawable(null);
+ mLastWifiActivityId = -1;
+ }
+
for (PhoneState state : mPhoneStates) {
if (state.mMobile != null) {
state.mMobile.setImageDrawable(null);
@@ -401,6 +454,10 @@ public class SignalClusterView
mWifiDark.setImageResource(mWifiStrengthId);
mLastWifiStrengthId = mWifiStrengthId;
}
+ if (mWifiActivityId != mLastWifiActivityId) {
+ mWifiActivity.setImageResource(mWifiActivityId);
+ mLastWifiActivityId = mWifiActivityId;
+ }
mWifiGroup.setContentDescription(mWifiDescription);
mWifiGroup.setVisibility(View.VISIBLE);
} else {
@@ -408,9 +465,9 @@ public class SignalClusterView
}
if (DEBUG) Log.d(TAG,
- String.format("wifi: %s sig=%d",
+ String.format("wifi: %s sig=%d act=%d",
(mWifiVisible ? "VISIBLE" : "GONE"),
- mWifiStrengthId));
+ mWifiStrengthId, mWifiActivityId));
boolean anyMobileVisible = false;
int firstMobileTypeId = 0;
@@ -446,6 +503,13 @@ public class SignalClusterView
mWifiSignalSpacer.setVisibility(View.GONE);
}
+ if (mNoSimsVisible && mNoSims != null && mNoSimsDark != null) {
+ if (mNoSimsIcon == 0) mNoSimsIcon = getNoSimIcon();
+ if (mNoSimsIcon != 0) {
+ mNoSims.setImageResource(mNoSimsIcon);
+ mNoSimsDark.setImageResource(mNoSimsIcon);
+ }
+ }
mNoSimsCombo.setVisibility(mNoSimsVisible ? View.VISIBLE : View.GONE);
boolean anythingVisible = mNoSimsVisible || mWifiVisible || mIsAirplaneMode
@@ -492,6 +556,11 @@ public class SignalClusterView
private ViewGroup mMobileGroup;
private ImageView mMobile, mMobileDark, mMobileType;
+ private int mDataActivityId = 0, mMobileActivityId = 0;
+ private int mStackedDataId = 0, mStackedVoiceId = 0;
+ private ImageView mDataActivity, mMobileActivity, mStackedData, mStackedVoice;
+ private ViewGroup mMobileSingleGroup, mMobileStackedGroup;
+
public PhoneState(int subId, Context context) {
ViewGroup root = (ViewGroup) LayoutInflater.from(context)
.inflate(R.layout.mobile_signal_group, null);
@@ -504,6 +573,14 @@ public class SignalClusterView
mMobile = (ImageView) root.findViewById(R.id.mobile_signal);
mMobileDark = (ImageView) root.findViewById(R.id.mobile_signal_dark);
mMobileType = (ImageView) root.findViewById(R.id.mobile_type);
+ mMobileActivity = (ImageView) root.findViewById(R.id.mobile_inout);
+
+ mDataActivity = (ImageView) root.findViewById(R.id.data_inout);
+ mStackedData = (ImageView) root.findViewById(R.id.mobile_signal_data);
+ mStackedVoice = (ImageView) root.findViewById(R.id.mobile_signal_voice);
+
+ mMobileSingleGroup = (ViewGroup) root.findViewById(R.id.mobile_signal_single);
+ mMobileStackedGroup = (ViewGroup) root.findViewById(R.id.mobile_signal_stacked);
}
public boolean apply(boolean isSecondaryIcon) {
@@ -527,6 +604,37 @@ public class SignalClusterView
}
mMobileType.setImageResource(mMobileTypeId);
+
+ mDataActivity.setImageResource(mDataActivityId);
+ Drawable dataActivityDrawable = mDataActivity.getDrawable();
+ if (dataActivityDrawable instanceof Animatable) {
+ Animatable ad = (Animatable) dataActivityDrawable;
+ if (!ad.isRunning()) {
+ ad.start();
+ }
+ }
+
+ mMobileActivity.setImageResource(mMobileActivityId);
+ Drawable mobileActivityDrawable = mMobileActivity.getDrawable();
+ if (mobileActivityDrawable instanceof Animatable) {
+ Animatable ad = (Animatable) mobileActivityDrawable;
+ if (!ad.isRunning()) {
+ ad.start();
+ }
+ }
+
+ if (mStackedDataId != 0 && mStackedVoiceId != 0) {
+ mStackedData.setImageResource(mStackedDataId);
+ mStackedVoice.setImageResource(mStackedVoiceId);
+ mMobileSingleGroup.setVisibility(View.GONE);
+ mMobileStackedGroup.setVisibility(View.VISIBLE);
+ } else {
+ mStackedData.setImageResource(0);
+ mStackedVoice.setImageResource(0);
+ mMobileSingleGroup.setVisibility(View.VISIBLE);
+ mMobileStackedGroup.setVisibility(View.GONE);
+ }
+
mMobileGroup.setContentDescription(mMobileTypeDescription
+ " " + mMobileDescription);
mMobileGroup.setVisibility(View.VISIBLE);
@@ -546,6 +654,8 @@ public class SignalClusterView
(mMobileVisible ? "VISIBLE" : "GONE"), mMobileStrengthId, mMobileTypeId));
mMobileType.setVisibility(mMobileTypeId != 0 ? View.VISIBLE : View.GONE);
+ mDataActivity.setVisibility(mDataActivityId != 0 ? View.VISIBLE : View.GONE);
+ mMobileActivity.setVisibility(mMobileActivityId != 0 ? View.VISIBLE : View.GONE);
return mMobileVisible;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index a661ae6..cd34680 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -82,6 +82,7 @@ import android.view.ThreadedRenderer;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
+import android.view.ViewGroup.MarginLayoutParams;
import android.view.ViewStub;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
@@ -312,6 +313,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
int mKeyguardMaxNotificationCount;
+ // carrier label
+ private TextView mCarrierLabel;
+ private boolean mShowCarrierInPanel = false;
boolean mExpandedVisible;
private int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
@@ -843,6 +847,23 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mNetworkController.addEmergencyListener(mHeader);
}
+ mCarrierLabel = (TextView)mStatusBarWindow.findViewById(R.id.carrier_label);
+ final boolean showCarrierLabel = mContext.getResources().getBoolean(
+ R.bool.config_showCarrierLabel);
+ mShowCarrierInPanel = showCarrierLabel && (mCarrierLabel != null);
+ if (DEBUG) Log.v(TAG, "carrierlabel=" + mCarrierLabel + " show=" + mShowCarrierInPanel);
+ if (mShowCarrierInPanel) {
+ mCarrierLabel.setVisibility(mShowCarrierInPanel ? View.VISIBLE : View.INVISIBLE);
+ }
+
+ // make sure carrier label is not covered by navigation bar
+ if (mCarrierLabel != null && mNavigationBarView != null) {
+ MarginLayoutParams mlp = (MarginLayoutParams) mCarrierLabel.getLayoutParams();
+ if (mlp != null && mlp.bottomMargin < mNavigationBarView.mBarSize) {
+ mlp.bottomMargin = mNavigationBarView.mBarSize;
+ mCarrierLabel.setLayoutParams(mlp);
+ }
+ }
mFlashlightController = new FlashlightController(mContext);
mKeyguardBottomArea.setFlashlightController(mFlashlightController);
mKeyguardBottomArea.setPhoneStatusBar(this);
@@ -1469,6 +1490,21 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mNotificationPanel.notifyVisibleChildrenChanged();
}
+ protected void updateCarrierLabelVisibility() {
+ if (!mShowCarrierInPanel) return;
+
+ final boolean makeVisible = mStackScroller.getVisibility() == View.VISIBLE
+ && mState != StatusBarState.KEYGUARD;
+
+ if ((mCarrierLabel.getVisibility() == View.VISIBLE) != makeVisible) {
+ if (DEBUG) {
+ Log.d(TAG, "making carrier label " + (makeVisible?"visible":"invisible"));
+ }
+
+ mCarrierLabel.setVisibility(makeVisible ? View.VISIBLE : View.INVISIBLE);
+ }
+ }
+
@Override
protected void setAreThereNotifications() {
@@ -3552,6 +3588,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
updateStackScrollerState(goingToFullShade);
updateNotifications();
checkBarModes();
+ updateCarrierLabelVisibility();
updateMediaMetaData(false);
mKeyguardMonitor.notifyKeyguardState(mStatusBarKeyguardViewManager.isShowing(),
mStatusBarKeyguardViewManager.isSecure());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
index e618cb8..69f8846 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -124,16 +124,19 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa
@Override
public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon,
- final int statusType, final int qsType,final boolean activityIn,
- final boolean activityOut, final String typeContentDescription,
- final String description, final boolean isWide, final int subId) {
+ final int statusType, final int qsType, final boolean activityIn,
+ final boolean activityOut, final int dataActivityId, final int mobileActivityId,
+ final int stackedDataIcon, final int stackedVoiceIcon,
+ final String typeContentDescription, final String description, final boolean isWide,
+ final int subId) {
post(new Runnable() {
@Override
public void run() {
for (SignalCallback signalCluster : mSignalCallbacks) {
signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
- activityIn, activityOut, typeContentDescription, description, isWide,
- subId);
+ activityIn, activityOut, dataActivityId, mobileActivityId,
+ stackedDataIcon, stackedVoiceIcon,
+ typeContentDescription, description, isWide, subId);
}
}
});
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 b0eaab0..62f1ec4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -17,6 +17,7 @@ package com.android.systemui.statusbar.policy;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.NetworkCapabilities;
import android.os.Looper;
import android.telephony.PhoneStateListener;
@@ -66,6 +67,12 @@ public class MobileSignalController extends SignalController<
private MobileIconGroup mDefaultIcons;
private Config mConfig;
+ private final int STATUS_BAR_STYLE_ANDROID_DEFAULT = 0;
+ private final int STATUS_BAR_STYLE_CDMA_1X_COMBINED = 1;
+ private final int STATUS_BAR_STYLE_DEFAULT_DATA = 2;
+ private final int STATUS_BAR_STYLE_DATA_VOICE = 3;
+ private int mStyle = STATUS_BAR_STYLE_ANDROID_DEFAULT;
+
// TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
// need listener lists anymore.
public MobileSignalController(Context context, Config config, boolean hasMobileData,
@@ -86,7 +93,14 @@ public class MobileSignalController extends SignalController<
mNetworkNameDefault = getStringIfExists(
com.android.internal.R.string.lockscreen_carrier_default);
- mapIconSets();
+ if (config.readIconsFromXml) {
+ TelephonyIcons.readIconsFromXml(context);
+ mDefaultIcons = !mConfig.showAtLeast3G ? TelephonyIcons.G : TelephonyIcons.THREE_G;
+ } else {
+ mapIconSets();
+ }
+
+ mStyle = context.getResources().getInteger(R.integer.status_bar_style);
String networkName = info.getCarrierName() != null ? info.getCarrierName().toString()
: mNetworkNameDefault;
@@ -100,7 +114,9 @@ public class MobileSignalController extends SignalController<
public void setConfiguration(Config config) {
mConfig = config;
- mapIconSets();
+ if (!config.readIconsFromXml) {
+ mapIconSets();
+ }
updateTelephony();
}
@@ -203,6 +219,9 @@ public class MobileSignalController extends SignalController<
@Override
public void notifyListeners() {
+ if (mConfig.readIconsFromXml) {
+ generateIconGroup();
+ }
MobileIconGroup icons = getIcons();
String contentDescription = getStringIfExists(getContentDescription());
@@ -232,9 +251,14 @@ public class MobileSignalController extends SignalController<
&& mCurrentState.activityOut;
showDataIcon &= mCurrentState.isDefault
|| mCurrentState.iconGroup == TelephonyIcons.ROAMING;
+ showDataIcon &= mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT;
int typeIcon = showDataIcon ? icons.mDataType : 0;
+ int dataActivityId = showMobileActivity() ? 0 : icons.mActivityId;
+ int mobileActivityId = showMobileActivity() ? icons.mActivityId : 0;
mCallbackHandler.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
- activityIn, activityOut, dataContentDescription, description, icons.mIsWide,
+ activityIn, activityOut, dataActivityId, mobileActivityId,
+ icons.mStackedDataIcon, icons.mStackedVoiceIcon,
+ dataContentDescription, description, icons.mIsWide,
mSubscriptionInfo.getSubscriptionId());
}
@@ -243,6 +267,15 @@ public class MobileSignalController extends SignalController<
return new MobileState();
}
+ @Override
+ public int getCurrentIconId() {
+ if (mConfig.readIconsFromXml && mCurrentState.connected) {
+ return getIcons().mSingleSignalIcon;
+ } else {
+ return super.getCurrentIconId();
+ }
+ }
+
private boolean hasService() {
if (mServiceState != null) {
// Consider the device to be in service if either voice or data
@@ -366,7 +399,7 @@ public class MobileSignalController extends SignalController<
*/
private final void updateTelephony() {
if (DEBUG) {
- Log.d(mTag, "updateTelephonySignalStrength: hasService=" + hasService()
+ Log.d(mTag, "updateTelephony: hasService=" + hasService()
+ " ss=" + mSignalStrength);
}
mCurrentState.connected = hasService() && mSignalStrength != null;
@@ -375,6 +408,13 @@ public class MobileSignalController extends SignalController<
mCurrentState.level = mSignalStrength.getCdmaLevel();
} else {
mCurrentState.level = mSignalStrength.getLevel();
+ if (mConfig.showRsrpSignalLevelforLTE) {
+ int dataType = mServiceState.getDataNetworkType();
+ if (dataType == TelephonyManager.NETWORK_TYPE_LTE ||
+ dataType == TelephonyManager.NETWORK_TYPE_LTE_CA) {
+ mCurrentState.level = getAlternateLteLevel(mSignalStrength);
+ }
+ }
}
}
if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) {
@@ -400,15 +440,225 @@ public class MobileSignalController extends SignalController<
mCurrentState.networkName = mServiceState.getOperatorAlphaShort();
}
+ if (mConfig.readIconsFromXml) {
+ mCurrentState.voiceLevel = getVoiceSignalLevel();
+ }
+
notifyListenersIfNecessary();
}
+ private void generateIconGroup() {
+ final int level = mCurrentState.level;
+ final int voiceLevel = mCurrentState.voiceLevel;
+ final int inet = mCurrentState.inetCondition;
+ final boolean dataConnected = mCurrentState.dataConnected;
+ final boolean roaming = isRoaming();
+ final int voiceType = getVoiceNetworkType();
+ final int dataType = getDataNetworkType();
+
+ int[][] sbIcons = TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH;
+ int[][] qsIcons = TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH;
+ int[] contentDesc = AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH;
+ int sbDiscState = TelephonyIcons.TELEPHONY_NO_NETWORK;
+ int qsDiscState = TelephonyIcons.QS_TELEPHONY_NO_NETWORK;
+ int discContentDesc = AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0];
+ int dataContentDesc, dataTypeIcon, qsDataTypeIcon, dataActivityId;
+ int singleSignalIcon, stackedDataIcon = 0, stackedVoiceIcon = 0;
+
+ final int slotId = getSimSlotIndex();
+ if (slotId < 0 || slotId > mPhone.getPhoneCount()) {
+ Log.e(mTag, "generateIconGroup invalid slotId:" + slotId);
+ return;
+ }
+
+ if (DEBUG) Log.d(mTag, "generateIconGroup slot:" + slotId + " style:" + mStyle
+ + " connected:" + mCurrentState.connected + " inetCondition:" + inet
+ + " roaming:" + roaming + " level:" + level + " voiceLevel:" + voiceLevel
+ + " dataConnected:" + dataConnected
+ + " dataActivity:" + mCurrentState.dataActivity
+ + " CS:" + voiceType
+ + "/" + TelephonyManager.getNetworkTypeName(voiceType)
+ + ", PS:" + dataType
+ + "/" + TelephonyManager.getNetworkTypeName(dataType));
+
+ // Update data icon set
+ int chosenNetworkType = ((dataType == TelephonyManager.NETWORK_TYPE_UNKNOWN)
+ ? voiceType : dataType);
+ TelephonyIcons.updateDataType(slotId, chosenNetworkType, mConfig.showAtLeast3G,
+ mConfig.show4gForLte, mConfig.hspaDataDistinguishable, inet);
+
+ // Update signal strength icons
+ singleSignalIcon = TelephonyIcons.getSignalStrengthIcon(slotId, inet, level, roaming);
+ if (DEBUG) {
+ Log.d(mTag, "singleSignalIcon:" + getResourceName(singleSignalIcon));
+ }
+
+ dataActivityId = (mCurrentState.dataConnected && slotId >= 0) ?
+ TelephonyIcons.getDataActivity(slotId, mCurrentState.dataActivity) : 0;
+
+ // Convert the icon to unstacked if necessary.
+ int unstackedSignalIcon = TelephonyIcons.convertMobileStrengthIcon(singleSignalIcon);
+ if (DEBUG) {
+ Log.d(mTag, "unstackedSignalIcon:" + getResourceName(unstackedSignalIcon));
+ }
+ if (singleSignalIcon != unstackedSignalIcon) {
+ stackedDataIcon = singleSignalIcon;
+ singleSignalIcon = unstackedSignalIcon;
+ }
+
+ if (mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED) {
+ if (!roaming && showDataAndVoice()) {
+ stackedVoiceIcon = TelephonyIcons.getStackedVoiceIcon(voiceLevel);
+ } else if (roaming && dataActivityId != 0) {
+ // Remove data type indicator if already shown in data activity icon.
+ singleSignalIcon = TelephonyIcons.getRoamingSignalIconId(level, inet);
+ }
+ }
+
+ // Clear satcked data icon if no satcked voice icon.
+ if (stackedVoiceIcon == 0) stackedDataIcon = 0;
+
+ contentDesc = TelephonyIcons.getSignalStrengthDes(slotId);
+ sbDiscState = TelephonyIcons.getSignalNullIcon(slotId);
+ if (DEBUG) {
+ Log.d(mTag, "singleSignalIcon=" + getResourceName(singleSignalIcon)
+ + " dataActivityId=" + getResourceName(dataActivityId)
+ + " stackedDataIcon=" + getResourceName(stackedDataIcon)
+ + " stackedVoiceIcon=" + getResourceName(stackedVoiceIcon));
+ }
+
+ // Update data net type icons
+ if (dataType == TelephonyManager.NETWORK_TYPE_IWLAN) {
+ // wimax is a special 4g network not handled by telephony
+ dataTypeIcon = TelephonyIcons.ICON_4G;
+ qsDataTypeIcon = TelephonyIcons.QS_DATA_4G;
+ dataContentDesc = R.string.accessibility_data_connection_4g;
+ } else {
+ dataTypeIcon = TelephonyIcons.getDataTypeIcon(slotId);
+ dataContentDesc = TelephonyIcons.getDataTypeDesc(slotId);
+ qsDataTypeIcon = TelephonyIcons.getQSDataTypeIcon(slotId);
+ }
+ if (roaming) {
+ dataTypeIcon = TelephonyIcons.ROAMING_ICON;
+ qsDataTypeIcon = TelephonyIcons.QS_DATA_R;
+ }
+ if (DEBUG) {
+ Log.d(mTag, "updateDataNetType, dataTypeIcon=" + getResourceName(dataTypeIcon)
+ + " qsDataTypeIcon=" + getResourceName(qsDataTypeIcon)
+ + " dataContentDesc=" + dataContentDesc);
+ }
+ mCurrentState.iconGroup = new MobileIconGroup(
+ TelephonyManager.getNetworkTypeName(dataType),
+ sbIcons, qsIcons, contentDesc, 0, 0, sbDiscState, qsDiscState, discContentDesc,
+ dataContentDesc, dataTypeIcon, false, qsDataTypeIcon,
+ singleSignalIcon, stackedDataIcon, stackedVoiceIcon, dataActivityId);
+ }
+
+ private int getSimSlotIndex() {
+ int slotId = -1;
+ if (mSubscriptionInfo != null) {
+ slotId = mSubscriptionInfo.getSimSlotIndex();
+ }
+ if (DEBUG) Log.d(mTag, "getSimSlotIndex, slotId: " + slotId);
+ return slotId;
+ }
+
+ private boolean showMobileActivity() {
+ return (mStyle == STATUS_BAR_STYLE_DEFAULT_DATA)
+ || (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT);
+ }
+
+ private int getVoiceNetworkType() {
+ if (mServiceState == null) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
+ return mServiceState.getVoiceNetworkType();
+ }
+
+ private int getDataNetworkType() {
+ if (mServiceState == null) {
+ return TelephonyManager.NETWORK_TYPE_UNKNOWN;
+ }
+ return mServiceState.getDataNetworkType();
+ }
+
+ private int getVoiceSignalLevel() {
+ if (mSignalStrength == null) {
+ return SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+ }
+ boolean isCdma = TelephonyManager.PHONE_TYPE_CDMA == TelephonyManager.getDefault()
+ .getCurrentPhoneType(mSubscriptionInfo.getSubscriptionId());
+ return isCdma ? mSignalStrength.getCdmaLevel() : mSignalStrength.getGsmLevel();
+ }
+
+ private boolean showDataAndVoice() {
+ if (mStyle != STATUS_BAR_STYLE_CDMA_1X_COMBINED) {
+ return false;
+ }
+ int dataType = getDataNetworkType();
+ int voiceType = getVoiceNetworkType();
+ if ((dataType == TelephonyManager.NETWORK_TYPE_EVDO_0
+ || dataType == TelephonyManager.NETWORK_TYPE_EVDO_0
+ || dataType == TelephonyManager.NETWORK_TYPE_EVDO_A
+ || dataType == TelephonyManager.NETWORK_TYPE_EVDO_B
+ || dataType == TelephonyManager.NETWORK_TYPE_EHRPD
+ || dataType == TelephonyManager.NETWORK_TYPE_LTE
+ || dataType == TelephonyManager.NETWORK_TYPE_LTE_CA)
+ && (voiceType == TelephonyManager.NETWORK_TYPE_GSM
+ || voiceType == TelephonyManager.NETWORK_TYPE_1xRTT
+ || voiceType == TelephonyManager.NETWORK_TYPE_CDMA)) {
+ return true;
+ }
+ return false;
+ }
+
+ private boolean show1xOnly() {
+ int dataType = getDataNetworkType();
+ int voiceType = getVoiceNetworkType();
+ if (dataType == TelephonyManager.NETWORK_TYPE_1xRTT
+ || dataType == TelephonyManager.NETWORK_TYPE_CDMA) {
+ return true;
+ }
+ return false;
+ }
+
+ private int getAlternateLteLevel(SignalStrength signalStrength) {
+ int lteRsrp = signalStrength.getLteDbm();
+ int rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+ if (lteRsrp > -44) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+ else if (lteRsrp >= -97) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_GREAT;
+ else if (lteRsrp >= -105) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_GOOD;
+ else if (lteRsrp >= -113) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_MODERATE;
+ else if (lteRsrp >= -120) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_POOR;
+ else if (lteRsrp >= -140) rsrpLevel = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+ if (DEBUG) {
+ Log.d(mTag, "getAlternateLteLevel lteRsrp:" + lteRsrp + " rsrpLevel = " + rsrpLevel);
+ }
+ return rsrpLevel;
+ }
+
+ protected String getResourceName(int resId) {
+ if (resId != 0) {
+ final Resources res = mContext.getResources();
+ try {
+ return res.getResourceName(resId);
+ } catch (android.content.res.Resources.NotFoundException ex) {
+ return "(unknown)";
+ }
+ } else {
+ return "(null)";
+ }
+ }
+
@VisibleForTesting
void setActivity(int activity) {
mCurrentState.activityIn = activity == TelephonyManager.DATA_ACTIVITY_INOUT
|| activity == TelephonyManager.DATA_ACTIVITY_IN;
mCurrentState.activityOut = activity == TelephonyManager.DATA_ACTIVITY_INOUT
|| activity == TelephonyManager.DATA_ACTIVITY_OUT;
+ if (mConfig.readIconsFromXml) {
+ mCurrentState.dataActivity = activity;
+ }
notifyListenersIfNecessary();
}
@@ -482,17 +732,35 @@ public class MobileSignalController extends SignalController<
final int mDataType;
final boolean mIsWide;
final int mQsDataType;
+ final int mSingleSignalIcon;
+ final int mStackedDataIcon;
+ final int mStackedVoiceIcon;
+ final int mActivityId;
public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
int discContentDesc, int dataContentDesc, int dataType, boolean isWide,
int qsDataType) {
+ this(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState,
+ qsDiscState, discContentDesc, dataContentDesc, dataType, isWide,
+ qsDataType, 0, 0, 0, 0);
+ }
+
+ public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
+ int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
+ int discContentDesc, int dataContentDesc, int dataType, boolean isWide,
+ int qsDataType, int singleSignalIcon, int stackedDataIcon,
+ int stackedVoicelIcon, int activityId) {
super(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState,
qsDiscState, discContentDesc);
mDataContentDescription = dataContentDesc;
mDataType = dataType;
mIsWide = isWide;
mQsDataType = qsDataType;
+ mSingleSignalIcon = singleSignalIcon;
+ mStackedDataIcon = stackedDataIcon;
+ mStackedVoiceIcon = stackedVoicelIcon;
+ mActivityId = activityId;
}
}
@@ -505,6 +773,8 @@ public class MobileSignalController extends SignalController<
boolean airplaneMode;
boolean carrierNetworkChangeMode;
boolean isDefault;
+ int dataActivity;
+ int voiceLevel;
@Override
public void copyFrom(State s) {
@@ -518,6 +788,8 @@ public class MobileSignalController extends SignalController<
isEmergency = state.isEmergency;
airplaneMode = state.airplaneMode;
carrierNetworkChangeMode = state.carrierNetworkChangeMode;
+ dataActivity = state.dataActivity;
+ voiceLevel = state.voiceLevel;
}
@Override
@@ -531,6 +803,7 @@ public class MobileSignalController extends SignalController<
builder.append("isDefault=").append(isDefault).append(',');
builder.append("isEmergency=").append(isEmergency).append(',');
builder.append("airplaneMode=").append(airplaneMode).append(',');
+ builder.append("voiceLevel=").append(voiceLevel).append(',');
builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode);
}
@@ -544,6 +817,7 @@ public class MobileSignalController extends SignalController<
&& ((MobileState) o).isEmergency == isEmergency
&& ((MobileState) o).airplaneMode == airplaneMode
&& ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode
+ && ((MobileState) o).voiceLevel == voiceLevel
&& ((MobileState) o).isDefault == isDefault;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 38656ee..4b30eb1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -39,8 +39,10 @@ public interface NetworkController {
boolean activityIn, boolean activityOut, String description);
void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
- int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
- String description, boolean isWide, int subId);
+ int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
+ int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon,
+ String typeContentDescription, String description,
+ boolean isWide, int subId);
void setSubs(List<SubscriptionInfo> subs);
void setNoSims(boolean show);
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 37c570e..9008e51 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -826,6 +826,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
boolean alwaysShowCdmaRssi = false;
boolean show4gForLte = false;
boolean hspaDataDistinguishable;
+ boolean readIconsFromXml;
+ boolean showRsrpSignalLevelforLTE;
static Config readConfig(Context context) {
Config config = new Config();
@@ -837,6 +839,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
config.show4gForLte = res.getBoolean(R.bool.config_show4GForLTE);
config.hspaDataDistinguishable =
res.getBoolean(R.bool.config_hspa_data_distinguishable);
+ config.readIconsFromXml = res.getBoolean(R.bool.config_read_icons_from_xml);
+ config.showRsrpSignalLevelforLTE =
+ res.getBoolean(R.bool.config_showRsrpSignalLevelforLTE);
return config;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
index dce889f..511ad2b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
@@ -36,8 +36,9 @@ public class SignalCallbackAdapter implements SignalCallback {
@Override
public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
- int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
- String description, boolean isWide, int subId) {
+ int qsType, boolean activityIn, boolean activityOut, int dataActivity,
+ int mobileActivity, int stackedDataIcon, int stackedVoiceIcon,
+ String typeContentDescription, String description, boolean isWide, int subId) {
}
@Override
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 68f8191..2c9f2b9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,6 +18,14 @@
package com.android.systemui.statusbar.policy;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.telephony.SignalStrength;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.util.SparseArray;
+
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.MobileSignalController.MobileIconGroup;
@@ -68,6 +78,20 @@ class TelephonyIcons {
R.drawable.stat_sys_signal_4_fully }
};
+ //Default roaming icons with R indicator
+ static final int[][] TELEPHONY_SIGNAL_STRENGTH_ROAMING_R = {
+ { R.drawable.stat_sys_signal_0_default_roam,
+ R.drawable.stat_sys_signal_1_default_roam,
+ R.drawable.stat_sys_signal_2_default_roam,
+ R.drawable.stat_sys_signal_3_default_roam,
+ R.drawable.stat_sys_signal_4_default_roam },
+ { R.drawable.stat_sys_signal_0_default_fully_roam,
+ R.drawable.stat_sys_signal_1_default_fully_roam,
+ R.drawable.stat_sys_signal_2_default_fully_roam,
+ R.drawable.stat_sys_signal_3_default_fully_roam,
+ R.drawable.stat_sys_signal_4_default_fully_roam }
+ };
+
//CarrierNetworkChange
static final int[][] TELEPHONY_CARRIER_NETWORK_CHANGE = {
{ R.drawable.stat_sys_signal_carrier_network_change_animation,
@@ -229,6 +253,403 @@ class TelephonyIcons {
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;
+ static final int DATA_TYPE_UNKNOWN = 0;
+ static final int DATA_TYPE_G = 1;
+ static final int DATA_TYPE_E = 2;
+ static final int DATA_TYPE_2G = 3;
+ static final int DATA_TYPE_3G = 4;
+ static final int DATA_TYPE_4G = 5;
+ static final int DATA_TYPE_H = 6;
+ static final int DATA_TYPE_HP = 7;
+ static final int DATA_TYPE_1X = 8;
+ static final int DATA_TYPE_LTE = 9;
+
+ static final int SIGNAL_STRENGTH_TYPE_G = 0;
+ static final int SIGNAL_STRENGTH_TYPE_E = 1;
+ static final int SIGNAL_STRENGTH_TYPE_3G = 2;
+ static final int SIGNAL_STRENGTH_TYPE_4G = 3;
+ static final int SIGNAL_STRENGTH_TYPE_H = 4;
+ static final int SIGNAL_STRENGTH_TYPE_HP = 5;
+ static final int SIGNAL_STRENGTH_TYPE_1X = 6;
+ static final int SIGNAL_STRENGTH_TYPE_CDMA = 7;
+ static final int SIGNAL_STRENGTH_TYPE_UMTS = 8;
+
+ static final boolean DEBUG = true;
+ static final int DEFAULT_SUB = 0;
+ static final int INET_TYPE_NUM = 2;
+ static final int SIGNAL_LEVEL_NUM = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
+ static final String TAG = "TelephonyIcons";
+ static final String NS = "com.android.systemui";
+
+ static String[] mDataTypeArray, mDataTypeGenerationArray;
+ static String[] mDataTypeDescriptionArray, mDataTypeGenerationDescArray;
+ static String[] mDataActivityArray;
+ static String[] mSignalStrengthArray, mSignalStrengthRoamingArray;
+ static String[] mSignalNullArray;
+ static String[] mSignalStrengthDesc;
+
+ static int[] mSelectedDataTypeIcon;
+ static int[] mSelectedQSDataTypeIcon;
+ static String[] mSelectedDataTypeDesc;
+ static int[] mSelectedDataActivityIndex;
+ static int[] mSelectedSignalStreagthIndex;
+ static SparseArray<Integer> mStacked2SingleIconLookup;
+
+ private static Resources mRes;
+ private static boolean isInitiated = false;
+
+ static void readIconsFromXml(Context context) {
+ if (isInitiated) {
+ log(TAG, "readIconsFromXml, already read!");
+ return;
+ }
+
+ mRes = context.getResources();
+ try {
+ mDataTypeArray = mRes.getStringArray(R.array.multi_data_type);
+ mDataTypeDescriptionArray = mRes.getStringArray(
+ R.array.telephony_data_type_description);
+ mDataTypeGenerationArray = mRes.getStringArray(
+ R.array.telephony_data_type_generation);
+ mDataTypeGenerationDescArray = mRes.getStringArray(
+ R.array.telephony_data_type_generation_description);
+ mDataActivityArray = mRes.getStringArray(R.array.multi_data_activity);
+ mSignalStrengthArray = mRes.getStringArray(R.array.multi_signal_strength);
+ mSignalStrengthRoamingArray = mRes.getStringArray(
+ R.array.multi_signal_strength_roaming);
+ mSignalNullArray = mRes.getStringArray(R.array.multi_signal_null);
+ mSignalStrengthDesc = mRes.getStringArray(R.array.signal_strength_description);
+ initStacked2SingleIconLookup();
+ } catch (android.content.res.Resources.NotFoundException e) {
+ isInitiated = false;
+ log(TAG, "readIconsFromXml, exception happened: " + e);
+ return;
+ }
+
+ if (mSelectedDataTypeIcon == null
+ && mDataTypeArray.length != 0) {
+ mSelectedDataTypeIcon = new int[mDataTypeArray.length];
+ }
+ if (mSelectedQSDataTypeIcon == null
+ && mDataTypeArray.length != 0) {
+ mSelectedQSDataTypeIcon = new int[mDataTypeArray.length];
+ }
+ if (mSelectedDataTypeDesc == null
+ && mDataTypeArray.length != 0) {
+ mSelectedDataTypeDesc = new String[mDataTypeArray.length];
+ }
+ if (mSelectedDataActivityIndex == null
+ && mDataActivityArray.length != 0) {
+ mSelectedDataActivityIndex = new int[mDataActivityArray.length];
+ }
+ if (mSelectedSignalStreagthIndex == null
+ && mSignalStrengthArray.length != 0) {
+ mSelectedSignalStreagthIndex = new int[mSignalStrengthArray.length];
+ }
+ isInitiated = true;
+ }
+
+ static void initStacked2SingleIconLookup() {
+ mStacked2SingleIconLookup = new SparseArray<>();
+ TypedArray stackedIcons = mRes.obtainTypedArray(R.array.stacked_signal_icons);
+ TypedArray singleIcons = mRes.obtainTypedArray(R.array.single_signal_icons);
+
+ mStacked2SingleIconLookup.clear();
+ for (int i = 0; i < stackedIcons.length() && i < singleIcons.length(); i++) {
+ mStacked2SingleIconLookup.put(stackedIcons.getResourceId(i,0),
+ singleIcons.getResourceId(i,0));
+ }
+ stackedIcons.recycle();
+ singleIcons.recycle();
+ log(TAG, "initStacked2SingleIconLookup: size=" + mStacked2SingleIconLookup.size());
+ }
+
+ static int getSignalNullIcon(int slot) {
+ if (mSignalNullArray == null) {
+ return 0;
+ }
+ String resName = mSignalNullArray[slot];
+ log(TAG, "null signal icon name: " + resName);
+ int resId = mRes.getIdentifier(resName, null, NS);
+ return resId;
+ }
+
+ static void updateDataType(int slot, int type, boolean showAtLeast3G,
+ boolean show4GforLte, boolean hspaDistinguishable, int inet) {
+ log(TAG, "updateDataType "
+ + String.format("slot=%d, type=%d, inetCondition=%d",
+ slot, type, inet)
+ + " showAtLeast3G=" + String.valueOf(showAtLeast3G)
+ + " show4GforLte=" + String.valueOf(show4GforLte)
+ + " hspaDistinguishable=" + String.valueOf(hspaDistinguishable));
+
+ String resName = mDataTypeArray[slot];
+ int resId = mRes.getIdentifier(resName, null, NS);
+ String[] dataTypeArray = mRes.getStringArray(resId);
+
+ log(TAG, "data type item name: " + resName + " id:" + resId);
+
+ switch (type) {
+ case TelephonyManager.NETWORK_TYPE_UNKNOWN:
+ if (!showAtLeast3G) {
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = 0;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedDataActivityIndex[slot] = 0;
+ mSelectedSignalStreagthIndex[slot] = 0;
+ break;
+ } else {
+ // fall through
+ }
+ case TelephonyManager.NETWORK_TYPE_EDGE:
+ if (!showAtLeast3G) {
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_E;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_E;
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_E;
+ break;
+ } else {
+ // fall through
+ }
+ case TelephonyManager.NETWORK_TYPE_UMTS:
+ case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_3G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_3G;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_UMTS;
+ break;
+ case TelephonyManager.NETWORK_TYPE_HSDPA:
+ case TelephonyManager.NETWORK_TYPE_HSUPA:
+ case TelephonyManager.NETWORK_TYPE_HSPA:
+ if (hspaDistinguishable) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_H;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_H;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_H;
+ } else {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_3G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ mDataTypeGenerationArray[0], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_3G;
+ mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G;
+
+ }
+ break;
+ case TelephonyManager.NETWORK_TYPE_HSPAP:
+ if (hspaDistinguishable) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_HP;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_H;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_HP;
+ } else {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_3G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ mDataTypeGenerationArray[0], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_3G;
+ mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G;
+ }
+ break;
+ case TelephonyManager.NETWORK_TYPE_CDMA:
+ if (!showAtLeast3G) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_1X;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_1X;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_CDMA;
+ break;
+ } else {
+ // fall through
+ }
+ case TelephonyManager.NETWORK_TYPE_1xRTT:
+ if (!showAtLeast3G) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_1X;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_1X;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_1X;
+ break;
+ } else {
+ // fall through
+ }
+ case TelephonyManager.NETWORK_TYPE_EVDO_0: //fall through
+ case TelephonyManager.NETWORK_TYPE_EVDO_A:
+ case TelephonyManager.NETWORK_TYPE_EVDO_B:
+ case TelephonyManager.NETWORK_TYPE_EHRPD:
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_3G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_3G;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G;
+ break;
+ case TelephonyManager.NETWORK_TYPE_LTE:
+ case TelephonyManager.NETWORK_TYPE_LTE_CA:
+ if (show4GforLte) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_4G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ mDataTypeGenerationArray[1], null, NS);
+ if ( type == TelephonyManager.NETWORK_TYPE_LTE_CA) {
+ //Select 4G+ icon.
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ mDataTypeGenerationArray[2], null, NS);
+ }
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_4G;
+ mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[1];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_4G;
+ } else {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_LTE;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_LTE;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_4G;
+ }
+ break;
+ case TelephonyManager.NETWORK_TYPE_GPRS:
+ case TelephonyManager.NETWORK_TYPE_GSM:
+ if (!showAtLeast3G) {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ dataTypeArray[type], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_G;
+ mSelectedDataTypeDesc[slot] = mDataTypeDescriptionArray[type];
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_G;
+ } else {
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_3G;
+ mSelectedDataTypeIcon[slot] = mRes.getIdentifier(
+ mDataTypeGenerationArray[0], null, NS);
+ mSelectedQSDataTypeIcon[slot] = QS_DATA_3G;
+ mSelectedDataTypeDesc[slot] = mDataTypeGenerationDescArray[0];;
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_3G;
+ }
+ break;
+ default:
+ mSelectedDataActivityIndex[slot] = DATA_TYPE_UNKNOWN;
+ mSelectedDataTypeIcon[slot] = 0;
+ mSelectedQSDataTypeIcon[slot] = 0;
+ mSelectedDataTypeDesc[slot] = "";
+ mSelectedSignalStreagthIndex[slot] = SIGNAL_STRENGTH_TYPE_G;
+ break;
+ }
+ log(TAG, "updateDataType " + String.format(
+ "mSelectedDataTypeIcon[%d]=%d, mSelectedDataActivityIndex=%d",
+ slot, mSelectedDataTypeIcon[slot], mSelectedDataActivityIndex[slot]));
+ }
+
+
+ static int getQSDataTypeIcon(int slot) {
+ return mSelectedQSDataTypeIcon[slot];
+ }
+
+ static int getDataTypeIcon(int slot) {
+ log(TAG, "getDataTypeIcon " + String.format("sub=%d", slot));
+ return mSelectedDataTypeIcon[slot];
+ }
+
+ static int getDataTypeDesc(int slot) {
+ return mRes.getIdentifier(mSelectedDataTypeDesc[slot], null, NS);
+ }
+
+ static int getDataActivity(int slot, int activity) {
+ log(TAG, String.format("getDataActivity, slot=%d, activity=%d",
+ slot, activity));
+
+ String[] dataActivityArray = mRes.getStringArray(
+ mRes.getIdentifier(mDataActivityArray[slot], null, NS));
+ String[] selectedTypeArray = mRes.getStringArray(mRes.getIdentifier(
+ dataActivityArray[mSelectedDataActivityIndex[slot]], null, NS));
+
+ return mRes.getIdentifier(selectedTypeArray[activity], null, NS);
+ }
+
+ static int getSignalStrengthIcon(int slot, int inet, int level, boolean roaming) {
+ log(TAG, "getSignalStrengthIcon: " + String.format(
+ "slot=%d, inetCondition=%d, level=%d, roaming=%b", slot, inet, level, roaming));
+
+ String[] signalStrengthArray, selectedTypeArray;
+
+ signalStrengthArray = mRes.getStringArray(mRes.getIdentifier(!roaming ?
+ mSignalStrengthArray[slot] : mSignalStrengthRoamingArray[slot], null, NS));
+ log(TAG, String.format("signalStrengthArray.length=%d", signalStrengthArray.length));
+
+ selectedTypeArray = mRes.getStringArray(mRes.getIdentifier(
+ signalStrengthArray[mSelectedSignalStreagthIndex[slot]], null, NS));
+ log(TAG, String.format("selectedTypeArray.length=%d", selectedTypeArray.length));
+
+ String[] inetArray = mRes.getStringArray(
+ mRes.getIdentifier(selectedTypeArray[inet], null, NS));
+ log(TAG, String.format("inetArray.length=%d", inetArray.length));
+
+ return mRes.getIdentifier(inetArray[level], null, NS);
+ }
+
+
+ static int convertMobileStrengthIcon(int stackedIcon) {
+ if (mStacked2SingleIconLookup == null) {
+ return stackedIcon;
+ }
+ int index = mStacked2SingleIconLookup.indexOfKey(stackedIcon);
+ if (index >= 0) {
+ return mStacked2SingleIconLookup.get(stackedIcon);
+ }
+ return stackedIcon;
+ }
+
+ static int getStackedVoiceIcon(int level) {
+ int retValue = 0;
+ switch(level){
+ case SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN:
+ retValue = R.drawable.stat_sys_signal_0_2g;
+ break;
+ case SignalStrength.SIGNAL_STRENGTH_POOR:
+ retValue = R.drawable.stat_sys_signal_1_2g;
+ break;
+ case SignalStrength.SIGNAL_STRENGTH_MODERATE:
+ retValue = R.drawable.stat_sys_signal_2_2g;
+ break;
+ case SignalStrength.SIGNAL_STRENGTH_GOOD:
+ retValue = R.drawable.stat_sys_signal_3_2g;
+ break;
+ case SignalStrength.SIGNAL_STRENGTH_GREAT:
+ retValue = R.drawable.stat_sys_signal_4_2g;
+ break;
+ default:
+ break;
+ }
+ return retValue;
+ }
+
+ static int getRoamingSignalIconId(int level, int inet){
+ return TELEPHONY_SIGNAL_STRENGTH_ROAMING_R[inet][level];
+ }
+
+ static int[] getSignalStrengthDes(int slot) {
+ int[] resId = new int[SIGNAL_LEVEL_NUM];
+ for (int i = 0; i < SIGNAL_LEVEL_NUM; i++) {
+ resId[i] = mRes.getIdentifier(mSignalStrengthDesc[i], null, NS);
+ }
+ return resId;
+ }
+
+ private static void log(String tag, String str){
+ if (DEBUG) {
+ Log.d(tag, str);
+ }
+ }
+
static final MobileIconGroup CARRIER_NETWORK_CHANGE = new MobileIconGroup(
"CARRIER_NETWORK_CHANGE",
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
index 9b1e72a..29be2c9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java
@@ -29,6 +29,7 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.AsyncChannel;
+import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import java.util.List;
@@ -75,8 +76,10 @@ public class WifiSignalController extends
@Override
public void notifyListeners() {
// only show wifi in the cluster if connected or if wifi-only
+ boolean visibleWhenEnabled = mContext.getResources().getBoolean(
+ R.bool.config_showWifiIndicatorWhenEnabled);
boolean wifiVisible = mCurrentState.enabled
- && (mCurrentState.connected || !mHasMobileData);
+ && (mCurrentState.connected || !mHasMobileData || visibleWhenEnabled);
String wifiDesc = wifiVisible ? mCurrentState.ssid : null;
boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
String contentDescription = getStringIfExists(getContentDescription());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
index 00b8de2..5e840f5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java
@@ -104,8 +104,8 @@ public class CallbackHandlerTest extends AndroidTestCase {
int qsType = R.drawable.ic_qs_signal_1x;
boolean wide = true;
int subId = 5;
- mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription,
- description, wide, subId);
+ mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, 0, 0, 0, 0,
+ typeDescription, description, wide, subId);
waitForCallbacks();
ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
@@ -120,7 +120,11 @@ public class CallbackHandlerTest extends AndroidTestCase {
ArgumentCaptor<Integer> subIdArg = ArgumentCaptor.forClass(Integer.class);
Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(),
qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(),
- outArg.capture(), typeContentArg.capture(), descArg.capture(), wideArg.capture(),
+ outArg.capture(), ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ typeContentArg.capture(), descArg.capture(), wideArg.capture(),
subIdArg.capture());
assertEquals(status, statusArg.getValue());
assertEquals(qs, qsArg.getValue());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 30c08cd..58cb6ff 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -276,6 +276,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
iconArg.capture(),
ArgumentCaptor.forClass(Integer.class).capture(),
typeIconArg.capture(), dataInArg.capture(), dataOutArg.capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
ArgumentCaptor.forClass(String.class).capture(),
ArgumentCaptor.forClass(String.class).capture(),
ArgumentCaptor.forClass(Boolean.class).capture(),
@@ -302,6 +306,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
ArgumentCaptor.forClass(Integer.class).capture(),
ArgumentCaptor.forClass(Boolean.class).capture(),
ArgumentCaptor.forClass(Boolean.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
+ ArgumentCaptor.forClass(Integer.class).capture(),
ArgumentCaptor.forClass(String.class).capture(),
ArgumentCaptor.forClass(String.class).capture(),
ArgumentCaptor.forClass(Boolean.class).capture(),