Add VPN/metered connection status during FCM receives.

This commit is contained in:
Cody Henthorne
2022-05-06 11:47:57 -04:00
parent 100dc54292
commit 1a6bd3d3f2
4 changed files with 38 additions and 5 deletions

View File

@@ -0,0 +1,11 @@
package org.thoughtcrime.securesms.util
/**
* Information about the current network status by our best guess. This information
* isn't guaranteed to be 100% accurate.
*/
data class NetworkStatus(val isOnVpn: Boolean, val isMetered: Boolean) {
override fun toString(): String {
return "[isOnVpn: $isOnVpn, isMetered: $isMetered]"
}
}

View File

@@ -2,7 +2,10 @@ package org.thoughtcrime.securesms.util;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.telephony.TelephonyManager;
import androidx.annotation.NonNull;
@@ -38,7 +41,7 @@ public final class NetworkUtil {
if (SignalStore.internalValues().callingBandwidthMode() != CallManager.BandwidthMode.NORMAL) {
return SignalStore.internalValues().callingBandwidthMode();
}
return useLowBandwidthCalling(context, networkAdapter) ? CallManager.BandwidthMode.LOW : CallManager.BandwidthMode.NORMAL;
}
@@ -78,6 +81,22 @@ public final class NetworkUtil {
}
}
public static @NonNull NetworkStatus getNetworkStatus(@NonNull Context context) {
ConnectivityManager connectivityManager = ServiceUtil.getConnectivityManager(context);
if (Build.VERSION.SDK_INT >= 23) {
Network network = connectivityManager.getActiveNetwork();
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
boolean onVpn = capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
boolean isNotMetered = capabilities == null || capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
return new NetworkStatus(onVpn, !isNotMetered);
} else {
return new NetworkStatus(false, false);
}
}
private static boolean useLowBandwidthCalling(@NonNull Context context, @NonNull PeerConnection.AdapterType networkAdapter) {
switch (SignalStore.settings().getCallBandwidthMode()) {
case HIGH_ON_WIFI: