package com.whatstodo.activities;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.ClipboardManager;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.whatstodo.R;
import com.whatstodo.activities.adapter.ListAdapter;
import com.whatstodo.filter.PriorityHighFilter;
import com.whatstodo.filter.TodayFilter;
import com.whatstodo.filter.TomorrowFilter;
import com.whatstodo.manager.TodoListManager;
import com.whatstodo.models.List;
import com.whatstodo.net.ListSynchronizer;
import com.whatstodo.net.SynchronizationException;
import com.whatstodo.utils.ActivityUtils;
public class ListContainerActivity extends Activity implements OnClickListener {
protected static final int LIST_ACTIVITY = 0;
protected static final int FILTER_ACTIVITY = 1;
protected static final int SYNC_ACTIVITY = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listcontainer);
this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Button createList = (Button) findViewById(R.id.synchronisationContainer);
createList.setOnClickListener(this);
TextView todayFilter = (TextView) findViewById(R.id.filterButton1);
todayFilter.setText("Heute");
todayFilter.setOnClickListener(this);
TextView tomorrowFilter = (TextView) findViewById(R.id.filterButton2);
tomorrowFilter.setText("Morgen");
tomorrowFilter.setOnClickListener(this);
TextView priorityFilter = (TextView) findViewById(R.id.filterButton3);
priorityFilter.setText("Priorität");
priorityFilter.setOnClickListener(this);
TextView more = (TextView) findViewById(R.id.filterButton4);
more.setText("Mehr");
more.setOnClickListener(this);
final EditText editText = (EditText) findViewById(R.id.list);
editText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
String listName = editText.getText().toString();
TodoListManager.getInstance().save(new List(listName));
showLists();
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
editText.getWindowToken(), 0);
return true;
}
return false;
}
});
showLists();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
startActivityForResult((new Intent(getApplicationContext(), SyncSettingsActivity.class)), SYNC_ACTIVITY);
return true;
}
return false;
}
// @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.synchronisationContainer:
startSynchronisation();
break;
case R.id.filterButton1:
ActivityUtils.startFilteredActivity(this, view, new TodayFilter());
break;
case R.id.filterButton2:
ActivityUtils.startFilteredActivity(this, view,
new TomorrowFilter());
break;
case R.id.filterButton3:
ActivityUtils.startFilteredActivity(this, view,
new PriorityHighFilter());
break;
case R.id.filterButton4:
Intent intent = new Intent(view.getContext(), MoreActivity.class);
startActivity(intent);
finish();
break;
}
}
/**
* Shows all existing lists in a linear layout. The method gets the lists
* from the class List Container.
*/
private void showLists() {
ListView listList = (ListView) findViewById(R.id.list1);
ListAdapter adapter = new ListAdapter(this, R.layout.listitem,
TodoListManager.getInstance().findAll());
listList.setAdapter(adapter);
listList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
long listId = ((TextView) ((FrameLayout) ((FrameLayout) ((FrameLayout) view)
.getChildAt(0)).getChildAt(0)).getChildAt(0))
.getInputExtras(false).getLong("id");
Intent intent = new Intent(view.getContext(),
TodoActivity.class);
Bundle bundle = new Bundle();
bundle.putLong("ListId", listId); // List
intent.putExtras(bundle); // Put your id to your next Intent
startActivityForResult(intent, LIST_ACTIVITY);
}
});
registerForContextMenu(listList);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo) {
if (view.getId() == R.id.list1) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
final List list = TodoListManager.getInstance().findAll()
.get(info.position);
menu.setHeaderTitle(list.getName());
String[] menuItems = getResources().getStringArray(R.array.menu);
for (int i = 0; i < menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
String[] menuItems = getResources().getStringArray(R.array.menu);
String menuItemName = menuItems[item.getItemId()];
final List list = TodoListManager.getInstance().findAll()
.get(info.position);
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (menuItemName.equals(menuItems[0])) { // Edit
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Name");
builder.setMessage(list.getName());
final EditText input = new EditText(this);
builder.setView(input);
builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
list.setName(input.getText().toString());
TodoListManager.getInstance().save(list);
showLists();
}
});
builder.setNegativeButton("Abbrechen",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
AlertDialog alert = builder.create();
alert.show();
} else if (menuItemName.equals(menuItems[1])) { // Delete
TodoListManager.getInstance().delete(list);
showLists();
} else if (menuItemName.equals(menuItems[2])) { // Copy
clipboard.setText(list.getName());
showLists();
} else if (menuItemName.equals(menuItems[3])) { // Paste
list.setName(clipboard.getText().toString());
TodoListManager.getInstance().save(list);
showLists();
}
return true;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
showLists();
}
}
private void startSynchronisation() {
try {
ListSynchronizer synchronizer = new ListSynchronizer();
if (synchronizer.serverIsAvailble()) {
java.util.List<List> synchronizedTodos = synchronizer.synchronizeAll();
TodoListManager.getInstance().replaceAll(synchronizedTodos);
showLists();
} else {
Toast toast = Toast.makeText(getApplicationContext(),
"Server is not available", Toast.LENGTH_SHORT);
toast.show();
}
} catch (SynchronizationException e) {
Log.e(ListContainerActivity.class.toString(),
"An error error occured during synchronization", e);
Toast toast = Toast.makeText(getApplicationContext(),
"An error error occured during synchronization",
Toast.LENGTH_SHORT);
toast.show();
}
}
}