diff options
author | Girish Moturu <gmoturu@google.com> | 2017-07-12 08:11:14 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-07-12 08:11:14 +0000 |
commit | b632bc7d83a50e33ee73582c0fd268c4b5b5d5fc (patch) | |
tree | 2ecb5d1ac910edff5936c0f7e6ccacb4b84b796e | |
parent | dd6750840ad8c0020f8004b3756be3ed8b56004c (diff) | |
parent | 67c41d5c239e616fc27087ebb7d03c6741684cd6 (diff) | |
download | sl4a-b632bc7d83a50e33ee73582c0fd268c4b5b5d5fc.tar.gz |
Merge "Facade functions for wifi tethering tests" am: d0393a27bd
am: 67c41d5c23
Change-Id: Ia1e09d1a6d68b26af222fd73112d188002c46394
-rw-r--r-- | Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java | 116 |
1 files changed, 109 insertions, 7 deletions
diff --git a/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java index a559aad9..5b5f1e14 100644 --- a/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java +++ b/Common/src/com/googlecode/android_scripting/facade/ConnectivityManagerFacade.java @@ -17,6 +17,8 @@ package com.googlecode.android_scripting.facade; import android.app.Service; +import android.app.usage.NetworkStats.Bucket; +import android.app.usage.NetworkStatsManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -28,11 +30,13 @@ import android.net.LinkProperties; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; +import android.net.NetworkPolicy; +import android.net.NetworkPolicyManager; import android.net.NetworkRequest; import android.net.StringNetworkSpecifier; import android.os.Bundle; +import android.os.RemoteException; import android.provider.Settings; - import com.googlecode.android_scripting.Log; import com.googlecode.android_scripting.facade.wifi.WifiAwareManagerFacade; import com.googlecode.android_scripting.jsonrpc.RpcReceiver; @@ -44,13 +48,17 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; +import java.util.List; /** * Access ConnectivityManager functions. @@ -405,6 +413,8 @@ public class ConnectivityManagerFacade extends RpcReceiver { } private final ConnectivityManager mManager; + private NetworkPolicyManager mNetPolicyManager; + private NetworkStatsManager mNetStatsManager; private final Service mService; private final Context mContext; private final ConnectivityReceiver mConnectivityReceiver; @@ -422,6 +432,9 @@ public class ConnectivityManagerFacade extends RpcReceiver { mService = manager.getService(); mContext = mService.getBaseContext(); mManager = (ConnectivityManager) mService.getSystemService(Context.CONNECTIVITY_SERVICE); + mNetPolicyManager = NetworkPolicyManager.from(mContext); + mNetStatsManager = (NetworkStatsManager) + mService.getSystemService(Context.NETWORK_STATS_SERVICE); mEventFacade = manager.getReceiver(EventFacade.class); mConnectivityReceiver = new ConnectivityReceiver(); mTrackingConnectivityStateChange = false; @@ -788,9 +801,7 @@ public class ConnectivityManagerFacade extends RpcReceiver { mManager.stopTethering(type); } - @Rpc(description = "Returns the link local IPv6 address of the interface.") - public String connectivityGetLinkLocalIpv6Address(@RpcParameter(name = "ifaceName") - String ifaceName) { + private Enumeration<InetAddress> getInetAddrsForInterface(String ifaceName) { NetworkInterface iface = null; try { iface = NetworkInterface.getByName(ifaceName); @@ -798,12 +809,20 @@ public class ConnectivityManagerFacade extends RpcReceiver { return null; } - if (iface == null) { + if (iface == null) return null; - } + return iface.getInetAddresses(); + } + @Rpc(description = "Returns the link local IPv6 address of the interface.") + public String connectivityGetLinkLocalIpv6Address(@RpcParameter(name = "ifaceName") + String ifaceName) { Inet6Address inet6Address = null; - Enumeration<InetAddress> inetAddresses = iface.getInetAddresses(); + Enumeration<InetAddress> inetAddresses = getInetAddrsForInterface(ifaceName); + if (inetAddresses == null) { + return null; + } + while (inetAddresses.hasMoreElements()) { InetAddress addr = inetAddresses.nextElement(); if (addr instanceof Inet6Address) { @@ -821,11 +840,94 @@ public class ConnectivityManagerFacade extends RpcReceiver { return inet6Address.getHostAddress(); } + @Rpc(description = "Return IPv4 address of an interface") + public List<String> connectivityGetIPv4Addresses( + @RpcParameter(name = "ifaceName") String ifaceName) { + Enumeration<InetAddress> inetAddresses + = getInetAddrsForInterface(ifaceName); + if (inetAddresses == null) + return null; + + List<String> inetAddrs = new ArrayList<String>(); + while (inetAddresses.hasMoreElements()) { + InetAddress addr = inetAddresses.nextElement(); + if (addr instanceof Inet4Address) { + Inet4Address inet4Address = (Inet4Address) addr; + inetAddrs.add(inet4Address.getHostAddress()); + } + } + + return inetAddrs; + } + + @Rpc(description = "Return IPv6 addrs of an interface except link local") + public List<String> connectivityGetIPv6Addresses( + @RpcParameter(name = "ifaceName") String ifaceName) { + Enumeration<InetAddress> inetAddresses + = getInetAddrsForInterface(ifaceName); + if (inetAddresses == null) + return null; + + List<String> inetAddrs = new ArrayList<String>(); + while (inetAddresses.hasMoreElements()) { + InetAddress addr = inetAddresses.nextElement(); + if (addr instanceof Inet6Address) { + if (((Inet6Address) addr).isLinkLocalAddress()) + continue; + Inet6Address inet6Address = (Inet6Address) addr; + inetAddrs.add(inet6Address.getHostAddress()); + } + } + + return inetAddrs; + } + @Rpc(description = "Returns active link properties") public LinkProperties connectivityGetActiveLinkProperties() { return mManager.getActiveLinkProperties(); } + @Rpc(description = "Factory reset of network policies") + public void connectivityFactoryResetNetworkPolicies(String subscriberId) { + mNetPolicyManager.factoryReset(subscriberId); + } + + @Rpc(description = "Set data usage limit for subscription ID") + public void connectivitySetDataUsageLimit( + String subscriberId, String dataLimit) { + NetworkPolicy[] allPolicies = mNetPolicyManager.getNetworkPolicies(); + for(int i=0; i<allPolicies.length; i++) { + String subId = allPolicies[i].template.getSubscriberId(); + if(subId!=null && subId.equals(subscriberId)) { + allPolicies[i].limitBytes = Long.valueOf(dataLimit); + break; + } + } + mNetPolicyManager.setNetworkPolicies(allPolicies); + } + + @Rpc(description = "Get network stats for device") + public long connectivityQuerySummaryForDevice( + String subscriberId, Long startTime, Long endTime) + throws SecurityException, RemoteException { + Bucket bucket = mNetStatsManager.querySummaryForDevice( + ConnectivityManager.TYPE_MOBILE, subscriberId, startTime, endTime); + return bucket.getTxBytes() + bucket.getRxBytes(); + } + + @Rpc(description = "Returns all interfaces on the android deivce") + public List<NetworkInterface> connectivityGetNetworkInterfaces() { + List<NetworkInterface> interfaces = null; + try { + interfaces = Collections.list( + NetworkInterface.getNetworkInterfaces()); + } catch (SocketException e) { + return null; + }; + + return interfaces; + } + @Override public void shutdown() { connectivityStopTrackingConnectivityStateChange(); |