Merge "Have a method to stop VPN and send event to VPN app" am: 4e08dae7d2

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2194337

Change-Id: I019295826411924d4753a2975dbe39b9d12372f7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Lucas Lin
2022-08-29 03:06:32 +00:00
committed by Automerger Merge Worker

View File

@@ -1196,25 +1196,7 @@ public class Vpn {
mContext.unbindService(mConnection); mContext.unbindService(mConnection);
cleanupVpnStateLocked(); cleanupVpnStateLocked();
} else if (mVpnRunner != null) { } else if (mVpnRunner != null) {
// Build intent first because the sessionKey will be reset after performing stopVpnRunnerAndNotifyAppLocked(mPackage);
// 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);
}
} }
try { try {
@@ -4068,6 +4050,29 @@ public class Vpn {
} }
} }
@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. * Stops an already running VPN Profile for the given package.
* *
@@ -4084,18 +4089,7 @@ public class Vpn {
// To stop the VPN profile, the caller must be the current prepared package and must be // To stop the VPN profile, the caller must be the current prepared package and must be
// running an Ikev2VpnProfile. // running an Ikev2VpnProfile.
if (isCurrentIkev2VpnLocked(packageName)) { if (isCurrentIkev2VpnLocked(packageName)) {
// Build intent first because the sessionKey will be reset after performing stopVpnRunnerAndNotifyAppLocked(packageName);
// 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);
} }
} }