Non-functional code cleanup of ConnectivityService.

1. Remove ConnectivityService.findConnectionTypeForIface() as this can be done
   just as easily with supported APIs now.
2. Avoid making copies of Network objects as this precludes reuse of Network
   internals (e.g. socket factory, connection pool).

Change-Id: I52f92e35d769d8350471f485e408169608630082
This commit is contained in:
Paul Jensen
2015-04-06 11:54:53 -04:00
parent 582b868c44
commit e75b9e3555
4 changed files with 21 additions and 75 deletions

View File

@ -821,48 +821,6 @@ public class ConnectivityManager {
}
}
/**
* Tells each network type to set its radio power state as directed.
*
* @param turnOn a boolean, {@code true} to turn the radios on,
* {@code false} to turn them off.
* @return a boolean, {@code true} indicating success. All network types
* will be tried, even if some fail.
*
* <p>This method requires the caller to hold the permission
* {@link android.Manifest.permission#CHANGE_NETWORK_STATE}.
* {@hide}
*/
// TODO - check for any callers and remove
// public boolean setRadios(boolean turnOn) {
// try {
// return mService.setRadios(turnOn);
// } catch (RemoteException e) {
// return false;
// }
// }
/**
* Tells a given networkType to set its radio power state as directed.
*
* @param networkType the int networkType of interest.
* @param turnOn a boolean, {@code true} to turn the radio on,
* {@code} false to turn it off.
* @return a boolean, {@code true} indicating success.
*
* <p>This method requires the caller to hold the permission
* {@link android.Manifest.permission#CHANGE_NETWORK_STATE}.
* {@hide}
*/
// TODO - check for any callers and remove
// public boolean setRadio(int networkType, boolean turnOn) {
// try {
// return mService.setRadio(networkType, turnOn);
// } catch (RemoteException e) {
// return false;
// }
// }
/**
* Tells the underlying networking system that the caller wants to
* begin using the named feature. The interpretation of {@code feature}

View File

@ -118,8 +118,6 @@ interface IConnectivityManager
void captivePortalCheckCompleted(in NetworkInfo info, boolean isCaptivePortal);
int findConnectionTypeForIface(in String iface);
int checkMobileProvisioning(int suggestedTimeOutMs);
String getMobileProvisioningUrl();

View File

@ -721,7 +721,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
info = new NetworkInfo(nai.networkInfo);
lp = new LinkProperties(nai.linkProperties);
nc = new NetworkCapabilities(nai.networkCapabilities);
network = new Network(nai.network);
// Network objects are outwardly immutable so there is no point to duplicating.
// Duplicating also precludes sharing socket factories and connection pools.
network = nai.network;
subscriberId = (nai.networkMisc != null) ? nai.networkMisc.subscriberId : null;
}
info.setType(networkType);
@ -789,7 +791,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
info = new NetworkInfo(nai.networkInfo);
lp = new LinkProperties(nai.linkProperties);
nc = new NetworkCapabilities(nai.networkCapabilities);
network = new Network(nai.network);
// Network objects are outwardly immutable so there is no point to duplicating.
// Duplicating also precludes sharing socket factories and connection pools.
network = nai.network;
subscriberId = (nai.networkMisc != null) ? nai.networkMisc.subscriberId : null;
}
}
@ -967,13 +971,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
@Override
public Network[] getAllNetworks() {
enforceAccessPermission();
final ArrayList<Network> result = new ArrayList();
synchronized (mNetworkForNetId) {
final Network[] result = new Network[mNetworkForNetId.size()];
for (int i = 0; i < mNetworkForNetId.size(); i++) {
result.add(new Network(mNetworkForNetId.valueAt(i).network));
result[i] = mNetworkForNetId.valueAt(i).network;
}
return result;
}
return result.toArray(new Network[result.size()]);
}
private NetworkCapabilities getNetworkCapabilitiesAndValidation(NetworkAgentInfo nai) {
@ -2860,23 +2864,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
}
public int findConnectionTypeForIface(String iface) {
enforceConnectivityInternalPermission();
if (TextUtils.isEmpty(iface)) return ConnectivityManager.TYPE_NONE;
synchronized(mNetworkForNetId) {
for (int i = 0; i < mNetworkForNetId.size(); i++) {
NetworkAgentInfo nai = mNetworkForNetId.valueAt(i);
LinkProperties lp = nai.linkProperties;
if (lp != null && iface.equals(lp.getInterfaceName()) && nai.networkInfo != null) {
return nai.networkInfo.getType();
}
}
}
return ConnectivityManager.TYPE_NONE;
}
@Override
public int checkMobileProvisioning(int suggestedTimeOutMs) {
// TODO: Remove? Any reason to trigger a provisioning check?
@ -3130,7 +3117,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
loge("Starting user already has a VPN");
return;
}
userVpn = new Vpn(mHandler.getLooper(), mContext, mNetd, this, userId);
userVpn = new Vpn(mHandler.getLooper(), mContext, mNetd, userId);
mVpns.put(userId, userVpn);
}
}

View File

@ -69,6 +69,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.security.Credentials;
import android.security.KeyStore;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
@ -114,7 +115,6 @@ public class Vpn {
private LegacyVpnRunner mLegacyVpnRunner;
private PendingIntent mStatusIntent;
private volatile boolean mEnableTeardown = true;
private final IConnectivityManager mConnService;
private final INetworkManagementService mNetd;
private VpnConfig mConfig;
private NetworkAgent mNetworkAgent;
@ -130,10 +130,9 @@ public class Vpn {
private final int mUserHandle;
public Vpn(Looper looper, Context context, INetworkManagementService netService,
IConnectivityManager connService, int userHandle) {
int userHandle) {
mContext = context;
mNetd = netService;
mConnService = connService;
mUserHandle = userHandle;
mLooper = looper;
@ -1086,11 +1085,15 @@ public class Vpn {
// registering
mOuterInterface = mConfig.interfaze;
try {
mOuterConnection.set(
mConnService.findConnectionTypeForIface(mOuterInterface));
} catch (Exception e) {
mOuterConnection.set(ConnectivityManager.TYPE_NONE);
if (!TextUtils.isEmpty(mOuterInterface)) {
final ConnectivityManager cm = ConnectivityManager.from(mContext);
for (Network network : cm.getAllNetworks()) {
final LinkProperties lp = cm.getLinkProperties(network);
if (lp != null && mOuterInterface.equals(lp.getInterfaceName())) {
final NetworkInfo networkInfo = cm.getNetworkInfo(network);
if (networkInfo != null) mOuterConnection.set(networkInfo.getType());
}
}
}
IntentFilter filter = new IntentFilter();