package com.whatstodo.activities; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.ClipboardManager; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; 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.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.whatstodo.R; import com.whatstodo.activities.adapter.TaskAdapter; import com.whatstodo.filter.PriorityHighFilter; import com.whatstodo.filter.TodayFilter; import com.whatstodo.filter.TomorrowFilter; import com.whatstodo.manager.TaskManager; import com.whatstodo.models.List; import com.whatstodo.models.Task; import com.whatstodo.utils.ActivityUtils; public abstract class ListActivity extends Activity implements OnClickListener, TaskAdapter.TaskAdapterListener { protected List list; protected static final int TASK_ACTIVITY = 0; protected static final int SYNC_ACTIVITY = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); list = getTodoData(); setTitle(list.getName()); Button syncButton = (Button) findViewById(R.id.synchronisationList); syncButton.setOnClickListener(this); initListView(); } protected abstract List getTodoData(); protected TextView initTextView(int id, String text) { TextView textView = (TextView) findViewById(id); if (text != null) textView.setText(text); textView.setOnClickListener(this); return textView; } @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.synchronisationList: startSynchronisation(); break; case R.id.filterButton5: Intent intent = new Intent(view.getContext(), ListContainerActivity.class); startActivity(intent); finish(); break; case R.id.filterButton6: startFilter(((TextView) view).getText().toString(), view); break; case R.id.filterButton7: startFilter(((TextView) view).getText().toString(), view); break; case R.id.filterButton8: Intent moreIntent = new Intent(view.getContext(), MoreActivity.class); startActivity(moreIntent); finish(); break; } } private void startFilter(String filter, View view) { if (filter.equals("Heute")) { ActivityUtils.startFilteredActivity(this, view, new TodayFilter()); } else if (filter.equals("Morgen")) { ActivityUtils.startFilteredActivity(this, view, new TomorrowFilter()); } else if (filter.equals("Priorität")) { ActivityUtils.startFilteredActivity(this, view, new PriorityHighFilter()); } } @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { if (view.getId() == R.id.taskList) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; long taskId = ((TextView) ((FrameLayout) ((FrameLayout) ((RelativeLayout) info.targetView) .getChildAt(0)).getChildAt(0)).getChildAt(0)) .getInputExtras(false).getLong("id"); Task task = TaskManager.getInstance().load(taskId); menu.setHeaderTitle(task.getName()); String[] menuItems = getResources().getStringArray(R.array.menu); for (int i = 0; i < menuItems.length; i++) { menu.add(Menu.NONE, i, i, menuItems[i]); } Toast.makeText(getApplicationContext(), task.getName().toString(), Toast.LENGTH_SHORT).show(); } } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); long taskId = ((TextView) ((FrameLayout) ((FrameLayout) ((RelativeLayout) info.targetView) .getChildAt(0)).getChildAt(0)).getChildAt(0)).getInputExtras( false).getLong("id"); final Task task = list.getTask(taskId); String[] menuItems = getResources().getStringArray(R.array.menu); String menuItemName = menuItems[item.getItemId()]; ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); if (menuItemName.equals(menuItems[0])) { // Edit AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Name"); builder.setMessage(task.getName()); final EditText input = new EditText(this); builder.setView(input); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { task.setName(input.getText().toString()); TaskManager.getInstance().save(task); refreshListView(); } }); 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 TaskManager.getInstance().delete(task); refreshListView(); } else if (menuItemName.equals(menuItems[2])) { // Copy clipboard.setText(task.getName()); refreshListView(); } else if (menuItemName.equals(menuItems[3])) { // Paste task.setName(clipboard.getText().toString()); refreshListView(); } return true; } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { refreshListView(); } } @Override public void onTaskChange() { refreshListView(); } private void initListView() { ListView taskListView = (ListView) findViewById(R.id.taskList); list = getTodoData(); TaskAdapter adapter = new TaskAdapter(this, R.layout.taskitem, list); adapter.registerListener(this); taskListView.setAdapter(adapter); taskListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { long taskId = ((TextView) ((FrameLayout) ((FrameLayout) ((RelativeLayout) view) .getChildAt(0)).getChildAt(0)).getChildAt(0)) .getInputExtras(false).getLong("id"); Intent intent = new Intent(view.getContext(), TaskActivity.class); Bundle bundle = new Bundle(); bundle.putLong("TaskId", taskId); bundle.putLong("ListId", list.getId()); intent.putExtras(bundle); startActivityForResult(intent, TASK_ACTIVITY); } }); registerForContextMenu(taskListView); } protected void refreshListView() { ListView taskListView = (ListView) findViewById(R.id.taskList); list = getTodoData(); TaskAdapter adapter = new TaskAdapter(this, R.layout.taskitem, list); adapter.registerListener(this); taskListView.setAdapter(adapter); } abstract protected void startSynchronisation(); }