Merge "Have a method to stop VPN and send event to VPN app" am: 4e08dae7d2 am: e3325d736a am: e07cecf636
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2194337
Change-Id: I553bdae4e1bd4180077c3d763886b75d8dc28a0e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index b4e91b5..481c5db 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -1196,25 +1196,7 @@
mContext.unbindService(mConnection);
cleanupVpnStateLocked();
} else if (mVpnRunner != null) {
- // Build intent first because the sessionKey will be reset after performing
- // VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
- // VpnRunner.exit() to prevent design being changed in the future.
- // TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
- // ConnectivityServiceTest.
- final int ownerUid = mOwnerUID;
- Intent intent = null;
- if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
- intent = buildVpnManagerEventIntent(
- VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
- -1 /* errorClass */, -1 /* errorCode*/, mPackage,
- getSessionKeyLocked(), makeVpnProfileStateLocked(),
- null /* underlyingNetwork */, null /* nc */, null /* lp */);
- }
- // cleanupVpnStateLocked() is called from mVpnRunner.exit()
- mVpnRunner.exit();
- if (intent != null && isVpnApp(mPackage)) {
- notifyVpnManagerVpnStopped(mPackage, ownerUid, intent);
- }
+ stopVpnRunnerAndNotifyAppLocked(mPackage);
}
try {
@@ -4068,6 +4050,29 @@
}
}
+ @GuardedBy("this")
+ private void stopVpnRunnerAndNotifyAppLocked(@NonNull String packageName) {
+ // Build intent first because the sessionKey will be reset after performing
+ // VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
+ // VpnRunner.exit() to prevent design being changed in the future.
+ // TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
+ // ConnectivityServiceTest.
+ final int ownerUid = mOwnerUID;
+ Intent intent = null;
+ if (SdkLevel.isAtLeastT() && isVpnApp(packageName)) {
+ intent = buildVpnManagerEventIntent(
+ VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
+ -1 /* errorClass */, -1 /* errorCode*/, packageName,
+ getSessionKeyLocked(), makeVpnProfileStateLocked(),
+ null /* underlyingNetwork */, null /* nc */, null /* lp */);
+ }
+ // cleanupVpnStateLocked() is called from mVpnRunner.exit()
+ mVpnRunner.exit();
+ if (intent != null && isVpnApp(packageName)) {
+ notifyVpnManagerVpnStopped(packageName, ownerUid, intent);
+ }
+ }
+
/**
* Stops an already running VPN Profile for the given package.
*
@@ -4084,18 +4089,7 @@
// To stop the VPN profile, the caller must be the current prepared package and must be
// running an Ikev2VpnProfile.
if (isCurrentIkev2VpnLocked(packageName)) {
- // Build intent first because the sessionKey will be reset after performing
- // VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
- // VpnRunner.exit() to prevent design being changed in the future.
- final int ownerUid = mOwnerUID;
- final Intent intent = buildVpnManagerEventIntent(
- VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
- -1 /* errorClass */, -1 /* errorCode*/, packageName,
- getSessionKeyLocked(), makeVpnProfileStateLocked(),
- null /* underlyingNetwork */, null /* nc */, null /* lp */);
-
- mVpnRunner.exit();
- notifyVpnManagerVpnStopped(packageName, ownerUid, intent);
+ stopVpnRunnerAndNotifyAppLocked(packageName);
}
}