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
* @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);

@ -424,7 +424,10 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
task.setValue(Task.DELETION_DATE, remoteTask.getInt("deleted") == 1 ? DateUtilities.now() : 0);
long dueDate = ApiUtilities.producteevToUnixTime(remoteTask.getString("deadline"), 0);
task.setValue(Task.DUE_DATE, task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, dueDate));
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.IMPORTANCE, 5 - remoteTask.getInt("star"));
JSONArray labels = remoteTask.getJSONArray("labels");

@ -14,9 +14,10 @@ import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
@ -122,6 +123,18 @@ public class EditPreferences extends TodorooPreferences {
getPreferenceScreen().addPreference(group);
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.setOnPreferenceClickListener(new OnPreferenceClickListener() {
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.ExceptionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.SoftHashMap;
import com.todoroo.astrid.activity.TaskEditActivity;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.api.AstridApiConstants;
@ -266,6 +265,8 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
if(hiddenUntil > 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<Task> 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<TYPE> {
private final Map<Long, HashMap<String, TYPE>> cache =
new SoftHashMap<Long, HashMap<String, TYPE>>();
new HashMap<Long, HashMap<String, TYPE>>();
// --- interface

@ -159,7 +159,7 @@ public class TaskDao extends GenericDao<Task> {
// 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);

@ -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);
}
/**

Loading…
Cancel
Save