diff options
43 files changed, 418 insertions, 53 deletions
diff --git a/packages/SystemUI/res/drawable-hdpi/notification_dragger.png b/packages/SystemUI/res/drawable-hdpi/notification_dragger.png Binary files differdeleted file mode 100644 index 71b5507..0000000 --- a/packages/SystemUI/res/drawable-hdpi/notification_dragger.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/battery_0.png b/packages/SystemUI/res/drawable-mdpi/battery_0.png Binary files differindex 77162c8..e81638d 100644 --- a/packages/SystemUI/res/drawable-mdpi/battery_0.png +++ b/packages/SystemUI/res/drawable-mdpi/battery_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_10.png b/packages/SystemUI/res/drawable-mdpi/battery_10.png Binary files differnew file mode 100644 index 0000000..a739f50 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/battery_10.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_100.png b/packages/SystemUI/res/drawable-mdpi/battery_100.png Binary files differindex 588a74b..9a66db3 100644 --- a/packages/SystemUI/res/drawable-mdpi/battery_100.png +++ b/packages/SystemUI/res/drawable-mdpi/battery_100.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_25.png b/packages/SystemUI/res/drawable-mdpi/battery_25.png Binary files differindex b11570b..7ae7ebb 100644 --- a/packages/SystemUI/res/drawable-mdpi/battery_25.png +++ b/packages/SystemUI/res/drawable-mdpi/battery_25.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_5.png b/packages/SystemUI/res/drawable-mdpi/battery_5.png Binary files differnew file mode 100644 index 0000000..1a15a21 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/battery_5.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_50.png b/packages/SystemUI/res/drawable-mdpi/battery_50.png Binary files differindex 94d7eca..7088066 100644 --- a/packages/SystemUI/res/drawable-mdpi/battery_50.png +++ b/packages/SystemUI/res/drawable-mdpi/battery_50.png diff --git a/packages/SystemUI/res/drawable-mdpi/battery_75.png b/packages/SystemUI/res/drawable-mdpi/battery_75.png Binary files differindex 3cb3591..d4cfb6f 100644 --- a/packages/SystemUI/res/drawable-mdpi/battery_75.png +++ b/packages/SystemUI/res/drawable-mdpi/battery_75.png diff --git a/packages/SystemUI/res/drawable-mdpi/notification_dragger.png b/packages/SystemUI/res/drawable-mdpi/notification_dragger.png Binary files differdeleted file mode 100644 index fad1f32..0000000 --- a/packages/SystemUI/res/drawable-mdpi/notification_dragger.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-mdpi/signal_0.png b/packages/SystemUI/res/drawable-mdpi/signal_0.png Binary files differindex cf436ad..ff2727b 100644 --- a/packages/SystemUI/res/drawable-mdpi/signal_0.png +++ b/packages/SystemUI/res/drawable-mdpi/signal_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_100.png b/packages/SystemUI/res/drawable-mdpi/signal_100.png Binary files differindex 0011a1b..55c34ff 100644 --- a/packages/SystemUI/res/drawable-mdpi/signal_100.png +++ b/packages/SystemUI/res/drawable-mdpi/signal_100.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_25.png b/packages/SystemUI/res/drawable-mdpi/signal_25.png Binary files differindex 69c643f..a415596 100644 --- a/packages/SystemUI/res/drawable-mdpi/signal_25.png +++ b/packages/SystemUI/res/drawable-mdpi/signal_25.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_50.png b/packages/SystemUI/res/drawable-mdpi/signal_50.png Binary files differindex c8acd72..3c5a708 100644 --- a/packages/SystemUI/res/drawable-mdpi/signal_50.png +++ b/packages/SystemUI/res/drawable-mdpi/signal_50.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_75.png b/packages/SystemUI/res/drawable-mdpi/signal_75.png Binary files differindex 9650dfa..e176f37 100644 --- a/packages/SystemUI/res/drawable-mdpi/signal_75.png +++ b/packages/SystemUI/res/drawable-mdpi/signal_75.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan1.png b/packages/SystemUI/res/drawable-mdpi/signal_scan1.png Binary files differnew file mode 100644 index 0000000..f64b9cc --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/signal_scan1.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan2.png b/packages/SystemUI/res/drawable-mdpi/signal_scan2.png Binary files differnew file mode 100644 index 0000000..982feb4 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/signal_scan2.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan3.png b/packages/SystemUI/res/drawable-mdpi/signal_scan3.png Binary files differnew file mode 100644 index 0000000..a4c0689 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/signal_scan3.png diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan4.png b/packages/SystemUI/res/drawable-mdpi/signal_scan4.png Binary files differnew file mode 100644 index 0000000..d1e95fe --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/signal_scan4.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png Binary files differindex 5c57802..a2527b3 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png Binary files differindex b2a94b6..ce64926 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png Binary files differindex b2a94b6..c63c426 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png Binary files differindex f219ded..9e64fe8 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png Binary files differindex 4dd8dc7..350a3e9 100644 --- a/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png +++ b/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_0.png b/packages/SystemUI/res/drawable-mdpi/wifi_0.png Binary files differnew file mode 100644 index 0000000..e81638d --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_0.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_100.png b/packages/SystemUI/res/drawable-mdpi/wifi_100.png Binary files differnew file mode 100644 index 0000000..4468389 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_100.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_25.png b/packages/SystemUI/res/drawable-mdpi/wifi_25.png Binary files differnew file mode 100644 index 0000000..0e389a7 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_25.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_50.png b/packages/SystemUI/res/drawable-mdpi/wifi_50.png Binary files differnew file mode 100644 index 0000000..1cad0d1 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_50.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_75.png b/packages/SystemUI/res/drawable-mdpi/wifi_75.png Binary files differnew file mode 100644 index 0000000..dd2d7dc --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_75.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png Binary files differnew file mode 100644 index 0000000..0e389a7 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png Binary files differnew file mode 100644 index 0000000..34e7c70 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png Binary files differnew file mode 100644 index 0000000..4c2a9e1 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png Binary files differnew file mode 100644 index 0000000..b504131 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png diff --git a/packages/SystemUI/res/drawable/battery.xml b/packages/SystemUI/res/drawable/battery.xml index f4a720d..3bc0c74 100644 --- a/packages/SystemUI/res/drawable/battery.xml +++ b/packages/SystemUI/res/drawable/battery.xml @@ -20,12 +20,8 @@ <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="1" android:drawable="@drawable/battery_0" /> - <item android:maxLevel="5"> - <animation-list android:oneshot="false"> - <item android:drawable="@drawable/battery_0" android:duration="250" /> - <item android:drawable="@drawable/battery_25" android:duration="250" /> - </animation-list> - </item> + <item android:maxLevel="5" android:drawable="@drawable/battery_5" /> + <item android:maxLevel="10" android:drawable="@drawable/battery_10" /> <item android:maxLevel="25" android:drawable="@drawable/battery_25" /> <item android:maxLevel="50" android:drawable="@drawable/battery_50" /> <item android:maxLevel="75" android:drawable="@drawable/battery_75" /> diff --git a/packages/SystemUI/res/drawable/signal.xml b/packages/SystemUI/res/drawable/signal.xml index 5aa211a..7367418 100644 --- a/packages/SystemUI/res/drawable/signal.xml +++ b/packages/SystemUI/res/drawable/signal.xml @@ -24,6 +24,5 @@ <item android:maxLevel="50" android:drawable="@drawable/signal_50" /> <item android:maxLevel="75" android:drawable="@drawable/signal_75" /> <item android:maxLevel="101" android:drawable="@drawable/signal_100" /> - </level-list> diff --git a/packages/SystemUI/res/drawable/signal_scan.xml b/packages/SystemUI/res/drawable/signal_scan.xml new file mode 100644 index 0000000..fe21992 --- /dev/null +++ b/packages/SystemUI/res/drawable/signal_scan.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/res/drawable/stat_sys_battery.xml +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<animation-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/signal_scan1" android:duration="500" /> + <item android:drawable="@drawable/signal_scan2" android:duration="500" /> + <item android:drawable="@drawable/signal_scan3" android:duration="500" /> + <item android:drawable="@drawable/signal_scan4" android:duration="500" /> + <item android:drawable="@drawable/signal_scan3" android:duration="500" /> + <item android:drawable="@drawable/signal_scan2" android:duration="500" /> +</animation-list> + diff --git a/packages/SystemUI/res/drawable/wifi.xml b/packages/SystemUI/res/drawable/wifi.xml new file mode 100644 index 0000000..6e63af6 --- /dev/null +++ b/packages/SystemUI/res/drawable/wifi.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/res/drawable/stat_sys_battery.xml +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<level-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:maxLevel="01" android:drawable="@drawable/wifi_0" /> + <item android:maxLevel="25" android:drawable="@drawable/wifi_25" /> + <item android:maxLevel="50" android:drawable="@drawable/wifi_50" /> + <item android:maxLevel="75" android:drawable="@drawable/wifi_75" /> + <item android:maxLevel="101" android:drawable="@drawable/wifi_100" /> + +</level-list> + diff --git a/packages/SystemUI/res/drawable/wifi_scan.xml b/packages/SystemUI/res/drawable/wifi_scan.xml new file mode 100644 index 0000000..5888d0e --- /dev/null +++ b/packages/SystemUI/res/drawable/wifi_scan.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/res/drawable/stat_sys_battery.xml +** +** Copyright 2007, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<animation-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:drawable="@drawable/wifi_scan1" android:duration="500" /> + <item android:drawable="@drawable/wifi_scan2" android:duration="500" /> + <item android:drawable="@drawable/wifi_scan3" android:duration="500" /> + <item android:drawable="@drawable/wifi_scan4" android:duration="500" /> + <item android:drawable="@drawable/wifi_scan3" android:duration="500" /> + <item android:drawable="@drawable/wifi_scan2" android:duration="500" /> +</animation-list> + diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml index ffb1571..481bcde 100644 --- a/packages/SystemUI/res/layout-xlarge/status_bar.xml +++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml @@ -101,8 +101,8 @@ </LinearLayout> <include layout="@layout/status_bar_center" - android:layout_width="100dip" - android:layout_height="wrap_content" + android:layout_width="160dip" + android:layout_height="match_parent" android:layout_centerInParent="true" /> diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_center.xml b/packages/SystemUI/res/layout-xlarge/status_bar_center.xml index 775fea0..5bf8316 100644 --- a/packages/SystemUI/res/layout-xlarge/status_bar_center.xml +++ b/packages/SystemUI/res/layout-xlarge/status_bar_center.xml @@ -18,8 +18,8 @@ <RelativeLayout android:id="@+id/systemInfo" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" - android:layout_width="100dip" - android:layout_height="wrap_content" + android:layout_width="160dip" + android:layout_height="match_parent" android:layout_centerInParent="true" android:clickable="true" android:onClick="systemInfoClicked" @@ -27,8 +27,9 @@ <com.android.systemui.statusbar.Clock style="@*android:style/TextAppearance.StatusBar.Icon" android:id="@+id/clock" - android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_width="64dip" + android:layout_height="48dip" + android:layout_centerInParent="true" android:singleLine="true" android:gravity="center" android:textSize="16sp" @@ -37,18 +38,16 @@ /> <ImageView android:id="@+id/battery" - android:layout_width="50dip" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@id/clock" + android:layout_width="48dip" + android:layout_height="48dip" + android:layout_toLeftOf="@id/clock" android:src="@drawable/battery" /> <ImageView android:id="@+id/signal" - android:layout_width="50dip" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@id/clock" + android:layout_width="48dip" + android:layout_height="48dip" + android:layout_toRightOf="@id/clock" android:src="@drawable/signal" /> </RelativeLayout> diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml index 273674f..36c6388 100644 --- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml +++ b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml @@ -92,8 +92,10 @@ android:layout_alignParentLeft="true" > <ImageView android:id="@+id/battery_meter" - android:layout_width="wrap_content" + android:layout_width="96dip" android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:scaleType="centerCrop" android:src="@drawable/battery" /> @@ -129,8 +131,10 @@ android:layout_alignParentRight="true" > <ImageView android:id="@+id/signal_meter" - android:layout_width="wrap_content" + android:layout_width="96dip" android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:scaleType="centerCrop" android:src="@drawable/signal" /> diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml index 4aa4b47..3c59c92 100644 --- a/packages/SystemUI/res/values-xlarge/strings.xml +++ b/packages/SystemUI/res/values-xlarge/strings.xml @@ -20,4 +20,58 @@ <!-- The text for the button in the notification window-shade that clears all of the currently visible notifications. --> <string name="status_bar_clear_all_button">Clear all</string> + + <!-- System panel ("Quick Settings") --> + + <!-- Text to display underneath the graphical battery meter. Should + include the word for "battery" and a place for the percentage charge + available. [CHAR LIMIT=20] --> + <string name="system_panel_battery_meter_format"> + Battery: <xliff:g id="number">%d</xliff:g><xliff:g id="percent">%%</xliff:g> + </string> + + <!-- Text to display underneath the graphical signal strength meter when + no connection is available. [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_disconnected"> + no internet connection + </string> + + <!-- Text to display underneath the graphical signal strength meter when + it is displaying information about a connected, named Wi-Fi network. + Should include the word for "Wi-Fi" and a placeholder for the + wireless network's SSID. [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_wifi_ssid_format"> + Wi-Fi: <xliff:g id="ssid">%s</xliff:g> + </string> + + <!-- Text to display underneath the graphical signal strength meter when + it is displaying Wi-Fi status and Wi-Fi is connected to a network + whose SSID is not available. + [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_wifi_nossid"> + Wi-Fi: connected + </string> + + <!-- Text to display underneath the graphical signal strength meter when + it is displaying Wi-Fi status and Wi-Fi is in the process of + connecting to a network. [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_wifi_connecting"> + Wi-Fi: connecting… + </string> + + <!-- Text to display underneath the graphical signal strength meter when + it is displaying mobile data (3G) status and a network connection is + available. + [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_data_connected"> + Mobile data: connected + </string> + + <!-- Text to display underneath the graphical signal strength meter when + it is displaying mobile data (3G) status and a network connection is + unavailable. + [CHAR LIMIT=20] --> + <string name="system_panel_signal_meter_data_connecting"> + Mobile data: connecting… + </string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java index a03393b..dfa2d10 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java @@ -45,6 +45,7 @@ import android.os.ServiceManager; import android.provider.Settings; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; +import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Slog; @@ -66,11 +67,18 @@ import android.widget.Toast; import java.util.List; +import com.android.internal.telephony.IccCard; +import com.android.internal.telephony.TelephonyIntents; +import com.android.internal.telephony.cdma.EriInfo; +import com.android.internal.telephony.cdma.TtyIntent; + import com.android.systemui.statusbar.*; import com.android.systemui.R; public class SystemPanel extends LinearLayout { private static final String TAG = "SystemPanel"; + private static final boolean DEBUG = TabletStatusBarService.DEBUG; + private static final boolean DEBUG_SIGNAL = true; private static final int MINIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_DIM + 5; private static final int MAXIMUM_BACKLIGHT = android.os.Power.BRIGHTNESS_ON; @@ -93,7 +101,22 @@ public class SystemPanel extends LinearLayout { private final AudioManager mAudioManager; private final WifiManager mWifiManager; + private final TelephonyManager mPhone; + + // state trackers for telephony code + IccCard.State mSimState = IccCard.State.READY; + int mPhoneState = TelephonyManager.CALL_STATE_IDLE; + int mDataState = TelephonyManager.DATA_DISCONNECTED; + ServiceState mServiceState; + SignalStrength mSignalStrength; + + // state for the meters + boolean mWifiEnabled, mWifiConnected; + int mWifiLevel; + String mWifiSsid; + boolean mDataEnabled, mDataConnected, mDataRoaming; + int mDataLevel; private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override @@ -107,18 +130,154 @@ public class SystemPanel extends LinearLayout { || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) || action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION) || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { - updateWifi(intent); + updateWifiState(intent); + } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { + updateSimState(intent); } } }; - boolean mWifiEnabled, mWifiConnected; - int mWifiLevel; - String mWifiSsid; + private final void updateSimState(Intent intent) { + String stateExtra = intent.getStringExtra(IccCard.INTENT_KEY_ICC_STATE); + if (IccCard.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) { + mSimState = IccCard.State.ABSENT; + } + else if (IccCard.INTENT_VALUE_ICC_READY.equals(stateExtra)) { + mSimState = IccCard.State.READY; + } + else if (IccCard.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) { + final String lockedReason = intent.getStringExtra(IccCard.INTENT_KEY_LOCKED_REASON); + if (IccCard.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) { + mSimState = IccCard.State.PIN_REQUIRED; + } + else if (IccCard.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) { + mSimState = IccCard.State.PUK_REQUIRED; + } + else { + mSimState = IccCard.State.NETWORK_LOCKED; + } + } else { + mSimState = IccCard.State.UNKNOWN; + } + updateDataState(); + } + + private boolean isCdma() { + return (mSignalStrength != null) && !mSignalStrength.isGsm(); + } + + private boolean isEvdo() { + return ( (mServiceState != null) + && ((mServiceState.getRadioTechnology() + == ServiceState.RADIO_TECHNOLOGY_EVDO_0) + || (mServiceState.getRadioTechnology() + == ServiceState.RADIO_TECHNOLOGY_EVDO_A) + || (mServiceState.getRadioTechnology() + == ServiceState.RADIO_TECHNOLOGY_EVDO_B))); + } + + private boolean hasService() { + if (mServiceState != null) { + switch (mServiceState.getState()) { + case ServiceState.STATE_OUT_OF_SERVICE: + case ServiceState.STATE_POWER_OFF: + return false; + default: + return true; + } + } else { + return false; + } + } + + private int getCdmaLevel() { + if (mSignalStrength == null) return 0; + final int cdmaDbm = mSignalStrength.getCdmaDbm(); + final int cdmaEcio = mSignalStrength.getCdmaEcio(); + int levelDbm = 0; + int levelEcio = 0; + + if (cdmaDbm >= -75) levelDbm = 4; + else if (cdmaDbm >= -85) levelDbm = 3; + else if (cdmaDbm >= -95) levelDbm = 2; + else if (cdmaDbm >= -100) levelDbm = 1; + else levelDbm = 0; + + // Ec/Io are in dB*10 + if (cdmaEcio >= -90) levelEcio = 4; + else if (cdmaEcio >= -110) levelEcio = 3; + else if (cdmaEcio >= -130) levelEcio = 2; + else if (cdmaEcio >= -150) levelEcio = 1; + else levelEcio = 0; + + return (levelDbm < levelEcio) ? levelDbm : levelEcio; + } + + private int getEvdoLevel() { + if (mSignalStrength == null) return 0; + int evdoDbm = mSignalStrength.getEvdoDbm(); + int evdoSnr = mSignalStrength.getEvdoSnr(); + int levelEvdoDbm = 0; + int levelEvdoSnr = 0; + + if (evdoDbm >= -65) levelEvdoDbm = 4; + else if (evdoDbm >= -75) levelEvdoDbm = 3; + else if (evdoDbm >= -90) levelEvdoDbm = 2; + else if (evdoDbm >= -105) levelEvdoDbm = 1; + else levelEvdoDbm = 0; + + if (evdoSnr >= 7) levelEvdoSnr = 4; + else if (evdoSnr >= 5) levelEvdoSnr = 3; + else if (evdoSnr >= 3) levelEvdoSnr = 2; + else if (evdoSnr >= 1) levelEvdoSnr = 1; + else levelEvdoSnr = 0; + + return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr; + } + + private void updateDataState() { + mDataConnected = hasService() && (mDataState == TelephonyManager.DATA_CONNECTED); + + if (isCdma()) { + // these functions return a value from 0 to 4, inclusive + if ((mPhoneState == TelephonyManager.CALL_STATE_IDLE) && isEvdo()){ + mDataLevel = getEvdoLevel() * 25; + } else { + mDataLevel = getCdmaLevel() * 25; + } + } else { + // GSM + + int asu = (mSignalStrength == null) ? 0 : mSignalStrength.getGsmSignalStrength(); + + // asu on [0,31]; 99 = unknown + // Android has historically shown anything >=12 as "full" + // XXX: tune this based on Industry Best Practices(TM) + if (asu <= 2 || asu == 99) mDataLevel = 0; + else mDataLevel = (int)(((float)Math.max(asu, 15) / 15) * 100); + + mDataRoaming = mPhone.isNetworkRoaming(); + + mDataConnected = mDataConnected + && (mSimState == IccCard.State.READY || mSimState == IccCard.State.UNKNOWN); + } + + if (DEBUG_SIGNAL || DEBUG) { + Slog.d(TAG, "updateDataState: connected=" + mDataConnected + + " level=" + mDataLevel + + " isEvdo=" + isEvdo() + + " isCdma=" + isCdma() + + " mPhoneState=" + mPhoneState + + " mDataState=" + mDataState + ); + } - private void updateWifi(Intent intent) { - if (TabletStatusBarService.DEBUG) - Slog.d(TabletStatusBarService.TAG, "updateWifi: " + intent); + refreshSignalMeters(); + } + + private void updateWifiState(Intent intent) { + if (DEBUG) + Slog.d(TAG, "updateWifiState: " + intent); final String action = intent.getAction(); final boolean wasConnected = mWifiConnected; @@ -142,8 +301,8 @@ public class SystemPanel extends LinearLayout { if (mWifiConnected && !wasConnected) { WifiInfo info = mWifiManager.getConnectionInfo(); - if (TabletStatusBarService.DEBUG) - Slog.d(TabletStatusBarService.TAG, "updateWifi: just connected: info=" + info); + if (DEBUG) + Slog.d(TAG, "updateWifiState: just connected: info=" + info); if (info != null) { // grab the initial signal strength @@ -164,22 +323,40 @@ public class SystemPanel extends LinearLayout { } } - if (!mWifiEnabled) { - mWifiSsid = "disabled"; - mWifiLevel = 0; - } else if (!mWifiConnected) { - mWifiSsid = "disconnected"; - mWifiLevel = 0; - } else if (mWifiSsid == null) { - mWifiSsid = "unknown"; + refreshSignalMeters(); + } + + // figure out what to show: first wifi, then 3G, then nothing + void refreshSignalMeters() { + if (mSignalMeter == null) return; // no UI yet + + Context ctxt = getContext(); + + String text = null; + int level = 0; + + if (mWifiConnected) { + if (mWifiSsid == null) { + text = ctxt.getString(R.string.system_panel_signal_meter_wifi_nossid); + } else { + text = ctxt.getString(R.string.system_panel_signal_meter_wifi_ssid_format, + mWifiSsid); + } + level = mWifiLevel; + } else if (mDataConnected) { + text = ctxt.getString(R.string.system_panel_signal_meter_data_connected); + level = mDataLevel; + } else { + text = ctxt.getString(R.string.system_panel_signal_meter_disconnected); + level = 0; } - mSignalMeter.setImageResource(R.drawable.signal); - mSignalMeter.setImageLevel(mWifiLevel); - mSignalText.setText(String.format("Wi-Fi: %s", mWifiSsid)); // XXX: localize + mSignalMeter.setImageResource(mWifiConnected ? R.drawable.wifi : R.drawable.signal); + mSignalMeter.setImageLevel(level); + mSignalText.setText(text); // hack for now - mBar.setWifiMeter(mWifiLevel); + mBar.setSignalMeter(level, mWifiConnected); } public void setBar(TabletStatusBarService bar) { @@ -192,7 +369,8 @@ public class SystemPanel extends LinearLayout { mBatteryMeter.setImageResource(plugged ? R.drawable.battery_charging : R.drawable.battery); mBatteryMeter.setImageLevel(level); - mBatteryText.setText(String.format("Battery: %d%%", level)); + mBatteryText.setText(getContext() + .getString(R.string.system_panel_battery_meter_format, level)); // hack for now mBar.setBatteryMeter(level, plugged); @@ -208,13 +386,21 @@ public class SystemPanel extends LinearLayout { // get notified of phone state changes TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE); + telephonyManager.listen(mPhoneStateListener, + PhoneStateListener.LISTEN_SERVICE_STATE + | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS + | PhoneStateListener.LISTEN_CALL_STATE + | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE + | PhoneStateListener.LISTEN_DATA_ACTIVITY); // wifi status info mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - // audio status notifications + // audio status mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + + // mobile data + mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); } public void onAttachedToWindow() { @@ -259,6 +445,7 @@ public class SystemPanel extends LinearLayout { } }); + // register for broadcasts IntentFilter filter = new IntentFilter(); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(Intent.ACTION_BATTERY_CHANGED); @@ -266,8 +453,9 @@ public class SystemPanel extends LinearLayout { filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); filter.addAction(WifiManager.RSSI_CHANGED_ACTION); + filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); getContext().registerReceiver(mReceiver, filter); - + mBatteryMeter = (ImageView)findViewById(R.id.battery_meter); mBatteryMeter.setImageResource(R.drawable.battery); mBatteryMeter.setImageLevel(0); @@ -277,6 +465,8 @@ public class SystemPanel extends LinearLayout { mBatteryText = (TextView)findViewById(R.id.battery_info); mSignalText = (TextView)findViewById(R.id.signal_info); + + refreshSignalMeters(); } public void onDetachedFromWindow() { @@ -362,11 +552,42 @@ public class SystemPanel extends LinearLayout { PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onServiceStateChanged(ServiceState serviceState) { - Slog.d(TAG, "phone service state changed: " + serviceState.getState()); + if (DEBUG_SIGNAL || DEBUG) { + Slog.d(TAG, "phone service state changed: " + serviceState.getState()); + } + mServiceState = serviceState; mAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF; if (mAirplaneButton != null) { mAirplaneButton.setAlpha(mAirplaneMode ? 0xFF : 0x7F); } + updateDataState(); + } + @Override + public void onSignalStrengthsChanged(SignalStrength signalStrength) { + if (DEBUG_SIGNAL || DEBUG) { + Slog.d(TAG, "onSignalStrengthsChanged: " + signalStrength); + } + mSignalStrength = signalStrength; + updateDataState(); + } + @Override + public void onCallStateChanged(int state, String incomingNumber) { + mPhoneState = state; + // In cdma, if a voice call is made, RSSI should switch to 1x. + if (isCdma()) { + updateDataState(); + } + } + + @Override + public void onDataConnectionStateChanged(int state, int networkType) { + if (DEBUG_SIGNAL || DEBUG) { + Slog.d(TAG, "onDataConnectionStateChanged: state=" + state + + " type=" + networkType); + } + mDataState = state; +// updateDataNetType(networkType); + updateDataState(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java index 18b9b41..087671a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java @@ -212,10 +212,15 @@ public class TabletStatusBarService extends StatusBarService { mBatteryMeter.setImageLevel(level); } - public void setWifiMeter(int level) { - if (DEBUG) Slog.d(TAG, "wifi=" + level); - mSignalMeter.setImageResource(R.drawable.signal); - mSignalMeter.setImageLevel(level); + public void setSignalMeter(int level, boolean isWifi) { + if (DEBUG) Slog.d(TAG, "signal=" + level); + if (level < 0) { + mSignalMeter.setImageResource(isWifi ? R.drawable.wifi_scan : R.drawable.signal_scan); + mSignalMeter.setImageLevel(0); + } else { + mSignalMeter.setImageResource(isWifi ? R.drawable.wifi : R.drawable.signal); + mSignalMeter.setImageLevel(level); + } } public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon) { |