package com.kedzie.vbox.host;
import java.util.List;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.actionbarsherlock.app.SherlockFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IHost;
import com.kedzie.vbox.api.IHostNetworkInterface;
import com.kedzie.vbox.api.IMedium;
import com.kedzie.vbox.api.jaxb.HostNetworkInterfaceType;
import com.kedzie.vbox.api.jaxb.ProcessorFeature;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.app.Utils;
import com.kedzie.vbox.soap.VBoxSvc;
import com.kedzie.vbox.task.ActionBarTask;
/**
*
* @apiviz.stereotype fragment
*/
public class HostInfoFragment extends SherlockFragment {
private static final String TAG = "InfoFragment";
class LoadInfoTask extends ActionBarTask<IHost, IHost> {
public LoadInfoTask() {
super(getSherlockActivity(), HostInfoFragment.this._vmgr);
}
@Override
protected IHost work(final IHost... h) throws Exception {
//cache values
fork(new Runnable() {
@Override
public void run() {
_vmgr.getVBox().getVersion();
h[0].getMemorySize();
h[0].getMemoryAvailable();
h[0].getOperatingSystem();
h[0].getOSVersion();
for(IMedium drive : h[0].getDVDDrives())
Utils.cacheProperties(drive);
for(IHostNetworkInterface net : h[0].findHostNetworkInterfacesOfType(HostNetworkInterfaceType.BRIDGED)) {
net.getIPAddress(); net.getIPV6Address(); net.getName(); net.getNetworkName(); net.getNetworkMask(); net.getIPV6NetworkMaskPrefixLength();
}
}
});
fork(new Runnable() {
@Override
public void run() {
for(int i=0; i<h[0].getProcessorCount(); i++) {
h[0].getProcessorDescription(i);
h[0].getProcessorSpeed(i);
}
h[0].getProcessorFeature(ProcessorFeature.HW_VIRT_EX);
h[0].getProcessorFeature(ProcessorFeature.LONG_MODE);
h[0].getProcessorFeature(ProcessorFeature.PAE);
}
});
join();
return h[0];
}
@Override
protected void onSuccess(IHost result) {
_host=result;
populateViews(result);
}
}
private IHost _host;
private VBoxSvc _vmgr;
private View _view;
private TextView _ostypeText;
private TextView _vboxText;
private TextView _memoryText;
private TextView _processorsText;
private TextView _networksText;
private TextView _dvdsText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
_vmgr = BundleBuilder.getVBoxSvc(getArguments());
_host = BundleBuilder.getProxy(getArguments(), IHost.BUNDLE, IHost.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
_view = inflater.inflate(R.layout.host_info, null);
_ostypeText = (TextView)_view.findViewById(R.id.ostype);
_vboxText = (TextView)_view.findViewById(R.id.vbox);
_memoryText = (TextView)_view.findViewById(R.id.memory);
_processorsText = (TextView)_view.findViewById(R.id.processors);
_networksText = (TextView)_view.findViewById(R.id.networks);
_processorsText = (TextView)_view.findViewById(R.id.processors);
_dvdsText = (TextView)_view.findViewById(R.id.dvds);
return _view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState!=null) {
_host = savedInstanceState.getParcelable(IHost.BUNDLE);
populateViews(_host);
} else {
new LoadInfoTask().execute(_host);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
BundleBuilder.putProxy(outState, IHost.BUNDLE, _host);
}
private void populateViews(IHost host) {
_ostypeText.setText(host.getOperatingSystem()+"("+host.getOSVersion()+")");
_vboxText.setText(_vmgr.getVBox().getVersion());
_memoryText.setText(host.getMemorySize()+" MB");
StringBuffer sb = new StringBuffer();
for(int i=0; i<host.getProcessorCount(); i++) {
if(i>0)
sb.append("\n");
sb.append(host.getProcessorDescription(i));
}
StringBuffer sb2 = new StringBuffer();
if(host.getProcessorFeature(ProcessorFeature.HW_VIRT_EX))
Utils.appendWithComma(sb2, "HW VirtEx");
if(host.getProcessorFeature(ProcessorFeature.PAE))
Utils.appendWithComma(sb2, "PAE");
if(host.getProcessorFeature(ProcessorFeature.LONG_MODE))
Utils.appendWithComma(sb2, "Long Mode");
_processorsText.setText(sb.toString() + "\n" + sb2.toString());
sb = new StringBuffer();
List<IHostNetworkInterface> nets = host.findHostNetworkInterfacesOfType(HostNetworkInterfaceType.BRIDGED);
for(int i=0; i<nets.size(); i++ ) {
IHostNetworkInterface net = nets.get(i);
if(i>0)
sb.append("\n\n");
sb.append(net.getNetworkName());
sb.append("\n\t").append(net.getIPAddress()).append(" / ").append(net.getNetworkMask());
sb.append("\n\t").append(net.getIPV6Address()).append(" / ").append(net.getIPV6NetworkMaskPrefixLength());
}
_networksText.setText(sb.toString());
sb = new StringBuffer();
List<IMedium> dvds = host.getDVDDrives();
for(int i=0; i<dvds.size(); i++ ) {
IMedium dvd = dvds.get(i);
if(i>0)
sb.append("\n");
sb.append(dvd.getName()).append(" ").append(dvd.getDescription());
}
_dvdsText.setText(sb.toString());
}
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
switch(item.getItemId()) {
case R.id.option_menu_refresh:
Log.d(TAG, "Refreshing...");
new LoadInfoTask().execute(_host);
return true;
}
return false;
}
}