package net.tasksnow.view.task; import android.app.ActionBar; import android.app.Activity; import android.app.FragmentManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.Spinner; import android.widget.TextView; import net.tasksnow.R; import net.tasksnow.TaskNowApplication; import net.tasksnow.model.cards.Label; import net.tasksnow.model.cards.Task; import net.tasksnow.model.sqlite.DatabaseHandler; import java.util.ArrayList; import java.util.Date; import java.util.List; public class TaskEditActivity extends Activity implements LabelsDialogFragment.NoticeDialogListener { public static final String TASKID_KEY = "taskid_key"; private final String name = ""; private final String date = ""; private int taskId; EditText inputField; private ArrayAdapter<String> reminderAdapter; ArrayAdapter<String> actionAdapter; ArrayAdapter<Date> dateAdapter; private Spinner dateItems; private Spinner reminderItems; private Spinner actionItems; List<String> spinnerReminderArray; List<String> spinnerActionArray; List<Date> spinnerDateArray; private SeekBar seekBar; private Task task; private DatabaseHandler databaseHandler; private Button labelButton; private LinearLayout labelLinearLayout; private String[] labelStrings; private LabelsDialogFragment labelsDialogFragment; private FragmentManager fragmentManager; private ArrayList<Label> labelList; private ArrayList<Label> remainingLabels; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); taskId = this.getIntent().getExtras().getInt(TASKID_KEY); setContentView(R.layout.edit); databaseHandler = ((TaskNowApplication) this.getApplication()).getDbHandler(); ArrayList<Task> list = databaseHandler.getAllTasks(); task = databaseHandler.getTask(taskId); inputField = (EditText) findViewById(R.id.name_field); inputField.setText(task.getName()); seekBar = (SeekBar) findViewById(R.id.seekBar); int importance = task.getImportance(); seekBar.setProgress(importance); dateItems = (Spinner) findViewById(R.id.date_spinner); boolean notification = task.getNotification(); spinnerReminderArray = new ArrayList<String>(); spinnerReminderArray.add("Off"); spinnerReminderArray.add("On"); reminderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerReminderArray); reminderAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); reminderItems = (Spinner) findViewById(R.id.reminder_spinner); reminderItems.setAdapter(reminderAdapter); if (notification) { reminderItems.setSelection(1); } // int action = task.getAction(); int action = task.getAction(); spinnerActionArray = new ArrayList<String>(); int mapSize = ActionMapper.getActionMap().size(); for (int i = 0; i < mapSize; i++) { String actionName = ActionMapper.getActionName(i, this); spinnerActionArray.add(actionName); } actionAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerActionArray); actionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); actionItems = (Spinner) findViewById(R.id.action_spinner); actionItems.setAdapter(actionAdapter); actionItems.setSelection(action); spinnerDateArray = new ArrayList<Date>(); spinnerDateArray.add(task.getDate()); dateAdapter = new ArrayAdapter<Date>(this, android.R.layout.simple_spinner_item, spinnerDateArray); dateAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); dateItems = (Spinner) findViewById(R.id.date_spinner); dateItems.setAdapter(dateAdapter); //Implements the edit text labels if (labelLinearLayout == null) { labelLinearLayout = (LinearLayout) findViewById(R.id.label_linear_layout); } labelButton = (Button) findViewById(R.id.label_button); //displays the labels of the task labelList = task.getLabels(); for (Label label : labelList) { View inflatedView = getLayoutInflater().inflate(R.layout.label_text, null); final RelativeLayout relativeLayout = (RelativeLayout) inflatedView.findViewById(R.id.label_relative_layout); labelLinearLayout.addView(relativeLayout); final TextView textView = (TextView) relativeLayout.findViewById(R.id.label_text); textView.setText(label.getValue()); //If you click on the cross button the label gets deleted! ImageButton crossButton = (ImageButton) relativeLayout.findViewById(R.id.cross_button); crossButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { labelLinearLayout.removeView(relativeLayout); //removes the label out of the label list which is passed to the database for (int i = 0; i < labelList.size(); i++) { if (labelList.get(i).getValue().equals(textView.getText())) { labelList.remove(i); } } } }); } remainingLabels = databaseHandler.getAllLabels(); //Remove the labels of the dialog which are already saved in the task ArrayList<Label> taskLabels = databaseHandler.getLabelsForTask(taskId); for (Label taskLabel : taskLabels) { for (int j = 0; j < remainingLabels.size(); j++) { if (taskLabel.getValue().equals(remainingLabels.get(j).getValue())) { remainingLabels.remove(j); } } } labelStrings = new String[remainingLabels.size()]; for (int i = 0; i < remainingLabels.size(); i++) { labelStrings[i] = remainingLabels.get(i).getValue(); } labelsDialogFragment = new LabelsDialogFragment(); Bundle bundle = new Bundle(); bundle.putStringArray("labels", labelStrings); labelsDialogFragment.setArguments(bundle); fragmentManager = getFragmentManager(); labelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // editText = new EditText(TaskEditActivity.this); // // View inflatedView = getLayoutInflater().inflate(R.layout.cross_button, null); // crossButton = (ImageButton) inflatedView.findViewById(R.id.cross_button); // relativeLayout = new RelativeLayout(TaskEditActivity.this); // // params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); // params2 = new RelativeLayout.LayoutParams(48, 48); // // params.addRule(RelativeLayout.LEFT_OF, crossButton.getId()); // editText.setLayoutParams(params); // // params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, relativeLayout.getId()); // crossButton.setLayoutParams(params2); // // relativeLayout.addView(editText); // relativeLayout.addView(crossButton); // labelLinearLayout.addView(relativeLayout); // View inflatedView = getLayoutInflater().inflate(R.layout.label_text, null); // relativeLayout = (RelativeLayout) inflatedView.findViewById(R.id.label_relative_layout); // labelLinearLayout.addView(relativeLayout); labelsDialogFragment.show(fragmentManager, "dialog"); } }); //Build the action bar! // Inflate a "Done" custom action bar view to serve as the "Up" affordance. LayoutInflater inflater = (LayoutInflater) getActionBar().getThemedContext().getSystemService(LAYOUT_INFLATER_SERVICE); final View customActionBarView = inflater.inflate(R.layout.actionbar_custom_view_done, null); customActionBarView.findViewById(R.id.actionbar_done).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // "Done" int id = task.getId(); int projectID = task.getProjectID(); String projectname = task.getProjectName(); String name = inputField.getText().toString(); Date date = (Date) dateItems.getSelectedItem(); String reminder = (String) reminderItems.getSelectedItem(); int status = task.getStatus(); int selectedActionItem = actionItems.getSelectedItemPosition(); int seekBarProgress = seekBar.getProgress(); String description = task.getDescription(); boolean remind; if (reminder.equals("On")) { remind = true; } else { remind = false; } Task task = new Task(id, name, labelList, description, date, projectID, seekBarProgress, remind, status, selectedActionItem, projectname); databaseHandler.updateTask(task); finish(); // TODO: don't just finish()! } }); // Show the custom action bar view and hide the normal Home icon and title. final ActionBar actionBar = getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); actionBar.setCustomView(customActionBarView); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.discard, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.discard: // "Discard" finish(); // TODO: don't just finish()! return true; } return super.onOptionsItemSelected(item); } /* (non-Javadoc) * @see net.tasksnow.view.task.LabelsDialogFragment.NoticeDialogListener#onLabelClick(java.lang.String) */ @Override public void onLabelClick(String label) { View inflatedView = getLayoutInflater().inflate(R.layout.label_text, null); final RelativeLayout relativeLayout = (RelativeLayout) inflatedView.findViewById(R.id.label_relative_layout); labelLinearLayout.addView(relativeLayout); TextView textView = (TextView) relativeLayout.findViewById(R.id.label_text); textView.setText(label); //label can be removed from the task ImageButton crossButton = (ImageButton) relativeLayout.findViewById(R.id.cross_button); crossButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { labelLinearLayout.removeView(relativeLayout); } }); labelList.add(databaseHandler.getLabel(label)); for (int i = 0; i < remainingLabels.size(); i++) { if (remainingLabels.get(i).getValue().equals(label)) { remainingLabels.remove(i); } } labelStrings = new String[remainingLabels.size()]; for (int i = 0; i < remainingLabels.size(); i++) { labelStrings[i] = remainingLabels.get(i).getValue(); } //If a new label has been chosen than remove it from the list of further selectable labels labelsDialogFragment = new LabelsDialogFragment(); Bundle bundle = new Bundle(); bundle.putStringArray("labels", labelStrings); labelsDialogFragment.setArguments(bundle); } }