diff options
-rw-r--r-- | services/java/com/android/server/wifi/WifiService.java | 11 | ||||
-rw-r--r-- | services/java/com/android/server/wifi/WifiTrafficPoller.java | 39 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 6 |
3 files changed, 31 insertions, 25 deletions
diff --git a/services/java/com/android/server/wifi/WifiService.java b/services/java/com/android/server/wifi/WifiService.java index bd5a3fd..d675822 100644 --- a/services/java/com/android/server/wifi/WifiService.java +++ b/services/java/com/android/server/wifi/WifiService.java @@ -147,11 +147,6 @@ public final class WifiService extends IWifiManager.Stub { private AsyncChannel mWifiStateMachineChannel; /** - * Clients receiving asynchronous messages - */ - private List<Messenger> mClients = new ArrayList<Messenger>(); - - /** * Handles client connections */ private class ClientHandler extends Handler { @@ -168,7 +163,7 @@ public final class WifiService extends IWifiManager.Stub { if (DBG) Slog.d(TAG, "New client listening to asynchronous messages"); // We track the clients by the Messenger // since it is expected to be always available - mClients.add(msg.replyTo); + mTrafficPoller.addClient(msg.replyTo); } else { Slog.e(TAG, "Client connection failure, error=" + msg.arg1); } @@ -180,7 +175,7 @@ public final class WifiService extends IWifiManager.Stub { } else { if (DBG) Slog.d(TAG, "Client connection lost with reason: " + msg.arg1); } - mClients.remove(msg.replyTo); + mTrafficPoller.removeClient(msg.replyTo); break; } case AsyncChannel.CMD_CHANNEL_FULL_CONNECTION: { @@ -270,7 +265,7 @@ public final class WifiService extends IWifiManager.Stub { mIdleIntent = PendingIntent.getBroadcast(mContext, IDLE_REQUEST, idleIntent, 0); mNotificationController = new WifiNotificationController(mContext, mWifiStateMachine); - mTrafficPoller = new WifiTrafficPoller(mContext, mClients, mInterfaceName); + mTrafficPoller = new WifiTrafficPoller(mContext, mInterfaceName); mSettingsStore = new WifiSettingsStore(mContext); mContext.registerReceiver( diff --git a/services/java/com/android/server/wifi/WifiTrafficPoller.java b/services/java/com/android/server/wifi/WifiTrafficPoller.java index 9d1e5b6..b498550 100644 --- a/services/java/com/android/server/wifi/WifiTrafficPoller.java +++ b/services/java/com/android/server/wifi/WifiTrafficPoller.java @@ -32,6 +32,7 @@ import android.os.Message; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -45,6 +46,11 @@ final class WifiTrafficPoller { */ private static final int POLL_TRAFFIC_STATS_INTERVAL_MSECS = 1000; + private static final int ENABLE_TRAFFIC_STATS_POLL = 1; + private static final int TRAFFIC_STATS_POLL = 2; + private static final int ADD_CLIENT = 3; + private static final int REMOVE_CLIENT = 4; + private boolean mEnableTrafficStatsPoll = false; private int mTrafficStatsPollToken = 0; private long mTxPkts; @@ -52,7 +58,7 @@ final class WifiTrafficPoller { /* Tracks last reported data activity */ private int mDataActivity; - private final List<Messenger> mClients; + private final List<Messenger> mClients = new ArrayList<Messenger>(); // err on the side of updating at boot since screen on broadcast may be missed // the first time private AtomicBoolean mScreenOn = new AtomicBoolean(true); @@ -60,8 +66,7 @@ final class WifiTrafficPoller { private NetworkInfo mNetworkInfo; private final String mInterface; - WifiTrafficPoller(Context context, List<Messenger> clients, String iface) { - mClients = clients; + WifiTrafficPoller(Context context, String iface) { mInterface = iface; mTrafficHandler = new TrafficHandler(); @@ -88,28 +93,40 @@ final class WifiTrafficPoller { }, filter); } + void addClient(Messenger client) { + Message.obtain(mTrafficHandler, ADD_CLIENT, client).sendToTarget(); + } + + void removeClient(Messenger client) { + Message.obtain(mTrafficHandler, REMOVE_CLIENT, client).sendToTarget(); + } + private class TrafficHandler extends Handler { public void handleMessage(Message msg) { switch (msg.what) { - case WifiManager.ENABLE_TRAFFIC_STATS_POLL: { + case ENABLE_TRAFFIC_STATS_POLL: mEnableTrafficStatsPoll = (msg.arg1 == 1); mTrafficStatsPollToken++; if (mEnableTrafficStatsPoll) { notifyOnDataActivity(); - sendMessageDelayed(Message.obtain(this, WifiManager.TRAFFIC_STATS_POLL, + sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL, mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS); } break; - } - case WifiManager.TRAFFIC_STATS_POLL: { + case TRAFFIC_STATS_POLL: if (msg.arg1 == mTrafficStatsPollToken) { notifyOnDataActivity(); - sendMessageDelayed(Message.obtain(this, WifiManager.TRAFFIC_STATS_POLL, + sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL, mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS); } break; - } + case ADD_CLIENT: + mClients.add((Messenger) msg.obj); + break; + case REMOVE_CLIENT: + mClients.remove(msg.obj); + break; } } @@ -120,10 +137,10 @@ final class WifiTrafficPoller { if (mNetworkInfo == null) return; if (mNetworkInfo.getDetailedState() == CONNECTED && mScreenOn.get()) { msg = Message.obtain(mTrafficHandler, - WifiManager.ENABLE_TRAFFIC_STATS_POLL, 1, 0); + ENABLE_TRAFFIC_STATS_POLL, 1, 0); } else { msg = Message.obtain(mTrafficHandler, - WifiManager.ENABLE_TRAFFIC_STATS_POLL, 0, 0); + ENABLE_TRAFFIC_STATS_POLL, 0, 0); } msg.sendToTarget(); } diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 32de9a2..a2df64b 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -1145,12 +1145,6 @@ public class WifiManager { /** @hide */ public static final int RSSI_PKTCNT_FETCH_FAILED = BASE + 22; - /* For system use only */ - /** @hide */ - public static final int ENABLE_TRAFFIC_STATS_POLL = BASE + 31; - /** @hide */ - public static final int TRAFFIC_STATS_POLL = BASE + 32; - /** * Passed with {@link ActionListener#onFailure}. |