Merge "Show sign-in to network notification to all users, not just owner." into nyc-dev
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index e5f32b8..41d8b4f 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -433,15 +433,26 @@
// Array of <Network,ReadOnlyLocalLogs> tracking network validation and results
private static final int MAX_VALIDATION_LOGS = 10;
- private final ArrayDeque<Pair<Network,ReadOnlyLocalLog>> mValidationLogs =
- new ArrayDeque<Pair<Network,ReadOnlyLocalLog>>(MAX_VALIDATION_LOGS);
+ private static class ValidationLog {
+ final Network mNetwork;
+ final String mNetworkExtraInfo;
+ final ReadOnlyLocalLog mLog;
- private void addValidationLogs(ReadOnlyLocalLog log, Network network) {
+ ValidationLog(Network network, String networkExtraInfo, ReadOnlyLocalLog log) {
+ mNetwork = network;
+ mNetworkExtraInfo = networkExtraInfo;
+ mLog = log;
+ }
+ }
+ private final ArrayDeque<ValidationLog> mValidationLogs =
+ new ArrayDeque<ValidationLog>(MAX_VALIDATION_LOGS);
+
+ private void addValidationLogs(ReadOnlyLocalLog log, Network network, String networkExtraInfo) {
synchronized(mValidationLogs) {
while (mValidationLogs.size() >= MAX_VALIDATION_LOGS) {
mValidationLogs.removeLast();
}
- mValidationLogs.addFirst(new Pair(network, log));
+ mValidationLogs.addFirst(new ValidationLog(network, networkExtraInfo, log));
}
}
@@ -1950,10 +1961,10 @@
pw.println();
synchronized (mValidationLogs) {
pw.println("mValidationLogs (most recent first):");
- for (Pair<Network,ReadOnlyLocalLog> p : mValidationLogs) {
- pw.println(p.first);
+ for (ValidationLog p : mValidationLogs) {
+ pw.println(p.mNetwork + " - " + p.mNetworkExtraInfo);
pw.increaseIndent();
- p.second.dump(fd, pw, args);
+ p.mLog.dump(fd, pw, args);
pw.decreaseIndent();
}
}
@@ -3377,7 +3388,6 @@
* was no always-on VPN to start. {@code false} otherwise.
*/
private boolean startAlwaysOnVpn(int userId) {
- final String alwaysOnPackage;
synchronized (mVpns) {
Vpn vpn = mVpns.get(userId);
if (vpn == null) {
@@ -3386,27 +3396,8 @@
Slog.wtf(TAG, "User " + userId + " has no Vpn configuration");
return false;
}
- alwaysOnPackage = vpn.getAlwaysOnPackage();
- // Skip if there is no service to start.
- if (alwaysOnPackage == null) {
- return true;
- }
- // Skip if the service is already established. This isn't bulletproof: it's not bound
- // until after establish(), so if it's mid-setup onStartCommand will be sent twice,
- // which may restart the connection.
- if (vpn.getNetworkInfo().isConnected()) {
- return true;
- }
- }
- // Start the VPN service declared in the app's manifest.
- Intent serviceIntent = new Intent(VpnConfig.SERVICE_INTERFACE);
- serviceIntent.setPackage(alwaysOnPackage);
- try {
- return mContext.startServiceAsUser(serviceIntent, UserHandle.of(userId)) != null;
- } catch (RuntimeException e) {
- Slog.w(TAG, "VpnService " + serviceIntent + " failed to start", e);
- return false;
+ return vpn.startAlwaysOnVpn();
}
}
@@ -3438,17 +3429,7 @@
return false;
}
- // Save the configuration
- final long token = Binder.clearCallingIdentity();
- try {
- final ContentResolver cr = mContext.getContentResolver();
- Settings.Secure.putStringForUser(cr, Settings.Secure.ALWAYS_ON_VPN_APP,
- packageName, userId);
- Settings.Secure.putIntForUser(cr, Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN,
- (lockdown ? 1 : 0), userId);
- } finally {
- Binder.restoreCallingIdentity(token);
- }
+ vpn.saveAlwaysOnPackage();
}
return true;
}
@@ -4253,7 +4234,8 @@
synchronized (this) {
nai.networkMonitor.systemReady = mSystemReady;
}
- addValidationLogs(nai.networkMonitor.getValidationLogs(), nai.network);
+ addValidationLogs(nai.networkMonitor.getValidationLogs(), nai.network,
+ networkInfo.getExtraInfo());
if (DBG) log("registerNetworkAgent " + nai);
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_AGENT, nai));
return nai.network.netId;
@@ -5202,6 +5184,15 @@
}
if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
+ // Remove always-on package
+ synchronized (mVpns) {
+ final String alwaysOnPackage = getAlwaysOnVpnPackage(userId);
+ if (alwaysOnPackage != null) {
+ setAlwaysOnVpnPackage(userId, null, false);
+ setVpnPackageAuthorization(alwaysOnPackage, userId, false);
+ }
+ }
+
// Turn VPN off
VpnConfig vpnConfig = getVpnConfig(userId);
if (vpnConfig != null) {
@@ -5212,7 +5203,7 @@
// in the future without user intervention.
setVpnPackageAuthorization(vpnConfig.user, userId, false);
- prepareVpn(vpnConfig.user, VpnConfig.LEGACY_VPN, userId);
+ prepareVpn(null, VpnConfig.LEGACY_VPN, userId);
}
}
}