From 31fbd556f634185189fb143cbcf3b1264b16470d Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Thu, 4 Apr 2019 07:22:23 -0700 Subject: [PATCH] WifiManager: Restore network pin behavior on enableNetwork This code is mostly a NO-OP for most apps & OEM's. The pinner only takes effect if the app's target SDK < Android L. But, there might be some OEM's who may want to enable this for all apps. Bug: 129906426 Test: Compiles Change-Id: Iccf67ba0d4ea8d9c5d3561a128908611636b420e --- wifi/java/android/net/wifi/WifiManager.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 9b3796f57d30e..140e9c324dfa7 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -36,11 +36,14 @@ import android.content.pm.ParceledListSlice; import android.net.ConnectivityManager; import android.net.DhcpInfo; import android.net.Network; +import android.net.NetworkCapabilities; +import android.net.NetworkRequest; import android.net.wifi.hotspot2.IProvisioningCallback; import android.net.wifi.hotspot2.OsuProvider; import android.net.wifi.hotspot2.PasspointConfiguration; import android.net.wifi.hotspot2.ProvisioningCallback; import android.os.Binder; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -56,6 +59,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; +import com.android.server.net.NetworkPinner; import dalvik.system.CloseGuard; @@ -1895,12 +1899,27 @@ public class WifiManager { */ @Deprecated public boolean enableNetwork(int netId, boolean attemptConnect) { + final boolean pin = attemptConnect && mTargetSdkVersion < Build.VERSION_CODES.LOLLIPOP; + if (pin) { + NetworkRequest request = new NetworkRequest.Builder() + .clearCapabilities() + .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .build(); + NetworkPinner.pin(mContext, request); + } + boolean success; try { success = mService.enableNetwork(netId, attemptConnect, mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } + + if (pin && !success) { + NetworkPinner.unpin(); + } + return success; }