diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index e92dc043d..c8a1ebbb6 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -5,6 +5,10 @@ */ package com.todoroo.astrid.activity; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + import android.animation.LayoutTransition; import android.app.Activity; import android.app.SearchManager; @@ -47,6 +51,7 @@ import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.core.CustomFilterExposer; +import com.todoroo.astrid.dao.TagMetadataDao; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.people.PeopleFilterMode; @@ -94,6 +99,8 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener @Autowired private ABTestEventReportingService abTestEventReportingService; + @Autowired private TagMetadataDao tagMetadataDao; + private View listsNav; private ImageView listsNavDisclosure; private TextView lists; @@ -679,68 +686,65 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener } } - private void checkAddTagMember(final TaskListFragment tlf, final String assignedDisplay, String assignedEmail, String assignedId) { - throw new RuntimeException("Hey Sam! You should reimplement this"); -// final TagData td = tlf.getActiveTagData(); -// if (td != null) { -// String members = td.getValue(TagData.MEMBERS); -// if (members == null) -// members = ""; //$NON-NLS-1$ -// if (TextUtils.isEmpty(members) || TextUtils.isEmpty(assignedEmail) || !members.contains(assignedEmail)) { -// // show dialog to ask if user should be added to the tag-members -// JSONObject user = new JSONObject(); -// JSONArray membersArray = null; -// boolean memberFound = false; -// try { -// if (!TextUtils.isEmpty(assignedEmail)) -// user.put("email", assignedEmail); //$NON-NLS-1$ -// if (assignedId > 0) -// user.put("id", assignedId); //$NON-NLS-1$ -// membersArray = new JSONArray(members); -// -// for (int i = 0; i < membersArray.length(); i++) { -// JSONObject member = membersArray.getJSONObject(i); -// long memberId = member.optLong("id", Task.USER_ID_IGNORE); //$NON-NLS-1$ -// if (memberId > 0 && memberId == assignedId) { -// memberFound = true; -// break; -// } -// } -// if (!memberFound) { -// String ownerString = td.getValue(TagData.USER); -// JSONObject owner = new JSONObject(ownerString); -// long ownerId = owner.optLong("id", Task.USER_ID_IGNORE); //$NON-NLS-1$ -// if (ownerId > 0 && assignedId == ownerId) -// memberFound = true; -// } -// } catch (JSONException e) { -// return; -// } -// -// if (memberFound) -// return; -// -// membersArray.put(user); -// -// final JSONArray finalArray = membersArray; -// DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface d, int which) { -// td.setValue(TagData.MEMBERS, finalArray.toString()); -// td.setValue(TagData.MEMBER_COUNT, finalArray.length()); -// PluginServices.getTagDataService().save(td); -// tlf.refresh(); -// } -// }; -// DialogUtilities.okCancelCustomDialog(this, -// getString(R.string.actfm_EPA_add_person_to_list_title), -// getString(R.string.actfm_EPA_add_person_to_list, assignedDisplay, assignedDisplay), -// R.string.actfm_EPA_add_person_to_list_ok, -// R.string.actfm_EPA_add_person_to_list_cancel, -// android.R.drawable.ic_dialog_alert, -// okListener, null); -// } -// } + private void checkAddTagMember(final TaskListFragment tlf, final String assignedDisplay, String assignedEmail, final String assignedId) { + final TagData td = tlf.getActiveTagData(); + if (td != null) { + String members = td.getValue(TagData.MEMBERS); + + boolean memberFound = false; + if (TextUtils.isEmpty(members)) + memberFound = td.getValue(TagData.USER_ID).equals(assignedId) || tagMetadataDao.memberOfTagData(assignedEmail, assignedId); + else { + JSONObject user = new JSONObject(); + JSONArray membersArray = null; + try { + if (!TextUtils.isEmpty(assignedEmail)) + user.put("email", assignedEmail); //$NON-NLS-1$ + if (Task.isRealUserId(assignedId)) + user.put("id", assignedId); //$NON-NLS-1$ + membersArray = new JSONArray(members); + + for (int i = 0; i < membersArray.length(); i++) { + JSONObject member = membersArray.getJSONObject(i); + String memberId = Long.toString(member.optLong("id", -3)); //$NON-NLS-1$ + if (Task.isRealUserId(memberId) && memberId.equals(assignedId)) { + memberFound = true; + break; + } + } + + if (!memberFound) { + String ownerString = td.getValue(TagData.USER); + if (!TextUtils.isEmpty(ownerString)) { + JSONObject owner = new JSONObject(ownerString); + String ownerId = Long.toString(owner.optLong("id", -3)); //$NON-NLS-1$ + if (Task.isRealUserId(ownerId) && assignedId.equals(ownerId)) + memberFound = true; + } + } + } catch (JSONException e) { + return; + } + } + + if (memberFound) + return; + + DialogInterface.OnClickListener okListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface d, int which) { + tagMetadataDao.createMemberLink(td.getId(), td.getUuid(), assignedId, false); + tlf.refresh(); + } + }; + DialogUtilities.okCancelCustomDialog(this, + getString(R.string.actfm_EPA_add_person_to_list_title), + getString(R.string.actfm_EPA_add_person_to_list, assignedDisplay, assignedDisplay), + R.string.actfm_EPA_add_person_to_list_ok, + R.string.actfm_EPA_add_person_to_list_cancel, + android.R.drawable.ic_dialog_alert, + okListener, null); + } } public void incrementFilterCount(Filter filter) { diff --git a/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java b/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java index 9f9140fd5..7bb126931 100644 --- a/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TagMetadataDao.java @@ -187,5 +187,25 @@ public class TagMetadataDao extends DatabaseDao { createMemberLink(tagId, tagUuid, id, false); } } + + public boolean memberOfTagData(String email, String id) { + Criterion criterion; + if (!RemoteModel.isUuidEmpty(id) && !TextUtils.isEmpty(email)) + criterion = Criterion.or(TagMemberMetadata.USER_UUID.eq(email), TagMemberMetadata.USER_UUID.eq(id)); + else if (!RemoteModel.isUuidEmpty(id)) + criterion = TagMemberMetadata.USER_UUID.eq(id); + else if (!TextUtils.isEmpty(email)) + criterion = TagMemberMetadata.USER_UUID.eq(email); + else + return false; + + TodorooCursor count = query(Query.select(TagMetadata.ID).where( + Criterion.and(TagMetadataCriteria.withKey(TagMemberMetadata.KEY), criterion))); + try { + return count.getCount() > 0; + } finally { + // + } + } }