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 com.actionbarsherlock.app.SherlockFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IAudioAdapter;
import com.kedzie.vbox.api.IMachine;
import com.kedzie.vbox.api.INetworkAdapter;
import com.kedzie.vbox.api.jaxb.AudioControllerType;
import com.kedzie.vbox.api.jaxb.AudioDriverType;
import com.kedzie.vbox.app.Tuple;
import com.kedzie.vbox.app.Utils;
import com.kedzie.vbox.task.DialogTask;
/**
* Edit remote desktop server
* @apiviz.stereotype fragment
*/
public class AudioFragment extends SherlockFragment {
class LoadInfoTask extends DialogTask<IMachine, Tuple<IAudioAdapter, AudioDriverType[]>> {
public LoadInfoTask() {
super(getSherlockActivity(), _machine.getAPI(), R.string.progress_loading_data_generic);
}
@Override
protected Tuple<IAudioAdapter, AudioDriverType[]> work(IMachine...params) throws Exception {
IAudioAdapter adapter = params[0].getAudioAdapter();
adapter.getEnabled();
adapter.getAudioController();
adapter.getAudioDriver();
AudioDriverType[] types = AudioDriverType.getAudioDrivers(_vmgr.getVBox().getHost().getOperatingSystem());
return new Tuple<IAudioAdapter, AudioDriverType[]>(adapter, types);
}
@Override
protected void onSuccess(Tuple<IAudioAdapter, AudioDriverType[]> result) {
super.onSuccess(result);
_adapter = result.first;
_types = result.second;
_audioDriverAdapter = new ArrayAdapter<AudioDriverType>(getActivity(), android.R.layout.simple_spinner_item, _types);
_audioDriverSpinner.setAdapter(_audioDriverAdapter);
populate();
}
}
private IMachine _machine;
private IAudioAdapter _adapter;
private AudioDriverType[] _types;
private View _view;
private CheckBox _enabledCheckBox;
private Spinner _audioDriverSpinner;
private ArrayAdapter<AudioDriverType> _audioDriverAdapter;
private Spinner _audioControllerSpinner;
private ArrayAdapter<AudioControllerType> _audioControllerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_machine = (IMachine)getArguments().getParcelable(IMachine.BUNDLE);
if(savedInstanceState!=null) {
_adapter = savedInstanceState.getParcelable(IAudioAdapter.BUNDLE);
_types = (AudioDriverType[])savedInstanceState.getSerializable("types");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("types", _types);
outState.putParcelable(INetworkAdapter.BUNDLE, _adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
_view = inflater.inflate(R.layout.settings_audio_adapter, null);
_enabledCheckBox = (CheckBox) _view.findViewById(R.id.enabled);
_audioDriverSpinner = (Spinner) _view.findViewById(R.id.audio_driver);
_audioControllerSpinner = (Spinner) _view.findViewById(R.id.audio_controller);
_audioControllerAdapter = new ArrayAdapter<AudioControllerType>(getActivity(), android.R.layout.simple_spinner_item, AudioControllerType.values());
_audioControllerSpinner.setAdapter(_audioControllerAdapter);
return _view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(_adapter!=null)
populate();
else
new LoadInfoTask().execute(_machine);
}
private void populate() {
_enabledCheckBox.setChecked(_adapter.getEnabled());
_enabledCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
_adapter.setEnabled(isChecked);
}
});
_audioControllerSpinner.setSelection(Utils.indexOf(AudioControllerType.values(), _adapter.getAudioController()));
_audioControllerSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
_adapter.setAudioController(_audioControllerAdapter.getItem(position));
}
@Override public void onNothingSelected(AdapterView<?> parent) {}
});
_audioDriverSpinner.setSelection(Utils.indexOf(_types, _adapter.getAudioDriver()));
_audioDriverSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
_adapter.setAudioDriver(_audioDriverAdapter.getItem(position));
}
@Override public void onNothingSelected(AdapterView<?> parent) {}
});
}
}