mirror of
https://github.com/deltachat/deltachat-android.git
synced 2025-10-03 17:59:39 +02:00
use more modern methods to track connectivity changes (#2403)
* use registerDefaultNetworkCallback() instead of deprecated CONNECTIVITY_ACTION CONNECTIVITY_ACTION is deprecated, see https://developer.android.com/reference/android/net/ConnectivityManager#CONNECTIVITY_ACTION, instead, we call maybe_network() at ConnectivityManager.NetworkCallback::onAvailable() callback. * add more debug info
This commit is contained in:
parent
c95bfb544d
commit
f9286975d6
2 changed files with 45 additions and 4 deletions
|
@ -4,6 +4,10 @@ import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.LinkProperties;
|
||||||
|
import android.net.NetworkCapabilities;
|
||||||
|
import android.os.Build;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
@ -16,9 +20,9 @@ import androidx.work.PeriodicWorkRequest;
|
||||||
import androidx.work.WorkManager;
|
import androidx.work.WorkManager;
|
||||||
|
|
||||||
import com.b44t.messenger.DcAccounts;
|
import com.b44t.messenger.DcAccounts;
|
||||||
import com.b44t.messenger.DcEventEmitter;
|
|
||||||
import com.b44t.messenger.DcContext;
|
import com.b44t.messenger.DcContext;
|
||||||
import com.b44t.messenger.DcEvent;
|
import com.b44t.messenger.DcEvent;
|
||||||
|
import com.b44t.messenger.DcEventEmitter;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
|
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
|
||||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||||
|
@ -54,6 +58,11 @@ public class ApplicationContext extends MultiDexApplication {
|
||||||
public NotificationCenter notificationCenter;
|
public NotificationCenter notificationCenter;
|
||||||
private JobManager jobManager;
|
private JobManager jobManager;
|
||||||
|
|
||||||
|
private int debugOnAvailableCount;
|
||||||
|
private int debugOnBlockedStatusChangedCount;
|
||||||
|
private int debugOnCapabilitiesChangedCount;
|
||||||
|
private int debugOnLinkPropertiesChangedCount;
|
||||||
|
|
||||||
public static ApplicationContext getInstance(@NonNull Context context) {
|
public static ApplicationContext getInstance(@NonNull Context context) {
|
||||||
return (ApplicationContext)context.getApplicationContext();
|
return (ApplicationContext)context.getApplicationContext();
|
||||||
}
|
}
|
||||||
|
@ -120,6 +129,33 @@ public class ApplicationContext extends MultiDexApplication {
|
||||||
|
|
||||||
new ForegroundDetector(ApplicationContext.getInstance(this));
|
new ForegroundDetector(ApplicationContext.getInstance(this));
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
ConnectivityManager connectivityManager =
|
||||||
|
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
|
||||||
|
@Override
|
||||||
|
public void onAvailable(@NonNull android.net.Network network) {
|
||||||
|
Log.i("DeltaChat", "++++++++++++++++++ NetworkCallback.onAvailable() #" + debugOnAvailableCount++);
|
||||||
|
dcAccounts.maybeNetwork();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockedStatusChanged(@NonNull android.net.Network network, boolean blocked) {
|
||||||
|
Log.i("DeltaChat", "++++++++++++++++++ NetworkCallback.onBlockedStatusChanged() #" + debugOnBlockedStatusChangedCount++);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCapabilitiesChanged(@NonNull android.net.Network network, NetworkCapabilities networkCapabilities) {
|
||||||
|
// usually called after onAvailable(), so a maybeNetwork seems contraproductive
|
||||||
|
Log.i("DeltaChat", "++++++++++++++++++ NetworkCallback.onCapabilitiesChanged() #" + debugOnCapabilitiesChangedCount++);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLinkPropertiesChanged(@NonNull android.net.Network network, LinkProperties linkProperties) {
|
||||||
|
Log.i("DeltaChat", "++++++++++++++++++ NetworkCallback.onLinkPropertiesChanged() #" + debugOnLinkPropertiesChangedCount++);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} // no else: use old method for debugging
|
||||||
BroadcastReceiver networkStateReceiver = new NetworkStateReceiver();
|
BroadcastReceiver networkStateReceiver = new NetworkStateReceiver();
|
||||||
registerReceiver(networkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
|
registerReceiver(networkStateReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,15 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
|
import android.os.Build;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.b44t.messenger.DcContext;
|
import com.b44t.messenger.DcContext;
|
||||||
|
|
||||||
public class NetworkStateReceiver extends BroadcastReceiver {
|
public class NetworkStateReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
private int debugConnectedCount;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
|
||||||
|
@ -19,7 +22,8 @@ public class NetworkStateReceiver extends BroadcastReceiver {
|
||||||
NetworkInfo ni = manager.getActiveNetworkInfo();
|
NetworkInfo ni = manager.getActiveNetworkInfo();
|
||||||
|
|
||||||
if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
|
if (ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
|
||||||
Log.i("DeltaChat", "++++++++++++++++++ Connected ++++++++++++++++++");
|
Log.i("DeltaChat", "++++++++++++++++++ Connected #" + debugConnectedCount++);
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
// call dc_maybe_network() from a worker thread.
|
// call dc_maybe_network() from a worker thread.
|
||||||
// theoretically, dc_maybe_network() can be called from the main thread and returns at once,
|
// theoretically, dc_maybe_network() can be called from the main thread and returns at once,
|
||||||
|
@ -31,6 +35,7 @@ public class NetworkStateReceiver extends BroadcastReceiver {
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue