summaryrefslogtreecommitdiffstats
path: root/core/java
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2010-03-02 17:25:02 -0800
committerRobert Greenwalt <robdroid@android.com>2010-03-03 15:14:29 -0800
commit5a73506cdd466f2b96686ced3ff0f7ca224d1143 (patch)
tree9818d6ef9b3f3dd9658d9ea7eb6ccb9de65d38f5 /core/java
parent9b10ef5fe85e9d29721ff0cd15161f960d38a8db (diff)
downloadframeworks_base-5a73506cdd466f2b96686ced3ff0f7ca224d1143.zip
frameworks_base-5a73506cdd466f2b96686ced3ff0f7ca224d1143.tar.gz
frameworks_base-5a73506cdd466f2b96686ced3ff0f7ca224d1143.tar.bz2
Add error reporting for Tethering.
Also make the usb interface configuration more robust so retries are possible. Makes all Tethering errors recoverable - no harm letting them try again anyway. Worst case is they need to reboot.
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/net/ConnectivityManager.java60
-rw-r--r--core/java/android/net/IConnectivityManager.aidl8
-rw-r--r--core/java/com/android/internal/app/TetherActivity.java41
3 files changed, 83 insertions, 26 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index c76aca1..a6668e7 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -364,7 +364,7 @@ public class ConnectivityManager
/**
* Sets the persisted value for enabling/disabling Mobile data.
*
- * @param allowMobileData Whether the mobile data connection should be
+ * @param enabled Whether the mobile data connection should be
* used or not.
* @hide
*/
@@ -418,22 +418,35 @@ public class ConnectivityManager
/**
* {@hide}
*/
- public boolean tether(String iface) {
+ public String[] getTetheringErroredIfaces() {
+ try {
+ return mService.getTetheringErroredIfaces();
+ } catch (RemoteException e) {
+ return new String[0];
+ }
+ }
+
+ /**
+ * @return error A TETHER_ERROR value indicating success or failure type
+ * {@hide}
+ */
+ public int tether(String iface) {
try {
return mService.tether(iface);
} catch (RemoteException e) {
- return false;
+ return TETHER_ERROR_SERVICE_UNAVAIL;
}
}
/**
+ * @return error A TETHER_ERROR value indicating success or failure type
* {@hide}
*/
- public boolean untether(String iface) {
+ public int untether(String iface) {
try {
return mService.untether(iface);
} catch (RemoteException e) {
- return false;
+ return TETHER_ERROR_SERVICE_UNAVAIL;
}
}
@@ -469,4 +482,41 @@ public class ConnectivityManager
return new String[0];
}
}
+
+ /** {@hide} */
+ public static final int TETHER_ERROR_NO_ERROR = 0;
+ /** {@hide} */
+ public static final int TETHER_ERROR_UNKNOWN_IFACE = 1;
+ /** {@hide} */
+ public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2;
+ /** {@hide} */
+ public static final int TETHER_ERROR_UNSUPPORTED = 3;
+ /** {@hide} */
+ public static final int TETHER_ERROR_UNAVAIL_IFACE = 4;
+ /** {@hide} */
+ public static final int TETHER_ERROR_MASTER_ERROR = 5;
+ /** {@hide} */
+ public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6;
+ /** {@hide} */
+ public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7;
+ /** {@hide} */
+ public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8;
+ /** {@hide} */
+ public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9;
+ /** {@hide} */
+ public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10;
+
+ /**
+ * @param iface The name of the interface we're interested in
+ * @return error The error code of the last error tethering or untethering the named
+ * interface
+ * {@hide}
+ */
+ public int getLastTetherError(String iface) {
+ try {
+ return mService.getLastTetherError(iface);
+ } catch (RemoteException e) {
+ return TETHER_ERROR_SERVICE_UNAVAIL;
+ }
+ }
}
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 2514693..b05c2ed 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -55,9 +55,11 @@ interface IConnectivityManager
void setMobileDataEnabled(boolean enabled);
- boolean tether(String iface);
+ int tether(String iface);
- boolean untether(String iface);
+ int untether(String iface);
+
+ int getLastTetherError(String iface);
boolean isTetheringSupported();
@@ -65,6 +67,8 @@ interface IConnectivityManager
String[] getTetheredIfaces();
+ String[] getTetheringErroredIfaces();
+
String[] getTetherableUsbRegexs();
String[] getTetherableWifiRegexs();
diff --git a/core/java/com/android/internal/app/TetherActivity.java b/core/java/com/android/internal/app/TetherActivity.java
index 5d71231..7f83b2b 100644
--- a/core/java/com/android/internal/app/TetherActivity.java
+++ b/core/java/com/android/internal/app/TetherActivity.java
@@ -62,6 +62,7 @@ public class TetherActivity extends AlertActivity implements
// determine if we advertise tethering or untethering
ConnectivityManager cm =
(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
+
mTethered = cm.getTetheredIfaces().length;
int tetherable = cm.getTetherableIfaces().length;
if ((mTethered == 0) && (tetherable == 0)) {
@@ -116,7 +117,7 @@ public class TetherActivity extends AlertActivity implements
* {@inheritDoc}
*/
public void onClick(DialogInterface dialog, int which) {
- boolean error = false;
+ int error = ConnectivityManager.TETHER_ERROR_NO_ERROR;
if (which == POSITIVE_BUTTON) {
ConnectivityManager cm =
@@ -130,24 +131,17 @@ public class TetherActivity extends AlertActivity implements
for (String t : tetherable) {
for (String r : usbRegexs) {
if (t.matches(r)) {
- if (!cm.tether(t))
- error = true;
+ error = cm.tether(t);
break;
}
}
}
- if (error) {
- showTetheringError();
- }
+ showTetheringError(error);
} else {
for (String t : tethered) {
- if (!cm.untether(t)) {
- error = true;
- }
- }
- if (error) {
- showUnTetheringError();
+ error = cm.untether(t);
}
+ showUnTetheringError(error);
}
}
// No matter what, finish the activity
@@ -163,14 +157,23 @@ public class TetherActivity extends AlertActivity implements
}
}
- private void showTetheringError() {
- Toast.makeText(this, com.android.internal.R.string.tether_error_message,
- Toast.LENGTH_LONG).show();
+ private void showTetheringError(int error) {
+ switch(error) {
+ case ConnectivityManager.TETHER_ERROR_NO_ERROR:
+ return;
+ default:
+ Toast.makeText(this, com.android.internal.R.string.tether_error_message,
+ Toast.LENGTH_LONG).show();
+ }
}
- private void showUnTetheringError() {
- Toast.makeText(this, com.android.internal.R.string.tether_stop_error_message,
- Toast.LENGTH_LONG).show();
+ private void showUnTetheringError(int error) {
+ switch(error) {
+ case ConnectivityManager.TETHER_ERROR_NO_ERROR:
+ return;
+ default:
+ Toast.makeText(this, com.android.internal.R.string.tether_stop_error_message,
+ Toast.LENGTH_LONG).show();
+ }
}
-
}