Loading services/core/java/com/android/server/connectivity/Tethering.java +80 −59 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.connectivity; import static android.hardware.usb.UsbManager.USB_CONNECTED; import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLED; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; Loading Loading @@ -208,13 +213,13 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler()); filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_SHARED); filter.addAction(Intent.ACTION_MEDIA_UNSHARED); filter.addDataScheme("file"); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler()); mDhcpRange = context.getResources().getStringArray( com.android.internal.R.array.config_tether_dhcp_range); Loading Loading @@ -779,30 +784,48 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering private class StateReceiver extends BroadcastReceiver { @Override public void onReceive(Context content, Intent intent) { String action = intent.getAction(); if (action == null) { return; } final String action = intent.getAction(); if (action == null) return; if (action.equals(UsbManager.ACTION_USB_STATE)) { handleUsbAction(intent); } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { handleConnectivityAction(intent); } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) { handleWifiApAction(intent); } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { updateConfiguration(); } } private void handleConnectivityAction(Intent intent) { final NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO); if (networkInfo == null || networkInfo.getDetailedState() == NetworkInfo.DetailedState.FAILED) { return; } if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION: " + networkInfo.toString()); mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED); } private void handleUsbAction(Intent intent) { final boolean usbConnected = intent.getBooleanExtra(USB_CONNECTED, false); final boolean rndisEnabled = intent.getBooleanExtra(USB_FUNCTION_RNDIS, false); synchronized (Tethering.this.mPublicSync) { boolean usbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); mRndisEnabled = intent.getBooleanExtra(UsbManager.USB_FUNCTION_RNDIS, false); mRndisEnabled = rndisEnabled; // start tethering if we have a request pending if (usbConnected && mRndisEnabled && mUsbTetherRequested) { tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_USB); } mUsbTetherRequested = false; } } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO); if (networkInfo != null && networkInfo.getDetailedState() != NetworkInfo.DetailedState.FAILED) { if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION"); mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED); } } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) { private void handleWifiApAction(Intent intent) { final int curState = intent.getIntExtra(EXTRA_WIFI_AP_STATE, WIFI_AP_STATE_DISABLED); synchronized (Tethering.this.mPublicSync) { int curState = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_DISABLED); switch (curState) { case WifiManager.WIFI_AP_STATE_ENABLING: // We can see this state on the way to both enabled and failure states. Loading Loading @@ -838,9 +861,6 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering break; } } } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { updateConfiguration(); } } } Loading Loading @@ -1341,7 +1361,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering final IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); mContext.registerReceiver(mBroadcastReceiver, filter); mContext.registerReceiver(mBroadcastReceiver, filter, null, mTetherMasterSM.getHandler()); } } Loading Loading
services/core/java/com/android/server/connectivity/Tethering.java +80 −59 Original line number Diff line number Diff line Loading @@ -16,6 +16,11 @@ package com.android.server.connectivity; import static android.hardware.usb.UsbManager.USB_CONNECTED; import static android.hardware.usb.UsbManager.USB_FUNCTION_RNDIS; import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_STATE; import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLED; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; Loading Loading @@ -208,13 +213,13 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler()); filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_SHARED); filter.addAction(Intent.ACTION_MEDIA_UNSHARED); filter.addDataScheme("file"); mContext.registerReceiver(mStateReceiver, filter); mContext.registerReceiver(mStateReceiver, filter, null, mTetherMasterSM.getHandler()); mDhcpRange = context.getResources().getStringArray( com.android.internal.R.array.config_tether_dhcp_range); Loading Loading @@ -779,30 +784,48 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering private class StateReceiver extends BroadcastReceiver { @Override public void onReceive(Context content, Intent intent) { String action = intent.getAction(); if (action == null) { return; } final String action = intent.getAction(); if (action == null) return; if (action.equals(UsbManager.ACTION_USB_STATE)) { handleUsbAction(intent); } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { handleConnectivityAction(intent); } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) { handleWifiApAction(intent); } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { updateConfiguration(); } } private void handleConnectivityAction(Intent intent) { final NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO); if (networkInfo == null || networkInfo.getDetailedState() == NetworkInfo.DetailedState.FAILED) { return; } if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION: " + networkInfo.toString()); mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED); } private void handleUsbAction(Intent intent) { final boolean usbConnected = intent.getBooleanExtra(USB_CONNECTED, false); final boolean rndisEnabled = intent.getBooleanExtra(USB_FUNCTION_RNDIS, false); synchronized (Tethering.this.mPublicSync) { boolean usbConnected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); mRndisEnabled = intent.getBooleanExtra(UsbManager.USB_FUNCTION_RNDIS, false); mRndisEnabled = rndisEnabled; // start tethering if we have a request pending if (usbConnected && mRndisEnabled && mUsbTetherRequested) { tetherMatchingInterfaces(true, ConnectivityManager.TETHERING_USB); } mUsbTetherRequested = false; } } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { NetworkInfo networkInfo = (NetworkInfo)intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO); if (networkInfo != null && networkInfo.getDetailedState() != NetworkInfo.DetailedState.FAILED) { if (VDBG) Log.d(TAG, "Tethering got CONNECTIVITY_ACTION"); mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED); } } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) { private void handleWifiApAction(Intent intent) { final int curState = intent.getIntExtra(EXTRA_WIFI_AP_STATE, WIFI_AP_STATE_DISABLED); synchronized (Tethering.this.mPublicSync) { int curState = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE, WifiManager.WIFI_AP_STATE_DISABLED); switch (curState) { case WifiManager.WIFI_AP_STATE_ENABLING: // We can see this state on the way to both enabled and failure states. Loading Loading @@ -838,9 +861,6 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering break; } } } else if (action.equals(Intent.ACTION_CONFIGURATION_CHANGED)) { updateConfiguration(); } } } Loading Loading @@ -1341,7 +1361,8 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering final IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); mContext.registerReceiver(mBroadcastReceiver, filter); mContext.registerReceiver(mBroadcastReceiver, filter, null, mTetherMasterSM.getHandler()); } } Loading