Fixed various bugs with clearing details, now try-catching detail loader, all kinds of goodies

pull/14/head
Tim Su 16 years ago
parent 9b0cf2b416
commit 2af576531e

@ -204,8 +204,7 @@ public class GenericDao<TYPE extends AbstractModel> {
* @param criterion * @param criterion
* @return returns true on success. * @return returns true on success.
*/ */
public int updateMultiple(TYPE item, Criterion criterion) { public int updateMultiple(ContentValues values, Criterion criterion) {
ContentValues values = item.getSetValues();
if(values.size() == 0) // nothing changed if(values.size() == 0) // nothing changed
return 0; return 0;
return database.update(table.name, values, criterion.toString(), null); return database.update(table.name, values, criterion.toString(), null);

@ -424,6 +424,9 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
task.setValue(Task.DELETION_DATE, remoteTask.getInt("deleted") == 1 ? DateUtilities.now() : 0); task.setValue(Task.DELETION_DATE, remoteTask.getInt("deleted") == 1 ? DateUtilities.now() : 0);
long dueDate = ApiUtilities.producteevToUnixTime(remoteTask.getString("deadline"), 0); long dueDate = ApiUtilities.producteevToUnixTime(remoteTask.getString("deadline"), 0);
if(remoteTask.optInt("all_day", 0) == 1)
task.setValue(Task.DUE_DATE, task.createDueDate(Task.URGENCY_SPECIFIC_DAY, dueDate));
else
task.setValue(Task.DUE_DATE, task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, dueDate)); task.setValue(Task.DUE_DATE, task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, dueDate));
task.setValue(Task.IMPORTANCE, 5 - remoteTask.getInt("star")); task.setValue(Task.IMPORTANCE, 5 - remoteTask.getInt("star"));

@ -14,9 +14,10 @@ import android.content.pm.ResolveInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory; import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
@ -122,6 +123,18 @@ public class EditPreferences extends TodorooPreferences {
getPreferenceScreen().addPreference(group); getPreferenceScreen().addPreference(group);
Preference preference = new Preference(this); Preference preference = new Preference(this);
preference.setTitle("Flush detail cache");
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
database.openForWriting();
Toast.makeText(EditPreferences.this, "" + taskService.clearDetails(),
Toast.LENGTH_LONG).show();
return false;
}
});
group.addPreference(preference);
preference = new Preference(this);
preference.setTitle("Make Lots of Tasks"); preference.setTitle("Make Lots of Tasks");
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) { public boolean onPreferenceClick(Preference p) {

@ -43,7 +43,6 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.SoftHashMap;
import com.todoroo.astrid.activity.TaskEditActivity; import com.todoroo.astrid.activity.TaskEditActivity;
import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
@ -266,6 +265,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
if(hiddenUntil > DateUtilities.now()) if(hiddenUntil > DateUtilities.now())
nameValue = r.getString(R.string.TAd_hiddenFormat, nameValue); nameValue = r.getString(R.string.TAd_hiddenFormat, nameValue);
nameView.setText(nameValue); nameView.setText(nameValue);
viewHolder.nameView.setFocusable(false);
viewHolder.nameView.setClickable(false);
Linkify.addLinks(nameView, Linkify.ALL); Linkify.addLinks(nameView, Linkify.ALL);
} }
@ -324,7 +325,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
details = taskDetailLoader.get(task.getId()).toString(); details = taskDetailLoader.get(task.getId()).toString();
else else
details = task.getValue(Task.DETAILS); details = task.getValue(Task.DETAILS);
if(TextUtils.isEmpty(details)) { if(TextUtils.isEmpty(details) || DETAIL_SEPARATOR.equals(details)) {
viewHolder.details.setVisibility(View.GONE); viewHolder.details.setVisibility(View.GONE);
} else { } else {
viewHolder.details.setVisibility(View.VISIBLE); viewHolder.details.setVisibility(View.VISIBLE);
@ -366,9 +367,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
// tap listener // tap listener
container.setOnClickListener(listener); container.setOnClickListener(listener);
viewHolder.nameView.setFocusable(false);
viewHolder.nameView.setClickable(false);
} }
/* ====================================================================== /* ======================================================================
@ -389,13 +387,14 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
TodorooCursor<Task> fetchCursor = taskService.fetchFiltered( TodorooCursor<Task> fetchCursor = taskService.fetchFiltered(
query.get(), null, Task.ID, Task.DETAILS, Task.COMPLETION_DATE); query.get(), null, Task.ID, Task.DETAILS, Task.COMPLETION_DATE);
activity.startManagingCursor(fetchCursor); activity.startManagingCursor(fetchCursor);
try {
Task task = new Task(); Task task = new Task();
for(fetchCursor.moveToFirst(); !fetchCursor.isAfterLast(); fetchCursor.moveToNext()) { for(fetchCursor.moveToFirst(); !fetchCursor.isAfterLast(); fetchCursor.moveToNext()) {
task.clear(); task.clear();
task.readFromCursor(fetchCursor); task.readFromCursor(fetchCursor);
if(task.isCompleted()) if(task.isCompleted())
continue; continue;
if(!task.containsNonNullValue(Task.DETAILS)) { if(TextUtils.isEmpty(task.getValue(Task.DETAILS))) {
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_REQUEST_DETAILS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId()); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, task.getId());
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_EXTENDED, false); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_EXTENDED, false);
@ -403,10 +402,13 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
taskDetailLoader.put(task.getId(), new StringBuilder()); taskDetailLoader.put(task.getId(), new StringBuilder());
task.setValue(Task.DETAILS, ""); //$NON-NLS-1$ task.setValue(Task.DETAILS, DETAIL_SEPARATOR);
taskService.save(task); taskService.save(task);
} }
} }
} catch (Exception e) {
// suppress silently
}
} }
} }
@ -787,7 +789,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
abstract public class AddOnManager<TYPE> { abstract public class AddOnManager<TYPE> {
private final Map<Long, HashMap<String, TYPE>> cache = private final Map<Long, HashMap<String, TYPE>> cache =
new SoftHashMap<Long, HashMap<String, TYPE>>(); new HashMap<Long, HashMap<String, TYPE>>();
// --- interface // --- interface

@ -159,7 +159,7 @@ public class TaskDao extends GenericDao<Task> {
// clear task detail cache // clear task detail cache
if(values != null && !values.containsKey(Task.DETAILS.name)) 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) { if (task.getId() == Task.NO_ID) {
saveSuccessful = createNew(task); saveSuccessful = createNew(task);

@ -1,5 +1,7 @@
package com.todoroo.astrid.service; package com.todoroo.astrid.service;
import android.content.ContentValues;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
@ -228,9 +230,9 @@ public class TaskService {
* @return # of affected rows * @return # of affected rows
*/ */
public int clearDetails() { public int clearDetails() {
Task task = new Task(); ContentValues values = new ContentValues();
task.setValue(Task.DETAILS, null); values.put(Task.DETAILS.name, (String) null);
return taskDao.updateMultiple(task, Criterion.all); return taskDao.updateMultiple(values, Criterion.all);
} }
/** /**

Loading…
Cancel
Save