package org.skydiveapp;
import org.skydiveapp.data.FreefallProfileType;
import org.skydiveapp.data.SkydiveType;
import org.skydiveapp.repository.SkydiveTypeRepository;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SkydiveTypeEditActivity extends Activity
{
// activity request codes
private static final int REQUEST_SELECT_FREEFALL_PROFILE_TYPE = 0;
private static final int REQUEST_NOTES = 1;
// repository
private SkydiveTypeRepository repository = new SkydiveTypeRepository(this);
// data
private boolean isEdit = false;
private SkydiveType skydiveType;
// listeners
private OnClickListener saveListener = new OnClickListener()
{
@Override
public void onClick(View view)
{
save();
}
};
private OnClickListener cancelListener = new OnClickListener()
{
@Override
public void onClick(View view)
{
finish();
}
};
private OnClickListener freefallProfileTypeEditListener = new OnClickListener()
{
@Override
public void onClick(View view)
{
Intent intent = new Intent(SkydiveTypeEditActivity.this, FreefallProfileTypeSelectListActivity.class);
if (skydiveType.getFreefallProfileType() != null)
{
intent.putExtra(Constants.EXTRA_FREEFALL_PROFILE_TYPE, skydiveType.getFreefallProfileType().toString());
}
startActivityForResult(intent, REQUEST_SELECT_FREEFALL_PROFILE_TYPE);
}
};
private OnClickListener notesEditListener = new OnClickListener()
{
@Override
public void onClick(View view)
{
Intent intent = new Intent(SkydiveTypeEditActivity.this, NotesEditActivity.class);
intent.putExtra(Constants.EXTRA_NOTES, skydiveType.getNotes());
startActivityForResult(intent, REQUEST_NOTES);
}
};
private OnClickListener deleteListener = new OnClickListener()
{
@Override
public void onClick(View view)
{
showDeleteWarning();
}
};
private DialogInterface.OnClickListener deleteConfirmListener = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
delete();
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// load data
loadData();
// init ui
initializeUI();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
if (requestCode == REQUEST_SELECT_FREEFALL_PROFILE_TYPE && resultCode == RESULT_OK)
{
String profileType = intent.getStringExtra(Constants.EXTRA_FREEFALL_PROFILE_TYPE);
updateFreefallProfileType(profileType);
}
else if (requestCode == REQUEST_NOTES && resultCode == RESULT_OK)
{
String notes = intent.getStringExtra(Constants.EXTRA_NOTES);
updateNotes(notes);
}
}
private void loadData()
{
// set isEdit flag
Bundle extras = getIntent().getExtras();
isEdit = (extras != null && extras.containsKey(Constants.EXTRA_SKYDIVE_TYPE_ID));
// determine add vs. edit
if (isEdit)
{
// editing
int id = getIntent().getExtras().getInt(Constants.EXTRA_SKYDIVE_TYPE_ID);
skydiveType = repository.getSkydiveType(id);
}
else
{
// adding
skydiveType = new SkydiveType();
}
}
private void initializeUI()
{
// show view
setContentView(R.layout.skydive_type_edit_view);
// set header text
TextView headerTextView = (TextView)findViewById(R.id.EditHeaderTextView);
headerTextView.setText(isEdit ?
R.string.skydive_type_edit_label : R.string.skydive_type_new_label);
// set name
EditText nField = (EditText)findViewById(R.id.SkydiveTypeNameField);
nField.setText(skydiveType.getName());
// set freefall profile type
TextView profileTypeField = (TextView)findViewById(R.id.SkydiveTypeFreefallProfileField);
profileTypeField.setText(skydiveType.getFreefallProfileType() == null ? "" :
getString(skydiveType.getFreefallProfileType().getResourceId()));
profileTypeField.setOnClickListener(freefallProfileTypeEditListener);
// set notes
TextView notesField = (TextView)findViewById(R.id.SkydiveTypeNotesField);
notesField.setText(skydiveType.getNotes());
notesField.setOnClickListener(notesEditListener);
// add button listeners
Button saveButton = (Button)findViewById(R.id.EditHeaderSaveButton);
saveButton.setOnClickListener(saveListener);
Button cancelButton = (Button)findViewById(R.id.EditHeaderCancelButton);
cancelButton.setOnClickListener(cancelListener);
Button deleteButton = (Button)findViewById(R.id.SkydiveTypeDeleteButton);
deleteButton.setOnClickListener(deleteListener);
// show/hide delete button
deleteButton.setVisibility(isEdit ? View.VISIBLE : View.GONE);
}
private void showDeleteWarning()
{
// create alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.skydive_type_delete_warning);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.delete_confirmation);
builder.setPositiveButton(R.string.yes_button, deleteConfirmListener);
builder.setNegativeButton(R.string.no_button, null);
AlertDialog dialog = builder.create();
// show dialog
dialog.show();
}
private void updateFreefallProfileType(String profileType)
{
// update profile type
if (profileType == null)
skydiveType.setFreefallProfileType(null);
else
skydiveType.setFreefallProfileType(FreefallProfileType.valueOf(profileType));
// update ui
TextView profileTypeField = (TextView)findViewById(R.id.SkydiveTypeFreefallProfileField);
profileTypeField.setText(skydiveType.getFreefallProfileType() == null ? "" :
getString(skydiveType.getFreefallProfileType().getResourceId()));
}
private void updateNotes(String notes)
{
// update aircraft
skydiveType.setNotes(notes);
// update ui
TextView notesField = (TextView)findViewById(R.id.SkydiveTypeNotesField);
notesField.setText(skydiveType.getNotes());
}
private void save()
{
// set name
EditText nField = (EditText)findViewById(R.id.SkydiveTypeNameField);
skydiveType.setName(nField.getText().toString());
// save
if (isEdit)
{
repository.updateSkydiveType(skydiveType);
}
else
{
repository.addSkydiveType(skydiveType);
}
// finish
finish();
}
private void delete()
{
// delete
repository.deleteSkydiveType(skydiveType);
// finish
finish();
}
@Override
public void onBackPressed()
{
save();
super.onBackPressed();
}
}
|