Android Open Source - tracks-android Task List Activity






From Project

Back to project page tracks-android.

License

The source code is released under:

Copyright (c) 2010 Adam Wolfe Gordon <awg@xvx.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to...

If you think the Android project tracks-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package ca.xvx.tracks;
/*  w  w  w . ja  v a 2s . c  o  m*/
import ca.xvx.tracks.preferences.PreferenceConstants;

import android.util.Log;

import android.app.ExpandableListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;

public class TaskListActivity extends ExpandableListActivity {
  private static final String TAG = "TaskListActivity";
  
  private TaskListAdapter _tla;
  private SharedPreferences _prefs;
  private Handler _commHandler;

  private static final int SETTINGS = 1;
  private static final int NEW_TASK = 2;
  private static final int EDIT_TASK = 2;
  private static final int NEW_CONTEXT = 3;
  private static final int EDIT_CONTEXT = 3;
  private static final int NEW_PROJECT = 4;
  private static final int EDIT_PROJECT = 4;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.v(TAG, "Created!");
    
    _prefs = PreferenceManager.getDefaultSharedPreferences(this);

    TracksCommunicator comm = new TracksCommunicator(_prefs);
    comm.start();
    _commHandler = TracksCommunicator.getHandler();
    
    _tla = new TaskListAdapter();
    setListAdapter(_tla);
    
