Made searching work, fixed up goodies

pull/14/head
Tim Su 14 years ago
parent fc25791878
commit 329f371020

@ -202,7 +202,7 @@
</intent-filter>
</receiver>
<activity android:name="com.todoroo.astrid.reminders.NotificationActivity"
android:taskAffinity="astrid.reminders" />
android:taskAffinity="" />
</application>
</manifest>

@ -19,6 +19,7 @@ import com.todoroo.astrid.activity.FilterListActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.SearchFilter;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Task;
@ -44,10 +45,15 @@ public final class CoreFilterExposer extends BroadcastReceiver {
null);
all.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_all)).getBitmap();
SearchFilter searchFilter = new SearchFilter(CorePlugin.IDENTIFIER,
"Search");
searchFilter.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_search)).getBitmap();
// transmit filter list
FilterListItem[] list = new FilterListItem[2];
FilterListItem[] list = new FilterListItem[3];
list[0] = inbox;
list[1] = all;
list[2] = searchFilter;
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ITEMS, list);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);

@ -153,6 +153,7 @@ public class Notifications extends BroadcastReceiver {
Intent notifyIntent = new Intent(context, NotificationActivity.class);
notifyIntent.putExtra(NotificationActivity.TOKEN_ID, id);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context,
(int)id, notifyIntent, PendingIntent.FLAG_ONE_SHOT);

