package com.kedzie.vbox.machine;
import android.app.Dialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import com.actionbarsherlock.app.SherlockDialogFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IConsole;
import com.kedzie.vbox.api.IMachine;
import com.kedzie.vbox.api.IProgress;
import com.kedzie.vbox.api.ISnapshot;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.soap.VBoxSvc;
import com.kedzie.vbox.task.ActionBarTask;
import com.kedzie.vbox.task.MachineTask;
/**
* Create a new snapshot
*
* @apiviz.stereotype fragment
*/
public class TakeSnapshotFragment extends SherlockDialogFragment {
private VBoxSvc _vmgr;
private IMachine _machine;
private ISnapshot _snapshot;
private TextView _nameText;
private TextView _descriptionText;
public static TakeSnapshotFragment getInstance(VBoxSvc vmgr, IMachine machine,ISnapshot snapshot) {
BundleBuilder b = new BundleBuilder().putParcelable(VBoxSvc.BUNDLE, vmgr).putProxy(IMachine.BUNDLE, machine);
if(snapshot!=null)
b.putProxy(ISnapshot.BUNDLE, snapshot);
TakeSnapshotFragment f = new TakeSnapshotFragment();
f.setArguments(b.create());
return f;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle(_snapshot==null ? getResources().getString(R.string.new_snapshot_dialog_title) : getResources().getString(R.string.edit_snapshot_dialog_title));
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_vmgr = BundleBuilder.getProxy(getArguments(), VBoxSvc.BUNDLE, VBoxSvc.class);
_machine = BundleBuilder.getProxy(getArguments(), IMachine.BUNDLE, IMachine.class);
if(getArguments().containsKey(ISnapshot.BUNDLE))
_snapshot = BundleBuilder.getProxy(getArguments(), "snapshot", ISnapshot.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.snapshot_dialog, null);
_nameText = (TextView)view.findViewById(R.id.snapshot_name);
_descriptionText = (TextView)view.findViewById(R.id.snapshot_description);
_descriptionText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
takeSnapshot();
}
return false;
}
});
if(_snapshot != null) {
_nameText.setText(_snapshot.getName());
_descriptionText.setText(_snapshot.getDescription());
}
((ImageButton)view.findViewById(R.id.button_save)).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View arg0) {
dismiss();
if(_snapshot!=null) {
new ActionBarTask<ISnapshot, Void>(getSherlockActivity(), _vmgr) {
protected Void work(ISnapshot...s) throws Exception {
s[0].setName(_nameText.getText().toString());
s[0].setDescription(_descriptionText.getText().toString());
return null;
}
}.execute(_snapshot);
} else {
takeSnapshot();
}
}
});
((ImageButton)view.findViewById(R.id.button_cancel)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
return view;
}
private void takeSnapshot() {
new MachineTask<Void, Void>(getSherlockActivity(), _vmgr, R.string.progress_taking_snapshot, false, _machine) {
protected IProgress workWithProgress(IMachine m, IConsole console, Void...i) throws Exception {
return console.takeSnapshot( _nameText.getText().toString(), _descriptionText.getText().toString());
}
}.execute();
}
}