diff --git a/api/src/com/todoroo/astrid/api/AstridApiConstants.java b/api/src/com/todoroo/astrid/api/AstridApiConstants.java index 54367876d..5f7a499a9 100644 --- a/api/src/com/todoroo/astrid/api/AstridApiConstants.java +++ b/api/src/com/todoroo/astrid/api/AstridApiConstants.java @@ -266,4 +266,9 @@ public class AstridApiConstants { */ public static final String BROADCAST_EVENT_TAG_DELETED = API_PACKAGE + ".TAG_DELETED"; + /** + * Action name for broadcast intent notifying that tag was renamed + */ + public static final String BROADCAST_EVENT_TAG_RENAMED = API_PACKAGE + ".TAG_RENAMED"; + } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index 119ee2ab8..e79639118 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -39,6 +39,7 @@ import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterWithCustomIntent; import com.todoroo.astrid.api.FilterWithUpdate; import com.todoroo.astrid.dao.TagDataDao; +import com.todoroo.astrid.dao.TagMetadataDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.RemoteModel; @@ -202,6 +203,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE @Autowired public TagService tagService; @Autowired public TagDataDao tagDataDao; + @Autowired public TagMetadataDao tagMetadataDao; static { AstridDependencyInjector.initialize(); @@ -222,10 +224,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE TagData tagData = tagDataDao.fetch(uuid, TagData.MEMBER_COUNT, TagData.USER_ID); - if(tagData != null && tagData.getValue(TagData.MEMBER_COUNT) > 0 && Task.USER_ID_SELF.equals(tagData.getValue(TagData.USER_ID))) { - DialogUtilities.okCancelDialog(this, getString(R.string.actfm_tag_operation_owner_delete), getOkListener(), getCancelListener()); - return; - } showDialog(tagData); } @@ -277,8 +275,12 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE @Override protected void showDialog(TagData tagData) { int string; - if (tagData != null && tagData.getValue(TagData.MEMBER_COUNT) > 0) - string = R.string.DLG_leave_this_shared_tag_question; + if (tagData != null && (tagMetadataDao.tagHasMembers(uuid) || tagData.getValue(TagData.MEMBER_COUNT) > 0)) { + if (Task.USER_ID_SELF.equals(tagData.getValue(TagData.USER_ID))) + string = R.string.actfm_tag_operation_owner_delete; + else + string = R.string.DLG_leave_this_shared_tag_question; + } else string = R.string.DLG_delete_this_tag_question; DialogUtilities.okCancelDialog(this, getString(string, tag), getOkListener(), getCancelListener()); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index f9df46355..c6de951ff 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -22,6 +22,7 @@ import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property.CountProperty; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Field; @@ -548,11 +549,22 @@ public final class TagService { template.setValue(TagData.NAME, newName); if (suppressSync) template.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); - tagDataDao.update(TagData.UUID.eq(uuid), template); + int result = tagDataDao.update(TagData.UUID.eq(uuid), template); + + boolean tagRenamed = result > 0; Metadata metadataTemplate = new Metadata(); metadataTemplate.setValue(TaskToTagMetadata.TAG_NAME, newName); - return metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), metadataTemplate); + result = metadataDao.update(Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), metadataTemplate); + tagRenamed = tagRenamed || result > 0; + + if (tagRenamed) { + Intent intent = new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED); + intent.putExtra(TagViewFragment.EXTRA_TAG_UUID, uuid); + ContextManager.getContext().sendBroadcast(intent); + } + + return result; } public static int getDefaultImageIDForTag(String nameOrUUID) { diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index cbcb48654..bf02ce50c 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -120,6 +120,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener private boolean swipeEnabled = false; private final TagDeletedReceiver tagDeletedReceiver = new TagDeletedReceiver(); + private final TagRenamedReceiver tagRenamedReceiver = new TagRenamedReceiver(); private final OnClickListener mainMenuClickListener = new OnClickListener() { @Override @@ -518,6 +519,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener protected void onResume() { super.onResume(); registerReceiver(tagDeletedReceiver, new IntentFilter(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED)); + registerReceiver(tagRenamedReceiver, new IntentFilter(AstridApiConstants.BROADCAST_EVENT_TAG_RENAMED)); } @Override @@ -531,6 +533,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener protected void onStop() { super.onStop(); AndroidUtilities.tryUnregisterReceiver(this, tagDeletedReceiver); + AndroidUtilities.tryUnregisterReceiver(this, tagRenamedReceiver); } public void setSelectedItem(Filter item) { @@ -914,6 +917,19 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener return super.onKeyDown(keyCode, event); } + private class TagRenamedReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + TaskListFragment tlf = getTaskListFragment(); + if (tlf != null) + tlf.refresh(); + + FilterListFragment flf = getFilterListFragment(); + if (flf != null) + flf.refresh(); + } + } + private class TagDeletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { diff --git a/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java b/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java index 3ab29f01d..d8503fac5 100644 --- a/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java @@ -189,6 +189,15 @@ public class TagMetadataDao extends DatabaseDao { } } + public boolean tagHasMembers(String uuid) { + TodorooCursor metadata = query(Query.select(TagMetadata.ID).where(Criterion.and(TagMetadataCriteria.byTagAndWithKey(uuid, TagMemberMetadata.KEY), TagMetadata.DELETION_DATE.eq(0)))); + try { + return metadata.getCount() > 0; + } finally { + metadata.close(); + } + } + public boolean memberOfTagData(String email, String tagId, String memberId) { Criterion criterion; if (!RemoteModel.isUuidEmpty(memberId) && !TextUtils.isEmpty(email))