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);
}
}