diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmReceiveService.java b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmReceiveService.java index 44a78f518..48257816e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmReceiveService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmReceiveService.java @@ -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"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java index 4b9178de1..3a08336ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java @@ -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"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/NetworkStatus.kt b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkStatus.kt new file mode 100644 index 000000000..d25154df4 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkStatus.kt @@ -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]" + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java index 38293a8b2..7b625b0ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/NetworkUtil.java @@ -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: