Better handling of deleting tags--use uuids only instead of names

pull/14/head
Sam Bosley 13 years ago
parent 918e533ead
commit f10b3acc31

@ -139,6 +139,18 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
return getMergedValues().hashCode() ^ getClass().hashCode(); return getMergedValues().hashCode() ^ getClass().hashCode();
} }
@Override
@SuppressWarnings("nls")
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(getClass().getSimpleName()).append("\n")
.append("set values:\n")
.append(setValues).append("\n")
.append("values:\n")
.append(values).append("\n");
return builder.toString();
}
@Override @Override
public AbstractModel clone() { public AbstractModel clone() {
AbstractModel clone; AbstractModel clone;

@ -589,7 +589,7 @@ public class TagSettingsActivity extends FragmentActivity {
} }
protected boolean deleteTag() { protected boolean deleteTag() {
boolean result = tagService.deleteOrLeaveTag(this, tagData.getValue(TagData.NAME), TagService.SHOW_ACTIVE_TASKS); boolean result = tagService.deleteOrLeaveTag(this, tagData.getValue(TagData.NAME), tagData.getUuid());
setResult(Activity.RESULT_OK); setResult(Activity.RESULT_OK);
finish(); finish();
return result; return result;

@ -74,7 +74,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY); contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag); contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid.toString()); contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid);
FilterWithUpdate filter = new FilterWithUpdate(tag.tag, FilterWithUpdate filter = new FilterWithUpdate(tag.tag,
title, tagTemplate, title, tagTemplate,
@ -94,8 +94,8 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
context.getString(deleteIntentLabel) context.getString(deleteIntentLabel)
}; };
filter.contextMenuIntents = new Intent[] { filter.contextMenuIntents = new Intent[] {
newTagIntent(context, RenameTagActivity.class, tag, tagTemplate.toString()), newTagIntent(context, RenameTagActivity.class, tag, tag.uuid),
newTagIntent(context, DeleteTagActivity.class, tag, tagTemplate.toString()) newTagIntent(context, DeleteTagActivity.class, tag, tag.uuid)
}; };
filter.customTaskList = new ComponentName(ContextManager.getContext(), TagViewFragment.class); filter.customTaskList = new ComponentName(ContextManager.getContext(), TagViewFragment.class);
@ -115,10 +115,10 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
return filterFromTag(context, tag, TaskCriteria.activeAndVisible()); return filterFromTag(context, tag, TaskCriteria.activeAndVisible());
} }
private static Intent newTagIntent(Context context, Class<? extends Activity> activity, Tag tag, String sql) { private static Intent newTagIntent(Context context, Class<? extends Activity> activity, Tag tag, String uuid) {
Intent ret = new Intent(context, activity); Intent ret = new Intent(context, activity);
ret.putExtra(TAG, tag.tag); ret.putExtra(TAG, tag.tag);
ret.putExtra(TagService.TOKEN_TAG_SQL, sql); ret.putExtra(TagViewFragment.EXTRA_TAG_UUID, uuid);
return ret; return ret;
} }
@ -197,7 +197,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
public abstract static class TagActivity extends Activity { public abstract static class TagActivity extends Activity {
protected String tag; protected String tag;
protected String sql; protected String uuid;
@Autowired public TagService tagService; @Autowired public TagService tagService;
@Autowired public TagDataService tagDataService; @Autowired public TagDataService tagDataService;
@ -211,8 +211,9 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
tag = getIntent().getStringExtra(TAG); tag = getIntent().getStringExtra(TAG);
sql = getIntent().getStringExtra(TagService.TOKEN_TAG_SQL); uuid = getIntent().getStringExtra(TagViewFragment.EXTRA_TAG_UUID);
if(tag == null) {
if(tag == null || RemoteModel.isUuidEmpty(uuid)) {
finish(); finish();
return; return;
} }
@ -284,7 +285,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
@Override @Override
protected boolean ok() { protected boolean ok() {
return tagService.deleteOrLeaveTag(this, tag, sql); return tagService.deleteOrLeaveTag(this, tag, uuid);
} }
} }

