Implemented special waiting on me fragment to bold unread items and set read dates when clicked

pull/14/head
Sam Bosley 11 years ago
parent 8c4d37e49a
commit a2ca7e2040

@ -0,0 +1,92 @@
package com.todoroo.astrid.actfm;
import java.util.concurrent.atomic.AtomicReference;
import android.database.Cursor;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.widget.TextView;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.WaitingOnMeDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.WaitingOnMe;
public class WaitingOnMeFragment extends TaskListFragment {
@Autowired
private WaitingOnMeDao waitingOnMeDao;
@Autowired
private TaskDao taskDao;
@Override
public Property<?>[] taskProperties() {
return AndroidUtilities.addToArray(super.taskProperties(), WaitingOnMe.READ_AT, WaitingOnMe.ACKNOWLEDGED);
}
@Override
protected TaskAdapter createTaskAdapter(TodorooCursor<Task> cursor) {
return new WaitingOnMeTaskAdapter(this, getTaskRowResource(),
cursor, sqlQueryTemplate, false,
new OnCompletedTaskListener() {
@Override
public void onCompletedTask(Task item, boolean newState) {
if (newState == true)
onTaskCompleted(item);
}
});
}
private static class WaitingOnMeTaskAdapter extends TaskAdapter {
public WaitingOnMeTaskAdapter(TaskListFragment fragment, int resource,
Cursor c, AtomicReference<String> query, boolean autoRequery,
OnCompletedTaskListener onCompletedTaskListener) {
super(fragment, resource, c, query, autoRequery, onCompletedTaskListener);
}
@Override
protected void setTaskAppearance(ViewHolder viewHolder, Task task) {
super.setTaskAppearance(viewHolder, task);
TextView nameView = viewHolder.nameView;
if (task.getValue(WaitingOnMe.READ_AT) == 0 && task.getValue(WaitingOnMe.ACKNOWLEDGED) == 0)
nameView.setTypeface(null, Typeface.BOLD);
else
nameView.setTypeface(null, 0);
}
}
@Override
public void onTaskListItemClicked(long taskId, boolean editable) {
super.onTaskListItemClicked(taskId, editable);
String uuid = taskDao.uuidFromLocalId(taskId);
if (!TextUtils.isEmpty(uuid)) {
TodorooCursor<WaitingOnMe> womCursor = waitingOnMeDao.query(Query.select(WaitingOnMe.ID)
.where(Criterion.and(WaitingOnMe.TASK_UUID.eq(uuid), WaitingOnMe.READ_AT.eq(0))));
try {
if (womCursor.getCount() > 0) {
womCursor.moveToFirst();
WaitingOnMe wom = new WaitingOnMe(womCursor);
wom.setValue(WaitingOnMe.READ_AT, DateUtilities.now());
waitingOnMeDao.saveExisting(wom);
}
} finally {
womCursor.close();
}
}
}
}

@ -38,6 +38,8 @@ import com.todoroo.astrid.data.TaskListMetadata;
import com.todoroo.astrid.data.TaskOutstanding;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.data.UserActivityOutstanding;
import com.todoroo.astrid.data.WaitingOnMe;
import com.todoroo.astrid.data.WaitingOnMeOutstanding;
@SuppressWarnings("nls")
public class ChangesHappened<TYPE extends RemoteModel, OE extends OutstandingEntry<TYPE>> extends ClientToServerMessage<TYPE> {
@ -67,6 +69,9 @@ public class ChangesHappened<TYPE extends RemoteModel, OE extends OutstandingEnt
case TYPE_TASK_LIST_METADATA:
return new TaskListMetadataChangesHappened(id, TaskListMetadata.class,
PluginServices.getTaskListMetadataDao(), PluginServices.getTaskListMetadataOutstandingDao());
case TYPE_WAITING_ON_ME:
return new ChangesHappened<WaitingOnMe, WaitingOnMeOutstanding>(id, WaitingOnMe.class,
PluginServices.getWaitingOnMeDao(), PluginServices.getWaitingOnMeOutstandingDao());
default:
return null;
}

@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@ -18,15 +19,18 @@ import android.graphics.drawable.BitmapDrawable;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.WaitingOnMeFragment;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.AstridFilterExposer;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
@ -64,7 +68,7 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid
filters.add(getTodayFilter(r));
if (Preferences.getBoolean(R.string.p_show_waiting_on_me_filter, true) &&
PluginServices.getWaitingOnMeDao().count(Query.select(WaitingOnMe.ID).where(WaitingOnMe.DELETED_AT.eq(0))) > 0);
PluginServices.getWaitingOnMeDao().count(Query.select(WaitingOnMe.ID).where(WaitingOnMe.DELETED_AT.eq(0))) > 0)
filters.add(getWaitingOnMeFilter(r));
// transmit filter list
@ -107,12 +111,11 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid
}
public static Filter getWaitingOnMeFilter(Resources r) {
Filter waitingOnMe = new Filter(r.getString(R.string.BFE_waiting_on_me), r.getString(R.string.BFE_waiting_on_me),
new QueryTemplate().where(
FilterWithCustomIntent waitingOnMe = new FilterWithCustomIntent(r.getString(R.string.BFE_waiting_on_me), r.getString(R.string.BFE_waiting_on_me),
new QueryTemplate().join(Join.inner(WaitingOnMe.TABLE, Task.UUID.eq(WaitingOnMe.TASK_UUID))).where(
Criterion.and(TaskCriteria.activeVisibleMine(),
Task.UUID.in(Query.select(WaitingOnMe.TASK_UUID)
.from(WaitingOnMe.TABLE).where(WaitingOnMe.DELETED_AT.eq(0))))), null);
WaitingOnMe.DELETED_AT.eq(0))), null);
waitingOnMe.customTaskList = new ComponentName(ContextManager.getContext(), WaitingOnMeFragment.class);
int themeFlags = ThemeService.getFilterThemeFlags();
waitingOnMe.listingIcon = ((BitmapDrawable) r.getDrawable(
ThemeService.getDrawable(R.drawable.filter_inbox, themeFlags))).getBitmap();

@ -1067,7 +1067,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
* @param name
* @param progress
*/
void setTaskAppearance(ViewHolder viewHolder, Task task) {
protected void setTaskAppearance(ViewHolder viewHolder, Task task) {
Activity activity = fragment.getActivity();
if (activity == null)
return;

Loading…
Cancel
Save