summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2013-05-01 11:31:41 -0700
committer Android Git Automerger <android-git-automerger@android.com> 2013-05-01 11:31:41 -0700
commita49cea63a080b7c5f884626ba3c0309cb6e49f99 (patch)
tree19ad5b5d35d8df937b6fd2fa2a69aa81c6855446
parent334c04e2f0eb62c6c9db73da0ec0021abffceb92 (diff)
parent033168b1b0e6fc24a01bef6ec65948663f0ad3b7 (diff)
am 033168b1: Merge "Lockdown VPN handles its own connection teardown." into jb-mr2-dev
* commit '033168b1b0e6fc24a01bef6ec65948663f0ad3b7': Lockdown VPN handles its own connection teardown.
-rw-r--r--services/java/com/android/server/connectivity/Vpn.java19
-rw-r--r--services/java/com/android/server/net/LockdownVpnTracker.java7
2 files changed, 23 insertions, 3 deletions
diff --git a/services/java/com/android/server/connectivity/Vpn.java b/services/java/com/android/server/connectivity/Vpn.java
index 10c7e2776921..e7d1fa4ede21 100644
--- a/services/java/com/android/server/connectivity/Vpn.java
+++ b/services/java/com/android/server/connectivity/Vpn.java
@@ -95,7 +95,8 @@ public class Vpn extends BaseNetworkStateTracker {
private Connection mConnection;
private LegacyVpnRunner mLegacyVpnRunner;
private PendingIntent mStatusIntent;
- private boolean mEnableNotif = true;
+ private volatile boolean mEnableNotif = true;
+ private volatile boolean mEnableTeardown = true;
private final IConnectivityManager mConnService;
public Vpn(Context context, VpnCallback callback, INetworkManagementService netService,
@@ -113,10 +114,23 @@ public class Vpn extends BaseNetworkStateTracker {
}
}
+ /**
+ * Set if this object is responsible for showing its own notifications. When
+ * {@code false}, notifications are handled externally by someone else.
+ */
public void setEnableNotifications(boolean enableNotif) {
mEnableNotif = enableNotif;
}
+ /**
+ * Set if this object is responsible for watching for {@link NetworkInfo}
+ * teardown. When {@code false}, teardown is handled externally by someone
+ * else.
+ */
+ public void setEnableTeardown(boolean enableTeardown) {
+ mEnableTeardown = enableTeardown;
+ }
+
@Override
protected void startMonitoringInternal() {
// Ignored; events are sent through callbacks for now
@@ -647,6 +661,8 @@ public class Vpn extends BaseNetworkStateTracker {
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ if (!mEnableTeardown) return;
+
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
if (intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE,
ConnectivityManager.TYPE_NONE) == mOuterConnection.get()) {
@@ -688,7 +704,6 @@ public class Vpn extends BaseNetworkStateTracker {
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mContext.registerReceiver(mBroadcastReceiver, filter);
-
}
public void check(String interfaze) {
diff --git a/services/java/com/android/server/net/LockdownVpnTracker.java b/services/java/com/android/server/net/LockdownVpnTracker.java
index 5b6e48545adb..e25192525e33 100644
--- a/services/java/com/android/server/net/LockdownVpnTracker.java
+++ b/services/java/com/android/server/net/LockdownVpnTracker.java
@@ -128,7 +128,10 @@ public class LockdownVpnTracker {
mAcceptedEgressIface = null;
mVpn.stopLegacyVpn();
}
- if (egressDisconnected) return;
+ if (egressDisconnected) {
+ hideNotification();
+ return;
+ }
final int egressType = egressInfo.getType();
if (vpnInfo.getDetailedState() == DetailedState.FAILED) {
@@ -192,6 +195,7 @@ public class LockdownVpnTracker {
Slog.d(TAG, "initLocked()");
mVpn.setEnableNotifications(false);
+ mVpn.setEnableTeardown(false);
final IntentFilter resetFilter = new IntentFilter(ACTION_LOCKDOWN_RESET);
mContext.registerReceiver(mResetReceiver, resetFilter, CONNECTIVITY_INTERNAL, null);
@@ -235,6 +239,7 @@ public class LockdownVpnTracker {
mContext.unregisterReceiver(mResetReceiver);
mVpn.setEnableNotifications(true);
+ mVpn.setEnableTeardown(true);
}
public void reset() {