diff options
Diffstat (limited to 'services/java/com')
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; |