summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@google.com>2010-08-13 16:26:39 -0400
committerDaniel Sandler <dsandler@google.com>2010-08-19 01:26:21 -0400
commitd7db7b1eafb3c7bb6158b98561bbe8436009acfd (patch)
treea8e57ef1ea7b9fac5c91d1e1e3d3b1ff2e3de9e6 /packages
parent13984a253de7b32d803c2c216759cd7b730ee7fe (diff)
downloadframeworks_base-d7db7b1eafb3c7bb6158b98561bbe8436009acfd.zip
frameworks_base-d7db7b1eafb3c7bb6158b98561bbe8436009acfd.tar.gz
frameworks_base-d7db7b1eafb3c7bb6158b98561bbe8436009acfd.tar.bz2
Wi-Fi signal strength and status in the system bar & panel.
Change-Id: I67b948b7c87650b51e5785471b66b4b2cca218ed
Diffstat (limited to 'packages')
-rw-r--r--packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml50
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java104
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java13
3 files changed, 137 insertions, 30 deletions
diff --git a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml
index e5b2f53..273674f 100644
--- a/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml
+++ b/packages/SystemUI/res/layout-xlarge/sysbar_panel_system.xml
@@ -86,19 +86,24 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
- <ImageView android:id="@+id/battery_meter"
- android:layout_width="wrap_content"
+ <RelativeLayout
+ android:layout_width="120dip"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
- android:src="@drawable/dots_empty"
- />
+ >
+ <ImageView android:id="@+id/battery_meter"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/battery"
+ />
- <TextView android:id="@+id/battery_info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:layout_below="@id/battery_meter"
- />
+ <TextView android:id="@+id/battery_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:layout_below="@id/battery_meter"
+ />
+ </RelativeLayout>
<com.android.systemui.statusbar.Clock
style="@*android:style/TextAppearance.StatusBar.Icon"
@@ -118,19 +123,24 @@
android:layout_below="@id/clock"
/>
- <ImageView android:id="@+id/signal_meter"
- android:layout_width="wrap_content"
+ <RelativeLayout
+ android:layout_width="120dip"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
- android:src="@drawable/signal"
- />
+ >
+ <ImageView android:id="@+id/signal_meter"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/signal"
+ />
- <TextView android:id="@+id/signal_info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:layout_below="@id/signal_meter"
- />
+ <TextView android:id="@+id/signal_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:layout_below="@id/signal_meter"
+ />
+ </RelativeLayout>
</RelativeLayout>
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 c864daa..a03393b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SystemPanel.java
@@ -29,6 +29,11 @@ import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.media.AudioManager;
+import android.net.NetworkInfo;
+import android.net.wifi.SupplicantState;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.IBinder;
@@ -59,6 +64,8 @@ import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.Toast;
+import java.util.List;
+
import com.android.systemui.statusbar.*;
import com.android.systemui.R;
@@ -85,6 +92,7 @@ public class SystemPanel extends LinearLayout {
private TextView mSignalText;
private final AudioManager mAudioManager;
+ private final WifiManager mWifiManager;
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -94,21 +102,100 @@ public class SystemPanel extends LinearLayout {
if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
mSoundButton.setAlpha(getSilentMode() ? 0x7F : 0xFF);
} else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- // hack for now
- mBar.updateBatteryDisplay(intent.getIntExtra("level", 0),
- (intent.getIntExtra("plugged", 0) != 0));
+ updateBattery(intent);
+ } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)
+ || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)
+ || action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)
+ || action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+ updateWifi(intent);
}
}
};
+ boolean mWifiEnabled, mWifiConnected;
+ int mWifiLevel;
+ String mWifiSsid;
+
+ private void updateWifi(Intent intent) {
+ if (TabletStatusBarService.DEBUG)
+ Slog.d(TabletStatusBarService.TAG, "updateWifi: " + intent);
+
+ final String action = intent.getAction();
+ final boolean wasConnected = mWifiConnected;
+
+ if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
+ mWifiEnabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
+ WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED;
+ } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+ final NetworkInfo networkInfo = (NetworkInfo)
+ intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
+ mWifiConnected = networkInfo != null && networkInfo.isConnected();
+ } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
+ final NetworkInfo.DetailedState detailedState = WifiInfo.getDetailedStateOf(
+ (SupplicantState)intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
+ mWifiConnected = detailedState == NetworkInfo.DetailedState.CONNECTED;
+ } else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
+ final int newRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
+ int newSignalLevel = WifiManager.calculateSignalLevel(newRssi, 6) * 20;
+ mWifiLevel = mWifiConnected ? newSignalLevel : 0;
+ }
+
+ if (mWifiConnected && !wasConnected) {
+ WifiInfo info = mWifiManager.getConnectionInfo();
+ if (TabletStatusBarService.DEBUG)
+ Slog.d(TabletStatusBarService.TAG, "updateWifi: just connected: info=" + info);
+
+ if (info != null) {
+ // grab the initial signal strength
+ mWifiLevel = WifiManager.calculateSignalLevel(info.getRssi(), 101);
+
+ // find the SSID
+ mWifiSsid = info.getSSID();
+ if (mWifiSsid == null) {
+ // OK, it's not in the connectionInfo; we have to go hunting for it
+ List<WifiConfiguration> networks = mWifiManager.getConfiguredNetworks();
+ for (WifiConfiguration net : networks) {
+ if (net.networkId == info.getNetworkId()) {
+ mWifiSsid = net.SSID;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (!mWifiEnabled) {
+ mWifiSsid = "disabled";
+ mWifiLevel = 0;
+ } else if (!mWifiConnected) {
+ mWifiSsid = "disconnected";
+ mWifiLevel = 0;
+ } else if (mWifiSsid == null) {
+ mWifiSsid = "unknown";
+ }
+
+ mSignalMeter.setImageResource(R.drawable.signal);
+ mSignalMeter.setImageLevel(mWifiLevel);
+ mSignalText.setText(String.format("Wi-Fi: %s", mWifiSsid)); // XXX: localize
+
+ // hack for now
+ mBar.setWifiMeter(mWifiLevel);
+ }
+
public void setBar(TabletStatusBarService bar) {
mBar = bar;
}
- public void setBatteryLevel(int level, boolean plugged) {
+ public void updateBattery(Intent intent) {
+ final int level = intent.getIntExtra("level", 0);
+ final boolean plugged = intent.getIntExtra("plugged", 0) != 0;
+
mBatteryMeter.setImageResource(plugged ? R.drawable.battery_charging : R.drawable.battery);
mBatteryMeter.setImageLevel(level);
mBatteryText.setText(String.format("Battery: %d%%", level));
+
+ // hack for now
+ mBar.setBatteryMeter(level, plugged);
}
public SystemPanel(Context context, AttributeSet attrs) {
@@ -123,6 +210,10 @@ public class SystemPanel extends LinearLayout {
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
+ // wifi status info
+ mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+
+ // audio status notifications
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
}
@@ -171,7 +262,10 @@ public class SystemPanel extends LinearLayout {
IntentFilter filter = new IntentFilter();
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- filter.addAction(Intent.ACTION_POWER_CONNECTED);
+ filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+ filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+ filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
getContext().registerReceiver(mReceiver, filter);
mBatteryMeter = (ImageView)findViewById(R.id.battery_meter);
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 b0ffaa5..022470e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarService.java
@@ -54,7 +54,7 @@ import com.android.systemui.statusbar.*;
import com.android.systemui.R;
public class TabletStatusBarService extends StatusBarService {
- public static final boolean DEBUG = false;
+ public static final boolean DEBUG = true;
public static final String TAG = "TabletStatusBar";
@@ -206,13 +206,16 @@ public class TabletStatusBarService extends StatusBarService {
}
}
- StatusBarIcon mBatterySBI;
- StatusBarIcon mSignalSBI;
- public void updateBatteryDisplay(int level, boolean plugged) {
+ public void setBatteryMeter(int level, boolean plugged) {
if (DEBUG) Slog.d(TAG, "battery=" + level + (plugged ? " - plugged" : " - unplugged"));
mBatteryMeter.setImageResource(plugged ? R.drawable.battery_charging : R.drawable.battery);
mBatteryMeter.setImageLevel(level);
- mSystemPanel.setBatteryLevel(level, plugged);
+ }
+
+ public void setWifiMeter(int level) {
+ if (DEBUG) Slog.d(TAG, "wifi=" + level);
+ mSignalMeter.setImageResource(R.drawable.signal);
+ mSignalMeter.setImageLevel(level);
}
public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon) {