am 8b81a638: Merge "getProxy in ConnectivityService returns port w/PAC" into klp-dev

* commit '8b81a63810ee2eb03c5c7bb389604fdd2dd44aa3':
  getProxy in ConnectivityService returns port w/PAC
This commit is contained in:
Jason Monk
2013-10-10 15:54:54 -07:00
committed by Android Git Automerger
3 changed files with 27 additions and 14 deletions

View File

@@ -178,7 +178,7 @@ public class ProxyProperties implements Parcelable {
// If PAC URL is present in either then they must be equal. // If PAC URL is present in either then they must be equal.
// Other parameters will only be for fall back. // Other parameters will only be for fall back.
if (!TextUtils.isEmpty(mPacFileUrl)) { if (!TextUtils.isEmpty(mPacFileUrl)) {
return mPacFileUrl.equals(p.getPacFileUrl()); return mPacFileUrl.equals(p.getPacFileUrl()) && mPort == p.mPort;
} }
if (!TextUtils.isEmpty(p.getPacFileUrl())) { if (!TextUtils.isEmpty(p.getPacFileUrl())) {
return false; return false;
@@ -219,6 +219,7 @@ public class ProxyProperties implements Parcelable {
if (mPacFileUrl != null) { if (mPacFileUrl != null) {
dest.writeByte((byte)1); dest.writeByte((byte)1);
dest.writeString(mPacFileUrl); dest.writeString(mPacFileUrl);
dest.writeInt(mPort);
return; return;
} else { } else {
dest.writeByte((byte)0); dest.writeByte((byte)0);
@@ -244,7 +245,9 @@ public class ProxyProperties implements Parcelable {
String host = null; String host = null;
int port = 0; int port = 0;
if (in.readByte() != 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) { if (in.readByte() != 0) {
host = in.readString(); host = in.readString();

View File

@@ -353,6 +353,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
*/ */
private static final int EVENT_SAMPLE_INTERVAL_ELAPSED = 15; 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. */ /** Handler used for internal events. */
private InternalHandler mHandler; private InternalHandler mHandler;
/** Handler used for incoming {@link NetworkStateTracker} events. */ /** Handler used for incoming {@link NetworkStateTracker} events. */
@@ -679,7 +684,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}, },
new IntentFilter(filter)); new IntentFilter(filter));
mPacManager = new PacManager(mContext); mPacManager = new PacManager(mContext, mHandler, EVENT_PROXY_HAS_CHANGED);
filter = new IntentFilter(); filter = new IntentFilter();
filter.addAction(CONNECTED_TO_PROVISIONING_NETWORK_ACTION); filter.addAction(CONNECTED_TO_PROVISIONING_NETWORK_ACTION);
@@ -3124,6 +3129,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
handleNetworkSamplingTimeout(); handleNetworkSamplingTimeout();
break; break;
} }
case EVENT_PROXY_HAS_CHANGED: {
handleApplyDefaultProxy((ProxyProperties)msg.obj);
break;
}
} }
} }
} }

View File

@@ -27,6 +27,7 @@ import android.content.ServiceConnection;
import android.net.Proxy; import android.net.Proxy;
import android.net.ProxyProperties; import android.net.ProxyProperties;
import android.os.Binder; import android.os.Binder;
import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
@@ -89,6 +90,9 @@ public class PacManager {
private boolean mHasSentBroadcast; private boolean mHasSentBroadcast;
private boolean mHasDownloaded; private boolean mHasDownloaded;
private Handler mConnectivityHandler;
private int mProxyMessage;
/** /**
* Used for locking when setting mProxyService and all references to mPacUrl or mCurrentPac. * 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; mContext = context;
mLastPort = -1; mLastPort = -1;
@@ -136,6 +140,8 @@ public class PacManager {
context, 0, new Intent(ACTION_PAC_REFRESH), 0); context, 0, new Intent(ACTION_PAC_REFRESH), 0);
context.registerReceiver(new PacRefreshIntentReceiver(), context.registerReceiver(new PacRefreshIntentReceiver(),
new IntentFilter(ACTION_PAC_REFRESH)); new IntentFilter(ACTION_PAC_REFRESH));
mConnectivityHandler = handler;
mProxyMessage = proxyMessage;
} }
private AlarmManager getAlarmManager() { private AlarmManager getAlarmManager() {
@@ -156,6 +162,10 @@ public class PacManager {
*/ */
public synchronized boolean setCurrentProxyScriptUrl(ProxyProperties proxy) { public synchronized boolean setCurrentProxyScriptUrl(ProxyProperties proxy) {
if (!TextUtils.isEmpty(proxy.getPacFileUrl())) { if (!TextUtils.isEmpty(proxy.getPacFileUrl())) {
if (proxy.getPacFileUrl().equals(mPacUrl)) {
// Allow to send broadcast, nothing to do.
return false;
}
synchronized (mProxyLock) { synchronized (mProxyLock) {
mPacUrl = proxy.getPacFileUrl(); mPacUrl = proxy.getPacFileUrl();
} }
@@ -356,16 +366,7 @@ public class PacManager {
} }
private void sendPacBroadcast(ProxyProperties proxy) { private void sendPacBroadcast(ProxyProperties proxy) {
Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION); mConnectivityHandler.sendMessage(mConnectivityHandler.obtainMessage(mProxyMessage, proxy));
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 synchronized void sendProxyIfNeeded() { private synchronized void sendProxyIfNeeded() {