summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2010-03-10 17:24:46 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-03-10 17:24:46 -0800
commit94d4b034adff90f681b0937bde8f7657b855929b (patch)
tree43ad401d9058075028e905d1180abf97a48c03b7 /services/java
parent6c604690acbdb2c0717e85ae0d91718e1410d3e8 (diff)
parent030f5e18dfa71673708deb75e8aa1f196bebbd99 (diff)
downloadframeworks_base-94d4b034adff90f681b0937bde8f7657b855929b.zip
frameworks_base-94d4b034adff90f681b0937bde8f7657b855929b.tar.gz
frameworks_base-94d4b034adff90f681b0937bde8f7657b855929b.tar.bz2
Merge "Disable USB Tethering when UMS is active"
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/connectivity/Tethering.java42
1 files changed, 31 insertions, 11 deletions
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index e52cd47..ebd3314 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -33,6 +33,7 @@ import android.net.INetworkManagementEventObserver;
import android.net.NetworkInfo;
import android.os.BatteryManager;
import android.os.Binder;
+import android.os.Environment;
import android.os.IBinder;
import android.os.INetworkManagementService;
import android.os.Message;
@@ -72,7 +73,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private String[] mTetherableWifiRegexs;
private String[] mUpstreamIfaceRegexs;
- private HashMap<String, TetherInterfaceSM> mIfaces;
+ private HashMap<String, TetherInterfaceSM> mIfaces; // all tethered/tetherable ifaces
private BroadcastReceiver mStateReceiver;
@@ -86,14 +87,20 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
private static final String DNS_DEFAULT_SERVER1 = "8.8.8.8";
private static final String DNS_DEFAULT_SERVER2 = "4.2.2.2";
- private boolean mDunRequired;
+ private boolean mDunRequired; // configuration info - must use DUN apn on 3g
private boolean mUseHiPri;
+
private String mUpstreamIfaceName;
private HierarchicalStateMachine mTetherMasterSM;
private Notification mTetheredNotification;
+ // whether we can tether is the && of these two - they come in as separate
+ // broadcasts so track them so we can decide what to do when either changes
+ private boolean mUsbMassStorageOff; // track the status of USB Mass Storage
+ private boolean mUsbConnected; // track the status of USB connection
+
public Tethering(Context context) {
Log.d(TAG, "Tethering starting");
mContext = context;
@@ -117,6 +124,10 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_BOOT_COMPLETED);
+ filter.addAction(Intent.ACTION_MEDIA_SHARED);
+ filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
+ mUsbMassStorageOff = !Environment.MEDIA_SHARED.equals(
+ Environment.getExternalStorageState());
mStateReceiver = new StateReceiver();
mContext.registerReceiver(mStateReceiver, filter);
@@ -381,17 +392,28 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
}
}
+ private void updateUsbStatus() {
+ boolean enable = mUsbConnected && mUsbMassStorageOff;
+
+ if (mBooted) {
+ enableUsbIfaces(enable);
+ }
+ }
+
private class StateReceiver extends BroadcastReceiver {
public void onReceive(Context content, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- boolean usbConnected = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
+ mUsbConnected = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
== BatteryManager.BATTERY_PLUGGED_USB);
- if (mBooted) {
- Tethering.this.enableUsbIfaces(usbConnected); // add or remove them
- } else {
- mDeferedUsbConnection = usbConnected;
- }
+ Tethering.this.updateUsbStatus();
+ } else if (action.equals(Intent.ACTION_MEDIA_SHARED)) {
+ mUsbMassStorageOff = false;
+ updateUsbStatus();
+ }
+ else if (action.equals(Intent.ACTION_MEDIA_UNSHARED)) {
+ mUsbMassStorageOff = true;
+ updateUsbStatus();
} else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
@@ -409,9 +431,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub {
} catch (RemoteException e) {}
} else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
mBooted = true;
- if (mDeferedUsbConnection) {
- Tethering.this.enableUsbIfaces(true);
- }
+ updateUsbStatus();
}
}
}