    if(!_prefs.getBoolean(PreferenceConstants.RUN, false)) {
      Log.i(TAG, "This appears to be our first run; edit preferences");
      startActivityForResult(new Intent(this, SettingsActivity.class), SETTINGS);
    } else {
      Log.v(TAG, "Fetching tasks");
      refreshList();
    }
  }

  private void refreshList() {
    final Context context = getExpandableListView().getContext();
    final ProgressDialog p = ProgressDialog.show(context, "", "", true);
    TracksAction a = new TracksAction(TracksAction.ActionType.FETCH_TASKS, null, new Handler() {
        @Override
        public void handleMessage(Message msg) {
          switch(msg.what) {
          case TracksCommunicator.FETCH_CODE:
            p.setMessage(getString(R.string.MSG_fetching));
            break;
          case TracksCommunicator.PARSE_CODE:
            p.setMessage(getString(R.string.MSG_parsing));
            break;
          case TracksCommunicator.PREFS_FAIL_CODE:
            p.dismiss();
            Toast.makeText(context, getString(R.string.ERR_badprefs), Toast.LENGTH_LONG).show();
            break;
          case TracksCommunicator.PARSE_FAIL_CODE:
            p.dismiss();
            Toast.makeText(context, getString(R.string.ERR_parse), Toast.LENGTH_LONG).show();
            break;
          case TracksCommunicator.FETCH_FAIL_CODE:
            p.dismiss();
            Toast.makeText(context, getString(R.string.ERR_fetch), Toast.LENGTH_LONG).show();
            break;
          case TracksCommunicator.SUCCESS_CODE:
            _tla.notifyDataSetChanged();
            p.dismiss();

            int ngroups = _tla.getGroupCount();
            for(int g = 0; g < ngroups; g++) {
              if(!((TodoContext)_tla.getGroup(g)).isHidden()) {
                getExpandableListView().expandGroup(g);
              }
            }

            registerForContextMenu(getExpandableListView());
            break;
          }
        }
      });
    
    Message.obtain(_commHandler, 0, a).sendToTarget();
  }

  @Override
  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo)menuInfo;
    if(info.targetView instanceof TaskListItem) {
      MenuInflater inflater = getMenuInflater();
      TaskListItem tli = (TaskListItem)info.targetView;
      inflater.inflate(R.menu.task_context_menu, menu);
      menu.setHeaderTitle(tli.getTask().getDescription());
    } else {
      int gid = getExpandableListView().getPackedPositionGroup(info.packedPosition);
      TodoContext c = (TodoContext)_tla.getGroup(gid);
      Intent i = new Intent(this, ContextEditorActivity.class);
      i.putExtra("context", c.getId());
      startActivityForResult(i, EDIT_CONTEXT);
    }
  }

  @Override
  public boolean onContextItemSelected(MenuItem item) {
    ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo)item.getMenuInfo();
    int cid = getExpandableListView().getPackedPositionChild(info.packedPosition);
    int gid = getExpandableListView().getPackedPositionGroup(info.packedPosition);
    Task t = (Task)_tla.getChild(gid, cid);
    String desc = t.getDescription();
    Context context = getExpandableListView().getContext();
    TracksAction a;
    
    switch(item.getItemId()) {
    case R.id.edit_task:
      Intent i = new Intent(this, TaskEditorActivity.class);
      i.putExtra("task", t.getId());
      startActivityForResult(i, EDIT_TASK);
      return true;
    case R.id.delete_task:
      a = new TracksAction(TracksAction.ActionType.DELETE_TASK, t,
                 _tla.getNotifyHandler());
      Message.obtain(_commHandler, 0, a).sendToTarget();      
      return true;
    case R.id.done_task:
      t.setDone(true);
      a = new TracksAction(TracksAction.ActionType.COMPLETE_TASK,
                 t, _tla.getNotifyHandler());
      _commHandler.obtainMessage(0, a).sendToTarget();
      return true;
    default:
      return super.onContextItemSelected(item);
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == SETTINGS) {
      Log.v(TAG, "Returned from settings");
      refreshList();
    }
    
    if(requestCode == NEW_TASK || requestCode == EDIT_TASK) {
      Log.v(TAG, "Returned from edit");
      if(resultCode == TaskEditorActivity.SAVED) {
        Log.v(TAG, "Task was saved");
        _tla.notifyDataSetChanged();
      }
    }

    if(requestCode == NEW_CONTEXT || requestCode == EDIT_CONTEXT) {
      Log.v(TAG, "Returned from edit");
      if(resultCode == ContextEditorActivity.SAVED) {
        Log.v(TAG, "Context was saved");
        _tla.notifyDataSetChanged();
      }
    }

    if(requestCode == NEW_PROJECT || requestCode == EDIT_PROJECT) {
      Log.v(TAG, "Returned from edit");
      if(resultCode == ProjectEditorActivity.SAVED) {
        Log.v(TAG, "Project was saved");
        _tla.notifyDataSetChanged();
      }
    }
  }

  @Override
  public boolean onChildClick(ExpandableListView l, View view, int group, int position, long id) {
    Task t = (Task)_tla.getChild(group, position);

    Intent i = new Intent(this, TaskEditorActivity.class);
    i.putExtra("task", t.getId());
    startActivityForResult(i, EDIT_TASK);
    
    return true;
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inf = getMenuInflater();
    inf.inflate(R.menu.main_menu, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.MENU_add:
      startActivityForResult(new Intent(this, TaskEditorActivity.class), NEW_TASK);
      return true;
    case R.id.MENU_addcontext:
      startActivityForResult(new Intent(this, ContextEditorActivity.class), NEW_CONTEXT);
      return true;
    case R.id.MENU_addproject:
      startActivityForResult(new Intent(this, ProjectEditorActivity.class), NEW_PROJECT);
      return true;
    case R.id.MENU_settings:
      startActivityForResult(new Intent(this, SettingsActivity.class), SETTINGS);
      return true;
    case R.id.MENU_refresh:
      refreshList();
      return true;
    default:
      return super.onOptionsItemSelected(item);
    }
  }

  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i(TAG, "Configuration changed.");
    getExpandableListView().requestLayout();
  }
}




Java Source Code List

ca.xvx.tracks.ContextEditorActivity.java
ca.xvx.tracks.ContextXmlHandler.java
ca.xvx.tracks.DuplicateContextException.java
ca.xvx.tracks.DuplicateProjectException.java
ca.xvx.tracks.DuplicateTaskException.java
ca.xvx.tracks.ProjectEditorActivity.java
ca.xvx.tracks.ProjectXmlHandler.java
ca.xvx.tracks.Project.java
ca.xvx.tracks.SettingsActivity.java
ca.xvx.tracks.TaskEditorActivity.java
ca.xvx.tracks.TaskListActivity.java
ca.xvx.tracks.TaskListAdapter.java
ca.xvx.tracks.TaskListItem.java
ca.xvx.tracks.TaskXmlHandler.java
ca.xvx.tracks.Task.java
ca.xvx.tracks.TodoContext.java
ca.xvx.tracks.TracksAction.java
ca.xvx.tracks.TracksCommunicator.java
ca.xvx.tracks.preferences.PreferenceConstants.java
ca.xvx.tracks.preferences.PreferenceUtils.java
ca.xvx.tracks.util.HttpConnection.java