@ -36,6 +36,7 @@ import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.RemoteModel;
@ -85,6 +86,8 @@ public final class TagService {
@Autowired TagDataService tagDataService; @Autowired TagDataService tagDataService;
@Autowired TagDataDao tagDataDao;
public TagService() { public TagService() {
DependencyInjectionService.getInstance().inject(this); DependencyInjectionService.getInstance().inject(this);
} }
@ -373,9 +376,9 @@ public final class TagService {
return tagBuilder.toString(); return tagBuilder.toString();
} }
public boolean deleteOrLeaveTag(Context context, String tag, String sql) { public boolean deleteOrLeaveTag(Context context, String tag, String uuid) {
int deleted = deleteTagMetadata(tag); int deleted = deleteTagMetadata(uuid);
TagData tagData = PluginServices.getTagDataService().getTag(tag, TagData.ID, TagData.UUID, TagData.DELETION_DATE, TagData.MEMBER_COUNT, TagData.USER_ID); TagData tagData = tagDataDao.fetch(uuid, TagData.ID, TagData.UUID, TagData.DELETION_DATE, TagData.MEMBER_COUNT, TagData.USER_ID);
boolean shared = false; boolean shared = false;
Intent tagDeleted = new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED); Intent tagDeleted = new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED);
if(tagData != null) { if(tagData != null) {
@ -387,7 +390,6 @@ public final class TagService {
Toast.makeText(context, context.getString(shared ? R.string.TEA_tags_left : R.string.TEA_tags_deleted, tag, deleted), Toast.makeText(context, context.getString(shared ? R.string.TEA_tags_left : R.string.TEA_tags_deleted, tag, deleted),
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
tagDeleted.putExtra(TOKEN_TAG_SQL, sql);
context.sendBroadcast(tagDeleted); context.sendBroadcast(tagDeleted);
return true; return true;
} }
@ -532,12 +534,11 @@ public final class TagService {
return null; return null;
} }
private int deleteTagMetadata(String tag) { private int deleteTagMetadata(String uuid) {
invalidateTaskCache(tag);
Metadata deleted = new Metadata(); Metadata deleted = new Metadata();
deleted.setValue(Metadata.DELETION_DATE, DateUtilities.now()); deleted.setValue(Metadata.DELETION_DATE, DateUtilities.now());
return metadataDao.update(tagEqIgnoreCase(tag, Criterion.all), deleted); return metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), deleted);
} }
public int rename(String oldTag, String newTag) { public int rename(String oldTag, String newTag) {

@ -61,7 +61,6 @@ import com.todoroo.astrid.service.StatisticsConstants;
import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.StatisticsService;
import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.service.abtesting.ABTestEventReportingService; import com.todoroo.astrid.service.abtesting.ABTestEventReportingService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagsPlugin; import com.todoroo.astrid.tags.TagsPlugin;
import com.todoroo.astrid.tags.reusable.FeaturedListFilterMode; import com.todoroo.astrid.tags.reusable.FeaturedListFilterMode;
import com.todoroo.astrid.ui.DateChangedAlerts; import com.todoroo.astrid.ui.DateChangedAlerts;
@ -918,7 +917,6 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
private class TagDeletedReceiver extends BroadcastReceiver { private class TagDeletedReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String deletedTagSql = intent.getStringExtra(TagService.TOKEN_TAG_SQL);
String uuid = intent.getStringExtra(TagViewFragment.EXTRA_TAG_UUID); String uuid = intent.getStringExtra(TagViewFragment.EXTRA_TAG_UUID);
TaskListFragment tlf = getTaskListFragment(); TaskListFragment tlf = getTaskListFragment();
FilterListFragment fl = getFilterListFragment(); FilterListFragment fl = getFilterListFragment();
@ -928,7 +926,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
if (tagData != null) if (tagData != null)
activeUuid = tagData.getUuid(); activeUuid = tagData.getUuid();
if (deletedTagSql.equals(TagService.SHOW_ACTIVE_TASKS) || activeUuid.equals(uuid)) { if (activeUuid.equals(uuid)) {
fl.switchToActiveTasks(); fl.switchToActiveTasks();
fl.clear(); // Should auto refresh fl.clear(); // Should auto refresh
} }

Loading…
Cancel
Save