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.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.Spinner; 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.ChipsetType; import com.kedzie.vbox.api.jaxb.FirmwareType; 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 SystemMotherboardFragment 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].getMemorySize(); m[0].getRTCUseUTC(); m[0].getBIOSSettings().getIOAPICEnabled(); m[0].getChipsetType(); m[0].getFirmwareType(); IHost host = _vmgr.getVBox().getHost(); host.getMemoryAvailable(); host.getMemorySize(); return host; } @Override protected void onSuccess(IHost result) { super.onSuccess(result); _host = result; populateViews(_machine, _host); } } private IMachine _machine; private IHost _host; private View _view; private TextView _errorText; private SliderView _baseMemoryBar; private CheckBox _ioApicCheckbox; private CheckBox _efiCheckbox; private CheckBox _utcCheckbox; private Spinner _chipsetSpinner; private ArrayAdapter<ChipsetType> _chipsetAdapter; 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_motherboard, null); _baseMemoryBar = (SliderView)_view.findViewById(R.id.baseMemory); _ioApicCheckbox = (CheckBox) _view.findViewById(R.id.io_apic); _efiCheckbox = (CheckBox) _view.findViewById(R.id.efi); _utcCheckbox = (CheckBox) _view.findViewById(R.id.utc); _chipsetSpinner = (Spinner) _view.findViewById(R.id.chipset); _chipsetAdapter = new ArrayAdapter<ChipsetType>(getActivity(), android.R.layout.simple_spinner_item, new ChipsetType [] { ChipsetType.PIIX_3, ChipsetType.ICH_9 } ); _chipsetSpinner.setAdapter(_chipsetAdapter); _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) { _utcCheckbox.setChecked(_machine.getRTCUseUTC()); _utcCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { _machine.setRTCUseUTC(isChecked); } }); FirmwareType type = _machine.getFirmwareType(); _efiCheckbox.setChecked(type.equals(FirmwareType.EFI) || type.equals(FirmwareType.EFI_32) || type.equals(FirmwareType.EFI_64) || type.equals(FirmwareType.EFIDUAL)); _efiCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { _machine.setFirmwareType(isChecked ? FirmwareType.EFI : FirmwareType.BIOS); } }); _ioApicCheckbox.setChecked(_machine.getBIOSSettings().getIOAPICEnabled()); _ioApicCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { _machine.getBIOSSettings().setIOAPICEnabled(isChecked); } }); _chipsetSpinner.setSelection(_machine.getChipsetType().equals(ChipsetType.PIIX_3) ? 0 : 1); _chipsetSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { _machine.setChipsetType(_chipsetAdapter.getItem(position)); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); _baseMemoryBar.setMinValue(1); _baseMemoryBar.setMinValidValue(1); _baseMemoryBar.setMaxValidValue((int)(host.getMemorySize()*.8f)); _baseMemoryBar.setMaxValue(host.getMemorySize()); _baseMemoryBar.setValue(m.getMemorySize()); _baseMemoryBar.setOnSliderViewChangeListener(new OnSliderViewChangeListener() { @Override public void onSliderValidValueChanged(int newValue) { _machine.setMemorySize(newValue*1024); _errorHandler.showError("Base Memory", ""); } @Override public void onSliderInvalidValueChanged(int newValue) { _errorHandler.showError("Base Memory", "Not enough memory for Operating System"); } }); } }