diff --git a/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java b/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java index 15bbfaf90..d413f473a 100644 --- a/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java +++ b/astrid/api-src/com/todoroo/astrid/api/TaskDetail.java @@ -57,7 +57,6 @@ public final class TaskDetail implements Parcelable { // --- parcelable helpers - /** * {@inheritDoc} */ diff --git a/astrid/res/layout/task_adapter_row.xml b/astrid/res/layout/task_adapter_row.xml index 2e958a98a..97ff3996f 100644 --- a/astrid/res/layout/task_adapter_row.xml +++ b/astrid/res/layout/task_adapter_row.xml @@ -1,7 +1,6 @@ - @@ -45,9 +46,21 @@ + + + android:layout_height="fill_parent" + android:layout_alignParentRight="true" + android:layout_alignParentTop="true" /> - + diff --git a/astrid/res/values/strings-3.0.xml b/astrid/res/values/strings-3.0.xml index 4234ef431..5f73e5529 100644 --- a/astrid/res/values/strings-3.0.xml +++ b/astrid/res/values/strings-3.0.xml @@ -178,8 +178,8 @@ button: add task & go to the edit page. Finished %s - - Loading... + + Edit Edit Task diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 07248da82..17f8a5c97 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -19,26 +19,26 @@ import android.content.pm.ResolveInfo; import android.database.Cursor; import android.os.Bundle; 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.Window; +import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; -import android.view.Window; import android.view.inputmethod.EditorInfo; import android.widget.AbsListView; -import android.widget.AbsListView.OnScrollListener; -import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.RemoteViews; import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; +import android.widget.AbsListView.OnScrollListener; +import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.TextView.OnEditorActionListener; import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; @@ -80,9 +80,9 @@ public class TaskListActivity extends ListActivity implements OnScrollListener { // --- activities - static final int ACTIVITY_EDIT_TASK = 0; - static final int ACTIVITY_SETTINGS = 1; - static final int ACTIVITY_PLUGINS = 2; + public static final int ACTIVITY_EDIT_TASK = 0; + public static final int ACTIVITY_SETTINGS = 1; + public static final int ACTIVITY_PLUGINS = 2; // --- menu codes diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index f5438c4e4..2e4be729c 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -16,7 +16,9 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; +import android.view.View.OnClickListener; import android.view.View.OnCreateContextMenuListener; +import android.widget.Button; import android.widget.CheckBox; import android.widget.CursorAdapter; import android.widget.LinearLayout; @@ -31,6 +33,8 @@ import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; +import com.todoroo.astrid.activity.TaskEditActivity; +import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.TaskDetail; import com.todoroo.astrid.model.Task; @@ -45,6 +49,14 @@ import com.todoroo.astrid.utility.Preferences; */ public class TaskAdapter extends CursorAdapter { + private final class RowClickListener implements + OnClickListener { + @Override + public void onClick(View v) { + + } + } + public interface OnCompletedTaskListener { public void onCompletedTask(Task item, boolean newState); } @@ -136,6 +148,7 @@ public class TaskAdapter extends CursorAdapter { viewHolder.completeBox = (CheckBox)view.findViewById(R.id.completeBox); viewHolder.dueDate = (TextView)view.findViewById(R.id.dueDate); viewHolder.details = (LinearLayout)view.findViewById(R.id.details); + viewHolder.actions = (LinearLayout)view.findViewById(R.id.actions); viewHolder.importance = (View)view.findViewById(R.id.importance); view.setTag(viewHolder); @@ -180,7 +193,8 @@ public class TaskAdapter extends CursorAdapter { public TextView dueDate; public LinearLayout details; public View importance; - public TextView loadingDetails; + public LinearLayout actions; + public boolean expanded; } /** Helper method to set the contents and visibility of each field */ @@ -253,17 +267,13 @@ public class TaskAdapter extends CursorAdapter { Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); - - /* add loading message - if(viewHolder.loadingDetails == null) { - viewHolder.loadingDetails = new TextView(activity); - viewHolder.loadingDetails.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemDetails); - viewHolder.loadingDetails.setText(R.string.TAd_loading); - detailsView.addView(viewHolder.loadingDetails); - }*/ } } + final LinearLayout actionsView = viewHolder.actions; + actionsView.setVisibility(View.GONE); + viewHolder.expanded = false; + // importance bar - must be set at end when view height is determined final View importanceView = viewHolder.importance; { int value = task.getValue(Task.IMPORTANCE); @@ -294,14 +304,12 @@ public class TaskAdapter extends CursorAdapter { if(viewHolder == null || viewHolder.task.getId() != taskId) continue; - viewHolder.details.addView(detailToView(detail)); - viewHolder.details.setVisibility(View.VISIBLE); - - if(viewHolder.loadingDetails != null) { - viewHolder.details.removeView(viewHolder.loadingDetails); - viewHolder.loadingDetails = null; + TextView newView = detailToView(detail); + for(int j = 0; j < viewHolder.details.getChildCount(); j++) { + if(newView.getText().equals(((TextView)viewHolder.details.getChildAt(j)).getText())) + return; } - + viewHolder.details.addView(newView); break; } } @@ -311,7 +319,7 @@ public class TaskAdapter extends CursorAdapter { * * @param detail */ - private View detailToView(TaskDetail detail) { + private TextView detailToView(TaskDetail detail) { TextView textView = new TextView(activity); textView.setTextAppearance(activity, R.style.TextAppearance_TAd_ItemDetails); textView.setText(Html.fromHtml(detail.text)); @@ -343,19 +351,44 @@ public class TaskAdapter extends CursorAdapter { // context menu listener container.setOnCreateContextMenuListener(listener); + + // tap listener + container.setOnClickListener(listener); } - class ContextMenuListener implements OnCreateContextMenuListener { + /* ====================================================================== + * ======================================================= event handlers + * ====================================================================== */ + + + class ContextMenuListener implements OnCreateContextMenuListener, OnClickListener { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // this is all a big sham. it's actually handled in Task List Activity } - } - /* ====================================================================== - * ======================================================= event handlers - * ====================================================================== */ + @Override + public void onClick(View v) { + final ViewHolder viewHolder = (ViewHolder)v.getTag(); + viewHolder.expanded = !viewHolder.expanded; + LinearLayout actions = viewHolder.actions; + actions.setVisibility(viewHolder.expanded ? View.VISIBLE : View.GONE); + if(viewHolder.expanded && actions.getChildCount() == 0) { + Button edit = new Button(activity); + edit.setText(R.string.TAd_actionEditTask); + edit.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(activity, TaskEditActivity.class); + intent.putExtra(TaskEditActivity.ID_TOKEN, viewHolder.task.getId()); + activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK); + } + }); + actions.addView(edit); + } + } + } /** * Call me when the parent presses trackpad