ソースを参照

Merge pull request #7488 from nextcloud/vpn

More detailed check if >= Android M for metered connections
Tobias Kaminsky 4 年 前
コミット
4d481a712f

+ 12 - 1
src/main/java/com/nextcloud/client/network/ConnectivityServiceImpl.java

@@ -21,6 +21,7 @@
 package com.nextcloud.client.network;
 
 import android.net.ConnectivityManager;
+import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 
 import com.nextcloud.client.account.Server;
@@ -110,7 +111,17 @@ class ConnectivityServiceImpl implements ConnectivityService {
 
         if (networkInfo != null) {
             boolean isConnected = networkInfo.isConnectedOrConnecting();
-            boolean isMetered = ConnectivityManagerCompat.isActiveNetworkMetered(platformConnectivityManager);
+
+            // more detailed check
+            boolean isMetered;
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
+                NetworkCapabilities networkCapabilities = platformConnectivityManager.getNetworkCapabilities(
+                    platformConnectivityManager.getActiveNetwork());
+
+                isMetered = !networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
+            } else {
+                isMetered = ConnectivityManagerCompat.isActiveNetworkMetered(platformConnectivityManager);
+            }
             boolean isWifi = networkInfo.getType() == ConnectivityManager.TYPE_WIFI || hasNonCellularConnectivity();
             return new Connectivity(isConnected, isMetered, isWifi, null);
         } else {