Add VPN/metered connection status during FCM receives.

fork-5.53.8
Cody Henthorne 2022-05-06 11:47:57 -04:00
rodzic 100dc54292
commit 1a6bd3d3f2
4 zmienionych plików z 38 dodań i 5 usunięć

Wyświetl plik

@ -1,12 +1,10 @@
package org.thoughtcrime.securesms.gcm;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
@ -18,6 +16,7 @@ import org.thoughtcrime.securesms.jobs.SubmitRateLimitPushChallengeJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.registration.PushChallengeRequest;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.NetworkUtil;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
@ -31,11 +30,12 @@ public class FcmReceiveService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.i(TAG, String.format(Locale.US,
"onMessageReceived() ID: %s, Delay: %d, Priority: %d, Original Priority: %d",
"onMessageReceived() ID: %s, Delay: %d, Priority: %d, Original Priority: %d, Network: %s",
remoteMessage.getMessageId(),
(System.currentTimeMillis() - remoteMessage.getSentTime()),
remoteMessage.getPriority(),
remoteMessage.getOriginalPriority()));
remoteMessage.getOriginalPriority(),
NetworkUtil.getNetworkStatus(this)));
String registrationChallenge = remoteMessage.getData().get("challenge");
String rateLimitChallenge = remoteMessage.getData().get("rateLimitChallenge");

Wyświetl plik

@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil;
import org.thoughtcrime.securesms.util.AppSignatureUtil;
import org.thoughtcrime.securesms.util.ByteUnit;
import org.thoughtcrime.securesms.util.DeviceProperties;
import org.thoughtcrime.securesms.util.NetworkUtil;
import org.thoughtcrime.securesms.util.ScreenDensity;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@ -65,7 +66,9 @@ public class LogSectionSystemInfo implements LogSection {
builder.append("OS Host : ").append(Build.HOST).append("\n");
builder.append("RecipientId : ").append(SignalStore.registrationValues().isRegistrationComplete() ? Recipient.self().getId() : "N/A").append("\n");
builder.append("ACI : ").append(getCensoredAci(context)).append("\n");
builder.append("Device ID : ").append(SignalStore.account().getDeviceId()).append("\n");
builder.append("Censored : ").append(ApplicationDependencies.getSignalServiceNetworkAccess().isCensored()).append("\n");
builder.append("Network status: ").append(NetworkUtil.getNetworkStatus(context)).append("\n");
builder.append("Play Services : ").append(getPlayServicesString(context)).append("\n");
builder.append("FCM : ").append(SignalStore.account().isFcmEnabled()).append("\n");
builder.append("BkgRestricted : ").append(Build.VERSION.SDK_INT >= 28 ? DeviceProperties.isBackgroundRestricted(context) : "N/A").append("\n");

Wyświetl plik

@ -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]"
}
}

Wyświetl plik

@ -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: