VPN: migrate from generic Bundle to our own Parcelable VpnConfig.

Note that VpnConfig is for internal use only.
Also remove hidden methods from ConnectivityManager.

Change-Id: Ic298c4dc9a2c6c452bd8f4be6fa84e7ac489c0c4
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 3025462..2242e9e 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -19,7 +19,6 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.os.Binder;
-import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 
@@ -758,43 +757,4 @@
         } catch (RemoteException e) {
         }
     }
-
-    /**
-     * Protect a socket from routing changes. This method is limited to VPN
-     * applications, and it is always hidden to avoid direct use.
-     * @hide
-     */
-    public void protectVpn(ParcelFileDescriptor socket) {
-        try {
-            mService.protectVpn(socket);
-        } catch (RemoteException e) {
-        }
-    }
-
-    /**
-     * Prepare for a VPN application. This method is limited to VpnDialogs,
-     * and it is always hidden to avoid direct use.
-     * @hide
-     */
-    public String prepareVpn(String packageName) {
-        try {
-            return mService.prepareVpn(packageName);
-        } catch (RemoteException e) {
-            return null;
-        }
-    }
-
-    /**
-     * Configure a TUN interface and return its file descriptor. Parameters
-     * are encoded and opaque to this class. This method is limited to VPN
-     * applications, and it is always hidden to avoid direct use.
-     * @hide
-     */
-    public ParcelFileDescriptor establishVpn(Bundle config) {
-        try {
-            return mService.establishVpn(config);
-        } catch (RemoteException e) {
-            return null;
-        }
-    }
 }
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 7f3775d..fba16e1 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -20,10 +20,11 @@
 import android.net.NetworkInfo;
 import android.net.NetworkState;
 import android.net.ProxyProperties;
-import android.os.Bundle;
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 
+import com.android.internal.net.VpnConfig;
+
 /**
  * Interface that answers queries about, and allows changing, the
  * state of network connectivity.
@@ -102,5 +103,5 @@
 
     String prepareVpn(String packageName);
 
-    ParcelFileDescriptor establishVpn(in Bundle config);
+    ParcelFileDescriptor establishVpn(in VpnConfig config);
 }
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index c6f4c20..385448f 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -48,7 +48,6 @@
 import android.net.vpn.VpnManager;
 import android.net.wifi.WifiStateTracker;
 import android.os.Binder;
-import android.os.Bundle;
 import android.os.FileUtils;
 import android.os.Handler;
 import android.os.HandlerThread;
@@ -67,6 +66,7 @@
 import android.util.Slog;
 import android.util.SparseIntArray;
 
+import com.android.internal.net.VpnConfig;
 import com.android.internal.telephony.Phone;
 import com.android.server.connectivity.Tethering;
 import com.android.server.connectivity.Vpn;
@@ -2396,24 +2396,37 @@
         return value;
     }
 
-    // @see ConnectivityManager#protectVpn(ParcelFileDescriptor)
-    // Permission checks are done in Vpn class.
+    /**
+     * Protect a socket from VPN routing rules. This method is used by
+     * VpnBuilder and not available in ConnectivityManager. Permission
+     * checks are done in Vpn class.
+     * @hide
+     */
     @Override
     public void protectVpn(ParcelFileDescriptor socket) {
         mVpn.protect(socket, getDefaultInterface());
     }
 
-    // @see ConnectivityManager#prepareVpn(String)
-    // Permission checks are done in Vpn class.
+    /**
+     * Prepare for a VPN application. This method is used by VpnDialogs
+     * and not available in ConnectivityManager. Permission checks are
+     * done in Vpn class.
+     * @hide
+     */
     @Override
     public String prepareVpn(String packageName) {
         return mVpn.prepare(packageName);
     }
 
-    // @see ConnectivityManager#establishVpn(Bundle)
-    // Permission checks are done in Vpn class.
+    /**
+     * Configure a TUN interface and return its file descriptor. Parameters
+     * are encoded and opaque to this class. This method is used by VpnBuilder
+     * and not available in ConnectivityManager. Permission checks are done
+     * in Vpn class.
+     * @hide
+     */
     @Override
-    public ParcelFileDescriptor establishVpn(Bundle config) {
+    public ParcelFileDescriptor establishVpn(VpnConfig config) {
         return mVpn.establish(config);
     }