From c792d99467dea883b40cc03022894e09330fb8c3 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 12 Mar 2009 06:10:50 +0000 Subject: [PATCH] Awesome shortcuts: 'create new task' anycut shortcut, tag direct shortcuts. --- AndroidManifest.xml | 24 ++++++- res/drawable/icon_add.png | Bin 0 -> 3854 bytes res/drawable/icon_tag.png | Bin 0 -> 3669 bytes res/values/strings.xml | 4 ++ .../astrid/activities/TagListSubActivity.java | 50 +++++++++----- src/com/timsu/astrid/activities/TagView.java | 62 ++++++++++++++++++ src/com/timsu/astrid/activities/TaskEdit.java | 6 ++ .../astrid/activities/TaskListNotify.java | 2 +- .../activities/TaskListSubActivity.java | 24 +++++-- 9 files changed, 145 insertions(+), 27 deletions(-) create mode 100644 res/drawable/icon_add.png create mode 100644 res/drawable/icon_tag.png create mode 100644 src/com/timsu/astrid/activities/TagView.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 5d92f6a44..bef2c9293 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -13,9 +13,11 @@ + + @@ -23,14 +25,32 @@ + - + + + + + + + + + + + + + + + + + diff --git a/res/drawable/icon_add.png b/res/drawable/icon_add.png new file mode 100644 index 0000000000000000000000000000000000000000..14e1362c97589fa63d93b6ef11c3009816d90755 GIT binary patch literal 3854 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 Q-2eap07*qoM6N<$f_A`i5dZ)H literal 0 HcmV?d00001 diff --git a/res/drawable/icon_tag.png b/res/drawable/icon_tag.png new file mode 100644 index 0000000000000000000000000000000000000000..75de4e6660b92d0ab72c4949c3329fb1aa819707 GIT binary patch literal 3669 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 \"%s\": hidden New Task + Could Not Find Requested Tag! H @@ -227,6 +228,9 @@ If you don\'t want to see the new task right after you complete the old one, you Delete Tag Show on Home Page Hide on Home Page + Create Shortcut + Shortcut created on your home screen! + Tag: Sort A-Z Sort by Size diff --git a/src/com/timsu/astrid/activities/TagListSubActivity.java b/src/com/timsu/astrid/activities/TagListSubActivity.java index 61912dee2..3910f17e6 100644 --- a/src/com/timsu/astrid/activities/TagListSubActivity.java +++ b/src/com/timsu/astrid/activities/TagListSubActivity.java @@ -25,12 +25,15 @@ import java.util.LinkedList; import java.util.List; import android.app.AlertDialog; +import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.database.StaleDataException; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.util.Log; @@ -48,6 +51,7 @@ import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; @@ -55,7 +59,6 @@ import com.timsu.astrid.R; import com.timsu.astrid.data.tag.TagIdentifier; import com.timsu.astrid.data.tag.TagModelForView; import com.timsu.astrid.data.task.TaskIdentifier; -import com.timsu.astrid.data.task.TaskModelForList; import com.timsu.astrid.utilities.DialogUtilities; @@ -73,10 +76,10 @@ public class TagListSubActivity extends SubActivity { private static final int CONTEXT_CREATE_ID = Menu.FIRST + 10; private static final int CONTEXT_DELETE_ID = Menu.FIRST + 11; private static final int CONTEXT_SHOWHIDE_ID = Menu.FIRST + 12; + private static final int CONTEXT_SHORTCUT_ID = Menu.FIRST + 13; private ListView listView; private LinkedList tagArray; - private HashMap taskMap; HashMap tagToTaskCount; private Handler handler; private TextView loadingText; @@ -126,26 +129,13 @@ public class TagListSubActivity extends SubActivity { // get all tasks Cursor taskCursor = getTaskController().getActiveTaskListCursor(); startManagingCursor(taskCursor); - List taskArray = - getTaskController().createTaskListFromCursor(taskCursor); - taskMap = new HashMap(); - for(TaskModelForList task : taskArray) { - if(task.isHidden()) - continue; - taskMap.put(task.getTaskIdentifier().getId(), task); - } - // get accurate task count for each tag + // get task count for each tag tagToTaskCount = new HashMap(); for(TagModelForView tag : tagArray) { - int count = 0; - List tasks = getTagController().getTaggedTasks( + LinkedList tasks = getTagController().getTaggedTasks( getParent(), tag.getTagIdentifier()); - - for(TaskIdentifier taskId : tasks) - if(taskMap.containsKey(taskId.getId())) - count++; - tagToTaskCount.put(tag, count); + tagToTaskCount.put(tag, tasks.size()); } // do sort @@ -240,6 +230,9 @@ public class TagListSubActivity extends SubActivity { menu.add(position, CONTEXT_SHOWHIDE_ID, Menu.NONE, showHideLabel); + menu.add(position, CONTEXT_SHORTCUT_ID, Menu.NONE, + R.string.tagList_context_shortcut); + menu.setHeaderTitle(tagArray.get(position).getName()); } }); @@ -332,6 +325,27 @@ public class TagListSubActivity extends SubActivity { } fillData(); return true; + case CONTEXT_SHORTCUT_ID: + tag = tagArray.get(item.getGroupId()); + Resources r = getResources(); + Intent shortcutIntent = new Intent(Intent.ACTION_VIEW); + shortcutIntent.setComponent(new ComponentName( + getParent().getApplicationContext(), TagView.class)); + shortcutIntent.setData(Uri.parse("tag:" + tag.getTagIdentifier().getId())); + + Intent createShortcutIntent = new Intent(); + createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); + String label = tag.getName(); + if(tag.shouldHideFromMainList()) + label = label.substring(1); + createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, label); + createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, + ((BitmapDrawable)r.getDrawable(R.drawable.icon_tag)).getBitmap()); + createShortcutIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); + + getParent().sendBroadcast(createShortcutIntent); + Toast.makeText(getParent(), R.string.tagList_shortcut_created, Toast.LENGTH_SHORT).show(); + return true; } return false; diff --git a/src/com/timsu/astrid/activities/TagView.java b/src/com/timsu/astrid/activities/TagView.java new file mode 100644 index 000000000..fdde8bd8d --- /dev/null +++ b/src/com/timsu/astrid/activities/TagView.java @@ -0,0 +1,62 @@ +/* + * ASTRID: Android's Simple Task Recording Dashboard + * + * Copyright (c) 2009 Tim Su + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package com.timsu.astrid.activities; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +/** + * This activity is launched from a desktop shortcut and takes the user to + * view a specific tag + * + * @author timsu + * + */ +public class TagView extends Activity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + launchTaskList(getIntent()); + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + + launchTaskList(intent); + } + + private void launchTaskList(Intent intent) { + String tag = intent.getData().toString(); + long tagId = Long.parseLong(tag.substring(tag.indexOf(":")+1)); + + Bundle variables = new Bundle(); + variables.putLong(TaskListSubActivity.TAG_TOKEN, tagId); + + Intent taskListIntent = new Intent(this, TaskList.class); + taskListIntent.putExtra(TaskList.VARIABLES_TAG, variables); + startActivity(taskListIntent); + + finish(); + } +} diff --git a/src/com/timsu/astrid/activities/TaskEdit.java b/src/com/timsu/astrid/activities/TaskEdit.java index 1f36e1c62..b5267f3bc 100644 --- a/src/com/timsu/astrid/activities/TaskEdit.java +++ b/src/com/timsu/astrid/activities/TaskEdit.java @@ -263,6 +263,9 @@ public class TaskEdit extends TaskModificationTabbedActivity { if(name.getText().length() == 0) return; + // tell the task list to update itself + TaskListSubActivity.shouldRefreshTaskList = true; + model.setName(name.getText().toString()); model.setEstimatedSeconds(estimatedDuration.getTimeDurationInSeconds()); model.setElapsedSeconds(elapsedDuration.getTimeDurationInSeconds()); @@ -553,6 +556,9 @@ public class TaskEdit extends TaskModificationTabbedActivity { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + // tell the task list to update itself + TaskListSubActivity.shouldRefreshTaskList = true; + controller.deleteTask(model.getTaskIdentifier()); shouldSaveState = false; setResult(Constants.RESULT_GO_HOME); diff --git a/src/com/timsu/astrid/activities/TaskListNotify.java b/src/com/timsu/astrid/activities/TaskListNotify.java index b6d409405..75fbb2b6b 100644 --- a/src/com/timsu/astrid/activities/TaskListNotify.java +++ b/src/com/timsu/astrid/activities/TaskListNotify.java @@ -25,7 +25,7 @@ import android.os.Bundle; /** * This activity is launched when a user opens up a notification from the - * tray. It launches the appropriate activity based on the passed in parametes. + * tray. It launches the appropriate activity based on the passed in parameters. * * @author timsu * diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java index aafb3f514..6ea5889ed 100644 --- a/src/com/timsu/astrid/activities/TaskListSubActivity.java +++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java @@ -49,6 +49,7 @@ import android.view.View.OnCreateContextMenuListener; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import com.timsu.astrid.R; import com.timsu.astrid.activities.TaskListAdapter.TaskListAdapterHooks; @@ -123,6 +124,10 @@ public class TaskListSubActivity extends SubActivity { private View layout; private TextView loadingText; + // indicator flag set if task list should be refreshed (something changed + // in another activity) + static boolean shouldRefreshTaskList = false; + // other instance variables class TaskListContext { Map tagMap; @@ -194,7 +199,10 @@ public class TaskListSubActivity extends SubActivity { if(variables != null && variables.containsKey(TAG_TOKEN)) { TagIdentifier identifier = new TagIdentifier(variables.getLong(TAG_TOKEN)); context.tagMap = getTagController().getAllTagsAsMap(getParent()); - context.filterTag = context.tagMap.get(identifier); + if(context.tagMap.containsKey(identifier)) + context.filterTag = context.tagMap.get(identifier); + else + Toast.makeText(getParent(), R.string.missing_tag, Toast.LENGTH_SHORT).show(); } // time to go! @@ -776,6 +784,15 @@ public class TaskListSubActivity extends SubActivity { context.loadingThread.stop(); } + @Override + void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + if(shouldRefreshTaskList) + reloadList(); + shouldRefreshTaskList = false; + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == Constants.RESULT_SYNCHRONIZE) { @@ -792,11 +809,6 @@ public class TaskListSubActivity extends SubActivity { }); } else if(requestCode == ACTIVITY_TAGS) { switchToActivity(TaskList.AC_TAG_LIST, null); - } else if((requestCode == ACTIVITY_EDIT || requestCode == ACTIVITY_CREATE) && - resultCode != Constants.RESULT_DISCARD) { - - // refresh, since stuff might have changed... - reloadList(); } }