diff options
author | Robert Greenwalt <robdroid@android.com> | 2010-03-10 17:24:46 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-03-10 17:24:46 -0800 |
commit | 94d4b034adff90f681b0937bde8f7657b855929b (patch) | |
tree | 43ad401d9058075028e905d1180abf97a48c03b7 /services/java | |
parent | 6c604690acbdb2c0717e85ae0d91718e1410d3e8 (diff) | |
parent | 030f5e18dfa71673708deb75e8aa1f196bebbd99 (diff) | |
download | frameworks_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.java | 42 |
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(); } } } |