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

Commit 7c3eacb6 authored by Benedict Wong's avatar Benedict Wong Committed by Automerger Merge Worker
Browse files

Merge changes I67470903,Ia80da6d4,I332397f4 am: 7d042ad4 am: f1dacac9 am: 639c60d6

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

Change-Id: Ic90ee169932a8c5db483dea4df64c9cf0129f9a4
parents 59c50443 639c60d6
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -26884,11 +26884,13 @@ package android.net {
  public class VpnManager {
    method public void deleteProvisionedVpnProfile();
    method @Nullable public android.net.VpnProfileState getProvisionedVpnProfileState();
    method @Nullable public android.content.Intent provisionVpnProfile(@NonNull android.net.PlatformVpnProfile);
    method @Deprecated public void startProvisionedVpnProfile();
    method @NonNull public String startProvisionedVpnProfileSession();
    method public void stopProvisionedVpnProfile();
    field public static final String ACTION_VPN_MANAGER_EVENT = "android.net.action.VPN_MANAGER_EVENT";
    field public static final String CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED = "android.net.category.EVENT_ALWAYS_ON_STATE_CHANGED";
    field public static final String CATEGORY_EVENT_DEACTIVATED_BY_USER = "android.net.category.EVENT_DEACTIVATED_BY_USER";
    field public static final String CATEGORY_EVENT_IKE_ERROR = "android.net.category.EVENT_IKE_ERROR";
    field public static final String CATEGORY_EVENT_NETWORK_ERROR = "android.net.category.EVENT_NETWORK_ERROR";
@@ -26905,6 +26907,22 @@ package android.net {
    field public static final String EXTRA_UNDERLYING_LINK_PROPERTIES = "android.net.extra.UNDERLYING_LINK_PROPERTIES";
    field public static final String EXTRA_UNDERLYING_NETWORK = "android.net.extra.UNDERLYING_NETWORK";
    field public static final String EXTRA_UNDERLYING_NETWORK_CAPABILITIES = "android.net.extra.UNDERLYING_NETWORK_CAPABILITIES";
    field public static final String EXTRA_VPN_PROFILE_STATE = "android.net.extra.VPN_PROFILE_STATE";
  }
  public final class VpnProfileState implements android.os.Parcelable {
    ctor public VpnProfileState(int, @Nullable String, boolean, boolean);
    method public int describeContents();
    method @Nullable public String getSessionId();
    method public int getState();
    method public boolean isAlwaysOn();
    method public boolean isLockdownEnabled();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.net.VpnProfileState> CREATOR;
    field public static final int STATE_CONNECTED = 2; // 0x2
    field public static final int STATE_CONNECTING = 1; // 0x1
    field public static final int STATE_DISCONNECTED = 0; // 0x0
    field public static final int STATE_FAILED = 3; // 0x3
  }
  public class VpnService extends android.app.Service {
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net;

import android.net.Network;
import android.net.VpnProfileState;

import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
@@ -40,6 +41,7 @@ interface IVpnManager {
    void deleteVpnProfile(String packageName);
    String startVpnProfile(String packageName);
    void stopVpnProfile(String packageName);
    VpnProfileState getProvisionedVpnProfileState(String packageName);

    /** Always-on VPN APIs */
    boolean isAlwaysOnVpnPackageSupported(int userId, String packageName);
+32 −0
Original line number Diff line number Diff line
@@ -160,6 +160,23 @@ public class VpnManager {
    public static final String CATEGORY_EVENT_DEACTIVATED_BY_USER =
            "android.net.category.EVENT_DEACTIVATED_BY_USER";

    /**
     * The always-on state of this VPN was changed
     *
     * <p>This may be the result of a user changing VPN settings, or a Device Policy Manager app
     * having changed the VPN policy.
     */
    @SdkConstant(SdkConstant.SdkConstantType.INTENT_CATEGORY)
    public static final String CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED =
            "android.net.category.EVENT_ALWAYS_ON_STATE_CHANGED";

    /**
     * The VpnProfileState at the time that this event occurred.
     *
     * <p>This extra may be null if the VPN was revoked by the user, or the profile was deleted.
     */
    public static final String EXTRA_VPN_PROFILE_STATE = "android.net.extra.VPN_PROFILE_STATE";

    /**
     * The key of the session that experienced this event, as a {@code String}.
     *
@@ -402,6 +419,21 @@ public class VpnManager {
        }
    }

    /**
     * Retrieve the VpnProfileState for the profile provisioned by the calling package.
     *
     * @return the VpnProfileState with current information, or null if there was no profile
     *         provisioned by the calling package.
     */
    @Nullable
    public VpnProfileState getProvisionedVpnProfileState() {
        try {
            return mService.getProvisionedVpnProfileState(mContext.getOpPackageName());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Resets all VPN settings back to factory defaults.
     * @hide
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

parcelable VpnProfileState;
 No newline at end of file
+153 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Describe the state of VPN.
 */
public final class VpnProfileState implements Parcelable {
    /** The VPN has not been started, or some other VPN is active. */
    public static final int STATE_DISCONNECTED = 0;
    /** The VPN is attempting to connect, potentially after a failure. */
    public static final int STATE_CONNECTING = 1;
    /** The VPN was established successfully. */
    public static final int STATE_CONNECTED = 2;
    /** A non-recoverable error has occurred, and will not be retried. */
    public static final int STATE_FAILED = 3;
    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = {"STATE_"}, value = {
            STATE_CONNECTED,
            STATE_CONNECTING,
            STATE_DISCONNECTED,
            STATE_FAILED,
    })
    public @interface State {}

    @State private final int mState;
    private final String mSessionKey;
    private final boolean mAlwaysOn;
    private final boolean mLockdown;

    public VpnProfileState(@State int state, @Nullable String sessionKey, boolean alwaysOn,
            boolean lockdown) {
        mState = state;
        mSessionKey = sessionKey;
        mAlwaysOn = alwaysOn;
        mLockdown = lockdown;
    }

    /**
     * Returns the state of the Platform VPN
     *
     * <p>This state represents the internal connection state of the VPN. This state may diverge
     * from the VPN Network's state during error and recovery handling.
     */
    @State public int getState() {
        return mState;
    }

    /**
     * Retrieves the Session Key
     *
     * <p>The session key is an ephemeral key uniquely identifying the session for a Platform VPN.
     * The lifetime of this key is tied to the lifetime of the VPN session. In other words,
     * reprovisioning of the VPN profile, restarting of the device, or manually restarting the
     * platform VPN session will result in a new VPN session, and a new key.
     *
     * @return the unique key for the platform VPN session, or null if it is not running.
     */
    @Nullable
    public String getSessionId() {
        return mSessionKey;
    }

    /**
     * Returns the always-on status of the PlatformVpnProfile.
     *
     * <p>If the PlatformVpnProfile is set to be running in always-on mode, the system will ensure
     * that the profile is always started, and restarting it when necessary (e.g. after reboot).
     *
     * <p>Always-on can be set by an appropriately privileged user via the Settings VPN menus, or by
     * the Device Policy Manager app programmatically.
     *
     * See DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean, Set)
     */
    public boolean isAlwaysOn() {
        return mAlwaysOn;
    }

    /**
     * Returns the lockdown mode status of the PlatformVpnProfile.
     *
     * <p>In lockdown mode, the system will ensure that apps are not allowed to bypass the VPN,
     * including during startup or failure of the VPN.
     *
     * <p>Lockdown mode can be set by an appropriately privileged user via the Settings VPN menus,
     * or by the Device Policy Manager app programmatically.
     *
     * See DevicePolicyManager#setAlwaysOnVpnPackage(ComponentName, String, boolean, Set)
     */
    public boolean isLockdownEnabled() {
        return mLockdown;
    }

    /**
     * Implement the Parcelable interface
     */
    public int describeContents() {
        return 0;
    }

    /**
     * Implement the Parcelable interface
     */
    public void writeToParcel(@NonNull Parcel out, int flags) {
        out.writeInt(mState);
        out.writeString(mSessionKey);
        out.writeBoolean(mAlwaysOn);
        out.writeBoolean(mLockdown);
    }

    @NonNull
    public static final Parcelable.Creator<VpnProfileState> CREATOR =
            new Parcelable.Creator<VpnProfileState>() {
                public VpnProfileState createFromParcel(Parcel in) {
                    return new VpnProfileState(in);
                }

                public VpnProfileState[] newArray(int size) {
                    return new VpnProfileState[size];
                }
            };

    private VpnProfileState(Parcel in) {
        mState = in.readInt();
        mSessionKey = in.readString();
        mAlwaysOn = in.readBoolean();
        mLockdown = in.readBoolean();
    }
}
Loading