diff --git a/packages/SystemUI/res/drawable-hdpi/notification_dragger.png b/packages/SystemUI/res/drawable-hdpi/notification_dragger.png deleted file mode 100644 index 71b55072d9b84..0000000000000 Binary files a/packages/SystemUI/res/drawable-hdpi/notification_dragger.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_0.png b/packages/SystemUI/res/drawable-mdpi/battery_0.png index 77162c87ab93a..e81638d48283d 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/battery_0.png and b/packages/SystemUI/res/drawable-mdpi/battery_0.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_10.png b/packages/SystemUI/res/drawable-mdpi/battery_10.png new file mode 100644 index 0000000000000..a739f50ae7229 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/battery_10.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_100.png b/packages/SystemUI/res/drawable-mdpi/battery_100.png index 588a74b16eefb..9a66db388161a 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/battery_100.png and b/packages/SystemUI/res/drawable-mdpi/battery_100.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_25.png b/packages/SystemUI/res/drawable-mdpi/battery_25.png index b11570b2ff2da..7ae7ebb96dcf5 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/battery_25.png and b/packages/SystemUI/res/drawable-mdpi/battery_25.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_5.png b/packages/SystemUI/res/drawable-mdpi/battery_5.png new file mode 100644 index 0000000000000..1a15a21d6d88a Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/battery_5.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_50.png b/packages/SystemUI/res/drawable-mdpi/battery_50.png index 94d7eca5535e0..7088066b88b3d 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/battery_50.png and b/packages/SystemUI/res/drawable-mdpi/battery_50.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/battery_75.png b/packages/SystemUI/res/drawable-mdpi/battery_75.png index 3cb35910bdc2c..d4cfb6f3ba753 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/battery_75.png and b/packages/SystemUI/res/drawable-mdpi/battery_75.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/notification_dragger.png b/packages/SystemUI/res/drawable-mdpi/notification_dragger.png deleted file mode 100644 index fad1f3226c6db..0000000000000 Binary files a/packages/SystemUI/res/drawable-mdpi/notification_dragger.png and /dev/null differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_0.png b/packages/SystemUI/res/drawable-mdpi/signal_0.png index cf436ad2adcb4..ff2727bc64cd6 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/signal_0.png and b/packages/SystemUI/res/drawable-mdpi/signal_0.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_100.png b/packages/SystemUI/res/drawable-mdpi/signal_100.png index 0011a1b1c1d4d..55c34ff2cd820 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/signal_100.png and b/packages/SystemUI/res/drawable-mdpi/signal_100.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_25.png b/packages/SystemUI/res/drawable-mdpi/signal_25.png index 69c643f59de85..a415596db1727 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/signal_25.png and b/packages/SystemUI/res/drawable-mdpi/signal_25.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_50.png b/packages/SystemUI/res/drawable-mdpi/signal_50.png index c8acd72d77f59..3c5a708b01a64 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/signal_50.png and b/packages/SystemUI/res/drawable-mdpi/signal_50.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_75.png b/packages/SystemUI/res/drawable-mdpi/signal_75.png index 9650dfa204689..e176f37f4dfee 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/signal_75.png and b/packages/SystemUI/res/drawable-mdpi/signal_75.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan1.png b/packages/SystemUI/res/drawable-mdpi/signal_scan1.png new file mode 100644 index 0000000000000..f64b9cc281334 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/signal_scan1.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan2.png b/packages/SystemUI/res/drawable-mdpi/signal_scan2.png new file mode 100644 index 0000000000000..982feb4707d32 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/signal_scan2.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan3.png b/packages/SystemUI/res/drawable-mdpi/signal_scan3.png new file mode 100644 index 0000000000000..a4c0689047a81 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/signal_scan3.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/signal_scan4.png b/packages/SystemUI/res/drawable-mdpi/signal_scan4.png new file mode 100644 index 0000000000000..d1e95fe51db77 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/signal_scan4.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png index 5c578022412aa..a2527b3cdd9c4 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png and b/packages/SystemUI/res/drawable-mdpi/status_bar_back_pressed.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png index b2a94b649b587..ce649260b951f 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png and b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_default.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png index b2a94b649b587..c63c426902138 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png and b/packages/SystemUI/res/drawable-mdpi/status_bar_expand_pressed.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png index f219dedc85f07..9e64fe89024b4 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png and b/packages/SystemUI/res/drawable-mdpi/status_bar_home_pressed.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png b/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png index 4dd8dc72597b9..350a3e9e76554 100644 Binary files a/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png and b/packages/SystemUI/res/drawable-mdpi/status_bar_recent_pressed.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_0.png b/packages/SystemUI/res/drawable-mdpi/wifi_0.png new file mode 100644 index 0000000000000..e81638d48283d Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_0.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_100.png b/packages/SystemUI/res/drawable-mdpi/wifi_100.png new file mode 100644 index 0000000000000..4468389edfe80 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_100.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_25.png b/packages/SystemUI/res/drawable-mdpi/wifi_25.png new file mode 100644 index 0000000000000..0e389a7c19e14 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_25.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_50.png b/packages/SystemUI/res/drawable-mdpi/wifi_50.png new file mode 100644 index 0000000000000..1cad0d18aa190 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_50.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_75.png b/packages/SystemUI/res/drawable-mdpi/wifi_75.png new file mode 100644 index 0000000000000..dd2d7dcb86410 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_75.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png new file mode 100644 index 0000000000000..0e389a7c19e14 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_scan1.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png new file mode 100644 index 0000000000000..34e7c7041bb1f Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_scan2.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png new file mode 100644 index 0000000000000..4c2a9e1b7b6f5 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_scan3.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png b/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png new file mode 100644 index 0000000000000..b504131196d1d Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/wifi_scan4.png differ diff --git a/packages/SystemUI/res/drawable/battery.xml b/packages/SystemUI/res/drawable/battery.xml index f4a720d17a1fc..3bc0c74ee1ffe 100644 --- a/packages/SystemUI/res/drawable/battery.xml +++ b/packages/SystemUI/res/drawable/battery.xml @@ -20,12 +20,8 @@ - - - - - - + + diff --git a/packages/SystemUI/res/drawable/signal.xml b/packages/SystemUI/res/drawable/signal.xml index 5aa211af6729e..7367418a1114c 100644 --- a/packages/SystemUI/res/drawable/signal.xml +++ b/packages/SystemUI/res/drawable/signal.xml @@ -24,6 +24,5 @@ - diff --git a/packages/SystemUI/res/drawable/signal_scan.xml b/packages/SystemUI/res/drawable/signal_scan.xml new file mode 100644 index 0000000000000..fe2199263222a --- /dev/null +++ b/packages/SystemUI/res/drawable/signal_scan.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/wifi.xml b/packages/SystemUI/res/drawable/wifi.xml new file mode 100644 index 0000000000000..6e63af6126721 --- /dev/null +++ b/packages/SystemUI/res/drawable/wifi.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/wifi_scan.xml b/packages/SystemUI/res/drawable/wifi_scan.xml new file mode 100644 index 0000000000000..5888d0e170e12 --- /dev/null +++ b/packages/SystemUI/res/drawable/wifi_scan.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml index ffb1571a44c10..481bcde0a500a 100644 --- a/packages/SystemUI/res/layout-xlarge/status_bar.xml +++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml @@ -101,8 +101,8 @@ diff --git a/packages/SystemUI/res/layout-xlarge/status_bar_center.xml b/packages/SystemUI/res/layout-xlarge/status_bar_center.xml index 775fea00d6938..5bf83162c90e9 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 @@ diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml index 273674f2ce47d..36c6388ec10f0 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" > @@ -129,8 +131,10 @@ android:layout_alignParentRight="true" > diff --git a/packages/SystemUI/res/values-xlarge/strings.xml b/packages/SystemUI/res/values-xlarge/strings.xml index 4aa4b4731939f..3c59c9288ef83 100644 --- a/packages/SystemUI/res/values-xlarge/strings.xml +++ b/packages/SystemUI/res/values-xlarge/strings.xml @@ -20,4 +20,58 @@ Clear all + + + + + + Battery: %d%% + + + + + no internet connection + + + + + Wi-Fi: %s + + + + + Wi-Fi: connected + + + + + Wi-Fi: connecting… + + + + + Mobile data: connected + + + + + Mobile data: connecting… + 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 a03393b8a90fc..dfa2d10ae3588 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 void updateWifi(Intent intent) { - if (TabletStatusBarService.DEBUG) - Slog.d(TabletStatusBarService.TAG, "updateWifi: " + intent); + 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 + ); + } + + 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 18b9b4187ae37..087671ac78144 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) {