diff options
| author | 2016-04-07 16:43:13 +0000 | |
|---|---|---|
| committer | 2016-04-07 16:43:15 +0000 | |
| commit | 1b83651e7fca620589a6317d3a8559e43a19485c (patch) | |
| tree | 2744487d476701d2e4d1687e425a2506116950c1 | |
| parent | 1b65b01f9317f8438e53e2b76d4790d8ed11c346 (diff) | |
| parent | d2baf792f8b7ae46aa6a35cff25eb7e3923f5125 (diff) | |
Merge "Internal API for system apps to determine default network for other apps" into nyc-dev
4 files changed, 36 insertions, 1 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index b4523412aa83..a02533792245 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -767,6 +767,28 @@ public class ConnectivityManager { } /** + * Returns a {@link Network} object corresponding to the currently active + * default data network for a specific UID. In the event that the default data + * network disconnects, the returned {@code Network} object will no longer + * be usable. This will return {@code null} when there is no default + * network for the UID. + * <p>This method requires the caller to hold the permission + * {@link android.Manifest.permission#CONNECTIVITY_INTERNAL}. + * + * @return a {@link Network} object for the current default network for the + * given UID or {@code null} if no default network is currently active + * + * @hide + */ + public Network getActiveNetworkForUid(int uid) { + try { + return mService.getActiveNetworkForUid(uid); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Configures an always-on VPN connection through a specific application. * This connection is automatically granted and persisted after a reboot. * diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 1a9c9ea4eb8d..c897c4506c1f 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -44,6 +44,7 @@ import com.android.internal.net.VpnProfile; interface IConnectivityManager { Network getActiveNetwork(); + Network getActiveNetworkForUid(int uid); NetworkInfo getActiveNetworkInfo(); NetworkInfo getActiveNetworkInfoForUid(int uid); NetworkInfo getNetworkInfo(int networkType); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 82a36b4958a6..966deb6520f4 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -991,7 +991,16 @@ public class ConnectivityService extends IConnectivityManager.Stub @Override public Network getActiveNetwork() { enforceAccessPermission(); - final int uid = Binder.getCallingUid(); + return getActiveNetworkForUidInternal(Binder.getCallingUid()); + } + + @Override + public Network getActiveNetworkForUid(int uid) { + enforceConnectivityInternalPermission(); + return getActiveNetworkForUidInternal(uid); + } + + private Network getActiveNetworkForUidInternal(final int uid) { final int user = UserHandle.getUserId(uid); int vpnNetId = NETID_UNSET; synchronized (mVpns) { diff --git a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java index 8e11511127db..2f20a4bf2228 100644 --- a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java @@ -59,6 +59,7 @@ import android.os.Message; import android.os.MessageQueue; import android.os.Messenger; import android.os.MessageQueue.IdleHandler; +import android.os.Process; import android.os.SystemClock; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; @@ -690,6 +691,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertEquals(transportToLegacyType(transport), mCm.getActiveNetworkInfo().getType()); // Test getActiveNetwork() assertNotNull(mCm.getActiveNetwork()); + assertEquals(mCm.getActiveNetwork(), mCm.getActiveNetworkForUid(Process.myUid())); switch (transport) { case TRANSPORT_WIFI: assertEquals(mCm.getActiveNetwork(), mWiFiNetworkAgent.getNetwork()); @@ -713,6 +715,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { assertNull(mCm.getActiveNetworkInfo()); // Test getActiveNetwork() assertNull(mCm.getActiveNetwork()); + assertNull(mCm.getActiveNetworkForUid(Process.myUid())); // Test getAllNetworks() assertEquals(0, mCm.getAllNetworks().length); } |