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;