sdk: Register network callback only if it is enabled.
Change-Id: I8c11ac84e9a18c38c5909a8d012c8e3badfe1a16
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
diff --git a/sdk/src/java/org/lineageos/internal/statusbar/NetworkTraffic.java b/sdk/src/java/org/lineageos/internal/statusbar/NetworkTraffic.java
index 3856a30..0fedd0c 100644
--- a/sdk/src/java/org/lineageos/internal/statusbar/NetworkTraffic.java
+++ b/sdk/src/java/org/lineageos/internal/statusbar/NetworkTraffic.java
@@ -1,5 +1,5 @@
/*
- * SPDX-FileCopyrightText: 2017-2023 The LineageOS project
+ * SPDX-FileCopyrightText: 2017-2025 The LineageOS project
* SPDX-License-Identifier: Apache-2.0
*/
@@ -99,6 +99,11 @@
private int mIconTint = Color.WHITE;
private Drawable mDrawable;
+ // Network tracking related variables
+ private ConnectivityManager mConnectivityManager;
+ private ConnectivityManager.NetworkCallback mNetworkCallback;
+ private ConnectivityManager.NetworkCallback mDefaultNetworkCallback;
+
private final HashMap<Network, LinkProperties> mLinkPropertiesMap = new HashMap<>();
// Used to indicate that the set of sources contributing
// to current stats have changed.
@@ -121,6 +126,7 @@
mNetworkTrafficIsVisible = false;
+ mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
mTrafficHandler = new Handler(mContext.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
@@ -292,47 +298,71 @@
}
};
mObserver = new SettingsObserver(mTrafficHandler);
+ updateSettings();
+ }
- // Network tracking related variables
- final NetworkRequest request = new NetworkRequest.Builder()
- .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
- .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
- .build();
- ConnectivityManager.NetworkCallback networkCallback =
- new ConnectivityManager.NetworkCallback() {
- @Override
- public void onLinkPropertiesChanged(Network network,
- LinkProperties linkProperties) {
- Message msg = new Message();
- msg.what = MESSAGE_TYPE_ADD_NETWORK;
- msg.obj = new LinkPropertiesHolder(network, linkProperties);
- mTrafficHandler.sendMessage(msg);
- }
+ private void unregisterNetworkCallbacks() {
+ if (mNetworkCallback != null) {
+ mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
+ mNetworkCallback = null;
+ }
+ if (mDefaultNetworkCallback != null) {
+ mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback);
+ mDefaultNetworkCallback = null;
+ }
+ }
- @Override
- public void onLost(Network network) {
- Message msg = new Message();
- msg.what = MESSAGE_TYPE_REMOVE_NETWORK;
- msg.obj = network;
- mTrafficHandler.sendMessage(msg);
- }
- };
- ConnectivityManager.NetworkCallback defaultNetworkCallback =
- new ConnectivityManager.NetworkCallback() {
- @Override
- public void onAvailable(Network network) {
- updateViewState();
- }
+ private void manageNetworkCallbacks() {
+ if (mMode == MODE_DISABLED) {
+ // Unregister callbacks if disabling
+ unregisterNetworkCallbacks();
+ return;
+ }
- @Override
- public void onLost(Network network) {
- updateViewState();
- }
- };
- context.getSystemService(ConnectivityManager.class)
- .registerNetworkCallback(request, networkCallback);
- context.getSystemService(ConnectivityManager.class)
- .registerDefaultNetworkCallback(defaultNetworkCallback);
+ // Register callbacks if enabling
+ if (mNetworkCallback == null) {
+ mNetworkCallback = new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onLinkPropertiesChanged(Network network,
+ LinkProperties linkProperties) {
+ Message msg = new Message();
+ msg.what = MESSAGE_TYPE_ADD_NETWORK;
+ msg.obj = new LinkPropertiesHolder(network, linkProperties);
+ mTrafficHandler.sendMessage(msg);
+ }
+
+ @Override
+ public void onLost(Network network) {
+ Message msg = new Message();
+ msg.what = MESSAGE_TYPE_REMOVE_NETWORK;
+ msg.obj = network;
+ mTrafficHandler.sendMessage(msg);
+ }
+ };
+
+ NetworkRequest request = new NetworkRequest.Builder()
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+ .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
+ .build();
+
+ mConnectivityManager.registerNetworkCallback(request, mNetworkCallback);
+ }
+
+ if (mDefaultNetworkCallback == null) {
+ mDefaultNetworkCallback = new ConnectivityManager.NetworkCallback() {
+ @Override
+ public void onAvailable(Network network) {
+ updateViewState();
+ }
+
+ @Override
+ public void onLost(Network network) {
+ updateViewState();
+ }
+ };
+
+ mConnectivityManager.registerDefaultNetworkCallback(mDefaultNetworkCallback);
+ }
}
public void setViewPosition(int vpos) {
@@ -377,6 +407,7 @@
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mObserver.unobserve();
+ unregisterNetworkCallbacks();
}
class SettingsObserver extends ContentObserver {
@@ -414,8 +445,7 @@
}
private boolean isConnectionAvailable() {
- ConnectivityManager cm = mContext.getSystemService(ConnectivityManager.class);
- return cm.getActiveNetwork() != null;
+ return mConnectivityManager.getActiveNetwork() != null;
}
private void updateSettings() {
@@ -432,6 +462,8 @@
mShowUnits = LineageSettings.Secure.getInt(resolver,
LineageSettings.Secure.NETWORK_TRAFFIC_SHOW_UNITS, SHOW_UNITS_ON);
+ manageNetworkCallbacks();
+
switch (mUnits) {
case UNITS_KILOBITS:
mAutoHideThreshold = AUTOHIDE_THRESHOLD_KILOBITS;