Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7d6aeeb authored by Lucas Lin's avatar Lucas Lin Committed by Automerger Merge Worker
Browse files

Merge "Add a new API startProvisionedVpnProfileSession()" am: f0524f16 am:...

Merge "Add a new API startProvisionedVpnProfileSession()" am: f0524f16 am: f6bf9b14 am: fed12c46 am: 6f1fdda0

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

Change-Id: Iab1f1ace8f8685fc36dfce2e85bb36b2d2b2fb7b
parents 9c0c9b0e 6f1fdda0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -26702,7 +26702,8 @@ package android.net {
  public class VpnManager {
    method public void deleteProvisionedVpnProfile();
    method @Nullable public android.content.Intent provisionVpnProfile(@NonNull android.net.PlatformVpnProfile);
    method public void startProvisionedVpnProfile();
    method @Deprecated public void startProvisionedVpnProfile();
    method @NonNull public String startProvisionedVpnProfileSession();
    method public void stopProvisionedVpnProfile();
  }
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ interface IVpnManager {
    /** VpnManager APIs */
    boolean provisionVpnProfile(in VpnProfile profile, String packageName);
    void deleteVpnProfile(String packageName);
    void startVpnProfile(String packageName);
    String startVpnProfile(String packageName);
    void stopVpnProfile(String packageName);

    /** Always-on VPN APIs */
+18 −3
Original line number Diff line number Diff line
@@ -317,17 +317,32 @@ public class VpnManager {
    /**
     * Request the startup of a previously provisioned VPN.
     *
     * @return A unique key corresponding to this session.
     * @throws SecurityException exception if user or device settings prevent this VPN from being
     *         setup, or if user consent has not been granted
     */
    public void startProvisionedVpnProfile() {
    @NonNull
    public String startProvisionedVpnProfileSession() {
        try {
            mService.startVpnProfile(mContext.getOpPackageName());
            return mService.startVpnProfile(mContext.getOpPackageName());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Request the startup of a previously provisioned VPN.
     *
     * @throws SecurityException exception if user or device settings prevent this VPN from being
     *         setup, or if user consent has not been granted
     * @deprecated This method is replaced by startProvisionedVpnProfileSession which returns a
     *             session key for the caller to diagnose the errors.
     */
    @Deprecated
    public void startProvisionedVpnProfile() {
        startProvisionedVpnProfileSession();
    }

    /** Tear down the VPN provided by the calling app (if any) */
    public void stopProvisionedVpnProfile() {
        try {
+3 −2
Original line number Diff line number Diff line
@@ -340,17 +340,18 @@ public class VpnManagerService extends IVpnManager.Stub {
     * <p>This is designed to serve the VpnManager only; settings-based VPN profiles are managed
     * exclusively by the Settings app, and passed into the platform at startup time.
     *
     * @return A unique key corresponding to this session.
     * @throws IllegalArgumentException if no profile was found for the given package name.
     * @hide
     */
    @Override
    public void startVpnProfile(@NonNull String packageName) {
    public String startVpnProfile(@NonNull String packageName) {
        final int callingUid = Binder.getCallingUid();
        verifyCallingUidAndPackage(packageName, callingUid);
        final int user = UserHandle.getUserId(callingUid);
        synchronized (mVpns) {
            throwIfLockdownEnabled();
            mVpns.get(user).startVpnProfile(packageName);
            return mVpns.get(user).startVpnProfile(packageName);
        }
    }

+6 −1
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ import java.util.Objects;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
@@ -205,6 +206,7 @@ public class Vpn {
    private final NetworkInfo mNetworkInfo;
    private int mLegacyState;
    @VisibleForTesting protected String mPackage;
    private String mSessionKey;
    private int mOwnerUID;
    private boolean mIsPackageTargetingAtLeastQ;
    @VisibleForTesting
@@ -2517,6 +2519,7 @@ public class Vpn {
            mProfile = profile;
            mIpSecManager = (IpSecManager) mContext.getSystemService(Context.IPSEC_SERVICE);
            mNetworkCallback = new VpnIkev2Utils.Ikev2VpnNetworkCallback(TAG, this);
            mSessionKey = UUID.randomUUID().toString();
        }

        @Override
@@ -2838,6 +2841,7 @@ public class Vpn {
         */
        private void disconnectVpnRunner() {
            mActiveNetwork = null;
            mSessionKey = null;
            mIsRunning = false;

            resetIkeState();
@@ -3329,7 +3333,7 @@ public class Vpn {
     *
     * @param packageName the package name of the app provisioning this profile
     */
    public synchronized void startVpnProfile(@NonNull String packageName) {
    public synchronized String startVpnProfile(@NonNull String packageName) {
        requireNonNull(packageName, "No package name provided");

        enforceNotRestrictedUser();
@@ -3347,6 +3351,7 @@ public class Vpn {
            }

            startVpnProfilePrivileged(profile, packageName);
            return mSessionKey;
        } finally {
            Binder.restoreCallingIdentity(token);
        }