@ -2,8 +2,8 @@ package com.todoroo.astrid.tags;
import java.util.ArrayList;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.data.Property.CountProperty;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
@ -79,7 +79,7 @@ public class TagService {
}
public QueryTemplate untaggedTemplate() {
return new QueryTemplate().join(Join.inner(Metadata.TABLE,
return new QueryTemplate().join(Join.left(Metadata.TABLE,
Task.ID.eq(Metadata.TASK))).where(Criterion.and(
TaskCriteria.isActive(), MetadataCriteria.withKey(KEY),
Metadata.VALUE.isNull()));

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- See the file "LICENSE" for the full license governing this code. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_layout"
android:orientation="horizontal"
android:background="@android:drawable/list_selector_background"
android:focusable="true"
android:paddingTop="8px"
android:paddingLeft="6dip"
android:paddingLeft="4dip"
android:paddingRight="6dip"
android:paddingBottom="2px"
android:minHeight="56px"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
@ -18,14 +18,13 @@
android:layout_height="fill_parent"
android:layout_weight="1"
android:paddingLeft="10px"
android:button="@drawable/btn_check"
android:scaleType="center"/>
android:button="@drawable/btn_check"/>
<LinearLayout android:id="@+id/details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="100"
android:paddingLeft="14px"
android:paddingLeft="12px"
android:paddingRight="2px"
android:orientation="vertical">
@ -48,7 +47,7 @@
<!-- importance -->
<View android:id="@+id/importance"
android:layout_width="12px"
android:layout_width="2px"
android:layout_height="fill_parent"/>
</LinearLayout>

@ -51,7 +51,7 @@
<!-- Task List -->
<ListView android:id="@android:id/list"
android:background="@null"
android:background="@drawable/none"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
@ -70,7 +70,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/btn_add"/>
android:src="@drawable/btn_add"
android:scaleType="fitCenter"/>
<!-- Quick Add Task -->
<EditText android:id="@+id/quickAddText"
@ -87,7 +88,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/btn_add_extended"/>
android:src="@drawable/btn_add_extended"
android:scaleType="fitCenter"/>
</LinearLayout>

@ -195,8 +195,8 @@ button: add task & go to the edit page.
<!-- Context Menu: Shortcut -->
<string name="FLA_context_shortcut">Create Shortcut On Desktop</string>
<!-- Menu: Search -->
<string name="FLA_menu_search">Search...</string>
<!-- Menu: Search Hint -->
<string name="FLA_menu_search">Search Tasks...</string>
<!-- Menu: Help -->
<string name="FLA_menu_help">Help</string>
@ -207,12 +207,12 @@ button: add task & go to the edit page.
<!-- Create Shortcut Dialog (asks to name shortcut) -->
<string name="FLA_shortcut_dialog">Name of shortcut:</string>
<!-- Search Label-->
<string name="FLA_search_label">Search For Tasks</string>
<!-- Search Hint-->
<string name="FLA_search_hint">Search For Tasks</string>
<!-- Search Filter name (%s => query) -->
<string name="FLA_search_filter">Matching \'%s\'</string>
<!-- Help (HTML)-->
<string name="FLA_help"><![CDATA[
<center><h1>Help: Filters Page</h1></center>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/FLA_search_label"
android:label="@string/app_name"
android:hint="@string/FLA_search_hint">
</searchable>

@ -13,30 +13,34 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import android.widget.FrameLayout;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.SearchFilter;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.utility.Constants;
@ -66,7 +70,6 @@ public class FilterListActivity extends ExpandableListActivity {
protected DialogUtilities dialogUtilities;
FilterAdapter adapter = null;
String search = null;
FilterReceiver filterReceiver = new FilterReceiver();
/* ======================================================================
@ -106,10 +109,14 @@ public class FilterListActivity extends ExpandableListActivity {
final String intentAction = intent.getAction();
if (Intent.ACTION_SEARCH.equals(intentAction)) {
search = intent.getStringExtra(SearchManager.QUERY);
dialogUtilities.okDialog(this, "TODO!", null); //$NON-NLS-1$
} else {
search = null;
String query = intent.getStringExtra(SearchManager.QUERY);
Filter filter = new Filter(null, null,
getString(R.string.FLA_search_filter, query),
new QueryTemplate().where(Task.TITLE.like("%" + query + "%")), //$NON-NLS-1$ //$NON-NLS-2$
null);
intent = new Intent(FilterListActivity.this, TaskListActivity.class);
intent.putExtra(TaskListActivity.TOKEN_FILTER, filter);
startActivity(intent);
}
}
@ -226,6 +233,8 @@ public class FilterListActivity extends ExpandableListActivity {
intent.putExtra(TaskListActivity.TOKEN_FILTER, filter);
startActivity(intent);
return true;
} else if(item instanceof SearchFilter) {
onSearchRequested();
}
return false;
}
@ -309,9 +318,9 @@ public class FilterListActivity extends ExpandableListActivity {
R.drawable.icon_blank)).getBitmap();
bitmap = bitmap.copy(bitmap.getConfig(), true);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(emblem, Math.max(0, bitmap.getWidth() -
emblem.getWidth()), Math.max(0, bitmap.getHeight() -
emblem.getHeight()), null);
canvas.drawBitmap(emblem, new Rect(0, 0, emblem.getWidth(), emblem.getHeight()),
new Rect(bitmap.getWidth() - 32, bitmap.getHeight() - 32,
bitmap.getWidth(), bitmap.getHeight()), null);
Intent createShortcutIntent = new Intent();
createShortcutIntent.putExtra(

@ -1150,7 +1150,7 @@ public final class TaskEditActivity extends TabActivity {
}
LayoutInflater inflater = getLayoutInflater();
final View tagItem = inflater.inflate(R.layout.edit_tag_item, null);
final View tagItem = inflater.inflate(R.layout.tag_edit_row, null);
tagsContainer.addView(tagItem);
AutoCompleteTextView textView = (AutoCompleteTextView)tagItem.

@ -411,7 +411,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener {
startManagingCursor(currentCursor);
// set up list adapters
taskAdapter = new TaskAdapter(this, R.layout.task_row,
taskAdapter = new TaskAdapter(this, R.layout.task_adapter_row,
currentCursor, false, null);
setListAdapter(taskAdapter);
getListView().setOnScrollListener(this);

@ -9,13 +9,13 @@ import android.app.Activity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;
import com.timsu.astrid.R;
import com.todoroo.astrid.api.Filter;
@ -68,7 +68,7 @@ public class FilterAdapter extends BaseExpandableListAdapter {
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
FilterListItem item = (FilterListItem)getChild(groupPosition, childPosition);
View textView = getFilterView((Filter)item, true);
View textView = getStandardView((Filter)item, true);
return textView;
}
@ -107,10 +107,8 @@ public class FilterAdapter extends BaseExpandableListAdapter {
return getHeaderView((FilterListHeader)item, isChild);
else if(item instanceof FilterCategory)
return getCategoryView((FilterCategory)item, isExpanded);
else if(item instanceof Filter)
return getFilterView((Filter)item, isChild);
else
throw new UnsupportedOperationException("unknown item type"); //$NON-NLS-1$
return getStandardView(item, isChild);
}
public View getCategoryView(FilterCategory filter, boolean isExpanded) {
@ -125,10 +123,11 @@ public class FilterAdapter extends BaseExpandableListAdapter {
image.setImageResource(R.drawable.expander_ic_maximized);
else
image.setImageResource(R.drawable.expander_ic_minimized);
FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.FILL_PARENT);
FrameLayout.LayoutParams llp = new FrameLayout.LayoutParams(
32, 32);
llp.gravity = Gravity.CENTER_VERTICAL;
image.setLayoutParams(llp);
image.setScaleType(ScaleType.FIT_CENTER);
layout.addView(image);
TextView textView = new TextView(activity);
@ -168,7 +167,7 @@ public class FilterAdapter extends BaseExpandableListAdapter {
return textView;
}
public View getFilterView(Filter filter, boolean isChild) {
public View getStandardView(FilterListItem filter, boolean isChild) {
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);

@ -11,11 +11,13 @@ import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Paint;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnKeyListener;
import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.LinearLayout;
@ -338,10 +340,31 @@ public class TaskAdapter extends CursorAdapter {
* created.
*/
private void addListeners(final View container) {
// check box listener
final CheckBox completeBox = ((CheckBox)container.findViewById(R.id.completeBox));
completeBox.setOnClickListener(completeBoxListener);
// context menu listener
container.setOnCreateContextMenuListener(listener);
// key press listener
container.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(event.getAction() != KeyEvent.ACTION_UP)
return false;
// hot-key to set task priority - 1-4 or ALT + Q-R
if(event.getNumber() >= '1' && event.getNumber() <= '4') {
int importance = event.getNumber() - '1';
Task task = ((ViewHolder)container.getTag()).task;
task.setValue(Task.IMPORTANCE, importance);
taskService.save(task, false);
setFieldContentsAndVisibility(container, task);
}
return false;
}
});
}
class ContextMenuListener implements OnCreateContextMenuListener {

@ -0,0 +1,83 @@
package com.todoroo.astrid.api;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Special filter that triggers the search functionality when accessed.
*
* @author Tim Su <tim@todoroo.com>
*
*/
public class SearchFilter extends FilterListItem {
/**
* Plug-in Identifier
*/
public final String plugin;
/**
* Constructor for creating a new SearchFilter
*
* @param plugin
* {@link Plugin} identifier that encompasses object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
*/
public SearchFilter(String plugin, String listingTitle) {
this.plugin = plugin;
this.listingTitle = listingTitle;
}
/**
* Constructor for creating a new SearchFilter
*
* @param plugin
* {@link Plugin} identifier that encompasses object
*/
protected SearchFilter(String plugin) {
this.plugin = plugin;
}
// --- parcelable
/**
* {@inheritDoc}
*/
public int describeContents() {
return 0;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(plugin);
super.writeToParcel(dest, flags);
}
/**
* Parcelable creator
*/
public static final Parcelable.Creator<SearchFilter> CREATOR = new Parcelable.Creator<SearchFilter>() {
/**
* {@inheritDoc}
*/
public SearchFilter createFromParcel(Parcel source) {
SearchFilter item = new SearchFilter(source.readString());
item.readFromParcel(source);
return item;
}
/**
* {@inheritDoc}
*/
public SearchFilter[] newArray(int size) {
return new SearchFilter[size];
}
};
}
Loading…
Cancel
Save