| Index: src/org/adblockplus/android/configurators/CyanogenProxyConfigurator.java |
| diff --git a/src/org/adblockplus/android/configurators/CyanogenProxyConfigurator.java b/src/org/adblockplus/android/configurators/CyanogenProxyConfigurator.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1209f6163fea945ccb9eef6901d1cf4f60f2a19d |
| --- /dev/null |
| +++ b/src/org/adblockplus/android/configurators/CyanogenProxyConfigurator.java |
| @@ -0,0 +1,145 @@ |
| +/* |
| + * This file is part of Adblock Plus <http://adblockplus.org/>, |
| + * Copyright (C) 2006-2014 Eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +package org.adblockplus.android.configurators; |
| + |
| +import java.net.InetAddress; |
| + |
| +import org.adblockplus.android.Utils; |
| +import org.adblockplus.android.compat.CmGlobalProxyManager; |
| +import org.adblockplus.android.compat.ProxyProperties; |
| + |
| +import android.content.BroadcastReceiver; |
| +import android.content.Context; |
| +import android.content.Intent; |
| +import android.content.IntentFilter; |
| +import android.util.Log; |
| + |
| +public class CyanogenProxyConfigurator implements ProxyConfigurator |
| +{ |
| + private static final String TAG = Utils.getTag(CyanogenProxyConfigurator.class); |
| + |
| + private final Context context; |
| + private ProxyProperties proxyProperties = null; |
| + private final GlobalProxyReceiver globalProxyReceiver; |
| + private volatile boolean isRegistered = false; |
| + |
| + public CyanogenProxyConfigurator(final Context context) |
| + { |
| + this.context = context; |
| + this.globalProxyReceiver = new GlobalProxyReceiver(this); |
| + } |
| + |
| + @Override |
| + public boolean initialize() |
| + { |
| + try |
| + { |
| + final boolean success = new ProxyProperties("localhost", 8080, "").toCmProxyProperties() != null; |
| + |
| + if (success) |
| + { |
| + this.context.registerReceiver(this.globalProxyReceiver, new IntentFilter(CmGlobalProxyManager.GLOBAL_PROXY_STATE_CHANGE_ACTION)); |
| + } |
| + |
| + return success; |
| + } |
| + catch (final Throwable t) |
| + { |
| + return false; |
| + } |
| + } |
| + |
| + @Override |
| + public boolean registerProxy(final InetAddress address, final int port) |
| + { |
| + try |
| + { |
| + final CmGlobalProxyManager globalProxyManager = new CmGlobalProxyManager(this.context); |
| + globalProxyManager.setGlobalProxy(this.proxyProperties = new ProxyProperties(address.getHostName(), port)); |
| + return this.isRegistered = true; |
| + } |
| + catch (final Throwable t) |
| + { |
| + Log.d(TAG, "Failed to register proxy using CMapi", t); |
| + return false; |
| + } |
| + } |
| + |
| + @Override |
| + public void unregisterProxy() |
| + { |
| + // TODO Do we need to do something here? |
| + } |
| + |
| + @Override |
| + public void shutdown() |
| + { |
| + this.context.unregisterReceiver(this.globalProxyReceiver); |
| + } |
| + |
| + @Override |
| + public ProxyRegistrationType getType() |
| + { |
| + return ProxyRegistrationType.CYANOGENMOD; |
| + } |
| + |
| + @Override |
| + public boolean isRegistered() |
| + { |
| + return this.isRegistered; |
| + } |
| + |
| + @Override |
| + public boolean isSticky() |
| + { |
| + return true; |
| + } |
| + |
| + @Override |
| + public String toString() |
| + { |
| + return "[ProxyConfigurator: " + this.getType() + "]"; |
| + } |
| + |
| + private static class GlobalProxyReceiver extends BroadcastReceiver |
| + { |
| + private final CyanogenProxyConfigurator cyanogenProxyConfigurator; |
| + |
| + public GlobalProxyReceiver(final CyanogenProxyConfigurator cyanogenProxyConfigurator) |
| + { |
| + this.cyanogenProxyConfigurator = cyanogenProxyConfigurator; |
| + } |
| + |
| + @Override |
| + public void onReceive(final Context context, final Intent intent) |
| + { |
| + if (intent != null && CmGlobalProxyManager.GLOBAL_PROXY_STATE_CHANGE_ACTION.equals(intent.getAction())) |
| + { |
| + try |
| + { |
| + final CmGlobalProxyManager globalProxyManager = new CmGlobalProxyManager(this.cyanogenProxyConfigurator.context); |
| + globalProxyManager.setGlobalProxy(this.cyanogenProxyConfigurator.proxyProperties); |
| + } |
| + catch (final Throwable t) |
| + { |
| + Log.d(TAG, "GlobalProxyReceiver failed to register proxy", t); |
| + } |
| + } |
| + } |
| + } |
| +} |