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

Commit 1b6868cc authored by Geremy Condra's avatar Geremy Condra Committed by Android (Google) Code Review
Browse files

Merge "Support multiple Vpn ManageDialogs"

parents a874c676 bf6ff2c0
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -124,6 +124,8 @@ interface IConnectivityManager


    ParcelFileDescriptor establishVpn(in VpnConfig config);
    ParcelFileDescriptor establishVpn(in VpnConfig config);


    VpnConfig getVpnConfig();

    void startLegacyVpn(in VpnProfile profile);
    void startLegacyVpn(in VpnProfile profile);


    LegacyVpnInfo getLegacyVpnInfo();
    LegacyVpnInfo getLegacyVpnInfo();
+3 −5
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.os.UserHandle;
import android.net.RouteInfo;
import android.net.RouteInfo;
import android.net.LinkAddress;
import android.net.LinkAddress;


@@ -50,15 +51,12 @@ public class VpnConfig implements Parcelable {
        return intent;
        return intent;
    }
    }


    public static PendingIntent getIntentForStatusPanel(Context context, VpnConfig config) {
    public static PendingIntent getIntentForStatusPanel(Context context) {
        Preconditions.checkNotNull(config);

        Intent intent = new Intent();
        Intent intent = new Intent();
        intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog");
        intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog");
        intent.putExtra("config", config);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY |
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY |
                Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        return PendingIntent.getActivityAsUser(context, 0, intent, 0, null, UserHandle.CURRENT);
    }
    }


    public String user;
    public String user;
+8 −1
Original line number Original line Diff line number Diff line
@@ -65,11 +65,18 @@ public class ManageDialog extends AlertActivity implements
        }
        }


        try {
        try {
            mConfig = getIntent().getParcelableExtra("config");


            mService = IConnectivityManager.Stub.asInterface(
            mService = IConnectivityManager.Stub.asInterface(
                    ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
                    ServiceManager.getService(Context.CONNECTIVITY_SERVICE));


            mConfig = mService.getVpnConfig();

            // mConfig can be null if we are a restricted user, in that case don't show this dialog
            if (mConfig == null) {
                finish();
                return;
            }

            View view = View.inflate(this, R.layout.manage, null);
            View view = View.inflate(this, R.layout.manage, null);
            if (mConfig.session != null) {
            if (mConfig.session != null) {
                ((TextView) view.findViewById(R.id.session)).setText(mConfig.session);
                ((TextView) view.findViewById(R.id.session)).setText(mConfig.session);
+14 −0
Original line number Original line Diff line number Diff line
@@ -3446,6 +3446,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        }
        }
    }
    }


    /**
     * Returns the information of the ongoing VPN. This method is used by VpnDialogs and
     * not available in ConnectivityManager.
     * Permissions are checked in Vpn class.
     * @hide
     */
    @Override
    public VpnConfig getVpnConfig() {
        int user = UserHandle.getUserId(Binder.getCallingUid());
        synchronized(mVpns) {
            return mVpns.get(user).getVpnConfig();
        }
    }

    /**
    /**
     * Callback for VPN subsystem. Currently VPN is not adapted to the service
     * Callback for VPN subsystem. Currently VPN is not adapted to the service
     * through NetworkStateTracker since it works differently. For example, it
     * through NetworkStateTracker since it works differently. For example, it
+9 −1
Original line number Original line Diff line number Diff line
@@ -519,6 +519,14 @@ public class Vpn extends BaseNetworkStateTracker {
        }
        }
    }
    }


    /**
     * Return the configuration of the currently running VPN.
     */
    public VpnConfig getVpnConfig() {
        enforceControlPermission();
        return mConfig;
    }

    @Deprecated
    @Deprecated
    public synchronized void interfaceStatusChanged(String iface, boolean up) {
    public synchronized void interfaceStatusChanged(String iface, boolean up) {
        try {
        try {
@@ -610,7 +618,7 @@ public class Vpn extends BaseNetworkStateTracker {


    private void showNotification(String label, Bitmap icon, int user) {
    private void showNotification(String label, Bitmap icon, int user) {
        if (!mEnableNotif) return;
        if (!mEnableNotif) return;
        mStatusIntent = VpnConfig.getIntentForStatusPanel(mContext, mConfig);
        mStatusIntent = VpnConfig.getIntentForStatusPanel(mContext);


        NotificationManager nm = (NotificationManager)
        NotificationManager nm = (NotificationManager)
                mContext.getSystemService(Context.NOTIFICATION_SERVICE);
                mContext.getSystemService(Context.NOTIFICATION_SERVICE);