diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 76a4078..3d923a9 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3341,7 +3341,7 @@
             if (mProxyTracker.mGlobalProxy == null) {
                 proxyProperties = mProxyTracker.mDefaultProxy;
             }
-            sendProxyBroadcast(proxyProperties);
+            mProxyTracker.sendProxyBroadcast(proxyProperties);
         }
     }
 
@@ -3400,14 +3400,14 @@
                     && (!Uri.EMPTY.equals(proxy.getPacFileUrl()))
                     && proxy.getPacFileUrl().equals(mProxyTracker.mGlobalProxy.getPacFileUrl())) {
                 mProxyTracker.mGlobalProxy = proxy;
-                sendProxyBroadcast(mProxyTracker.mGlobalProxy);
+                mProxyTracker.sendProxyBroadcast(mProxyTracker.mGlobalProxy);
                 return;
             }
             mProxyTracker.mDefaultProxy = proxy;
 
             if (mProxyTracker.mGlobalProxy != null) return;
             if (!mProxyTracker.mDefaultProxyDisabled) {
-                sendProxyBroadcast(proxy);
+                mProxyTracker.sendProxyBroadcast(proxy);
             }
         }
     }
@@ -3422,7 +3422,7 @@
         ProxyInfo oldProxyInfo = oldLp == null ? null : oldLp.getHttpProxy();
 
         if (!ProxyTracker.proxyInfoEqual(newProxyInfo, oldProxyInfo)) {
-            sendProxyBroadcast(mProxyTracker.getDefaultProxy());
+            mProxyTracker.sendProxyBroadcast(mProxyTracker.getDefaultProxy());
         }
     }
 
@@ -3449,22 +3449,6 @@
         }
     }
 
-    private void sendProxyBroadcast(ProxyInfo proxy) {
-        if (proxy == null) proxy = new ProxyInfo("", 0, "");
-        if (mProxyTracker.setCurrentProxyScriptUrl(proxy)) return;
-        if (DBG) log("sending Proxy Broadcast for " + proxy);
-        Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING |
-            Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(Proxy.EXTRA_PROXY_INFO, proxy);
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
     private static class SettingsObserver extends ContentObserver {
         final private HashMap<Uri, Integer> mUriEventMap;
         final private Context mContext;
@@ -5483,7 +5467,7 @@
                         mProxyTracker.mDefaultProxyDisabled = true;
                         if (mProxyTracker.mGlobalProxy == null
                                 && mProxyTracker.mDefaultProxy != null) {
-                            sendProxyBroadcast(null);
+                            mProxyTracker.sendProxyBroadcast(null);
                         }
                     }
                 }
@@ -5513,7 +5497,7 @@
                         mProxyTracker.mDefaultProxyDisabled = false;
                         if (mProxyTracker.mGlobalProxy == null
                                 && mProxyTracker.mDefaultProxy != null) {
-                            sendProxyBroadcast(mProxyTracker.mDefaultProxy);
+                            mProxyTracker.sendProxyBroadcast(mProxyTracker.mDefaultProxy);
                         }
                     }
                 }
diff --git a/services/core/java/com/android/server/connectivity/ProxyTracker.java b/services/core/java/com/android/server/connectivity/ProxyTracker.java
index c41779a..89cacdc 100644
--- a/services/core/java/com/android/server/connectivity/ProxyTracker.java
+++ b/services/core/java/com/android/server/connectivity/ProxyTracker.java
@@ -19,10 +19,15 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.content.Intent;
+import android.net.Proxy;
 import android.net.ProxyInfo;
 import android.net.Uri;
+import android.os.Binder;
 import android.os.Handler;
+import android.os.UserHandle;
 import android.text.TextUtils;
+import android.util.Slog;
 
 import com.android.internal.annotations.GuardedBy;
 
@@ -34,6 +39,12 @@
  * @hide
  */
 public class ProxyTracker {
+    private static final String TAG = ProxyTracker.class.getSimpleName();
+    private static final boolean DBG = true;
+
+    @NonNull
+    private final Context mContext;
+
     // TODO : make this private and import as much managing logic from ConnectivityService as
     // possible
     @NonNull
@@ -52,6 +63,7 @@
 
     public ProxyTracker(@NonNull final Context context,
             @NonNull final Handler connectivityServiceInternalHandler, final int pacChangedEvent) {
+        mContext = context;
         mPacManager = new PacManager(context, connectivityServiceInternalHandler, pacChangedEvent);
     }
 
@@ -105,4 +117,21 @@
     public boolean setCurrentProxyScriptUrl(@NonNull final ProxyInfo proxy) {
         return mPacManager.setCurrentProxyScriptUrl(proxy);
     }
+
+    // TODO : make the argument NonNull final
+    public void sendProxyBroadcast(@Nullable ProxyInfo proxy) {
+        if (proxy == null) proxy = new ProxyInfo("", 0, "");
+        if (setCurrentProxyScriptUrl(proxy)) return;
+        if (DBG) Slog.d(TAG, "sending Proxy Broadcast for " + proxy);
+        Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
+        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING |
+                Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+        intent.putExtra(Proxy.EXTRA_PROXY_INFO, proxy);
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
 }
