package com.kedzie.vbox.host;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.TabHost;
import com.actionbarsherlock.app.SherlockDialogFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IDHCPServer;
import com.kedzie.vbox.api.IHostNetworkInterface;
import com.kedzie.vbox.app.Tuple;
import com.kedzie.vbox.task.ActionBarTask;
public class HostNetworkDialog extends SherlockDialogFragment {
/**
* Load Data
*/
private class LoadDataTask extends ActionBarTask<IHostNetworkInterface , Tuple<IHostNetworkInterface, IDHCPServer>> {
public LoadDataTask() {
super(getSherlockActivity(), _interface.getAPI());
}
@Override
protected Tuple<IHostNetworkInterface, IDHCPServer> work(IHostNetworkInterface... params) throws Exception {
params[0].getIPAddress(); params[0].getNetworkMask();
params[0].getIPV6Address(); params[0].getIPV6NetworkMaskPrefixLength();
IDHCPServer dhcp = _vmgr.findDHCPServerByNetworkName(params[0].getNetworkName());
if(dhcp!=null) {
dhcp.getIPAddress(); dhcp.getLowerIP(); dhcp.getUpperIP(); dhcp.getNetworkMask();
}
return new Tuple<IHostNetworkInterface, IDHCPServer>(params[0], dhcp);
}
@Override
protected void onSuccess(Tuple<IHostNetworkInterface, IDHCPServer> result) {
super.onSuccess(result);
_interface = result.first;
_dhcp = result.second;
populate();
}
}
private class SaveTask extends ActionBarTask<Void, Void> {
public SaveTask() {
super(getSherlockActivity(), null);
}
@Override
protected Void work(Void... params) throws Exception {
_interface.enableStaticIPConfig(_ipv4IpText.getText().toString(), _ipv4MaskText.getText().toString());
_interface.enableStaticIPConfigV6(_ipv6IpText.getText().toString(), Integer.valueOf(_ipv6MaskText.getText().toString()));
if(_enabledCheckBox.isChecked()) {
if(_dhcp==null) //enabled DHCP for the first time
_dhcp = _interface.getAPI().getVBox().createDHCPServer(_interface.getNetworkName());
_dhcp.setEnabled(true);
_dhcp.setConfiguration(_addressText.getText().toString(), _maskText.getText().toString(), _lowerBoundText.getText().toString(), _upperBoundText.getText().toString());
} else {
_dhcp.setEnabled(false);
}
return null;
}
@Override
protected void onSuccess(Void result) {
super.onSuccess(result);
new LoadDataTask().execute(_interface);
}
}
public static HostNetworkDialog getInstance(Bundle arguments) {
HostNetworkDialog fragment = new HostNetworkDialog();
fragment.setArguments(arguments);
return fragment;
}
private TabHost mTabHost;
private EditText _ipv4IpText;
private EditText _ipv4MaskText;
private EditText _ipv6IpText;
private EditText _ipv6MaskText;
private CheckBox _enabledCheckBox;
private EditText _addressText;
private EditText _maskText;
private EditText _lowerBoundText;
private EditText _upperBoundText;
private Button _okButton;
private Button _cancelButton;
private IHostNetworkInterface _interface;
private IDHCPServer _dhcp;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle("Host Network Interface");
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_interface = (IHostNetworkInterface)getArguments().getParcelable(IHostNetworkInterface.BUNDLE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.host_settings_network, container, false);
_ipv4IpText =(EditText)view.findViewById(R.id.hostnet_ipv4_ip);
_ipv4MaskText =(EditText)view.findViewById(R.id.hostnet_ipv4_mask);
_ipv6IpText =(EditText)view.findViewById(R.id.hostnet_ipv6_ip);
_ipv6MaskText =(EditText)view.findViewById(R.id.hostnet_ipv6_mask);
_enabledCheckBox = (CheckBox)view.findViewById(R.id.dhcp_enabled);
_enabledCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
_addressText.setEnabled(isChecked);
_maskText.setEnabled(isChecked);
_lowerBoundText.setEnabled(isChecked);
_upperBoundText.setEnabled(isChecked);
}
});
_addressText =(EditText)view.findViewById(R.id.dhcp_address);
_addressText.setEnabled(false);
_maskText =(EditText)view.findViewById(R.id.dhcp_mask);
_maskText.setEnabled(false);
_lowerBoundText =(EditText)view.findViewById(R.id.dhcp_lowerbound);
_lowerBoundText.setEnabled(false);
_upperBoundText =(EditText)view.findViewById(R.id.dhcp_upperbound);
_upperBoundText.setEnabled(false);
_okButton = (Button)view.findViewById(R.id.ok_button);
_okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new SaveTask().execute();
getDialog().dismiss();
}
});
_cancelButton = (Button)view.findViewById(R.id.cancel_button);
_cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getDialog().dismiss();
}
});
mTabHost = (TabHost)view.findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabHost.addTab(mTabHost.newTabSpec("static").setIndicator("Static").setContent(R.id.staticTab));
mTabHost.addTab(mTabHost.newTabSpec("dhcp").setIndicator("DHCP").setContent(R.id.dhcpTab));
return view;
}
@Override
public void onStart() {
super.onStart();
new LoadDataTask().execute(_interface);
}
void populate() {
_ipv4IpText.setText(_interface.getIPAddress());
_ipv4MaskText.setText(_interface.getNetworkMask());
_ipv6IpText.setText(_interface.getIPV6Address());
_ipv6MaskText.setText(_interface.getIPV6NetworkMaskPrefixLength()+"");
if(_dhcp==null)
return;
_enabledCheckBox.setChecked(_dhcp.getEnabled());
_addressText.setText(_dhcp.getIPAddress());
_maskText.setText(_dhcp.getNetworkMask());
_lowerBoundText.setText(_dhcp.getLowerIP());
_upperBoundText.setText(_dhcp.getUpperIP());
}
@Override
public void onDestroyView() {
super.onDestroyView();
mTabHost = null;
}
}