From 2f47b2755faffaa1a011ddeb8527bd9c99bb6106 Mon Sep 17 00:00:00 2001 From: Rebecca Silberstein Date: Thu, 25 May 2017 03:19:27 -0700 Subject: WifiStateMachine: add iface name to ap updates When softap mode changes state, add the interface name to the ap state change broadcast. This will be used by ConnectivityService to properly track interface updates and changes. Bug: 62076211 Test: frameworks/base/wifi/tests/runtests.sh Test: frameworks/opt/net/wifi/tests/wifitests/runtests.sh Test: softap integration tests locally Test: manually toggled and confirmed in logs Test: wifi integration tests Change-Id: I655dbdbf522c582973bb3fa8a2c42dadceb85a8d --- .../com/android/server/wifi/WifiServiceImpl.java | 11 ++++++++--- .../com/android/server/wifi/WifiStateMachine.java | 21 ++++++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index ec05f7cec..1b3334d5f 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -18,6 +18,7 @@ package com.android.server.wifi; import static android.net.wifi.WifiManager.EXTRA_PREVIOUS_WIFI_AP_STATE; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_FAILURE_REASON; +import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.LocalOnlyHotspotCallback.ERROR_GENERIC; import static android.net.wifi.WifiManager.LocalOnlyHotspotCallback.ERROR_NO_CHANNEL; @@ -491,7 +492,9 @@ public class WifiServiceImpl extends IWifiManager.Stub { WIFI_AP_STATE_DISABLED); final int errorCode = intent.getIntExtra(EXTRA_WIFI_AP_FAILURE_REASON, HOTSPOT_NO_ERROR); - handleWifiApStateChange(currentState, prevState, errorCode); + final String ifaceName = + intent.getStringExtra(EXTRA_WIFI_AP_INTERFACE_NAME); + handleWifiApStateChange(currentState, prevState, errorCode, ifaceName); } }, new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)); @@ -993,10 +996,12 @@ public class WifiServiceImpl extends IWifiManager.Stub { /** * Private method to handle SoftAp state changes */ - private void handleWifiApStateChange(int currentState, int previousState, int errorCode) { + private void handleWifiApStateChange( + int currentState, int previousState, int errorCode, String ifaceName) { // The AP state update from WifiStateMachine for softap Slog.d(TAG, "handleWifiApStateChange: currentState=" + currentState - + " previousState=" + previousState + " errorCode= " + errorCode); + + " previousState=" + previousState + " errorCode= " + errorCode + + " ifaceName=" + ifaceName); // check if we have a failure - since it is possible (worst case scenario where // WifiController and WifiStateMachine are out of sync wrt modes) to get two FAILED diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 7f57316a6..5ac8a3520 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -2807,6 +2807,10 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss } private void setWifiApState(int wifiApState, int reason) { + setWifiApState(wifiApState, reason, null); + } + + private void setWifiApState(int wifiApState, int reason, String ifaceName) { final int previousWifiApState = mWifiApState.get(); try { @@ -2833,6 +2837,12 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss intent.putExtra(WifiManager.EXTRA_WIFI_AP_FAILURE_REASON, reason); } + if (ifaceName == null) { + loge("Updating wifiApState with a null iface name"); + } else { + intent.putExtra(WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME, ifaceName); + } + mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); } @@ -6667,6 +6677,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss class SoftApState extends State { private SoftApManager mSoftApManager; + private String mIfaceName; private class SoftApListener implements SoftApManager.Listener { @Override @@ -6677,7 +6688,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss sendMessage(CMD_START_AP_FAILURE); } - setWifiApState(state, reason); + setWifiApState(state, reason, mIfaceName); } } @@ -6700,6 +6711,13 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss return; } + try { + mIfaceName = apInterface.getInterfaceName(); + } catch (RemoteException e) { + // Failed to get the interface name. The name will not be available for + // the enabled broadcast, but since we had an error getting the name, we most likely + // won't be able to fully start softap mode. + } WifiConfiguration config = (WifiConfiguration) message.obj; checkAndSetConnectivityInstance(); @@ -6714,6 +6732,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss @Override public void exit() { mSoftApManager = null; + mIfaceName = null; } @Override -- cgit v1.2.3