diff --git a/api/src/com/todoroo/astrid/api/Filter.java b/api/src/com/todoroo/astrid/api/Filter.java index 9205642a5..0d7cf0857 100644 --- a/api/src/com/todoroo/astrid/api/Filter.java +++ b/api/src/com/todoroo/astrid/api/Filter.java @@ -7,6 +7,7 @@ import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; +import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.QueryTemplate; /** @@ -161,4 +162,12 @@ public class Filter extends FilterListItem { } }; + + /** + * @return a filter that matches nothing + */ + public static Filter emptyFilter() { + return new Filter("", "", //$NON-NLS-1$ //$NON-NLS-2$ + new QueryTemplate().where(Criterion.none), null); + } } diff --git a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java index 7f36a9706..468adb462 100644 --- a/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java +++ b/astrid/plugin-src/com/timsu/astrid/C2DMReceiver.java @@ -265,7 +265,7 @@ public class C2DMReceiver extends BroadcastReceiver { } FilterWithCustomIntent filter = (FilterWithCustomIntent)TagFilterExposer.filterFromTagData(context, tagData); - filter.customExtras.putInt(TagViewActivity.EXTRA_START_TAB, 1); + filter.customExtras.putString(TagViewActivity.EXTRA_START_TAB, "updates"); if(intent.hasExtra("activity_id")) { try { Update update = new Update(); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java index 5eb7dcbb7..d8c6f5f04 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewActivity.java @@ -8,6 +8,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.BroadcastReceiver; @@ -43,6 +44,7 @@ import android.widget.TabHost.OnTabChangeListener; import android.widget.TabWidget; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; +import android.widget.Toast; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; @@ -60,13 +62,18 @@ import com.todoroo.astrid.actfm.sync.ActFmSyncService; import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.api.AstridApiConstants; +import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.SortHelper; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.UpdateDao; import com.todoroo.astrid.data.TagData; +import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Update; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TagDataService; +import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService; +import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.ui.PeopleContainer; import com.todoroo.astrid.utility.Flags; @@ -79,12 +86,13 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList public static final String EXTRA_TAG_NAME = "tag"; //$NON-NLS-1$ public static final String EXTRA_TAG_REMOTE_ID = "remoteId"; //$NON-NLS-1$ public static final String EXTRA_START_TAB = "tab"; //$NON-NLS-1$ + public static final String EXTRA_NEW_TAG = "new"; //$NON-NLS-1$ protected static final int MENU_REFRESH_ID = MENU_SYNC_ID; protected static final int REQUEST_CODE_CAMERA = 1; protected static final int REQUEST_CODE_PICTURE = 2; - + protected static final int REQUEST_ACTFM_LOGIN = 3; private TagData tagData; @@ -96,14 +104,20 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList @Autowired UpdateDao updateDao; - private TabHost tabHost; private UpdateAdapter updateAdapter; private PeopleContainer tagMembers; private EditText addCommentField; private AsyncImageView picture; private EditText tagName; + private View taskListView; + + private TabHost tabHost; + private TabWidget tabWidget; + private String[] tabLabels; + private boolean dataLoaded = false; + // --- UI initialization @Override @@ -124,7 +138,7 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList ((EditText) findViewById(R.id.commentField)).setOnTouchListener(onTouch); if(getIntent().hasExtra(EXTRA_START_TAB)) - tabHost.setCurrentTab(getIntent().getIntExtra(EXTRA_START_TAB, 0)); + tabHost.setCurrentTabByTag(getIntent().getStringExtra(EXTRA_START_TAB)); } @SuppressWarnings("nls") @@ -133,25 +147,22 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList ViewGroup parent = (ViewGroup) getLayoutInflater().inflate(R.layout.task_list_body_tag, root, false); ViewGroup tabContent = (ViewGroup) parent.findViewById(android.R.id.tabcontent); - String[] tabLabels = getResources().getStringArray(R.array.TVA_tabs); + tabLabels = getResources().getStringArray(R.array.TVA_tabs); tabHost = (TabHost) parent.findViewById(android.R.id.tabhost); - TabWidget tabWidget = (TabWidget) parent.findViewById(android.R.id.tabs); + tabWidget = (TabWidget) parent.findViewById(android.R.id.tabs); tabHost.setup(); - // set up tabs - View taskList = super.getListBody(parent); - tabContent.addView(taskList); - addTab(tabWidget, taskList.getId(), "tasks", tabLabels[0]); - if(actFmPreferenceService.isLoggedIn()) - addTab(tabWidget, R.id.tab_updates, "updates", tabLabels[1]); - addTab(tabWidget, R.id.tab_settings, "members", tabLabels[2]); + taskListView = super.getListBody(parent); + tabContent.addView(taskListView); + + addTab(taskListView.getId(), "tasks", tabLabels[0]); tabHost.setOnTabChangedListener(this); return parent; } - private void addTab(TabWidget tabWidget, int contentId, String id, String label) { + private void addTab(int contentId, String id, String label) { TabHost.TabSpec spec = tabHost.newTabSpec(id); spec.setContent(contentId); TextView textIndicator = (TextView) getLayoutInflater().inflate(R.layout.gd_tab_indicator, tabWidget, false); @@ -173,7 +184,7 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList else findViewById(R.id.updatesFooter).setVisibility(View.GONE); - if(tabId.equals("members")) + if(tabId.equals("settings")) findViewById(R.id.membersFooter).setVisibility(View.VISIBLE); else findViewById(R.id.membersFooter).setVisibility(View.GONE); @@ -216,12 +227,15 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList } protected void setUpSettingsPage() { + addTab(R.id.tab_settings, "settings", tabLabels[2]); //$NON-NLS-1$ tagMembers = (PeopleContainer) findViewById(R.id.members_container); tagName = (EditText) findViewById(R.id.tag_name); picture = (AsyncImageView) findViewById(R.id.picture); - if(actFmPreferenceService.isLoggedIn()) + if(actFmPreferenceService.isLoggedIn()) { + picture.setVisibility(View.VISIBLE); findViewById(R.id.listSettingsMore).setVisibility(View.VISIBLE); + } picture.setOnClickListener(new OnClickListener() { @Override @@ -266,6 +280,9 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList } protected void setUpUpdateList() { + if(actFmPreferenceService.isLoggedIn() && tagData.getValue(Task.REMOTE_ID) > 0) + addTab(R.id.tab_updates, "updates", tabLabels[1]); //$NON-NLS-1$ + final ImageButton quickAddButton = (ImageButton) findViewById(R.id.commentButton); addCommentField = (EditText) findViewById(R.id.commentField); addCommentField.setOnEditorActionListener(new OnEditorActionListener() { @@ -306,8 +323,6 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList @Override protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - synchronized(this) { if(dataLoaded) return; @@ -316,10 +331,17 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList String tag = getIntent().getStringExtra(EXTRA_TAG_NAME); long remoteId = getIntent().getLongExtra(EXTRA_TAG_REMOTE_ID, 0); + boolean newTag = getIntent().getBooleanExtra(EXTRA_NEW_TAG, false); - if(tag == null && remoteId == 0) + if(tag == null && remoteId == 0 && !newTag) return; + if(newTag) { + getIntent().putExtra(TOKEN_FILTER, Filter.emptyFilter()); + setTitle(getString(R.string.tag_new_list)); + findViewById(R.id.taskListFooter).setVisibility(View.GONE); + } + TodorooCursor cursor = tagDataService.query(Query.select(TagData.PROPERTIES).where(Criterion.or(TagData.NAME.eq(tag), Criterion.and(TagData.REMOTE_ID.gt(0), TagData.REMOTE_ID.eq(remoteId))))); try { @@ -336,13 +358,16 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList cursor.close(); } - String fetchKey = LAST_FETCH_KEY + tagData.getId(); - long lastFetchDate = Preferences.getLong(fetchKey, 0); - if(DateUtilities.now() > lastFetchDate + 300000L) { - refreshData(false, false); - Preferences.setLong(fetchKey, DateUtilities.now()); + if(tagData.getValue(TagData.REMOTE_ID) > 0) { + String fetchKey = LAST_FETCH_KEY + tagData.getId(); + long lastFetchDate = Preferences.getLong(fetchKey, 0); + if(DateUtilities.now() > lastFetchDate + 300000L) { + refreshData(false, false); + Preferences.setLong(fetchKey, DateUtilities.now()); + } } + super.onNewIntent(intent); setUpUpdateList(); setUpSettingsPage(); } @@ -399,6 +424,8 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList tagMembers.removeAllViews(); String peopleJson = tagData.getValue(TagData.MEMBERS); + System.err.println("gotta grab ppl - " + peopleJson); + Log.e("GAH", "gaga", new Throwable()); if(!TextUtils.isEmpty(peopleJson)) { try { JSONArray people = new JSONArray(peopleJson); @@ -507,19 +534,14 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList @SuppressWarnings("nls") @Override public void onReceive(Context context, Intent intent) { - System.err.println("TVA thug hustlin - "); - if(!intent.hasExtra("tag_id")) return; - System.err.println(Long.toString(tagData.getValue(TagData.REMOTE_ID)) + - " VS " + intent.getStringExtra("tag_id")); if(!Long.toString(tagData.getValue(TagData.REMOTE_ID)).equals(intent.getStringExtra("tag_id"))) return; runOnUiThread(new Runnable() { @Override public void run() { - System.err.println("REFRESH updates list pa-pa-pa"); refreshUpdatesList(); } }); @@ -557,15 +579,47 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList tagData.setFlag(TagData.FLAGS, TagData.FLAG_EMERGENT, false); } + if(newName.length() > 0 && oldName.length() == 0) { + tagDataService.save(tagData); + setUpNewTag(newName); + } + JSONArray members = tagMembers.toJSONArray(); + if(members.length() > 0 && !actFmPreferenceService.isLoggedIn()) { + startActivityForResult(new Intent(this, ActFmLoginActivity.class), + REQUEST_ACTFM_LOGIN); + return; + } + tagData.setValue(TagData.MEMBERS, members.toString()); tagData.setValue(TagData.MEMBER_COUNT, members.length()); - Flags.set(Flags.TOAST_ON_SAVE); + + if(actFmPreferenceService.isLoggedIn()) + Flags.set(Flags.TOAST_ON_SAVE); + else + Toast.makeText(this, R.string.tag_list_saved, Toast.LENGTH_LONG).show(); + tagDataService.save(tagData); refreshMembersPage(); } + @Override + protected Task quickAddTask(String title, boolean selectNewTask) { + if(tagData.getValue(TagData.NAME).length() == 0) { + DialogUtilities.okDialog(this, getString(R.string.tag_no_title_error), null); + return null; + } + return super.quickAddTask(title, selectNewTask); + } + + private void setUpNewTag(String name) { + filter = TagFilterExposer.filterFromTag(this, new Tag(name, 0, 0), + TaskCriteria.activeAndVisible()); + getIntent().putExtra(TOKEN_FILTER, filter); + super.onNewIntent(getIntent()); + } + @SuppressWarnings("nls") @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -599,7 +653,8 @@ public class TagViewActivity extends TaskListActivity implements OnTabChangeList picture.setImageBitmap(bitmap); uploadTagPicture(bitmap); } - } + } else if(requestCode == REQUEST_ACTFM_LOGIN && resultCode == Activity.RESULT_OK) + saveSettings(); } private void uploadTagPicture(final Bitmap bitmap) { diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java index 869dcb2ed..704d71091 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagsPlugin.java @@ -3,31 +3,16 @@ package com.todoroo.astrid.tags; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; -import android.widget.EditText; -import android.widget.FrameLayout; -import com.timsu.astrid.R; -import com.todoroo.andlib.service.Autowired; -import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.andlib.utility.DialogUtilities; -import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; +import com.todoroo.astrid.actfm.TagViewActivity; import com.todoroo.astrid.api.Addon; import com.todoroo.astrid.api.AstridApiConstants; -import com.todoroo.astrid.api.FilterWithCustomIntent; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; -import com.todoroo.astrid.service.TagDataService; -import com.todoroo.astrid.tags.TagService.Tag; public class TagsPlugin extends BroadcastReceiver { static final String IDENTIFIER = "tags"; //$NON-NLS-1$ - @Autowired TagDataService tagDataService; - - @Autowired ActFmPreferenceService actFmPreferenceService; - @SuppressWarnings("nls") @Override public void onReceive(Context context, Intent intent) { @@ -45,25 +30,10 @@ public class TagsPlugin extends BroadcastReceiver { * @param activity */ public void showNewTagDialog(final Activity activity) { - DependencyInjectionService.getInstance().inject(this); - - FrameLayout frame = new FrameLayout(activity); - final EditText editText = new EditText(activity); - frame.addView(editText); - frame.setPadding(10, 0, 10, 0); - - // todo make me open directly - DialogUtilities.viewDialog(activity, - activity.getString(R.string.tag_new_list), - frame, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Tag tag = new Tag(editText.getText().toString(), 0, 0); - FilterWithCustomIntent filter = TagFilterExposer.filterFromTag(activity, - tag, TaskCriteria.isActive()); - filter.start(activity); - } - }, null); + Intent intent = new Intent(activity, TagViewActivity.class); + intent.putExtra(TagViewActivity.EXTRA_NEW_TAG, true); + intent.putExtra(TagViewActivity.EXTRA_START_TAB, "settings"); //$NON-NLS-1$ + activity.startActivity(intent); } } diff --git a/astrid/res/layout/task_list_body_tag.xml b/astrid/res/layout/task_list_body_tag.xml index 176cc77c3..d02afc9b7 100644 --- a/astrid/res/layout/task_list_body_tag.xml +++ b/astrid/res/layout/task_list_body_tag.xml @@ -60,6 +60,7 @@ android:layout_alignParentTop="true" android:scaleType="fitCenter" android:paddingRight="10dip" + android:visibility="gone" astrid:defaultSrc="@android:drawable/ic_menu_gallery" /> Show List - New List Name: + New List + + + List Saved + + + Please enter a name for this list first! diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 4cb375c07..a41f3acf6 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -387,10 +387,10 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // set listener for quick add button quickAddButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { - if(quickAddBox.getText().length() > 0) { - quickAddTask(quickAddBox.getText().toString(), true); - } else { + Task task = quickAddTask(quickAddBox.getText().toString(), true); + if(task != null && task.getValue(Task.TITLE).length() == 0) { Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class); + intent.putExtra(TaskEditActivity.TOKEN_ID, task.getId()); startActivityForResult(intent, ACTIVITY_EDIT_TASK); } } @@ -409,6 +409,8 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, @Override public boolean onLongClick(View v) { Task task = quickAddTask(quickAddBox.getText().toString(), false); + if(task == null) + return true; Intent intent = new Intent(TaskListActivity.this, TaskEditActivity.class); intent.putExtra(TaskEditActivity.TOKEN_ID, task.getId()); startActivityForResult(intent, ACTIVITY_EDIT_TASK); @@ -648,6 +650,11 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, * @param requery */ public void loadTaskListContent(boolean requery) { + if(taskAdapter == null) { + setUpTaskList(); + return; + } + int oldListItemSelected = getListView().getSelectedItemPosition(); Cursor taskCursor = taskAdapter.getCursor(); @@ -668,14 +675,22 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, sendOrderedBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); } + @Override + public void setTitle(CharSequence title) { + ((TextView)findViewById(R.id.listLabel)).setText(title); + } + /** * Fill in the Task List with current items * @param withCustomId force task with given custom id to be part of list */ protected void setUpTaskList() { + if(filter == null) + return; + sqlQueryTemplate.set(SortHelper.adjustQueryForFlagsAndSort(filter.sqlQuery, sortFlags, sortSort)); - ((TextView)findViewById(R.id.listLabel)).setText(filter.title); + setTitle(filter.title); // perform query TodorooCursor currentCursor = taskService.fetchFiltered(