summaryrefslogtreecommitdiffstats
path: root/services/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com')
-rw-r--r--services/java/com/android/server/NetworkManagementService.java43
-rw-r--r--services/java/com/android/server/SystemServer.java1
-rw-r--r--services/java/com/android/server/wm/InputManager.java13
3 files changed, 52 insertions, 5 deletions
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 30de385..782e7d7 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -188,10 +188,9 @@ class NetworkManagementService extends INetworkManagementService.Stub {
// only enable bandwidth control when support exists, and requested by
// system setting.
- // TODO: eventually migrate to be always enabled
final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists();
final boolean shouldEnable =
- Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 0) != 0;
+ Settings.Secure.getInt(mContext.getContentResolver(), NETSTATS_ENABLED, 1) != 0;
mBandwidthControlEnabled = false;
if (hasKernelSupport && shouldEnable) {
@@ -447,6 +446,28 @@ class NetworkManagementService extends INetworkManagementService.Stub {
}
}
+ public void setInterfaceDown(String iface) throws IllegalStateException {
+ try {
+ InterfaceConfiguration ifcg = getInterfaceConfig(iface);
+ ifcg.interfaceFlags = ifcg.interfaceFlags.replace("up", "down");
+ setInterfaceConfig(iface, ifcg);
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException(
+ "Unable to communicate with native daemon for interface down - " + e);
+ }
+ }
+
+ public void setInterfaceUp(String iface) throws IllegalStateException {
+ try {
+ InterfaceConfiguration ifcg = getInterfaceConfig(iface);
+ ifcg.interfaceFlags = ifcg.interfaceFlags.replace("down", "up");
+ setInterfaceConfig(iface, ifcg);
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException(
+ "Unable to communicate with native daemon for interface up - " + e);
+ }
+ }
+
/* TODO: This is right now a IPv4 only function. Works for wifi which loses its
IPv6 addresses on interface down, but we need to do full clean up here */
public void clearInterfaceAddresses(String iface) throws IllegalStateException {
@@ -855,7 +876,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService");
try {
- mConnector.doCommand(String.format("softap fwreload " + wlanIface + " AP"));
+ wifiFirmwareReload(wlanIface, "AP");
mConnector.doCommand(String.format("softap start " + wlanIface));
if (wifiConfig == null) {
mConnector.doCommand(String.format("softap set " + wlanIface + " " + softapIface));
@@ -902,6 +923,20 @@ class NetworkManagementService extends INetworkManagementService.Stub {
}
}
+ /* @param mode can be "AP", "STA" or "P2P" */
+ public void wifiFirmwareReload(String wlanIface, String mode) throws IllegalStateException {
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.CHANGE_WIFI_STATE, "NetworkManagementService");
+
+ try {
+ mConnector.doCommand(String.format("softap fwreload " + wlanIface + " " + mode));
+ } catch (NativeDaemonConnectorException e) {
+ throw new IllegalStateException("Error communicating to native daemon ", e);
+ }
+ }
+
public void stopAccessPoint(String wlanIface) throws IllegalStateException {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
@@ -910,7 +945,7 @@ class NetworkManagementService extends INetworkManagementService.Stub {
try {
mConnector.doCommand("softap stopap");
mConnector.doCommand("softap stop " + wlanIface);
- mConnector.doCommand(String.format("softap fwreload " + wlanIface + " STA"));
+ wifiFirmwareReload(wlanIface, "STA");
} catch (NativeDaemonConnectorException e) {
throw new IllegalStateException("Error communicating to native daemon to stop soft AP",
e);
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 4a0dcdf..77d0457 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -315,6 +315,7 @@ class ServerThread extends Thread {
ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
networkStats.bindConnectivityManager(connectivity);
networkPolicy.bindConnectivityManager(connectivity);
+ wifiP2p.connectivityServiceReady();
} catch (Throwable e) {
Slog.e(TAG, "Failure starting Connectivity Service", e);
}
diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java
index 1d0857b..c8b18c8 100644
--- a/services/java/com/android/server/wm/InputManager.java
+++ b/services/java/com/android/server/wm/InputManager.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import com.android.internal.util.XmlUtils;
+import com.android.server.Watchdog;
import org.xmlpull.v1.XmlPullParser;
@@ -52,7 +53,7 @@ import java.util.ArrayList;
/*
* Wraps the C++ InputManager and provides its callbacks.
*/
-public class InputManager {
+public class InputManager implements Watchdog.Monitor {
static final String TAG = "InputManager";
private static final boolean DEBUG = false;
@@ -94,6 +95,7 @@ public class InputManager {
InputChannel toChannel);
private static native void nativeSetPointerSpeed(int speed);
private static native String nativeDump();
+ private static native void nativeMonitor();
// Input event injection constants defined in InputDispatcher.h.
static final int INPUT_EVENT_INJECTION_SUCCEEDED = 0;
@@ -135,6 +137,9 @@ public class InputManager {
Slog.i(TAG, "Initializing input manager");
nativeInit(mContext, mCallbacks, looper.getQueue());
+
+ // Add ourself to the Watchdog monitors.
+ Watchdog.getInstance().addMonitor(this);
}
public void start() {
@@ -456,6 +461,12 @@ public class InputManager {
}
}
+ // Called by the heartbeat to ensure locks are not held indefnitely (for deadlock detection).
+ public void monitor() {
+ synchronized (mInputFilterLock) { }
+ nativeMonitor();
+ }
+
private final class InputFilterHost implements InputFilter.Host {
private boolean mDisconnected;