package com.kedzie.vbox.machine.settings;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
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.IMachine;
import com.kedzie.vbox.api.jaxb.CPUPropertyType;
import com.kedzie.vbox.api.jaxb.ProcessorFeature;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.app.SliderView;
import com.kedzie.vbox.app.SliderView.OnSliderViewChangeListener;
import com.kedzie.vbox.task.DialogTask;
/**
* @apiviz.stereotype fragment
*/
public class SystemProcessorsFragment extends SherlockFragment {
class LoadInfoTask extends DialogTask<IMachine, IHost> {
public LoadInfoTask() { super(getSherlockActivity(), _machine.getAPI(), R.string.progress_loading_data_generic); }
@Override
protected IHost work(IMachine... m) throws Exception {
m[0].getCPUCount();
m[0].getCPUProperty(CPUPropertyType.PAE);
IHost host = _vmgr.getVBox().getHost();
host.getProcessorFeature(ProcessorFeature.PAE);
host.getProcessorCount();
host.getProcessorOnlineCount();
return host;
}
@Override
protected void onSuccess(IHost result) {
_host = result;
populateViews(_machine, _host);
}
}
private IMachine _machine;
private IHost _host;
private View _view;
private TextView _errorText;
private SliderView _processorsBar;
private SliderView _executionCapBar;
private CheckBox _paeCheckBox;
private ErrorSupport _errorHandler = new ErrorSupport();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_machine = BundleBuilder.getProxy(savedInstanceState!=null ? savedInstanceState : getArguments(), IMachine.BUNDLE, IMachine.class);
if(savedInstanceState!=null) {
_host = savedInstanceState.getParcelable("host");
_errorHandler = savedInstanceState.getParcelable("errors");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(IMachine.BUNDLE, _machine);
outState.putParcelable("host", _host);
outState.putParcelable("errors", _errorHandler);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
_view = inflater.inflate(R.layout.settings_system_processors, null);
_processorsBar = (SliderView)_view.findViewById(R.id.processors);
_executionCapBar = (SliderView)_view.findViewById(R.id.execution_cap);
_paeCheckBox = (CheckBox) _view.findViewById(R.id.pae_nx);
_errorText = (TextView)_view.findViewById(R.id.error_message);
_errorHandler.setTextView(_errorText);
_errorHandler.showErrors();
return _view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(_host!=null)
populateViews(_machine, _host);
else
new LoadInfoTask().execute(_machine);
}
private void populateViews(IMachine m, IHost host) {
_paeCheckBox.setEnabled(_host.getProcessorFeature(ProcessorFeature.PAE));
_paeCheckBox.setChecked(m.getCPUProperty(CPUPropertyType.PAE));
_paeCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
_machine.setCPUProperty(CPUPropertyType.PAE, isChecked);
}
});
_processorsBar.setMinValue(1);
_processorsBar.setMinValidValue(1);
_processorsBar.setMaxValidValue(host.getProcessorOnlineCount());
_processorsBar.setMaxValue(host.getProcessorOnlineCount());
_processorsBar.setValue(m.getCPUCount());
_processorsBar.setOnSliderViewChangeListener(new OnSliderViewChangeListener() {
@Override
public void onSliderValidValueChanged(int newValue) {
_machine.setCPUCount(newValue);
}
@Override
public void onSliderInvalidValueChanged(int newValue) {
}
});
_executionCapBar.setOnSliderViewChangeListener(new OnSliderViewChangeListener() {
@Override
public void onSliderValidValueChanged(int newValue) {
_machine.setCPUExecutionCap(newValue);
_errorHandler.showError("Execution Cap", "");
}
@Override
public void onSliderInvalidValueChanged(int newValue) {
_errorHandler.showError("Execution Cap", "Invalid Execution Cap");
}
});
}
}