From 7e1a24adb12c6603672f170e72992bab2ccc8700 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 10 Apr 2013 17:49:59 -0700 Subject: [PATCH] Lots of new logic for acknowledging waiting on mes from task edit --- .../astrid/core/CoreFilterExposer.java | 2 +- astrid/res/layout/task_edit_activity.xml | 31 ++++++++ astrid/res/values/strings-core.xml | 12 ++++ .../astrid/activity/TaskEditFragment.java | 70 +++++++++++++++++++ .../todoroo/astrid/dao/WaitingOnMeDao.java | 9 +++ 5 files changed, 123 insertions(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java index b479fa0bf..40c5e2c68 100644 --- a/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/core/CoreFilterExposer.java @@ -114,7 +114,7 @@ public final class CoreFilterExposer extends BroadcastReceiver implements Astrid 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(), - WaitingOnMe.DELETED_AT.eq(0))), null); + WaitingOnMe.DELETED_AT.eq(0), WaitingOnMe.ACKNOWLEDGED.eq(0))).groupBy(Task.UUID), null); waitingOnMe.customTaskList = new ComponentName(ContextManager.getContext(), WaitingOnMeFragment.class); int themeFlags = ThemeService.getFilterThemeFlags(); waitingOnMe.listingIcon = ((BitmapDrawable) r.getDrawable( diff --git a/astrid/res/layout/task_edit_activity.xml b/astrid/res/layout/task_edit_activity.xml index 720771978..13409475b 100644 --- a/astrid/res/layout/task_edit_activity.xml +++ b/astrid/res/layout/task_edit_activity.xml @@ -12,6 +12,37 @@ android:layout_height="fill_parent" android:orientation="vertical" > + + + + + + + + Select tasks to view... + + + + %s made a comment + %s mentioned you + %s assigned this to you + %s raised the priority + %s changed the due date + %s wants your attention + + Dismiss + I\'ve read this diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java index fe8cf8551..217ea664e 100755 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditFragment.java @@ -70,10 +70,14 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.dao.TaskAttachmentDao; import com.todoroo.astrid.dao.TaskOutstandingDao; +import com.todoroo.astrid.dao.UserDao; +import com.todoroo.astrid.dao.WaitingOnMeDao; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.TaskAttachment; import com.todoroo.astrid.data.TaskOutstanding; +import com.todoroo.astrid.data.User; +import com.todoroo.astrid.data.WaitingOnMe; import com.todoroo.astrid.files.AACRecordingActivity; import com.todoroo.astrid.files.FileExplore; import com.todoroo.astrid.files.FileUtilities; @@ -211,6 +215,12 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { @Autowired private ActFmPreferenceService actFmPreferenceService; + @Autowired + private WaitingOnMeDao waitingOnMeDao; + + @Autowired + private UserDao userDao; + // --- UI components private ImageButton voiceAddNoteButton; @@ -733,6 +743,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { if (model != null) { // came from bundle setIsNewTask(model.getValue(Task.TITLE).length() == 0); + setupWaitingOnMe(); return; } @@ -766,7 +777,9 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { } else { StatisticsService.reportEvent(StatisticsConstants.EDIT_TASK); } + setIsNewTask(model.getValue(Task.TITLE).length() == 0); + setupWaitingOnMe(); if (model == null) { exceptionService.reportError("task-edit-no-task", @@ -780,6 +793,63 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { } + private void setupWaitingOnMe() { + if (!isNewTask) { + WaitingOnMe wom = waitingOnMeDao.findByTask(model.getUuid()); + if (wom != null) { + final View waitingOnMe = getView().findViewById(R.id.waiting_on_me); + waitingOnMe.setVisibility(View.VISIBLE); + waitingOnMe.findViewById(R.id.wom_dismiss).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + WaitingOnMe template = new WaitingOnMe(); + template.setValue(WaitingOnMe.DELETED_AT, DateUtilities.now()); + waitingOnMeDao.update(WaitingOnMe.TASK_UUID.eq(model.getUuid()), template); + waitingOnMe.setVisibility(View.GONE); + } + }); + waitingOnMe.findViewById(R.id.wom_acknowledge).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + WaitingOnMe template = new WaitingOnMe(); + template.setValue(WaitingOnMe.ACKNOWLEDGED, 1); + waitingOnMeDao.update(WaitingOnMe.TASK_UUID.eq(model.getUuid()), template); + waitingOnMe.setVisibility(View.GONE); + } + }); + + TextView womText = (TextView) waitingOnMe.findViewById(R.id.wom_message); + womText.setText(getWomText(wom)); + } + } + } + + private String getWomText(WaitingOnMe wom) { + int resource; + String type = wom.getValue(WaitingOnMe.WAIT_TYPE); + if (WaitingOnMe.WAIT_TYPE_ASSIGNED.equals(type)) + resource = R.string.wom_assigned; + else if (WaitingOnMe.WAIT_TYPE_CHANGED_DUE.equals(type)) + resource = R.string.wom_changed_due; + else if (WaitingOnMe.WAIT_TYPE_COMMENTED.equals(type)) + resource = R.string.wom_commented; + else if (WaitingOnMe.WAIT_TYPE_MENTIONED.equals(type)) + resource = R.string.wom_mentioned; + else if (WaitingOnMe.WAIT_TYPE_RAISED_PRI.equals(type)) + resource = R.string.wom_raised_pri; + else + resource = R.string.wom_default; + + String userString = null; + User user = userDao.fetch(wom.getValue(WaitingOnMe.WAITING_USER_ID), User.PROPERTIES); + if (user != null) + userString = user.getDisplayName(); + if (TextUtils.isEmpty(userString)) + userString = getString(R.string.ENA_no_user); + + return getString(resource, userString); + } + public long getTaskIdInProgress() { if (model != null && model.getId() > 0) return model.getId(); diff --git a/astrid/src/com/todoroo/astrid/dao/WaitingOnMeDao.java b/astrid/src/com/todoroo/astrid/dao/WaitingOnMeDao.java index 91fe2d922..da6879a14 100644 --- a/astrid/src/com/todoroo/astrid/dao/WaitingOnMeDao.java +++ b/astrid/src/com/todoroo/astrid/dao/WaitingOnMeDao.java @@ -1,7 +1,10 @@ package com.todoroo.astrid.dao; +import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.actfm.sync.messages.NameMaps; import com.todoroo.astrid.data.WaitingOnMe; @@ -20,4 +23,10 @@ public class WaitingOnMeDao extends RemoteModelDao { protected boolean shouldRecordOutstandingEntry(String columnName, Object value) { return NameMaps.shouldRecordOutstandingColumnForTable(NameMaps.TABLE_ID_WAITING_ON_ME, columnName); } + + public WaitingOnMe findByTask(String taskUuid) { + TodorooCursor cursor = query(Query.select(WaitingOnMe.PROPERTIES).where( + Criterion.and(WaitingOnMe.TASK_UUID.eq(taskUuid), WaitingOnMe.ACKNOWLEDGED.eq(0), WaitingOnMe.DELETED_AT.eq(0)))); + return returnFetchResult(cursor); + } }