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

Commit ace5a908 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Switch Settings from IConnectivityManager to VpnManager."

parents e3be1ecb 04d34ced
Loading
Loading
Loading
Loading
+14 −24
Original line number Diff line number Diff line
@@ -19,12 +19,10 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.net.VpnManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -64,7 +62,7 @@ public class VpnPreferenceController extends AbstractPreferenceController
    private final String mToggleable;
    private final UserManager mUserManager;
    private final ConnectivityManager mConnectivityManager;
    private final IConnectivityManager mConnectivityManagerService;
    private final VpnManager mVpnManager;
    private Preference mPreference;

    public VpnPreferenceController(Context context) {
@@ -74,8 +72,7 @@ public class VpnPreferenceController extends AbstractPreferenceController
        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
        mConnectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        mConnectivityManagerService = IConnectivityManager.Stub.asInterface(
                ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
        mVpnManager = context.getSystemService(VpnManager.class);
    }

    @Override
@@ -122,28 +119,21 @@ public class VpnPreferenceController extends AbstractPreferenceController
        }
        // Copied from SystemUI::SecurityControllerImpl
        SparseArray<VpnConfig> vpns = new SparseArray<>();
        try {
        final List<UserInfo> users = mUserManager.getUsers();
        for (UserInfo user : users) {
                VpnConfig cfg = mConnectivityManagerService.getVpnConfig(user.id);
            VpnConfig cfg = mVpnManager.getVpnConfig(user.id);
            if (cfg == null) {
                continue;
            } else if (cfg.legacy) {
                // Legacy VPNs should do nothing if the network is disconnected. Third-party
                // VPN warnings need to continue as traffic can still go to the app.
                    final LegacyVpnInfo legacyVpn =
                            mConnectivityManagerService.getLegacyVpnInfo(user.id);
                final LegacyVpnInfo legacyVpn = mVpnManager.getLegacyVpnInfo(user.id);
                if (legacyVpn == null || legacyVpn.state != LegacyVpnInfo.STATE_CONNECTED) {
                    continue;
                }
            }
            vpns.put(user.id, cfg);
        }
        } catch (RemoteException rme) {
            // Roll back to previous state
            Log.e(TAG, "Unable to list active VPNs", rme);
            return;
        }
        final UserInfo userInfo = mUserManager.getUserInfo(UserHandle.myUserId());
        final int uid;
        if (userInfo.isRestricted()) {
+12 −24
Original line number Diff line number Diff line
@@ -18,17 +18,13 @@ package com.android.settings.vpn2;

import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageInfo;
import android.net.IConnectivityManager;
import android.net.ConnectivityManager;
import android.net.VpnManager;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;

import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
@@ -52,9 +48,9 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
    private PackageInfo mPackageInfo;
    private Listener mListener;

    private ConnectivityManager mConnectivityManager;
    private UserManager mUserManager;
    private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
            ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
    private VpnManager mVpnManager;

    @Override
    public int getMetricsCategory() {
@@ -97,7 +93,9 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
        mUserManager = UserManager.get(getContext());
        mVpnManager = getContext().getSystemService(VpnManager.class);
    }

    @Override
@@ -145,14 +143,9 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
            return;
        }
        final int userId = getUserId();
        try {
            mService.setVpnPackageAuthorization(
        mVpnManager.setVpnPackageAuthorization(
                mPackageInfo.packageName, userId, VpnManager.TYPE_VPN_NONE);
        onDisconnect(dialog);
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to forget authorization of " + mPackageInfo.packageName +
                    " for user " + userId, e);
        }

        if (mListener != null) {
            mListener.onForget();
@@ -164,15 +157,10 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App
            return;
        }
        final int userId = getUserId();
        try {
            if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mService, userId))) {
                mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false,
                        /* lockdownWhitelist */ null);
                mService.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Failed to disconnect package " + mPackageInfo.packageName +
                    " for user " + userId, e);
        if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mVpnManager, userId))) {
            mConnectivityManager.setAlwaysOnVpnPackageForUser(userId, null,
                    /* lockdownEnabled */ false, /* lockdownAllowlist */ null);
            mVpnManager.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
        }
    }

+5 −13
Original line number Diff line number Diff line
@@ -29,10 +29,8 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.VpnManager;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
@@ -72,7 +70,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment
    private PackageManager mPackageManager;
    private DevicePolicyManager mDevicePolicyManager;
    private ConnectivityManager mConnectivityManager;
    private IConnectivityManager mConnectivityService;
    private VpnManager mVpnManager;

    // VPN app info
    private final int mUserId = UserHandle.myUserId();
