kopia lustrzana https://github.com/ryukoposting/Signal-Android
Add VPN/metered connection status during FCM receives.
rodzic
100dc54292
commit
1a6bd3d3f2
|
@ -1,12 +1,10 @@
|
||||||
package org.thoughtcrime.securesms.gcm;
|
package org.thoughtcrime.securesms.gcm;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
|
||||||
|
|
||||||
import com.google.firebase.messaging.FirebaseMessagingService;
|
import com.google.firebase.messaging.FirebaseMessagingService;
|
||||||
import com.google.firebase.messaging.RemoteMessage;
|
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.keyvalue.SignalStore;
|
||||||
import org.thoughtcrime.securesms.registration.PushChallengeRequest;
|
import org.thoughtcrime.securesms.registration.PushChallengeRequest;
|
||||||
import org.thoughtcrime.securesms.util.FeatureFlags;
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||||
|
import org.thoughtcrime.securesms.util.NetworkUtil;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -31,11 +30,12 @@ public class FcmReceiveService extends FirebaseMessagingService {
|
||||||
@Override
|
@Override
|
||||||
public void onMessageReceived(RemoteMessage remoteMessage) {
|
public void onMessageReceived(RemoteMessage remoteMessage) {
|
||||||
Log.i(TAG, String.format(Locale.US,
|
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(),
|
remoteMessage.getMessageId(),
|
||||||
(System.currentTimeMillis() - remoteMessage.getSentTime()),
|
(System.currentTimeMillis() - remoteMessage.getSentTime()),
|
||||||
remoteMessage.getPriority(),
|
remoteMessage.getPriority(),
|
||||||
remoteMessage.getOriginalPriority()));
|
remoteMessage.getOriginalPriority(),
|
||||||
|
NetworkUtil.getNetworkStatus(this)));
|
||||||
|
|
||||||
String registrationChallenge = remoteMessage.getData().get("challenge");
|
String registrationChallenge = remoteMessage.getData().get("challenge");
|
||||||
String rateLimitChallenge = remoteMessage.getData().get("rateLimitChallenge");
|
String rateLimitChallenge = remoteMessage.getData().get("rateLimitChallenge");
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil;
|
||||||
import org.thoughtcrime.securesms.util.AppSignatureUtil;
|
import org.thoughtcrime.securesms.util.AppSignatureUtil;
|
||||||
import org.thoughtcrime.securesms.util.ByteUnit;
|
import org.thoughtcrime.securesms.util.ByteUnit;
|
||||||
import org.thoughtcrime.securesms.util.DeviceProperties;
|
import org.thoughtcrime.securesms.util.DeviceProperties;
|
||||||
|
import org.thoughtcrime.securesms.util.NetworkUtil;
|
||||||
import org.thoughtcrime.securesms.util.ScreenDensity;
|
import org.thoughtcrime.securesms.util.ScreenDensity;
|
||||||
import org.thoughtcrime.securesms.util.ServiceUtil;
|
import org.thoughtcrime.securesms.util.ServiceUtil;
|
||||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
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("OS Host : ").append(Build.HOST).append("\n");
|
||||||
builder.append("RecipientId : ").append(SignalStore.registrationValues().isRegistrationComplete() ? Recipient.self().getId() : "N/A").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("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("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("Play Services : ").append(getPlayServicesString(context)).append("\n");
|
||||||
builder.append("FCM : ").append(SignalStore.account().isFcmEnabled()).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");
|
builder.append("BkgRestricted : ").append(Build.VERSION.SDK_INT >= 28 ? DeviceProperties.isBackgroundRestricted(context) : "N/A").append("\n");
|
||||||
|
|
|
@ -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]"
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,10 @@ package org.thoughtcrime.securesms.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.Network;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
|
import android.os.Build;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
@ -38,7 +41,7 @@ public final class NetworkUtil {
|
||||||
if (SignalStore.internalValues().callingBandwidthMode() != CallManager.BandwidthMode.NORMAL) {
|
if (SignalStore.internalValues().callingBandwidthMode() != CallManager.BandwidthMode.NORMAL) {
|
||||||
return SignalStore.internalValues().callingBandwidthMode();
|
return SignalStore.internalValues().callingBandwidthMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
return useLowBandwidthCalling(context, networkAdapter) ? CallManager.BandwidthMode.LOW : CallManager.BandwidthMode.NORMAL;
|
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) {
|
private static boolean useLowBandwidthCalling(@NonNull Context context, @NonNull PeerConnection.AdapterType networkAdapter) {
|
||||||
switch (SignalStore.settings().getCallBandwidthMode()) {
|
switch (SignalStore.settings().getCallBandwidthMode()) {
|
||||||
case HIGH_ON_WIFI:
|
case HIGH_ON_WIFI:
|
||||||
|
|
Ładowanie…
Reference in New Issue