From 2af576531ef9c277a3c7c3632d83a957e0588d7c Mon Sep 17 00:00:00 2001 From: Tim Su Date: Tue, 24 Aug 2010 03:49:46 -0700 Subject: [PATCH] Fixed various bugs with clearing details, now try-catching detail loader, all kinds of goodies --- .../com/todoroo/andlib/data/GenericDao.java | 3 +- .../sync/ProducteevSyncProvider.java | 5 +- .../astrid/activity/EditPreferences.java | 15 +++++- .../todoroo/astrid/adapter/TaskAdapter.java | 46 ++++++++++--------- .../src/com/todoroo/astrid/dao/TaskDao.java | 2 +- .../todoroo/astrid/service/TaskService.java | 8 ++-- 6 files changed, 49 insertions(+), 30 deletions(-) diff --git a/astrid/common-src/com/todoroo/andlib/data/GenericDao.java b/astrid/common-src/com/todoroo/andlib/data/GenericDao.java index 1da5f3021..da3a59c22 100644 --- a/astrid/common-src/com/todoroo/andlib/data/GenericDao.java +++ b/astrid/common-src/com/todoroo/andlib/data/GenericDao.java @@ -204,8 +204,7 @@ public class GenericDao { * @param criterion * @return returns true on success. */ - public int updateMultiple(TYPE item, Criterion criterion) { - ContentValues values = item.getSetValues(); + public int updateMultiple(ContentValues values, Criterion criterion) { if(values.size() == 0) // nothing changed return 0; return database.update(table.name, values, criterion.toString(), null); diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java index 00b58247a..312573f1e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java @@ -424,7 +424,10 @@ public class ProducteevSyncProvider extends SyncProvider DateUtilities.now()) nameValue = r.getString(R.string.TAd_hiddenFormat, nameValue); nameView.setText(nameValue); + viewHolder.nameView.setFocusable(false); + viewHolder.nameView.setClickable(false); Linkify.addLinks(nameView, Linkify.ALL); } @@ -324,7 +325,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { details = taskDetailLoader.get(task.getId()).toString(); else details = task.getValue(Task.DETAILS); - if(TextUtils.isEmpty(details)) { + if(TextUtils.isEmpty(details) || DETAIL_SEPARATOR.equals(details)) { viewHolder.details.setVisibility(View.GONE); } else { viewHolder.details.setVisibility(View.VISIBLE); @@ -366,9 +367,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable { // tap listener container.setOnClickListener(listener); - - viewHolder.nameView.setFocusable(false); - viewHolder.nameView.setClickable(false); } /* ====================================================================== @@ -389,23 +387,27 @@ public class TaskAdapter extends CursorAdapter implements Filterable { TodorooCursor fetchCursor = taskService.fetchFiltered( query.get(), null, Task.ID, Task.DETAILS, Task.COMPLETION_DATE); activity.startManagingCursor(fetchCursor); - Task task = new Task(); - for(fetchCursor.moveToFirst(); !fetchCursor.isAfterLast(); fetchCursor.moveToNext()) { - task.clear(); - task.readFromCursor(fetchCursor); - if(task.isCompleted()) - continue; - if(!task.containsNonNullValue(Task.DETAILS)) { - Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); - broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); - broadcastIntent.putExtra(AstridApiConstants.EXTRAS_EXTENDED, false); - activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); - - taskDetailLoader.put(task.getId(), new StringBuilder()); - - task.setValue(Task.DETAILS, ""); //$NON-NLS-1$ - taskService.save(task); + try { + Task task = new Task(); + for(fetchCursor.moveToFirst(); !fetchCursor.isAfterLast(); fetchCursor.moveToNext()) { + task.clear(); + task.readFromCursor(fetchCursor); + if(task.isCompleted()) + continue; + if(TextUtils.isEmpty(task.getValue(Task.DETAILS))) { + Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); + broadcastIntent.putExtra(AstridApiConstants.EXTRAS_EXTENDED, false); + activity.sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); + + taskDetailLoader.put(task.getId(), new StringBuilder()); + + task.setValue(Task.DETAILS, DETAIL_SEPARATOR); + taskService.save(task); + } } + } catch (Exception e) { + // suppress silently } } } @@ -787,7 +789,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable { abstract public class AddOnManager { private final Map> cache = - new SoftHashMap>(); + new HashMap>(); // --- interface diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index f55ba4c6a..490525359 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -159,7 +159,7 @@ public class TaskDao extends GenericDao { // clear task detail cache if(values != null && !values.containsKey(Task.DETAILS.name)) - values.put(Task.DETAILS.name, (String)null); + values.put(Task.DETAILS.name, ""); //$NON-NLS-1$ if (task.getId() == Task.NO_ID) { saveSuccessful = createNew(task); diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index af1481e7e..91e412f55 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -1,5 +1,7 @@ package com.todoroo.astrid.service; +import android.content.ContentValues; + import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; @@ -228,9 +230,9 @@ public class TaskService { * @return # of affected rows */ public int clearDetails() { - Task task = new Task(); - task.setValue(Task.DETAILS, null); - return taskDao.updateMultiple(task, Criterion.all); + ContentValues values = new ContentValues(); + values.put(Task.DETAILS.name, (String) null); + return taskDao.updateMultiple(values, Criterion.all); } /**