From ada52d90e1969dd225a5d2320097fd7554479bb8 Mon Sep 17 00:00:00 2001 From: Andrew Shaw Date: Tue, 21 Feb 2012 19:17:39 -0800 Subject: [PATCH 1/5] Tag settings redesign --- .../astrid/actfm/EditPeopleControlSet.java | 6 +- .../astrid/actfm/TagSettingsActivity.java | 31 +- .../astrid/actfm/sync/ActFmInvoker.java | 6 +- astrid/res/layout/contact_edit_row.xml | 64 ++- astrid/res/layout/tag_settings_activity.xml | 392 +++++++++--------- astrid/res/values/strings-actfm.xml | 11 +- astrid/res/values/strings-core.xml | 2 +- .../todoroo/astrid/ui/PeopleContainer.java | 20 +- 8 files changed, 264 insertions(+), 268 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 17d8690bf..71f730b82 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -167,7 +167,7 @@ public class EditPeopleControlSet extends PopupControlSet { cbFacebook = (CheckBox) getSharedWithView().findViewById(R.id.checkbox_facebook); cbTwitter = (CheckBox) getSharedWithView().findViewById(R.id.checkbox_twitter); - sharedWithContainer.addPerson(""); //$NON-NLS-1$ + sharedWithContainer.addPerson("", ""); //$NON-NLS-1$ setUpListeners(); } @@ -206,7 +206,7 @@ public class EditPeopleControlSet extends PopupControlSet { if(people != null) { for(int i = 0; i < people.length(); i++) { String person = people.getString(i); - TextView textView = sharedWithContainer.addPerson(person); + TextView textView = sharedWithContainer.addPerson(person, ""); textView.setEnabled(false); sharedPeople.add(PeopleContainer.createUserJson(textView)); } @@ -681,7 +681,7 @@ public class EditPeopleControlSet extends PopupControlSet { private void makePrivateTask() { sharedWithContainer.removeAllViews(); - sharedWithContainer.addPerson(""); //$NON-NLS-1$ + sharedWithContainer.addPerson("", ""); //$NON-NLS-1$ assignToMe(); } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index 1c05bba52..956924b2b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -6,7 +6,6 @@ import java.io.IOException; import org.json.JSONArray; import org.json.JSONException; -import org.json.JSONObject; import android.app.Activity; import android.content.Context; @@ -24,10 +23,10 @@ import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; -import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; +import android.widget.ToggleButton; import com.timsu.astrid.R; import com.todoroo.andlib.service.Autowired; @@ -80,7 +79,7 @@ public class TagSettingsActivity extends FragmentActivity { private AsyncImageView picture; private EditText tagName; private EditText tagDescription; - private CheckBox isSilent; + private ToggleButton isSilent; private Bitmap setBitmap; private boolean isNewTag = false; @@ -167,15 +166,14 @@ public class TagSettingsActivity extends FragmentActivity { tagName = (EditText) findViewById(R.id.tag_name); tagDescription = (EditText) findViewById(R.id.tag_description); picture = (AsyncImageView) findViewById(R.id.picture); - isSilent = (CheckBox) findViewById(R.id.tag_silenced); + isSilent = (ToggleButton) findViewById(R.id.tag_silenced); isSilent.setChecked(tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT)); if(actFmPreferenceService.isLoggedIn()) { picture.setVisibility(View.VISIBLE); - picture.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME))); - findViewById(R.id.picture_label).setVisibility(View.VISIBLE); - findViewById(R.id.listSettingsMore).setVisibility(View.VISIBLE); + findViewById(R.id.tag_silenced_container).setVisibility(View.VISIBLE); } + picture.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME))); picture.setOnClickListener(new OnClickListener() { @Override @@ -268,7 +266,7 @@ public class TagSettingsActivity extends FragmentActivity { public void onClick(DialogInterface d, int which) { tagMembers.removeAllViews(); - tagMembers.addPerson(""); //$NON-NLS-1$ + tagMembers.addPerson("", ""); //$NON-NLS-1$ } }; DialogUtilities.okCancelCustomDialog(TagSettingsActivity.this, getString(R.string.actfm_EPA_login_button), @@ -367,21 +365,6 @@ public class TagSettingsActivity extends FragmentActivity { } picture.setUrl(tagData.getValue(TagData.PICTURE)); - TextView ownerLabel = (TextView) findViewById(R.id.tag_owner); - try { - if(tagData.getFlag(TagData.FLAGS, TagData.FLAG_EMERGENT)) { - ownerLabel.setText(String.format("<%s>", getString(R.string.actfm_TVA_tag_owner_none))); - } else if(tagData.getValue(TagData.USER_ID) == 0) { - ownerLabel.setText(Preferences.getStringValue(ActFmPreferenceService.PREF_NAME)); - } else { - JSONObject owner = new JSONObject(tagData.getValue(TagData.USER)); - ownerLabel.setText(owner.getString("name")); - } - } catch (JSONException e) { - Log.e("tag-view-activity", "json error refresh owner", e); - ownerLabel.setText(""); - } - String peopleJson = tagData.getValue(TagData.MEMBERS); updateMembers(peopleJson); @@ -401,7 +384,7 @@ public class TagSettingsActivity extends FragmentActivity { } } - tagMembers.addPerson(""); //$NON-NLS-1$ + tagMembers.addPerson("", ""); //$NON-NLS-1$ } private void uploadTagPicture(final Bitmap bitmap) { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java index 464c30965..30ba3aef8 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmInvoker.java @@ -26,9 +26,9 @@ import com.todoroo.andlib.utility.Preferences; public class ActFmInvoker { /** NOTE: these values are development values & will not work on production */ - private static final String URL = "//10.0.2.2:3000/api/"; - private static final String APP_ID = "a4732a32859dbcd3e684331acd36432c"; - private static final String APP_SECRET = "e389bfc82a0d932332f9a8bd8203735f"; + private static final String URL = "//astrid.com/api/"; + private static final String APP_ID = "bf6170638298af8ed9a8c79995b1fc0f"; + private static final String APP_SECRET = "d15d25c63323bddcaa48928dccac1207"; public static final String PROVIDER_FACEBOOK = "facebook"; public static final String PROVIDER_GOOGLE= "google"; diff --git a/astrid/res/layout/contact_edit_row.xml b/astrid/res/layout/contact_edit_row.xml index 3f2e193d6..2fa069eb9 100644 --- a/astrid/res/layout/contact_edit_row.xml +++ b/astrid/res/layout/contact_edit_row.xml @@ -1,5 +1,6 @@ - - - + + - - - + android:orientation="horizontal" > + + + + + + + + + + + \ No newline at end of file diff --git a/astrid/res/layout/tag_settings_activity.xml b/astrid/res/layout/tag_settings_activity.xml index 6622ad966..4634566b2 100644 --- a/astrid/res/layout/tag_settings_activity.xml +++ b/astrid/res/layout/tag_settings_activity.xml @@ -1,221 +1,199 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - + android:layout_below="@id/tag_label" + android:layout_marginTop="10dip" + android:layout_toRightOf="@id/picture" + android:padding="10dip" + android:paddingBottom="14dip" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/astrid/res/values/strings-actfm.xml b/astrid/res/values/strings-actfm.xml index 95ffd7003..714c1c523 100644 --- a/astrid/res/values/strings-actfm.xml +++ b/astrid/res/values/strings-actfm.xml @@ -80,7 +80,7 @@ Refresh - List Name: + List List Creator: @@ -89,7 +89,7 @@ none - Shared With: + Shared With List Picture @@ -101,10 +101,13 @@ List Icon: - Description: + Description + + + Settings - List description + Type a description here You need to be logged in to Astrid.com to share lists! Please log in or make this a private list. diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 1efa92c23..20d7fb3c7 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -273,7 +273,7 @@ Help - Create Shortcut + Create Desktop Shortcut Name of shortcut: diff --git a/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java b/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java index 2c0df68a4..48ce6e69a 100644 --- a/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java +++ b/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java @@ -1,5 +1,7 @@ package com.todoroo.astrid.ui; +import greendroid.widget.AsyncImageView; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -55,7 +57,7 @@ public class PeopleContainer extends LinearLayout { // --- methods /** Adds a tag to the tag field */ - public TextView addPerson(String person) { + public TextView addPerson(String person, String image) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); // check if already exists @@ -81,6 +83,10 @@ public class PeopleContainer extends LinearLayout { textView.setHint(R.string.actfm_person_or_tag_hint); } + final AsyncImageView imageView = (AsyncImageView)tagItem. + findViewById(R.id.icon); + imageView.setUrl(image); + textView.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { @@ -95,7 +101,7 @@ public class PeopleContainer extends LinearLayout { public void onTextChanged(CharSequence s, int start, int before, int count) { if(count > 0 && getLastTextView() == textView) { - addPerson(""); //$NON-NLS-1$ + addPerson("", ""); //$NON-NLS-1$ } if(onAddNewPerson != null) @@ -109,7 +115,7 @@ public class PeopleContainer extends LinearLayout { if(actionId != EditorInfo.IME_NULL) return false; if(getLastTextView().getText().length() != 0) { - addPerson(""); //$NON-NLS-1$ + addPerson("", ""); //$NON-NLS-1$ } return true; } @@ -222,13 +228,13 @@ public class PeopleContainer extends LinearLayout { for(int i = 0; i < people.length(); i++) { JSONObject person = people.getJSONObject(i); TextView textView = null; - + String imageURL = person.optString("picture", ""); if(person.has("id") && person.getLong("id") == ActFmPreferenceService.userId()) - textView = addPerson(Preferences.getStringValue(ActFmPreferenceService.PREF_NAME)); + textView = addPerson(Preferences.getStringValue(ActFmPreferenceService.PREF_NAME), imageURL); else if(!TextUtils.isEmpty(person.optString("name")) && !"null".equals(person.optString("name"))) - textView = addPerson(person.getString("name")); + textView = addPerson(person.getString("name"), imageURL); else if(!TextUtils.isEmpty(person.optString("email")) && !"null".equals(person.optString("email"))) - textView = addPerson(person.getString("email")); + textView = addPerson(person.getString("email"), imageURL); if(textView != null) { textView.setTag(person); From ab8bfbeda6e695ff0b983cbcfc4adfdae02edb02 Mon Sep 17 00:00:00 2001 From: Andrew Shaw Date: Tue, 21 Feb 2012 22:59:07 -0800 Subject: [PATCH 2/5] Caching tag images --- api/src/com/todoroo/astrid/data/TagData.java | 5 +++ api/src/com/todoroo/astrid/data/Update.java | 4 +++ .../astrid/actfm/TagSettingsActivity.java | 36 ++++++++++++++++--- .../astrid/notes/EditNoteActivity.java | 5 +-- astrid/res/layout/tag_settings_activity.xml | 1 + 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/api/src/com/todoroo/astrid/data/TagData.java b/api/src/com/todoroo/astrid/data/TagData.java index 9ce7b5de6..78ed6ab37 100644 --- a/api/src/com/todoroo/astrid/data/TagData.java +++ b/api/src/com/todoroo/astrid/data/TagData.java @@ -203,4 +203,9 @@ public final class TagData extends RemoteModel { return getValue(DELETION_DATE) > 0; } + public String getPictureHash() { + String s = getValue(TagData.NAME) + "" + getValue(TagData.CREATION_DATE); + return s; + } + } diff --git a/api/src/com/todoroo/astrid/data/Update.java b/api/src/com/todoroo/astrid/data/Update.java index 64fc5ca17..b0206d8a6 100644 --- a/api/src/com/todoroo/astrid/data/Update.java +++ b/api/src/com/todoroo/astrid/data/Update.java @@ -162,4 +162,8 @@ public class Update extends RemoteModel { return CREATOR; } + public String getPictureHash() { + String s = getValue(Update.TASK) + "" + getValue(Update.CREATION_DATE); + return s; + } } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index 956924b2b..6c583064d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -42,6 +42,7 @@ import com.todoroo.astrid.activity.FilterListFragment; import com.todoroo.astrid.activity.ShortcutActivity; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.data.TagData; +import com.todoroo.astrid.helper.ImageDiskCache; import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TagDataService; @@ -81,12 +82,14 @@ public class TagSettingsActivity extends FragmentActivity { private EditText tagDescription; private ToggleButton isSilent; private Bitmap setBitmap; + private final ImageDiskCache imageCache; private boolean isNewTag = false; private boolean isDialog; public TagSettingsActivity() { DependencyInjectionService.getInstance().inject(this); + imageCache = ImageDiskCache.getInstance(); } @Override @@ -170,11 +173,10 @@ public class TagSettingsActivity extends FragmentActivity { isSilent.setChecked(tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT)); if(actFmPreferenceService.isLoggedIn()) { - picture.setVisibility(View.VISIBLE); findViewById(R.id.tag_silenced_container).setVisibility(View.VISIBLE); } - picture.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME))); + picture.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME))); picture.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { @@ -273,7 +275,7 @@ public class TagSettingsActivity extends FragmentActivity { getString(R.string.actfm_TVA_login_to_share), R.string.actfm_EPA_login_button, R.string.actfm_EPA_dont_share_button, android.R.drawable.ic_dialog_alert, okListener, cancelListener); - Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show(); + Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show(); return; @@ -314,7 +316,9 @@ public class TagSettingsActivity extends FragmentActivity { public void run() { actFmSyncService.pushTagDataOnSave(tagData, tagData.getMergedValues()); if(setBitmap != null && tagData.getValue(TagData.REMOTE_ID) > 0) - uploadTagPicture(setBitmap); + uploadTagPicture(setBitmap); + + runOnUiThread(loadTag); } }).start(); @@ -332,6 +336,18 @@ public class TagSettingsActivity extends FragmentActivity { finish(); } + private void saveTagPictureLocally(Bitmap bitmap) { + if (bitmap == null) return; + try { + String tagPicture = tagData.getPictureHash(); + imageCache.put(tagPicture, bitmap); + tagData.setValue(TagData.PICTURE, tagPicture); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void finish() { finishWithAnimation(!isDialog); @@ -363,6 +379,17 @@ public class TagSettingsActivity extends FragmentActivity { setTitle(getString(R.string.tag_settings_title, tagData.getValue(TagData.NAME))); } } + String tagImage = tagData.getValue(TagData.PICTURE); + if(!TextUtils.isEmpty(tagImage) && imageCache.contains(tagImage)) { + try { + picture.setDefaultImageBitmap(imageCache.get(tagImage)); + } catch (IOException e) { + e.printStackTrace(); + } + } + else { + picture.setUrl(tagImage); + } picture.setUrl(tagData.getValue(TagData.PICTURE)); String peopleJson = tagData.getValue(TagData.MEMBERS); @@ -421,6 +448,7 @@ public class TagSettingsActivity extends FragmentActivity { setBitmap = bitmap; if(tagData.getValue(TagData.REMOTE_ID) > 0) uploadTagPicture(bitmap); + saveTagPictureLocally(bitmap); } }; if (ActFmCameraModule.activityResult(this, requestCode, resultCode, data, callback)) { diff --git a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java index 894d56626..55a44575d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java @@ -428,9 +428,6 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene } - private String getPictureHashForUpdate(Update u) { - return String.format("%s%s", u.getValue(Update.TASK), u.getValue(Update.CREATION_DATE)); //$NON-NLS-1$ - } private void addComment(String message, String actionCode, boolean usePicture) { // Allow for users to just add picture if (TextUtils.isEmpty(message) && usePicture) { @@ -448,7 +445,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene if (usePicture && pendingCommentPicture != null) { update.setValue(Update.PICTURE, Update.PICTURE_LOADING); try { - String updateString = getPictureHashForUpdate(update); + String updateString = update.getPictureHash(); imageCache.put(updateString, pendingCommentPicture); update.setValue(Update.PICTURE, updateString); } diff --git a/astrid/res/layout/tag_settings_activity.xml b/astrid/res/layout/tag_settings_activity.xml index 4634566b2..20d45df40 100644 --- a/astrid/res/layout/tag_settings_activity.xml +++ b/astrid/res/layout/tag_settings_activity.xml @@ -76,6 +76,7 @@ Date: Wed, 22 Feb 2012 00:59:48 -0800 Subject: [PATCH 3/5] Theming and UI changes --- api/src/com/todoroo/astrid/data/TagData.java | 3 +- .../astrid/actfm/TagSettingsActivity.java | 56 ++- .../todoroo/astrid/tags/TagFilterExposer.java | 1 + .../com/todoroo/astrid/tags/TagService.java | 12 + astrid/res/drawable/icn_add_contact.png | Bin 0 -> 282 bytes astrid/res/drawable/icn_list_shortcut.png | Bin 0 -> 8678 bytes astrid/res/layout/tag_settings_activity.xml | 330 +++++++++--------- astrid/res/values/strings-tags.xml | 8 +- astrid/res/values/styles.xml | 16 + .../astrid/activity/TaskListActivity.java | 188 +++++----- .../todoroo/astrid/adapter/UpdateAdapter.java | 9 +- .../todoroo/astrid/ui/PeopleContainer.java | 10 + 12 files changed, 367 insertions(+), 266 deletions(-) create mode 100644 astrid/res/drawable/icn_add_contact.png create mode 100644 astrid/res/drawable/icn_list_shortcut.png diff --git a/api/src/com/todoroo/astrid/data/TagData.java b/api/src/com/todoroo/astrid/data/TagData.java index 78ed6ab37..be2e379b5 100644 --- a/api/src/com/todoroo/astrid/data/TagData.java +++ b/api/src/com/todoroo/astrid/data/TagData.java @@ -204,8 +204,7 @@ public final class TagData extends RemoteModel { } public String getPictureHash() { - String s = getValue(TagData.NAME) + "" + getValue(TagData.CREATION_DATE); - return s; + return getId() + "" + getValue(TagData.CREATION_DATE); } } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index 6c583064d..9ce64110b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -23,6 +23,7 @@ import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; +import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @@ -33,6 +34,7 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback; @@ -40,7 +42,9 @@ import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.activity.FilterListFragment; import com.todoroo.astrid.activity.ShortcutActivity; +import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.Filter; +import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.helper.ImageDiskCache; import com.todoroo.astrid.service.StatisticsConstants; @@ -172,6 +176,20 @@ public class TagSettingsActivity extends FragmentActivity { isSilent = (ToggleButton) findViewById(R.id.tag_silenced); isSilent.setChecked(tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT)); + Button leaveListButton = (Button) findViewById(R.id.leave_list); + leaveListButton.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + showDeleteDialog(tagData); + } + }); + if (isNewTag) { + leaveListButton.setVisibility(View.GONE); + } + else if (tagData.getValue(TagData.MEMBER_COUNT) > 0) { + leaveListButton.setText(getString(R.string.tag_leave_button)); + } if(actFmPreferenceService.isLoggedIn()) { findViewById(R.id.tag_silenced_container).setVisibility(View.VISIBLE); } @@ -370,13 +388,13 @@ public class TagSettingsActivity extends FragmentActivity { if (isNewTag) { titleView.setText(getString(R.string.tag_new_list)); } else { - titleView.setText(getString(R.string.tag_settings_title, tagData.getValue(TagData.NAME))); + titleView.setText(getString(R.string.tag_settings_title)); } } else { if (isNewTag) { setTitle(getString(R.string.tag_new_list)); } else { - setTitle(getString(R.string.tag_settings_title, tagData.getValue(TagData.NAME))); + setTitle(getString(R.string.tag_settings_title)); } } String tagImage = tagData.getValue(TagData.PICTURE); @@ -492,6 +510,40 @@ public class TagSettingsActivity extends FragmentActivity { + protected void showDeleteDialog(TagData tagData) { + int string; + if (tagData != null && tagData.getValue(TagData.MEMBER_COUNT) > 0) + string = R.string.DLG_leave_this_shared_tag_question; + else + string = R.string.DLG_delete_this_tag_question; + DialogUtilities.okCancelDialog(this, getString(string, tagData.getValue(TagData.NAME)), new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + deleteTag(); + } + }, null ); + } + + protected boolean deleteTag() { + tagDataService.delete(tagData.getId()); + boolean shared = false; + if(tagData != null) { + tagData.setValue(TagData.DELETION_DATE, DateUtilities.now()); + PluginServices.getTagDataService().save(tagData); + shared = tagData.getValue(TagData.MEMBER_COUNT) > 0 && tagData.getValue(TagData.USER_ID) != 0; // Was I a list member and NOT owner? + } + + Intent tagDeleted = new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED); + tagDeleted.putExtra(TagViewFragment.EXTRA_TAG_NAME, tagData.getValue(TagData.NAME)); + tagDeleted.putExtra(TagFilterExposer.TAG_SQL, TagFilterExposer.SHOW_ACTIVE_TASKS); + + this.finish(); + sendBroadcast(tagDeleted); + + return true; + } + diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java index ab7e913eb..e3e13ba6c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagFilterExposer.java @@ -59,6 +59,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE private static final String TAG = "tag"; //$NON-NLS-1$ public static final String TAG_SQL = "tagSql"; //$NON-NLS-1$ + public static final String SHOW_ACTIVE_TASKS = "show_main_task_view"; //$NON-NLS-1$ @Autowired TagDataService tagDataService; @Autowired GtasksPreferenceService gtasksPreferenceService; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index a332d381a..deed7b19c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -138,6 +138,18 @@ public final class TagService { Field.field("mtags." + TAG.name).eqCaseInsensitive(tag)))).where(criterion); } + + /** + * Return SQL selector query for getting tasks with a given tagData + * + * @param tagData + * @return + */ + public static QueryTemplate queryTemplate(Criterion criterion, TagData tagData) { + return new QueryTemplate().join(Join.inner(Metadata.TABLE, + Task.ID.eq(Metadata.TASK))).where(tagEqIgnoreCase(tagData.getValue(TagData.NAME), criterion)); + } + } public static Criterion memberOfTagData(long tagDataRemoteId) { diff --git a/astrid/res/drawable/icn_add_contact.png b/astrid/res/drawable/icn_add_contact.png new file mode 100644 index 0000000000000000000000000000000000000000..cdbb282f2e76173a6b6c549b06b9c53ee748268c GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^5`GB&w6dC{YrThi;eWvl#)XLpikg%kVSiZz0|jXpchJ-?=$(6)zbQ)zO`wG%U$E=Z_9Oi221@H?w@ YeMN72$owfQfo^5+boFyt=akR{0JdRU@Bjb+ literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_list_shortcut.png b/astrid/res/drawable/icn_list_shortcut.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba4786ce0280f6432b8338bb7b641364721773f GIT binary patch literal 8678 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 - - + android:layout_weight="100" > - + android:orientation="vertical" + android:padding="5dip" + android:paddingTop="0dip" > + android:layout_height="wrap_content" + android:gravity="right" + android:orientation="horizontal" + android:visibility="gone" > - + android:layout_marginRight="10dip" + android:background="@android:color/transparent" + android:src="@android:drawable/ic_menu_close_clear_cancel" /> - - - - - - - - - - + android:layout_marginRight="10dip" + android:background="@android:color/transparent" + android:src="@android:drawable/ic_menu_save" /> + - - - - + + + + + + android:layout_alignParentTop="true" + android:layout_marginTop="2dip" + android:layout_toRightOf="@id/picture" + android:text="@string/actfm_TVA_tag_label" /> - - - + android:layout_toRightOf="@id/picture" + android:maxLines="1" + android:padding="10dip" + android:paddingBottom="14dip" /> + + + + + + + + + + + + + - + + + android:orientation="horizontal" > - + - + + - + + + android:orientation="horizontal" + android:padding="5dip" > - - - - - - - - - - - - - - - - + android:layout_alignParentLeft="true" + android:layout_marginTop="10dip" + android:text="@string/FLA_shortcut_dialog_title" /> + + + - - \ No newline at end of file +