diff options
-rw-r--r-- | core/java/android/os/INetworkManagementService.aidl | 14 | ||||
-rw-r--r-- | services/java/com/android/server/NetworkManagementService.java | 31 |
2 files changed, 45 insertions, 0 deletions
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl index f48f45f..92041d8 100644 --- a/core/java/android/os/INetworkManagementService.aidl +++ b/core/java/android/os/INetworkManagementService.aidl @@ -148,4 +148,18 @@ interface INetworkManagementService */ void detachPppd(String tty); + /** + * Turn on USB RNDIS support - this will turn off thinks like adb/mass-storage + */ + void startUsbRNDIS(); + + /** + * Turn off USB RNDIS support + */ + void stopUsbRNDIS(); + + /** + * Check the status of USB RNDIS support + */ + boolean isUsbRNDISStarted(); } diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 1015028..958d089 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -425,4 +425,35 @@ class NetworkManagementService extends INetworkManagementService.Stub { android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService"); mConnector.doCommand(String.format("pppd detach %s", tty)); } + + public void startUsbRNDIS() throws IllegalStateException { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService"); + mConnector.doCommand("usb startrndis"); + } + + public void stopUsbRNDIS() throws IllegalStateException { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService"); + mConnector.doCommand("usb stoprndis"); + } + + public boolean isUsbRNDISStarted() throws IllegalStateException { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService"); + ArrayList<String> rsp = mConnector.doCommand("usb rndisstatus"); + + for (String line : rsp) { + String []tok = line.split(" "); + int code = Integer.parseInt(tok[0]); + if (code == NetdResponseCode.UsbRNDISStatusResult) { + if (tok[2].equals("started")) + return true; + return false; + } else { + throw new IllegalStateException(String.format("Unexpected response code %d", code)); + } + } + throw new IllegalStateException("Got an empty response"); + } } |