/* ActiveModeWarden
* / \
* / \
* ConcreteClientModeManager DefaultClientModeManager
* (Client Mode + Scan Only Mode) (Wifi off)
* / \
* / \
* ClientModeImpl ScanOnlyModeImpl
*/
一、startHal
packages/apps/Settings/src/com/android/settings/wifi/WifiEnabler.java
frameworks/base/wifi/java/android/net/wifi/WifiManager.java
packages/modules/Wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
packages/modules/Wifi/service/java/com/android/server/wifi/ActiveModeWarden.java
packages/modules/Wifi/service/java/com/android/server/wifi/ConcreteClientModeManager.java
packages/modules/Wifi/service/java/com/android/server/wifi/WifiNative.java
packages/modules/Wifi/service/java/com/android/server/wifi/WifiVendorHal.java
packages/modules/Wifi/service/java/com/android/server/wifi/HalDeviceManager.java
WifiEnabler.java ->mWifiManager.setWifiEnabled(isChecked)
---->WifiManager.java =>setWifiEnabled(boolean enabled)
--------->WifiServiceImpl.java =>setWifiEnabled(String packageName, boolean enable): mActiveModeWarden.wifiToggled(new WorkSource(Binder.getCallingUid(), packageName));
-------------->ActiveModeWarden.java =>wifiToggled(WorkSource requestorWs): mWifiController.sendMessage(WifiController.CMD_WIFI_TOGGLED, requestorWs);//发送CMD_WIFI_TOGGLED消息到EnabledState中
-->ActiveModeWarden$DisabledState
->processMessageFiltered(Message msg)
-->case CMD_WIFI_TOGGLED
handleStaTogg