@@ -125,8 +123,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment
        mPackageManager = getContext().getPackageManager();
        mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class);
        mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
        mConnectivityService = IConnectivityManager.Stub
                .asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
        mVpnManager = getContext().getSystemService(VpnManager.class);

        mPreferenceVersion = findPreference(KEY_VERSION);
        mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
@@ -335,13 +332,8 @@ public class AppManagementFragment extends SettingsPreferenceFragment
     * @return {@code true} if another VPN (VpnService or legacy) is connected or set as always-on.
     */
    private boolean isAnotherVpnActive() {
        try {
            final VpnConfig config = mConnectivityService.getVpnConfig(mUserId);
        final VpnConfig config = mVpnManager.getVpnConfig(mUserId);
        return config != null && !TextUtils.equals(config.user, mPackageName);
        } catch (RemoteException e) {
            Log.w(TAG, "Failure to look up active VPN", e);
            return false;
        }
    }

    public static class CannotConnectFragment extends InstrumentedDialogFragment {
+3 −6
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.VpnManager;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.security.Credentials;
import android.security.KeyStore;
@@ -52,9 +51,8 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
    private static final String ARG_EDITING = "editing";
    private static final String ARG_EXISTS = "exists";

    private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
            ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
    private Context mContext;
    private VpnManager mService;


    @Override
@@ -80,6 +78,7 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
    public void onAttach(final Context context) {
        super.onAttach(context);
        mContext = context;
        mService = context.getSystemService(VpnManager.class);
    }

    @Override
@@ -212,8 +211,6 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements
                mService.startLegacyVpn(profile);
            } catch (IllegalStateException e) {
                Toast.makeText(mContext, R.string.vpn_no_network, Toast.LENGTH_LONG).show();
            } catch (RemoteException e) {
                Log.e(TAG, "Failed to connect", e);
            }
        }
    }
+10 −20
Original line number Diff line number Diff line
@@ -30,16 +30,14 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.IConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.VpnManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.security.Credentials;
@@ -92,10 +90,9 @@ public class VpnSettings extends RestrictedSettingsFragment implements
            .removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
            .build();

    private final IConnectivityManager mConnectivityService = IConnectivityManager.Stub
            .asInterface(ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
    private ConnectivityManager mConnectivityManager;
    private UserManager mUserManager;
    private VpnManager mVpnManager;

    private final KeyStore mKeyStore = KeyStore.getInstance();

@@ -124,6 +121,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements

        mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
        mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        mVpnManager = (VpnManager) getSystemService(Context.VPN_MANAGEMENT_SERVICE);

        mUnavailable = isUiRestricted();
        setHasOptionsMenu(!mUnavailable);
@@ -467,14 +465,10 @@ public class VpnSettings extends RestrictedSettingsFragment implements

    @WorkerThread
    private Map<String, LegacyVpnInfo> getConnectedLegacyVpns() {
        try {
            mConnectedLegacyVpn = mConnectivityService.getLegacyVpnInfo(UserHandle.myUserId());
        mConnectedLegacyVpn = mVpnManager.getLegacyVpnInfo(UserHandle.myUserId());
        if (mConnectedLegacyVpn != null) {
            return Collections.singletonMap(mConnectedLegacyVpn.key, mConnectedLegacyVpn);
        }
        } catch (RemoteException e) {
            Log.e(LOG_TAG, "Failure updating VPN list with connected legacy VPNs", e);
        }
        return Collections.emptyMap();
    }

@@ -482,16 +476,12 @@ public class VpnSettings extends RestrictedSettingsFragment implements
    private Set<AppVpnInfo> getConnectedAppVpns() {
        // Mark connected third-party services
        Set<AppVpnInfo> connections = new ArraySet<>();
        try {
        for (UserHandle profile : mUserManager.getUserProfiles()) {
                VpnConfig config = mConnectivityService.getVpnConfig(profile.getIdentifier());
            VpnConfig config = mVpnManager.getVpnConfig(profile.getIdentifier());
            if (config != null && !config.legacy) {
                connections.add(new AppVpnInfo(profile.getIdentifier(), config.user));
            }
        }
        } catch (RemoteException e) {
            Log.e(LOG_TAG, "Failure updating VPN list with connected app VPNs", e);
        }
        return connections;
    }

Loading