package com.lechucksoftware.proxy.proxysettings.tasks;
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;
import android.widget.Toast;
import com.lechucksoftware.proxy.proxysettings.App;
import com.lechucksoftware.proxy.proxysettings.R;
import com.lechucksoftware.proxy.proxysettings.db.PacEntity;
import com.lechucksoftware.proxy.proxysettings.db.ProxyEntity;
import java.util.ArrayList;
import java.util.List;
import be.shouldit.proxy.lib.WiFiApConfig;
import be.shouldit.proxy.lib.reflection.android.ProxySetting;
import timber.log.Timber;
/**
* Created by Marco on 29/11/13.
*/
public class AsyncUpdateLinkedWiFiAP extends AsyncTask<Void, Integer, Integer>
{
private final Context context;
private final ProxyEntity currentProxy;
private final ProxyEntity updatedProxy;
private final PacEntity currentPac;
private final PacEntity updatedPac;
private final ProxySetting proxySetting;
private int updatedWiFiAP;
private List<WiFiApConfig> configsToSave;
public AsyncUpdateLinkedWiFiAP(Context caller, ProxyEntity current, ProxyEntity updated)
{
currentProxy = current;
updatedProxy = updated;
proxySetting = ProxySetting.STATIC;
currentPac = null;
updatedPac = null;
updatedWiFiAP = 0;
context = caller;
}
public AsyncUpdateLinkedWiFiAP(Context caller, PacEntity current, PacEntity updated)
{
currentPac = current;
updatedPac = updated;
proxySetting = ProxySetting.PAC;
currentProxy = null;
updatedProxy = null;
updatedWiFiAP = 0;
context = caller;
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
Timber.d("Updated #%d AP", values[0]);
}
@Override
protected void onPostExecute(Integer updatedWiFiAP)
{
super.onPostExecute(updatedWiFiAP);
}
@Override
protected Integer doInBackground(Void... voids)
{
List<WiFiApConfig> configurations = App.getWifiNetworksManager().getSortedWifiApConfigsList();
configsToSave = new ArrayList<>();
if (configurations != null)
{
// List<WiFiApConfig> configurations = new ArrayList<WiFiApConfig>(sortedConfigurations);
Timber.d("Current STATIC proxy: %s", currentProxy == null ? "NULL" : currentProxy);
Timber.d("Updated STATIC proxy: %s", updatedProxy == null ? "NULL" : updatedProxy);
Timber.d("Current PAC proxy: %s", currentPac == null ? "NULL" : currentPac);
Timber.d("Updated PAC proxy: %s", updatedPac == null ? "NULL" : updatedPac);
for (WiFiApConfig conf : configurations)
{
if (conf.getProxySetting() == proxySetting)
{
Timber.d("Checking AP: " + conf.toShortString());
if (conf.isValidProxyConfiguration())
{
if (proxySetting == ProxySetting.STATIC)
{
updateWifiNetworkStaticProxy(conf);
}
else if (proxySetting == ProxySetting.PAC)
{
updateWifiNetworkPacProxy(conf);
}
}
}
}
try
{
App.getWifiNetworksManager().addSavingOperation(configsToSave);
}
catch (Exception e)
{
Timber.e(e,"Exception on writeConfigurationToDevice");
}
}
return updatedWiFiAP;
}
private void updateWifiNetworkPacProxy(WiFiApConfig conf)
{
Uri pacFileUri = conf.getPacFileUri();
if (pacFileUri.equals(currentPac.getPacUriFile()))
{
conf.setPacUriFile(updatedPac.getPacUriFile());
configsToSave.add(conf);
}
}
private void updateWifiNetworkStaticProxy(WiFiApConfig conf)
{
String host = conf.getProxyHost();
Integer port = conf.getProxyPort();
String exclusion = conf.getProxyExclusionList();
if (host.equalsIgnoreCase(currentProxy.getHost())
&& port.equals(currentProxy.getPort())
&& exclusion.equalsIgnoreCase(currentProxy.getExclusion()))
{
conf.setProxyHost(updatedProxy.getHost());
conf.setProxyPort(updatedProxy.getPort());
conf.setProxyExclusionString(updatedProxy.getExclusion());
configsToSave.add(conf);
}
}
}