RigEditActivity.java :  » App » skydiveapp-4-android » org » skydiveapp » Android Open Source

Android Open Source » App » skydiveapp 4 android 
skydiveapp 4 android » org » skydiveapp » RigEditActivity.java
package org.skydiveapp;

import java.util.Date;

import org.skydiveapp.data.Rig;
import org.skydiveapp.data.RigComponent;
import org.skydiveapp.data.RigReminder;
import org.skydiveapp.repository.RigRepository;
import org.skydiveapp.data.TimeUnit;
import org.skydiveapp.data.RigReminder.DueStatus;
import org.skydiveapp.ui.FormatUtility;
import org.skydiveapp.ui.TableStyler;
import org.skydiveapp.ui.TableStyler.TableRowLocation;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class RigEditActivity extends Activity
{
  // activity request codes
  private static final int REQUEST_NOTES = 0;
  private static final int REQUEST_COMPONENT = 1;
  private static final int REQUEST_REMINDER = 2;

  // repositories
  private RigRepository repository = new RigRepository(this);

  // menus
  private MenuItem saveMenu;
  
  // data
  private boolean isEdit = false;
  private Rig rig;
  private RigComponent currentEditedComponent;
  private RigReminder currentEditedReminder;
  
  // 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 notesEditListener = new OnClickListener()
  {
    @Override
    public void onClick(View view)
    {
      Intent intent = new Intent(RigEditActivity.this, NotesEditActivity.class);
      intent.putExtra(Constants.EXTRA_NOTES, rig.getNotes());
      startActivityForResult(intent, REQUEST_NOTES);
    }
  };
  private OnClickListener componentEditListener = new OnClickListener()
  {
    @Override
    public void onClick(View view)
    {
      currentEditedComponent = (RigComponent)view.getTag();
      Intent intent = new Intent(RigEditActivity.this, RigComponentEditActivity.class);
      intent.putExtra(Constants.EXTRA_RIG_COMPONENT_IS_EDIT, true);
      intent.putExtra(Constants.EXTRA_RIG_COMPONENT_NAME, currentEditedComponent.getName());
      intent.putExtra(Constants.EXTRA_RIG_COMPONENT_SERIAL_NUMBER, currentEditedComponent.getSerialNumber());
      intent.putExtra(Constants.EXTRA_RIG_COMPONENT_NOTES, currentEditedComponent.getNotes());
      startActivityForResult(intent, REQUEST_COMPONENT);
    }
  };
  private OnClickListener addComponentListener = new OnClickListener()
  {
    @Override
    public void onClick(View view)
    {
      currentEditedComponent = null;
      Intent intent = new Intent(RigEditActivity.this, RigComponentEditActivity.class);
      startActivityForResult(intent, REQUEST_COMPONENT);
    }
  };
  private OnClickListener reminderEditListener = new OnClickListener()
  {
    @Override
    public void onClick(View view)
    {
      currentEditedReminder = (RigReminder)view.getTag();
      Intent intent = new Intent(RigEditActivity.this, RigReminderEditActivity.class);
      intent.putExtra(Constants.EXTRA_RIG_REMINDER_IS_EDIT, true);
      intent.putExtra(Constants.EXTRA_RIG_REMINDER_NAME, currentEditedReminder.getName());
      intent.putExtra(Constants.EXTRA_RIG_REMINDER_INTERVAL, currentEditedReminder.getInterval());
      intent.putExtra(Constants.EXTRA_RIG_REMINDER_INTERVAL_UNIT, currentEditedReminder.getIntervalUnit());
      intent.putExtra(Constants.EXTRA_RIG_REMINDER_LAST_COMPLETED_DATE, currentEditedReminder.getLastCompletedDate());
      startActivityForResult(intent, REQUEST_REMINDER);
    }
  };
  private OnClickListener addReminderListener = new OnClickListener()
  {
    @Override
    public void onClick(View view)
    {
      currentEditedReminder = null;
      Intent intent = new Intent(RigEditActivity.this, RigReminderEditActivity.class);
      startActivityForResult(intent, REQUEST_REMINDER);
    }
  };
  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_NOTES && resultCode == RESULT_OK) 
    {
      String notes = intent.getStringExtra(Constants.EXTRA_NOTES);
      updateNotes(notes);
    }
    else if (requestCode == REQUEST_COMPONENT && resultCode == RESULT_OK)
    {
      boolean isDelete = intent.getBooleanExtra(Constants.EXTRA_RIG_COMPONENT_DELETE, false);
      String name = intent.getStringExtra(Constants.EXTRA_RIG_COMPONENT_NAME);
      String serialNumber = intent.getStringExtra(Constants.EXTRA_RIG_COMPONENT_SERIAL_NUMBER);
      String notes = intent.getStringExtra(Constants.EXTRA_RIG_COMPONENT_NOTES);
      updateComponent(isDelete, name, serialNumber, notes);
    }
    else if (requestCode == REQUEST_REMINDER && resultCode == RESULT_OK)
    {
      boolean isDelete = intent.getBooleanExtra(Constants.EXTRA_RIG_REMINDER_DELETE, false);
      String name = intent.getStringExtra(Constants.EXTRA_RIG_REMINDER_NAME);
      int interval = intent.getIntExtra(Constants.EXTRA_RIG_REMINDER_INTERVAL, 0);
      TimeUnit intervalUnit = (TimeUnit)intent.getSerializableExtra(Constants.EXTRA_RIG_REMINDER_INTERVAL_UNIT);
      Date lastCompletedDate = (Date)intent.getSerializableExtra(Constants.EXTRA_RIG_REMINDER_LAST_COMPLETED_DATE);
      updateReminder(isDelete, name, interval, intervalUnit, lastCompletedDate);
    }
  }
  
  private void loadData()
  {
    // set isEdit flag
    Bundle extras = getIntent().getExtras();
    isEdit = (extras != null && extras.containsKey(Constants.EXTRA_RIG_ID));

    // determine add vs. edit
    if (isEdit)
    {
      // editing
      int id = getIntent().getExtras().getInt(Constants.EXTRA_RIG_ID);
      rig = repository.getRig(id);
    }
    else
    {
      // adding
      rig = new Rig();
    }
  }
  
  private void initializeUI()
  {
    // show view
    setContentView(R.layout.rig_edit_view);
    
    // set header text
    TextView headerTextView = (TextView)findViewById(R.id.EditHeaderTextView);
    headerTextView.setText(isEdit ?
        R.string.rig_edit_label : R.string.rig_new_label);

    // set name
    EditText nField = (EditText)findViewById(R.id.RigNameField);
    nField.setText(rig.getName());
    
    // set primary
    CheckBox pField = (CheckBox)findViewById(R.id.RigPrimaryField);
    pField.setChecked(rig.isPrimary());
    
    // set archived
    CheckBox aField = (CheckBox)findViewById(R.id.RigArchivedField);
    aField.setChecked(rig.isArchived());
    
    // set jump count
    TextView jcField = (TextView)findViewById(R.id.RigJumpCountField);
    jcField.setText(rig.getJumpCount() == null ? "0" :
      FormatUtility.toNumericString(rig.getJumpCount()));
    
    // set notes
    TextView notesField = (TextView)findViewById(R.id.RigNotesField);
    notesField.setText(rig.getNotes());
    notesField.setOnClickListener(notesEditListener);
    
    // init components UI
    initComponentsUI();
    
    // init reminders UI
    initRemindersUI();
    
    // 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.RigDeleteButton);
    deleteButton.setOnClickListener(deleteListener);
    
    // show/hide delete button
    deleteButton.setVisibility(isEdit ? View.VISIBLE : View.GONE);
  }
  
  private void initComponentsUI()
  {
    TableLayout tableLayout = (TableLayout)findViewById(R.id.RigComponentsTable);
    tableLayout.removeAllViews();
    for (int i = 0; i < rig.getComponents().size(); i++)
    {
      // get component
      RigComponent component = rig.getComponents().get(i);
      
      // create row, add to table
      TableRow row = createComponentTableRow(component, i == 0);
      tableLayout.addView(row);
    }
    
    // add 'add component' row
    TableRow addRow = createAddTableRow(
        rig.getComponents().size() <= 0,
        R.string.rig_add_component_label,
        addComponentListener);
    tableLayout.addView(addRow);
  }
  
  private void initRemindersUI()
  {
    TableLayout tableLayout = (TableLayout)findViewById(R.id.RigRemindersTable);
    tableLayout.removeAllViews();
    for (int i = 0; i < rig.getReminders().size(); i++)
    {
      // get reminder
      RigReminder reminder = rig.getReminders().get(i);
      
      // create row, add to table
      TableRow row = createReminderTableRow(reminder, i == 0);
      tableLayout.addView(row);
    }
    
    // add 'add reminder' row
    TableRow addRow = createAddTableRow(
        rig.getReminders().size() <= 0,
        R.string.rig_add_reminder_label,
        addReminderListener);
    tableLayout.addView(addRow);
  }
  
  private TableRow createComponentTableRow(RigComponent component, boolean first)
  {
    // create table row
    TableRow row = new TableRow(this);
    row.setTag(component);
    row.setOnClickListener(componentEditListener);
    // style
    TableStyler.styleTableRow(row, first ? TableRowLocation.First : TableRowLocation.Middle);
    
    // add component name
    TextView componentName = new TextView(this);
    componentName.setText(component.getName());
    // style
    TableStyler.styleTableRowTextView(this, componentName, false, false, true, 1);
    // add to row
    row.addView(componentName);
    
    return row;
  }
  
  private TableRow createReminderTableRow(RigReminder reminder, boolean first)
  {
    // create table row
    TableRow row = new TableRow(this);
    row.setTag(reminder);
    row.setOnClickListener(reminderEditListener);
    // style
    TableStyler.styleTableRow(row, first ? TableRowLocation.First : TableRowLocation.Middle);
    
    // add description
    TextView name = new TextView(this);
    name.setText(reminder.getName());
    // style
    TableStyler.styleTableRowTextView(this, name, false, false, false, 1);
    // add to row
    row.addView(name);
    
    // update fields based on due status
    Drawable icon = null;
    int textStyleId = R.style.FormFieldValueStyle;
    if (reminder.getDueStatus() == DueStatus.DueSoon)
    {
      textStyleId = R.style.DueSoonTextStyle;
    }
    else if (reminder.getDueStatus() == DueStatus.PastDue)
    {
      textStyleId = R.style.PastDueTextStyle;
      icon = getResources().getDrawable(R.drawable.skull_small);
    }
    name.setTextAppearance(this, textStyleId);
    name.setCompoundDrawablesWithIntrinsicBounds(null, null, icon, null);
    
    return row;
  }
  
  private TableRow createAddTableRow(boolean solo, int textId, OnClickListener listener)
  {
    // add 'add component' row
    TableRow row = new TableRow(this);
    row.setOnClickListener(listener);
    // style
    TableStyler.styleTableRow(row, solo ? TableRowLocation.Solo: TableRowLocation.Last);
    // add label
    TextView addLabel = new TextView(this);
    addLabel.setText(textId);
    // style
    TableStyler.styleTableRowTextView(this, addLabel, false, true, true, 1);
    // add to row
    row.addView(addLabel);
    
    return row;
  }
  
  private void showDeleteWarning()
  {
    // create alert dialog
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(R.string.rig_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 updateNotes(String notes)
  {
    // update component
    rig.setNotes(notes);
    
    // update ui
    TextView notesField = (TextView)findViewById(R.id.RigNotesField);
    notesField.setText(rig.getNotes());
  }
  
  private void updateComponent(boolean isDelete, String name, String serialNumber, String notes)
  {
    // update reminder and UI
    if (currentEditedComponent == null)
    {
      // add
      RigComponent component = new RigComponent();
      component.setName(name);
      component.setSerialNumber(serialNumber);
      component.setNotes(notes);
      rig.getComponents().add(component);
    }
    else if (isDelete)
    {
      // delete
      rig.getComponents().remove(currentEditedComponent);
    }
    else
    {
      // update
      currentEditedComponent.setName(name);
      currentEditedComponent.setSerialNumber(serialNumber);
      currentEditedComponent.setNotes(notes);
    }
    
    // update UI
    initComponentsUI();
  }
  
  private void updateReminder(boolean isDelete, String name, int interval, TimeUnit intervalUnit, Date lastCompletedDate)
  {
    // update reminder and UI
    if (currentEditedReminder == null)
    {
      // add reminder
      RigReminder reminder = new RigReminder();
      reminder.setName(name);
      reminder.setInterval(interval);
      reminder.setIntervalUnit(intervalUnit);
      reminder.setLastCompletedDate(lastCompletedDate);
      rig.getReminders().add(reminder);
    }
    else if (isDelete)
    {
      // delete
      rig.getReminders().remove(currentEditedReminder);
    }
    else
    {
      // update
      currentEditedReminder.setName(name);
      currentEditedReminder.setInterval(interval);
      currentEditedReminder.setIntervalUnit(intervalUnit);
      currentEditedReminder.setLastCompletedDate(lastCompletedDate);
    }
    
    // update UI
    initRemindersUI();
  }
  
  private void save()
  {
    // set name
    EditText nField = (EditText)findViewById(R.id.RigNameField);
    rig.setName(nField.getText().toString());
    
    // set primary
    CheckBox pField = (CheckBox)findViewById(R.id.RigPrimaryField);
    rig.setPrimary(pField.isChecked());
    
    // set archived
    CheckBox aField = (CheckBox)findViewById(R.id.RigArchivedField);
    rig.setArchived(aField.isChecked());
    
    // save
    if (isEdit)
    {
      repository.updateRig(rig);
    }
    else
    {
      repository.addRig(rig);
    }
    
    // finish
    finish();
  }
  
  private void delete()
  {
    // delete aircraft
    repository.deleteRig(rig);
    
    // finish
    finish();
  }
  
  @Override
  public void onBackPressed()
  {
    save();
    super.onBackPressed();
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {
    saveMenu = menu.add(R.string.save_button);
    saveMenu.setIcon(R.drawable.ic_menu_save);
    
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item)
  {
    if (item == saveMenu)
    {
          save();
        return true;
    }
    else
    {
      return super.onOptionsItemSelected(item);
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.