diff options
| author | 2013-10-10 16:08:29 -0700 | |
|---|---|---|
| committer | 2013-10-10 16:08:29 -0700 | |
| commit | 1b2d586e2d2baac542a233e9d1303077590b3805 (patch) | |
| tree | 8f295175e85fa27f863c0b18473f5bed5eedf086 | |
| parent | 18c2a766499a8ebc9f42e324a2383ef8517b61ba (diff) | |
| parent | 193ad53ddd22a8fe8035246ec55e81fc7a7b2fe1 (diff) | |
am 193ad53d: am 6b57033b: am 8b81a638: Merge "getProxy in ConnectivityService returns port w/PAC" into klp-dev
* commit '193ad53ddd22a8fe8035246ec55e81fc7a7b2fe1':
getProxy in ConnectivityService returns port w/PAC
| -rw-r--r-- | core/java/android/net/ProxyProperties.java | 7 | ||||
| -rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 11 | ||||
| -rw-r--r-- | services/java/com/android/server/connectivity/PacManager.java | 23 |
3 files changed, 27 insertions, 14 deletions
diff --git a/core/java/android/net/ProxyProperties.java b/core/java/android/net/ProxyProperties.java index 648a4b37ebb3..78ac75f22c36 100644 --- a/core/java/android/net/ProxyProperties.java +++ b/core/java/android/net/ProxyProperties.java @@ -178,7 +178,7 @@ public class ProxyProperties implements Parcelable { // If PAC URL is present in either then they must be equal. // Other parameters will only be for fall back. if (!TextUtils.isEmpty(mPacFileUrl)) { - return mPacFileUrl.equals(p.getPacFileUrl()); + return mPacFileUrl.equals(p.getPacFileUrl()) && mPort == p.mPort; } if (!TextUtils.isEmpty(p.getPacFileUrl())) { return false; @@ -219,6 +219,7 @@ public class ProxyProperties implements Parcelable { if (mPacFileUrl != null) { dest.writeByte((byte)1); dest.writeString(mPacFileUrl); + dest.writeInt(mPort); return; } else { dest.writeByte((byte)0); @@ -244,7 +245,9 @@ public class ProxyProperties implements Parcelable { String host = null; int port = 0; if (in.readByte() != 0) { - return new ProxyProperties(in.readString()); + String url = in.readString(); + int localPort = in.readInt(); + return new ProxyProperties(url, localPort); } if (in.readByte() != 0) { host = in.readString(); diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 5695ee510d1b..70418e8d04bf 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -353,6 +353,11 @@ public class ConnectivityService extends IConnectivityManager.Stub { */ private static final int EVENT_SAMPLE_INTERVAL_ELAPSED = 15; + /** + * PAC manager has received new port. + */ + private static final int EVENT_PROXY_HAS_CHANGED = 16; + /** Handler used for internal events. */ private InternalHandler mHandler; /** Handler used for incoming {@link NetworkStateTracker} events. */ @@ -679,7 +684,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { }, new IntentFilter(filter)); - mPacManager = new PacManager(mContext); + mPacManager = new PacManager(mContext, mHandler, EVENT_PROXY_HAS_CHANGED); filter = new IntentFilter(); filter.addAction(CONNECTED_TO_PROVISIONING_NETWORK_ACTION); @@ -3124,6 +3129,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { handleNetworkSamplingTimeout(); break; } + case EVENT_PROXY_HAS_CHANGED: { + handleApplyDefaultProxy((ProxyProperties)msg.obj); + break; + } } } } diff --git a/services/java/com/android/server/connectivity/PacManager.java b/services/java/com/android/server/connectivity/PacManager.java index 1cb2fe384132..837fb05cc923 100644 --- a/services/java/com/android/server/connectivity/PacManager.java +++ b/services/java/com/android/server/connectivity/PacManager.java @@ -27,6 +27,7 @@ import android.content.ServiceConnection; import android.net.Proxy; import android.net.ProxyProperties; import android.os.Binder; +import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; @@ -89,6 +90,9 @@ public class PacManager { private boolean mHasSentBroadcast; private boolean mHasDownloaded; + private Handler mConnectivityHandler; + private int mProxyMessage; + /** * Used for locking when setting mProxyService and all references to mPacUrl or mCurrentPac. */ @@ -128,7 +132,7 @@ public class PacManager { } } - public PacManager(Context context) { + public PacManager(Context context, Handler handler, int proxyMessage) { mContext = context; mLastPort = -1; @@ -136,6 +140,8 @@ public class PacManager { context, 0, new Intent(ACTION_PAC_REFRESH), 0); context.registerReceiver(new PacRefreshIntentReceiver(), new IntentFilter(ACTION_PAC_REFRESH)); + mConnectivityHandler = handler; + mProxyMessage = proxyMessage; } private AlarmManager getAlarmManager() { @@ -156,6 +162,10 @@ public class PacManager { */ public synchronized boolean setCurrentProxyScriptUrl(ProxyProperties proxy) { if (!TextUtils.isEmpty(proxy.getPacFileUrl())) { + if (proxy.getPacFileUrl().equals(mPacUrl)) { + // Allow to send broadcast, nothing to do. + return false; + } synchronized (mProxyLock) { mPacUrl = proxy.getPacFileUrl(); } @@ -356,16 +366,7 @@ public class PacManager { } private void sendPacBroadcast(ProxyProperties 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); - } + mConnectivityHandler.sendMessage(mConnectivityHandler.obtainMessage(mProxyMessage, proxy)); } private synchronized void sendProxyIfNeeded() { |