diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a31f6101c..ee31a4daf 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="102" + android:versionName="2.8.0"> diff --git a/res/values/strings.xml b/res/values/strings.xml index 1b78826da..0ebe95ebe 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -103,7 +103,8 @@ Astrid: - Tagged \"%s\": + Tagged \"%s\": + Untagged Tasks: hidden New Task Could Not Find Requested Tag! @@ -343,7 +344,7 @@ Thanks for using Astrid!\n Absolute Deadline! Goal Deadline! Working on: - You have %d tasks tagged %s! + You have %s tagged %s! diff --git a/src/com/timsu/astrid/activities/TagListSubActivity.java b/src/com/timsu/astrid/activities/TagListSubActivity.java index 8457c2d99..80979688a 100644 --- a/src/com/timsu/astrid/activities/TagListSubActivity.java +++ b/src/com/timsu/astrid/activities/TagListSubActivity.java @@ -83,6 +83,7 @@ public class TagListSubActivity extends SubActivity { HashMap tagToTaskCount; private Handler handler; private TextView loadingText; + private boolean untaggedTagDisplayed; private static SortMode sortMode = SortMode.SIZE; private static boolean sortReverse = false; @@ -164,9 +165,12 @@ public class TagListSubActivity extends SubActivity { // show "untagged" as a category at the top, in the proper language/localization String untaggedLabel = getResources().getString(R.string.tagList_untagged); TagModelForView untaggedModel = TagModelForView.getUntaggedModel(untaggedLabel); - tagArray.addFirst(untaggedModel); int count = countActiveTasks(activeTasks, getTagController().getUntaggedTasks()); - tagToTaskCount.put(untaggedModel, count); + if(count > 0) { + untaggedTagDisplayed = true; + tagArray.addFirst(untaggedModel); + tagToTaskCount.put(untaggedModel, count); + } if(sortReverse) Collections.reverse(tagArray); @@ -208,10 +212,13 @@ public class TagListSubActivity extends SubActivity { private void setUpListUI(ListAdapter adapter) { // set up the title Resources r = getResources(); + int tags = tagArray.size(); + if(untaggedTagDisplayed) + tags--; StringBuilder title = new StringBuilder(). append(r.getString(R.string.tagList_titlePrefix)). append(" ").append(r.getQuantityString(R.plurals.Ntags, - tagArray.size(), tagArray.size())); + tags, tags)); final CharSequence finalTitle = title; handler.post(new Runnable() { public void run() { @@ -439,7 +446,7 @@ public class TagListSubActivity extends SubActivity { name.setText(new StringBuilder(tag.getName()). append(" (").append(tagCount.get(tag)).append(")")); - if(tagCount.get(tag) == 0) + if(tagCount == null || tagCount.get(tag) == null || tagCount.get(tag) == 0) name.setTextColor(r.getColor(R.color.task_list_done)); else name.setTextColor(r.getColor(android.R.color.white)); diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java index 4901e441e..517542064 100644 --- a/src/com/timsu/astrid/activities/TaskListSubActivity.java +++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java @@ -596,8 +596,12 @@ public class TaskListSubActivity extends SubActivity { StringBuilder title = new StringBuilder(). append(r.getString(R.string.taskList_titlePrefix)).append(" "); if(context.filterTag != null) { - title.append(r.getString(R.string.taskList_titleTagPrefix, - context.filterTag.getName())).append(" "); + if(TagModelForView.UNTAGGED_IDENTIFIER.equals(context.filterTag.getTagIdentifier())) { + title.append(r.getString(R.string.taskList_titleUntagged)).append(" "); + } else { + title.append(r.getString(R.string.taskList_titleTagPrefix, + context.filterTag.getName())).append(" "); + } } if(finalCompleted > 0) diff --git a/src/com/timsu/astrid/data/tag/TagController.java b/src/com/timsu/astrid/data/tag/TagController.java index facebba99..c395cc03d 100644 --- a/src/com/timsu/astrid/data/tag/TagController.java +++ b/src/com/timsu/astrid/data/tag/TagController.java @@ -20,12 +20,12 @@ package com.timsu.astrid.data.tag; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; -import android.database.CursorJoiner; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; @@ -128,7 +128,7 @@ public class TagController extends AbstractController { * the TagToTask map once for each active task. **/ public LinkedList getUntaggedTasks() throws SQLException { - LinkedList list = new LinkedList(); + HashSet ids = new HashSet(); String[] tagMapColumns = new String[] { TagToTaskMapping.TASK }; Cursor tagMapCursor = tagToTaskMapDatabase.query(TAG_TASK_MAP_NAME, @@ -141,30 +141,30 @@ public class TagController extends AbstractController { Cursor taskCursor = taskDatabase.query(TASK_TABLE_NAME, taskColumns, null, null, null, null, KEY_ROWID + " ASC"); + LinkedList list = new LinkedList(); try { - CursorJoiner joiner = new CursorJoiner(taskCursor, taskColumns, - tagMapCursor, tagMapColumns); - for (CursorJoiner.Result joinerResult : joiner) { - switch (joinerResult) { - case LEFT: - long taskId = taskCursor.getLong(0); - - // conditional is necessary for handling deleted tasks - if(tagMapCursor.isLast() || tagMapCursor.getLong(0) > taskId) { - list.add(new TaskIdentifier(taskId)); - } - break; - default: - // in other cases, do nothing - break; - } - } + if(taskCursor.getCount() == 0) + return list; + + do { + taskCursor.moveToNext(); + ids.add(taskCursor.getLong(0)); + } while(!taskCursor.isLast()); + + if(tagMapCursor.getCount() > 0) { + do { + tagMapCursor.moveToNext(); + ids.remove(tagMapCursor.getLong(0)); + } while(!tagMapCursor.isLast()); + } } finally { taskCursor.close(); tagMapCursor.close(); taskDatabase.close(); } + for(Long id : ids) + list.add(new TaskIdentifier(id)); return list; } diff --git a/src/com/timsu/astrid/utilities/LocaleReceiver.java b/src/com/timsu/astrid/utilities/LocaleReceiver.java index 7652e9298..5a3cbba18 100644 --- a/src/com/timsu/astrid/utilities/LocaleReceiver.java +++ b/src/com/timsu/astrid/utilities/LocaleReceiver.java @@ -6,6 +6,7 @@ import java.util.LinkedList; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.util.Log; import com.timsu.astrid.R; @@ -47,8 +48,9 @@ public class LocaleReceiver extends BroadcastReceiver { new TagIdentifier(tagId)); int count = TagListSubActivity.countActiveTasks(activeTasks, tasks); if(count > 0) { - String reminder = context.getResources().getString( - R.string.notif_tagNotification, count, tagName); + Resources r = context.getResources(); + String reminder = r.getString(R.string.notif_tagNotification, + r.getQuantityString(R.plurals.Ntasks, count, count), tagName); Notifications.showTagNotification(context, tagId, reminder); } } finally {