diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 76a40787f8..3d923a9300 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3341,7 +3341,7 @@ public class ConnectivityService extends IConnectivityManager.Stub if (mProxyTracker.mGlobalProxy == null) { proxyProperties = mProxyTracker.mDefaultProxy; } - sendProxyBroadcast(proxyProperties); + mProxyTracker.sendProxyBroadcast(proxyProperties); } } @@ -3400,14 +3400,14 @@ public class ConnectivityService extends IConnectivityManager.Stub && (!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 @@ public class ConnectivityService extends IConnectivityManager.Stub ProxyInfo oldProxyInfo = oldLp == null ? null : oldLp.getHttpProxy(); if (!ProxyTracker.proxyInfoEqual(newProxyInfo, oldProxyInfo)) { - sendProxyBroadcast(mProxyTracker.getDefaultProxy()); + mProxyTracker.sendProxyBroadcast(mProxyTracker.getDefaultProxy()); } } @@ -3449,22 +3449,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - 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 mUriEventMap; final private Context mContext; @@ -5483,7 +5467,7 @@ public class ConnectivityService extends IConnectivityManager.Stub mProxyTracker.mDefaultProxyDisabled = true; if (mProxyTracker.mGlobalProxy == null && mProxyTracker.mDefaultProxy != null) { - sendProxyBroadcast(null); + mProxyTracker.sendProxyBroadcast(null); } } } @@ -5513,7 +5497,7 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 c41779a6df..89cacdcf0b 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 @@ package com.android.server.connectivity; 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 @@ import java.util.Objects; * @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 class ProxyTracker { 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 class ProxyTracker { 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); + } + } }