package com.lechucksoftware.proxy.proxysettings.ui.fragments;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.support.v7.widget.SwitchCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import com.lechucksoftware.proxy.proxysettings.App;
import com.lechucksoftware.proxy.proxysettings.R;
import com.lechucksoftware.proxy.proxysettings.constants.Constants;
import com.lechucksoftware.proxy.proxysettings.constants.Requests;
import com.lechucksoftware.proxy.proxysettings.db.PacEntity;
import com.lechucksoftware.proxy.proxysettings.db.ProxyEntity;
import com.lechucksoftware.proxy.proxysettings.ui.activities.MasterActivity;
import com.lechucksoftware.proxy.proxysettings.ui.activities.ProxyDetailActivity;
import com.lechucksoftware.proxy.proxysettings.ui.activities.ProxySelectorListActivity;
import com.lechucksoftware.proxy.proxysettings.ui.base.BaseFragment;
import com.lechucksoftware.proxy.proxysettings.ui.base.IBaseFragment;
import com.lechucksoftware.proxy.proxysettings.ui.components.InputExclusionList;
import com.lechucksoftware.proxy.proxysettings.ui.components.InputField;
import com.lechucksoftware.proxy.proxysettings.ui.components.WifiAp;
import com.lechucksoftware.proxy.proxysettings.ui.dialogs.NoProxiesDefinedAlertDialog;
import com.lechucksoftware.proxy.proxysettings.utils.FragmentsUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import be.shouldit.proxy.lib.APLNetworkId;
import be.shouldit.proxy.lib.WiFiApConfig;
import be.shouldit.proxy.lib.reflection.android.ProxySetting;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import timber.log.Timber;
public class WiFiApDetailFragment extends BaseFragment implements IBaseFragment
{
public static final String TAG = WiFiApDetailFragment.class.getSimpleName();
private APLNetworkId wifiNetworkId;
private WiFiApConfig selectedWiFiAP;
// private ProxyEntity selectedProxy;
@InjectView(R.id.wifi_ap_header) WifiAp wifiApHeader;
@InjectView(R.id.wifi_layout) ViewGroup wifiLayout;
@InjectView(R.id.wifi_proxy_switch) SwitchCompat proxySwitch;
@InjectView(R.id.proxy_selector) Button proxySelector;
@InjectView(R.id.proxy_type) InputField proxyType;
@InjectView(R.id.proxy_host) InputField proxyHost;
@InjectView(R.id.proxy_port) InputField proxyPort;
@InjectView(R.id.proxy_pac_url) InputField proxyPacUrl;
@InjectView(R.id.proxy_bypass) InputExclusionList proxyBypass;
@InjectView(R.id.wifi_proxy_input_fields) CardView proxyFields;
@InjectView(R.id.proxy_static_fields) LinearLayout staticProxyFields;
@InjectView(R.id.proxy_pac_fields) LinearLayout pacProxyFields;
private boolean refreshingUI;
// @InjectView(R.id.progress) RelativeLayout progress;
/**
* Create a new instance of WiFiApDetailFragment
*/
public static WiFiApDetailFragment newInstance(APLNetworkId wifiNetworkId)
{
WiFiApDetailFragment instance = new WiFiApDetailFragment();
Bundle args = new Bundle();
args.putParcelable(Constants.SELECTED_AP_CONF_ARG, wifiNetworkId);
instance.setArguments(args);
return instance;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
App.getTraceUtils().startTrace(TAG, "onCreateView", Log.DEBUG);
setHasOptionsMenu(true);
View v = inflater.inflate(R.layout.wifi_ap_preferences, container, false);
ButterKnife.inject(this, v);
proxySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (!refreshingUI)
{
proxySwitchClicked();
}
}
});
// proxyTags = (InputTags) v.findViewById(R.id.proxy_tags);
// proxyEditButton = (ImageButton) v.findViewById(R.id.edit_proxy_button);
// proxyEditButton.setOnClickListener(new View.OnClickListener() {
//
// @Override
// public void onClick(View view)
// {
// Intent i = new Intent(getActivity(), ProxyDetailActivity.class);
// App.getCacheManager().put(selectedProxy.getUUID(), selectedProxy);
// i.putExtra(Constants.SELECTED_PROXY_CONF_ARG, selectedProxy.getUUID());
// startActivity(i);
// }
// });
return v;
}
@Override
public void onResume()
{
super.onResume();
wifiNetworkId = getArguments().getParcelable(Constants.SELECTED_AP_CONF_ARG);
if (wifiNetworkId != null)
{
selectedWiFiAP = App.getWifiNetworksManager().getConfiguration(wifiNetworkId);
}
if (selectedWiFiAP == null)
{
FragmentsUtils.goToMainActivity(getActivity());
}
refreshWifiUI();
refreshProxyUI();
}
@Override
public void onDestroyView()
{
super.onDestroyView();
ButterKnife.reset(this);
}
public void proxySwitchClicked()
{
// progress.setVisibility(View.VISIBLE);
if (proxySwitch.isChecked())
{
Timber.d("Set proxy settings = STATIC");
selectedWiFiAP.setProxySetting(ProxySetting.STATIC);
}
else
{
Timber.d("Set proxy settings = NONE");
selectedWiFiAP.setProxySetting(ProxySetting.NONE);
selectedWiFiAP.setProxyHost(null);
selectedWiFiAP.setProxyPort(0);
selectedWiFiAP.setProxyExclusionString(null);
App.getWifiNetworksManager().addSavingOperation(selectedWiFiAP);
}
refreshProxyUI();
}
@OnClick(R.id.proxy_selector)
public void openProxySelectorDialog()
{
long staticProxyCount = App.getDBManager().getProxiesCount();
long pacProxyCount = App.getDBManager().getPacCount();
if (staticProxyCount > 0 || pacProxyCount > 0)
{
Intent i = new Intent(getActivity(), ProxySelectorListActivity.class);
i.putExtra(Constants.WIFI_AP_NETWORK_ARG, selectedWiFiAP.getAPLNetworkId());
startActivityForResult(i, Requests.SELECT_PROXY_FOR_WIFI_NETWORK);
}
else
{
NoProxiesDefinedAlertDialog noProxiesDefinedAltertDialog = NoProxiesDefinedAlertDialog.newInstance();
noProxiesDefinedAltertDialog.setTargetFragment(this, Requests.CREATE_NEW_PROXY);
noProxiesDefinedAltertDialog.show(getFragmentManager(),"NoProxiesDefinedAlertDialog");
}
}
public void refreshUI()
{
App.getTraceUtils().startTrace(TAG, "refreshUI", Log.DEBUG);
if (selectedWiFiAP != null)
{
refreshWifiUI();
}
App.getTraceUtils().stopTrace(TAG, "refreshUI", Log.DEBUG);
}
private void refreshWifiUI()
{
refreshingUI = true;
if (selectedWiFiAP != null)
{
wifiApHeader.setConfiguration(selectedWiFiAP);
int selectedColor = R.color.grey_600;
if (selectedWiFiAP.getLevel() != -1)
{
if (selectedWiFiAP.isActive())
{
selectedColor = R.color.blue_500;
}
else
{
selectedColor = R.color.green_500;
}
}
wifiLayout.setBackgroundResource(selectedColor);
AppCompatActivity activity = (AppCompatActivity) getActivity();
if (activity != null)
{
ActionBar actionBar = activity.getSupportActionBar();
if (actionBar != null)
{
actionBar.setBackgroundDrawable(new ColorDrawable(activity.getResources().getColor(selectedColor)));
}
}
}
else
{
FragmentsUtils.goToMainActivity(getActivity());
}
refreshingUI = false;
}
private void refreshProxyUI()
{
refreshingUI = true;
if (selectedWiFiAP != null)
{
if (selectedWiFiAP.getProxySetting() == ProxySetting.STATIC
|| selectedWiFiAP.getProxySetting() == ProxySetting.PAC)
{
Timber.d("Set proxy switch = ON");
proxySwitch.setChecked(true);
proxySwitch.setText(R.string.status_proxy_enabled);
proxySelector.setVisibility(View.VISIBLE);
proxyType.setValue(selectedWiFiAP.getProxySetting().toString());
proxyHost.setValue("");
proxyPort.setValue("");
proxyBypass.setExclusionString("");
proxyPacUrl.setValue("");
proxyFields.setVisibility(View.GONE);
staticProxyFields.setVisibility(View.GONE);
pacProxyFields.setVisibility(View.GONE);
if (selectedWiFiAP.getProxySetting() == ProxySetting.STATIC)
{
long proxyId = App.getDBManager().findProxy(selectedWiFiAP);
if (proxyId != -1)
{
ProxyEntity selectedProxy = App.getDBManager().getProxy(proxyId);
proxyHost.setValue(selectedProxy.getHost());
proxyPort.setValue(selectedProxy.getPort());
proxyBypass.setExclusionString(selectedProxy.getExclusion());
proxyFields.setVisibility(View.VISIBLE);
staticProxyFields.setVisibility(View.VISIBLE);
}
}
else if (selectedWiFiAP.getProxySetting() == ProxySetting.PAC)
{
long pacId = App.getDBManager().findPac(selectedWiFiAP);
if (pacId != -1)
{
PacEntity selectedPac = App.getDBManager().getPac(pacId);
proxyPacUrl.setValue(selectedPac.getPacUriFile());
proxyFields.setVisibility(View.VISIBLE);
pacProxyFields.setVisibility(View.VISIBLE);
}
}
}
else
{
Timber.d("Set proxy switch = OFF");
proxySwitch.setChecked(false);
proxySwitch.setText(R.string.status_proxy_disabled);
proxySelector.setVisibility(View.GONE);
proxyFields.setVisibility(View.GONE);
}
}
else
{
FragmentsUtils.goToMainActivity(getActivity());
}
refreshingUI = false;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
// inflater.inflate(R.menu.ap_wifi_details, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case android.R.id.home:
Intent mainIntent = new Intent(getActivity(), MasterActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mainIntent);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
Timber.d("Received Activity resultCode: %d for requestCode: %d", resultCode, requestCode);
switch (requestCode)
{
case Requests.CREATE_NEW_PROXY:
Intent addNewProxyIntent = new Intent(getActivity(), ProxyDetailActivity.class);
addNewProxyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
addNewProxyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(addNewProxyIntent);
break;
case Requests.SELECT_PROXY_FOR_WIFI_NETWORK:
if (selectedWiFiAP != null && data != null && data.hasExtra(Constants.SELECTED_PROXY_TYPE_ARG))
{
Bundle args = data.getExtras();
if (resultCode == AppCompatActivity.RESULT_OK && args != null)
{
ProxySetting setting = (ProxySetting) args.get(Constants.SELECTED_PROXY_TYPE_ARG);
if (setting == ProxySetting.STATIC)
{
ProxyEntity proxyEntity = (ProxyEntity) args.get(Constants.SELECTED_PROXY_CONF_ARG);
selectedWiFiAP.setProxySetting(ProxySetting.STATIC);
selectedWiFiAP.setProxyHost(proxyEntity.getHost());
selectedWiFiAP.setProxyPort(proxyEntity.getPort());
selectedWiFiAP.setProxyExclusionString(proxyEntity.getExclusion());
selectedWiFiAP.setPacUriFile(Uri.EMPTY);
}
else if (setting == ProxySetting.PAC)
{
PacEntity pacEntity = (PacEntity) args.get(Constants.SELECTED_PAC_CONF_ARG);
selectedWiFiAP.setProxySetting(ProxySetting.PAC);
selectedWiFiAP.setPacUriFile(pacEntity.getPacUriFile());
selectedWiFiAP.setProxyHost("");
selectedWiFiAP.setProxyPort(0);
selectedWiFiAP.setProxyExclusionString("");
}
App.getWifiNetworksManager().addSavingOperation(selectedWiFiAP);
}
}
break;
}
}
}