Remove newer network detection APIs.

fork-5.53.8
Cody Henthorne 2022-03-17 14:21:38 -04:00
rodzic 9d28caac00
commit f91494f813
1 zmienionych plików z 13 dodań i 93 usunięć

Wyświetl plik

@ -1,28 +1,21 @@
package org.thoughtcrime.securesms.jobmanager.impl;
import android.annotation.TargetApi;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobmanager.ConstraintObserver;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class NetworkConstraintObserver implements ConstraintObserver {
@ -59,10 +52,9 @@ public class NetworkConstraintObserver implements ConstraintObserver {
this.notifier = notifier;
this.hasInternet = isActiveNetworkConnected(application);
requestNetwork(0);
requestNetwork();
}
@TargetApi(19)
private static boolean isActiveNetworkConnected(@NonNull Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
@ -70,39 +62,22 @@ public class NetworkConstraintObserver implements ConstraintObserver {
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private void requestNetwork(int retryCount) {
optimisticallyUpdateNetworkState();
private void requestNetwork() {
application.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
hasInternet = isActiveNetworkConnected(context);
if (Build.VERSION.SDK_INT < 24 || retryCount > 5) {
hasInternet = isActiveNetworkConnected(application);
application.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
hasInternet = isActiveNetworkConnected(context);
if (hasInternet) {
Log.i(TAG, logPrefix() + "Network available.");
notifier.onConstraintMet(REASON);
} else {
Log.w(TAG, logPrefix() + "Network unavailable.");
}
notifyListeners();
if (hasInternet) {
Log.i(TAG, logPrefix() + "Network available.");
notifier.onConstraintMet(REASON);
} else {
Log.w(TAG, logPrefix() + "Network unavailable.");
}
}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
} else {
NetworkRequest request = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build();
ConnectivityManager connectivityManager = Objects.requireNonNull(ContextCompat.getSystemService(application, ConnectivityManager.class));
if (Build.VERSION.SDK_INT >= 26) {
connectivityManager.requestNetwork(request, new NetworkStateListener26(retryCount), 1000);
} else {
connectivityManager.requestNetwork(request, new NetworkStateListener24());
notifyListeners();
}
}
}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
public boolean hasInternet() {
@ -125,22 +100,6 @@ public class NetworkConstraintObserver implements ConstraintObserver {
}
}
/**
* The newer API methods are occasionally unreliable. This lets us assume the best case scenario, by using both new and old methods and taking the most
* optimistic result.
*/
private void optimisticallyUpdateNetworkState() {
final boolean currentState = hasInternet;
final boolean newState = isActiveNetworkConnected(application);
if (newState && !currentState) {
Log.w(TAG, logPrefix() + "isActiveNetworkConnected() thinks we're connected, but other methods indicate we're not. Assuming we have internet and notifying listeners.");
this.hasInternet = newState;
notifier.onConstraintMet(REASON);
notifyListeners();
}
}
private void notifyListeners() {
synchronized (networkListeners) {
//noinspection SimplifyStreamApiCallChains
@ -152,45 +111,6 @@ public class NetworkConstraintObserver implements ConstraintObserver {
return "[API " + Build.VERSION.SDK_INT + "] ";
}
@TargetApi(24)
private class NetworkStateListener24 extends ConnectivityManager.NetworkCallback {
@Override
public void onAvailable(@NonNull Network network) {
Log.i(TAG, logPrefix() + "Network available. " + network.hashCode());
hasInternet = true;
notifier.onConstraintMet(REASON);
notifyListeners();
}
@Override
public void onLost(@NonNull Network network) {
Log.w(TAG, logPrefix() + "Network unavailable. " + network.hashCode());
if (isActiveNetworkConnected(ApplicationDependencies.getApplication())) {
Log.w(TAG, logPrefix() + "We got the onLost() event, but isActiveNetworkConnected() returns true. Assuming we have internet.");
hasInternet = true;
} else {
hasInternet = false;
}
notifyListeners();
}
}
@TargetApi(26)
private class NetworkStateListener26 extends NetworkStateListener24 {
private final int retryCount;
private final long createTime = System.currentTimeMillis();
public NetworkStateListener26(int retryCount) {
this.retryCount = retryCount;
}
@Override
public void onUnavailable() {
Log.w(TAG, logPrefix() + "No networks available or timeout hit. Retry count: " + retryCount + ", Time since creation: " + (System.currentTimeMillis() - createTime) + " ms");
requestNetwork(retryCount + 1);
}
}
public interface NetworkListener {
void onNetworkChanged();
}