Navigation redesign

* Replace list popover with drawer - Closes #33
* Replace menu popover with standard menus
* Replace application icons - Closes #11
* Remove swipe between lists
* Remove list icons
* Remove list header from tablet view
* Remove list settings shortcut
* Add new list, rename list, delete list to overflow
* Remove featured list
* Brazilian Portuguese (sfrique)
* Russian translation (xtsrsdn)
pull/46/head 4.6.10
Alex Baker 11 years ago
parent 72f835cdc5
commit ac7903fac3

@ -8,5 +8,5 @@
# project structure.
# Project target.
target=android-17
target=android-18
android.library=true

@ -9,4 +9,4 @@
android.library=true
# Project target.
target=android-17
target=android-18

@ -5,8 +5,6 @@
*/
package com.todoroo.andlib.service;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
@ -140,33 +138,5 @@ public class ExceptionService {
}
}
}
/**
* Uncaught exception handler uses the exception utilities class to
* report errors
*
* @author Tim Su <tim@todoroo.com>
*
*/
public static class TodorooUncaughtExceptionHandler implements UncaughtExceptionHandler {
private final UncaughtExceptionHandler defaultUEH;
@Autowired
protected ExceptionService exceptionService;
public TodorooUncaughtExceptionHandler() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
DependencyInjectionService.getInstance().inject(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if(exceptionService != null) {
exceptionService.reportError("uncaught", ex); //$NON-NLS-1$
}
defaultUEH.uncaughtException(thread, ex);
}
}
}

@ -219,14 +219,5 @@ public class Filter extends FilterListItem {
public Filter[] newArray(int size) {
return new Filter[size];
}
};
/**
* @return a filter that matches nothing
*/
public static Filter emptyFilter(String title) {
return new Filter(title, title,
new QueryTemplate().where(Criterion.none), null);
}
}

@ -63,7 +63,7 @@ dependencies {
compile project(":greendroid")
compile project(":api")
compile fileTree(dir: "libs", includes: ["*.jar"])
compile 'net.simonvt.menudrawer:menudrawer:3.0.4@aar'
compile group: 'com.google.guava', name: 'guava', version: '11.0.1', transitive: false
compile group: 'com.google.code.gson', name: 'gson', version: '1.7.1', transitive: false
compile group: 'org.codehaus.jackson', name: 'jackson-core-asl', version: '1.6.7', transitive: false

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

@ -10,7 +10,7 @@
# Indicates whether an apk should be generated for each density.
split.density=false
# Project target.
target=android-17
target=android-18
apk-configurations=
android.library.reference.1=../android-aac-enc
android.library.reference.2=../api

@ -5,18 +5,12 @@
*/
package com.todoroo.astrid.repeats;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import android.content.Intent;
import com.google.ical.values.Frequency;
import com.google.ical.values.RRule;
import com.google.ical.values.Weekday;
import com.google.ical.values.WeekdayNum;
import org.tasks.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Query;
@ -24,21 +18,24 @@ import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.SyncFlags;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.test.DatabaseTestCase;
import org.tasks.R;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
public class NewRepeatTests<REMOTE_MODEL> extends DatabaseTestCase {
@Autowired
protected TaskDao taskDao;
@Autowired
protected MetadataDao metadataDao;
@Override
protected void setUp() throws Exception {
super.setUp();
@ -142,7 +139,6 @@ public class NewRepeatTests<REMOTE_MODEL> extends DatabaseTestCase {
System.err.println("Completion date: " + new Date(completionDate));
waitAndSync();
assertTaskCompletedRemotely(t);
TodorooCursor<Task> cursor = taskDao.query(Query.select(Task.PROPERTIES).where(TaskCriteria.notDeleted()));
try {

@ -1,7 +1,6 @@
package com.todoroo.astrid.sync;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.RemoteModelDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
@ -20,9 +19,6 @@ public class NewSyncTestCase extends DatabaseTestCase {
@Autowired
protected TaskOutstandingDao taskOutstandingDao;
@Autowired
protected MetadataDao metadataDao;
@Override
protected void setUp() throws Exception {
super.setUp();

@ -5,8 +5,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tasks"
android:versionName="4.6.9"
android:versionCode="320">
android:versionName="4.6.10"
android:versionCode="321">
<!-- widgets, alarms, and services will break if Astrid is installed on SD card -->
<!-- android:installLocation="internalOnly"> -->
@ -352,14 +352,6 @@
android:name="com.todoroo.astrid.tags.TagFilterExposer$RenameTagActivity"
android:theme="@style/Theme.FullTransparent" />
<!-- Featured lists -->
<receiver android:name="com.todoroo.astrid.tags.reusable.FeaturedListFilterExposer">
<intent-filter>
<action android:name="org.tasks.REQUEST_FEATURED_LISTS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<!-- alarms -->
<receiver android:name="com.todoroo.astrid.alarms.AlarmTaskRepeatListener">
<intent-filter>

@ -107,8 +107,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
protected abstract void addHeaderToListView(ListView listView);
protected abstract void populateListHeader(ViewGroup header);
protected abstract UserActivity createUpdate();
protected abstract boolean canLoadMoreHistory();
@ -241,7 +239,6 @@ public abstract class CommentsFragment extends SherlockListFragment {
addFooterToListView(listView);
listView.setAdapter(updateAdapter);
}
populateListHeader(listHeader);
}
listView.setVisibility(View.VISIBLE);

@ -8,27 +8,19 @@ package com.todoroo.astrid.actfm;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.UserActivity;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.ResourceDrawableCache;
import org.tasks.R;
@ -39,9 +31,6 @@ public class TagCommentsFragment extends CommentsFragment {
@Autowired
private TagDataService tagDataService;
@Autowired
private TagDataDao tagDataDao;
public TagCommentsFragment() {
super();
}
@ -95,44 +84,10 @@ public class TagCommentsFragment extends CommentsFragment {
protected void addHeaderToListView(ListView listView) {
if (AstridPreferences.useTabletLayout(getActivity()) && tagData != null) {
listHeader = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.tag_updates_header, listView, false);
populateListHeader(listHeader);
listView.addHeaderView(listHeader);
}
}
@Override
protected void populateListHeader(ViewGroup header) {
if (header == null) {
return;
}
TextView tagTitle = (TextView) header.findViewById(R.id.tag_title);
String tagName = tagData.getValue(TagData.NAME);
tagTitle.setText(tagName);
TextView descriptionTitle = (TextView) header.findViewById(R.id.tag_description);
String description = tagData.getValue(TagData.TAG_DESCRIPTION);
if (!TextUtils.isEmpty(description)) {
descriptionTitle.setText(description);
descriptionTitle.setVisibility(View.VISIBLE);
}
else {
descriptionTitle.setVisibility(View.GONE);
}
AsyncImageView imageView = (AsyncImageView) header.findViewById(R.id.tag_picture);
imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagData.getUuid())));
String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM);
Bitmap imageBitmap = null;
if (TextUtils.isEmpty(imageUrl)) {
imageBitmap = tagData.getPictureBitmap(TagData.PICTURE);
}
if (imageBitmap != null) {
imageView.setImageBitmap(imageBitmap);
} else {
imageView.setUrl(imageUrl);
}
}
@Override
protected UserActivity createUpdate() {
UserActivity userActivity = new UserActivity();

@ -7,7 +7,6 @@ package com.todoroo.astrid.actfm;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
@ -17,10 +16,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
@ -31,16 +27,11 @@ import com.actionbarsherlock.view.Window;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.ActFmCameraModule.CameraResultCallback;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.ShortcutActivity;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TagMetadataDao.TagMetadataCriteria;
import com.todoroo.astrid.dao.UserDao;
@ -56,7 +47,6 @@ import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagMemberMetadata;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.ResourceDrawableCache;
import org.json.JSONArray;
import org.json.JSONException;
@ -81,22 +71,16 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
private static final String MEMBERS_IN_PROGRESS = "members"; //$NON-NLS-1$
private TagData tagData;
private Filter filter; // Used for creating shortcuts, only initialized if necessary
@Autowired TagService tagService;
@Autowired TagDataService tagDataService;
@Autowired ExceptionService exceptionService;
@Autowired UserDao userDao;
@Autowired TagMetadataDao tagMetadataDao;
private AsyncImageView picture;
private EditText tagName;
private EditText tagDescription;
private CheckBox isSilent;
private Bitmap setBitmap;
private final ImageCache imageCache;
@ -172,14 +156,10 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
} else {
ThemeService.applyTheme(this);
ActionBar actionBar = getSupportActionBar();
if (Preferences.getBoolean(R.string.p_save_and_cancel, false)) {
if(ThemeService.getTheme() == R.style.Theme) {
actionBar.setLogo(R.drawable.ic_action_save_light);
} else {
actionBar.setLogo(R.drawable.ic_action_save);
}
if(ThemeService.getTheme() == R.style.Theme) {
actionBar.setLogo(R.drawable.ic_action_save_light);
} else {
actionBar.setLogo(null);
actionBar.setLogo(R.drawable.ic_action_save);
}
}
}
@ -202,48 +182,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
}
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.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));
}
picture.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagData.getUuid())));
picture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ActFmCameraModule.showPictureLauncher(TagSettingsActivity.this, null);
}
});
if (isNewTag) {
findViewById(R.id.create_shortcut_container).setVisibility(View.GONE);
} else {
findViewById(R.id.create_shortcut_container).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (filter == null) {
filter = TagFilterExposer.filterFromTagData(TagSettingsActivity.this, tagData);
}
filter.listingIcon = picture.getImageBitmap();
FilterListFragment.showCreateShortcutDialog(TagSettingsActivity.this, ShortcutActivity.createIntent(filter), filter);
}
});
}
refreshSettingsPage();
@ -285,10 +223,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
}
}
}
//handles description part
String newDesc = tagDescription.getText().toString();
tagData.setValue(TagData.TAG_DESCRIPTION, newDesc);
if (setBitmap != null) {
JSONObject pictureJson = RemoteModel.PictureHelper.savePictureJson(this, setBitmap);
@ -311,7 +245,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
if (members.length() > oldMemberCount) {
}
tagData.setValue(TagData.MEMBER_COUNT, members.length());
tagData.setFlag(TagData.FLAGS, TagData.FLAG_SILENT, isSilent.isChecked());
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(tagName.getWindowToken(), 0);
@ -375,27 +308,8 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
}
}
String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM);
Bitmap imageBitmap = null;
if (TextUtils.isEmpty(imageUrl)) {
imageBitmap = tagData.getPictureBitmap(TagData.PICTURE);
}
if (imageBitmap != null) {
picture.setImageBitmap(imageBitmap);
} else {
picture.setUrl(imageUrl);
}
if (!isNewTag) {
ImageView shortcut = (ImageView) findViewById(R.id.create_shortcut);
shortcut.setImageBitmap(FilterListFragment.superImposeListIcon(this, picture.getImageBitmap(), tagData.getUuid()));
}
String peopleJson = tagData.getValue(TagData.MEMBERS);
updateMembers(peopleJson, tagData.getUuid());
tagDescription.setText(tagData.getValue(TagData.TAG_DESCRIPTION));
}
private void updateMembers(String peopleJson, String tagUuid) {
@ -468,7 +382,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
CameraResultCallback callback = new CameraResultCallback() {
@Override
public void handleCameraResult(Bitmap bitmap) {
picture.setImageBitmap(bitmap);
setBitmap = bitmap;
saveTagPictureLocally(bitmap);
}
@ -527,35 +440,6 @@ public class TagSettingsActivity extends SherlockFragmentActivity {
return super.onOptionsItemSelected(item);
}
protected void showDeleteDialog(TagData td) {
if(td == null) {
return;
}
int string;
if (td.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, td.getValue(TagData.NAME)),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
deleteTag();
}
}, null );
}
protected void deleteTag() {
Intent result = tagService.deleteOrLeaveTag(this, tagData.getValue(TagData.NAME), tagData.getUuid());
setResult(Activity.RESULT_OK, result);
finish();
}
private static void jsonFromUser(JSONObject json, User model) throws JSONException {
json.put("id", model.getValue(User.UUID));
json.put("name", model.getDisplayName());

@ -14,14 +14,11 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
@ -35,24 +32,14 @@ import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.subtasks.SubtasksTagListFragment;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Flags;
import org.tasks.R;
@ -72,9 +59,6 @@ public class TagViewFragment extends TaskListFragment {
public static final String EXTRA_TAG_DATA = "tagData"; //$NON-NLS-1$
protected static final int MENU_REFRESH_ID = MENU_SUPPORT_ID + 1;
protected static final int MENU_LIST_SETTINGS_ID = R.string.tag_settings_title;
private static final int REQUEST_CODE_SETTINGS = 0;
public static final String TOKEN_START_ACTIVITY = "startActivity"; //$NON-NLS-1$
@ -83,30 +67,14 @@ public class TagViewFragment extends TaskListFragment {
@Autowired TagDataService tagDataService;
@Autowired TagService tagService;
@Autowired TagDataDao tagDataDao;
@Autowired SyncV2Service syncService;
@Autowired UserDao userDao;
@Autowired MetadataDao metadataDao;
@Autowired TagMetadataDao tagMetadataDao;
@Autowired TaskListMetadataDao taskListMetadataDao;
protected View taskListView;
private boolean dataLoaded = false;
private String currentId = Task.USER_ID_IGNORE;
protected AtomicBoolean isBeingFiltered = new AtomicBoolean(false);
private Filter originalFilter;
protected boolean justDeleted = false;
// --- UI initialization
@ -127,30 +95,8 @@ public class TagViewFragment extends TaskListFragment {
};
((EditText) getView().findViewById(R.id.quickAddText)).setOnTouchListener(onTouch);
View membersEdit = getView().findViewById(R.id.members_edit);
if (membersEdit != null) {
membersEdit.setOnClickListener(settingsListener);
}
originalFilter = filter;
}
private final OnClickListener settingsListener = new OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = getActivity();
Class<?> settingsClass = AstridPreferences.useTabletLayout(activity) ? TagSettingsActivityTablet.class : TagSettingsActivity.class;
Intent intent = new Intent(getActivity(), settingsClass);
intent.putExtra(EXTRA_TAG_DATA, tagData);
startActivityForResult(intent, REQUEST_CODE_SETTINGS);
if (!AstridPreferences.useTabletLayout(activity)) {
AndroidUtilities.callOverridePendingTransition(activity, R.anim.slide_left_in, R.anim.slide_left_out);
}
}
};
/* (non-Javadoc)
* @see com.todoroo.astrid.activity.TaskListActivity#getListBody(android.view.ViewGroup)
*/
@ -168,14 +114,6 @@ public class TagViewFragment extends TaskListFragment {
return R.layout.task_list_body_tag;
}
@Override
protected void addMenuItems(Menu menu, Activity activity) {
super.addMenuItems(menu, activity);
MenuItem item = menu.add(Menu.NONE, MENU_LIST_SETTINGS_ID, 0, R.string.tag_settings_title);
item.setIcon(ThemeService.getDrawable(R.drawable.ic_action_gear));
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
// --- data loading
@Override
@ -225,8 +163,6 @@ public class TagViewFragment extends TaskListFragment {
super.initializeData();
setUpMembersGallery();
if (extras.getBoolean(TOKEN_START_ACTIVITY, false)) {
extras.remove(TOKEN_START_ACTIVITY);
}
@ -274,10 +210,6 @@ public class TagViewFragment extends TaskListFragment {
}
}
protected void setUpMembersGallery() {
getView().findViewById(R.id.members_header).setVisibility(View.GONE);
}
// --- receivers
private final BroadcastReceiver notifyReceiver = new BroadcastReceiver() {
@ -373,20 +305,6 @@ public class TagViewFragment extends TaskListFragment {
}
}
@Override
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
// handle my own menus
switch (id) {
case MENU_REFRESH_ID:
return true;
case MENU_LIST_SETTINGS_ID:
settingsListener.onClick(null);
return true;
}
return super.handleOptionsMenuItemSelected(id, intent);
}
@Override
protected boolean hasDraggableOption() {
return tagData != null && !tagData.getFlag(TagData.FLAGS, TagData.FLAG_FEATURED);
@ -412,7 +330,6 @@ public class TagViewFragment extends TaskListFragment {
@Override
protected void refresh() {
setUpMembersGallery();
loadTaskListContent(true);
((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items);
}

@ -69,11 +69,6 @@ public class TaskCommentsFragment extends CommentsFragment {
// Do nothing
}
@Override
protected void populateListHeader(ViewGroup header) {
// Do nothing
}
@Override
protected boolean canLoadMoreHistory() {
return hasModel() && task.getValue(Task.HISTORY_HAS_MORE) > 0;

@ -318,16 +318,6 @@ public class AstridActivity extends SherlockFragmentActivity
// --- fragment helpers
protected void removeFragment(String tag) {
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(tag);
if(fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
}
}
protected Fragment setupFragment(String tag, int container, Class<? extends Fragment> cls, boolean createImmediate, boolean replace) {
final FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(tag);

@ -2,19 +2,11 @@ package com.todoroo.astrid.activity;
import android.content.Context;
import org.tasks.R;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.ui.MainMenuPopover;
public class DefaultFilterMode implements FilterModeSpec {
@Override
public int[] getForbiddenMenuItems() {
return new int[] { MainMenuPopover.MAIN_MENU_ITEM_FEATURED_LISTS };
}
@Override
public Class<? extends FilterListFragment> getFilterListClass() {
return FilterListFragment.class;
@ -24,15 +16,4 @@ public class DefaultFilterMode implements FilterModeSpec {
public Filter getDefaultFilter(Context context) {
return CoreFilterExposer.buildInboxFilter(context.getResources());
}
@Override
public int getMainMenuIconAttr() {
return R.attr.asMainMenu;
}
@Override
public boolean showComments() {
return true;
}
}

@ -30,18 +30,15 @@ import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.andlib.utility.TodorooPreferenceActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.TaskAttachment;
import com.todoroo.astrid.files.FileExplore;
import com.todoroo.astrid.gcal.CalendarStartupReceiver;
import com.todoroo.astrid.gtasks.GtasksPreferences;
import com.todoroo.astrid.helper.MetadataHelper;
import com.todoroo.astrid.service.AddOnService;
import com.todoroo.astrid.service.MarketStrategy.AmazonMarketStrategy;
import com.todoroo.astrid.service.StartupService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.ui.TaskListFragmentPager;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.voice.VoiceInputAssistant;
@ -76,10 +73,6 @@ public class EditPreferences extends TodorooPreferenceActivity {
// --- instance variables
@Autowired private TaskService taskService;
@Autowired private AddOnService addOnService;
@Autowired
private Database database;
private VoiceInputAssistant voiceInputAssistant;
@ -148,9 +141,6 @@ public class EditPreferences extends TodorooPreferenceActivity {
PreferenceScreen appearance = (PreferenceScreen) screen.getPreference(APPEARANCE_PREFERENCE);
if (!AndroidUtilities.isTabletSized(this)) {
appearance.removePreference(screen.findPreference(getString(R.string.p_force_phone_layout)));
} else {
preference = screen.findPreference(getString(R.string.p_swipe_lists_enabled));
preference.setEnabled(Preferences.getBoolean(R.string.p_force_phone_layout, false));
}
preference = screen.findPreference(getString(R.string.p_showNotes));
@ -354,21 +344,10 @@ public class EditPreferences extends TodorooPreferenceActivity {
} else if (booleanPreference(preference, value, R.string.p_end_at_deadline,
R.string.EPr_cal_end_at_due_time, R.string.EPr_cal_start_at_due_time)) {
;
} else if (r.getString(R.string.p_swipe_lists_enabled).equals(preference.getKey())) {
preference.setOnPreferenceChangeListener(new SetResultOnPreferenceChangeListener(RESULT_CODE_PERFORMANCE_PREF_CHANGED) {
@Override
public boolean onPreferenceChange(Preference p, Object newValue) {
// If the user changes the setting themselves, no need to show the helper
Preferences.setBoolean(TaskListFragmentPager.PREF_SHOWED_SWIPE_HELPER, true);
return super.onPreferenceChange(p, newValue);
}
});
} else if (r.getString(R.string.p_force_phone_layout).equals(preference.getKey())) {
preference.setOnPreferenceChangeListener(new SetResultOnPreferenceChangeListener(RESULT_CODE_PERFORMANCE_PREF_CHANGED) {
@Override
public boolean onPreferenceChange(Preference p, Object newValue) {
Preference swipe = findPreference(getString(R.string.p_swipe_lists_enabled));
swipe.setEnabled((Boolean) newValue);
return super.onPreferenceChange(p, newValue);
}
});

@ -14,17 +14,13 @@ import android.content.DialogInterface;
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.util.DisplayMetrics;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.AdapterView;
@ -41,19 +37,10 @@ import android.widget.Toast;
import com.actionbarsherlock.app.SherlockListFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
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.astrid.actfm.TagViewFragment;
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.FilterWithUpdate;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagsPlugin;
import com.todoroo.astrid.utility.AstridPreferences;
import org.tasks.R;
@ -85,16 +72,12 @@ public class FilterListFragment extends SherlockListFragment {
// --- instance variables
@Autowired ExceptionService exceptionService;
protected FilterAdapter adapter = null;
private final RefreshReceiver refreshReceiver = new RefreshReceiver();
private OnFilterItemClickedListener mListener;
private View newListButton;
/* ======================================================================
* ======================================================= initialization
* ====================================================================== */
@ -106,10 +89,6 @@ public class FilterListFragment extends SherlockListFragment {
public boolean onFilterItemClicked(FilterListItem item);
}
public FilterListFragment() {
DependencyInjectionService.getInstance().inject(this);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@ -123,7 +102,7 @@ public class FilterListFragment extends SherlockListFragment {
}
}
protected FilterAdapter instantiateAdapter() {
private FilterAdapter instantiateAdapter() {
return new FilterAdapter(getActivity(), null,
R.layout.filter_adapter_row, false);
}
@ -141,12 +120,7 @@ public class FilterListFragment extends SherlockListFragment {
}
protected int getLayout(Activity activity) {
if (AstridPreferences.useTabletLayout(activity)) {
adapter.filterStyle = R.style.TextAppearance_FLA_Filter_Tablet;
return R.layout.filter_list_activity_3pane;
} else {
return R.layout.filter_list_activity;
}
return R.layout.filter_list_activity;
}
@Override
@ -156,21 +130,7 @@ public class FilterListFragment extends SherlockListFragment {
setHasOptionsMenu(true);
getActivity().setDefaultKeyMode(Activity.DEFAULT_KEYS_SEARCH_LOCAL);
//ImageView backButton = (ImageView) getView().findViewById(R.id.back);
newListButton = getView().findViewById(R.id.new_list_button);
if (newListButton != null) {
newListButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = TagsPlugin.newTagDialog(getActivity());
getActivity().startActivityForResult(intent, REQUEST_NEW_LIST);
if (!AstridPreferences.useTabletLayout(getActivity())) {
AndroidUtilities.callOverridePendingTransition(getActivity(), R.anim.slide_left_in, R.anim.slide_left_out);
}
}
});
}
setUpList();
}
@ -310,16 +270,7 @@ public class FilterListFragment extends SherlockListFragment {
return;
}
String defaultImageId = filter.listingTitle;
if (filter instanceof FilterWithUpdate) {
FilterWithUpdate fwu = (FilterWithUpdate) filter;
Bundle customExtras = fwu.customExtras;
if (customExtras != null && customExtras.containsKey(TagViewFragment.EXTRA_TAG_UUID)) {
defaultImageId = customExtras.getString(TagViewFragment.EXTRA_TAG_UUID);
}
}
Bitmap bitmap = superImposeListIcon(activity, filter.listingIcon, defaultImageId);
Bitmap bitmap = superImposeListIcon(activity);
Intent createShortcutIntent = new Intent();
createShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
@ -332,25 +283,8 @@ public class FilterListFragment extends SherlockListFragment {
activity.getString(R.string.FLA_toast_onCreateShortcut, label), Toast.LENGTH_LONG).show();
}
public static Bitmap superImposeListIcon(Activity activity, Bitmap listingIcon, String uuid) {
Bitmap emblem = listingIcon;
if(emblem == null) {
emblem = ((BitmapDrawable) activity.getResources().getDrawable(
TagService.getDefaultImageIDForTag(uuid))).getBitmap();
}
// create icon by superimposing astrid w/ icon
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
Bitmap bitmap = ((BitmapDrawable) activity.getResources().getDrawable(
R.drawable.icon)).getBitmap();
bitmap = bitmap.copy(bitmap.getConfig(), true);
Canvas canvas = new Canvas(bitmap);
int dimension = 22;
canvas.drawBitmap(emblem, new Rect(0, 0, emblem.getWidth(), emblem.getHeight()),
new Rect(bitmap.getWidth() - dimension, bitmap.getHeight() - dimension,
bitmap.getWidth(), bitmap.getHeight()), null);
return bitmap;
public static Bitmap superImposeListIcon(Activity activity) {
return ((BitmapDrawable)activity.getResources().getDrawable(R.drawable.icon)).getBitmap();
}
@Override

@ -3,15 +3,11 @@ package com.todoroo.astrid.activity;
import android.content.Context;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
public interface FilterModeSpec {
public int[] getForbiddenMenuItems();
public Class<? extends FilterListFragment> getFilterListClass();
public Filter getDefaultFilter(Context context);
public int getMainMenuIconAttr();
public boolean showComments();
}

@ -13,12 +13,13 @@ import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import org.tasks.R;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.service.ThemeService;
import org.tasks.R;
public class FilterShortcutActivity extends ListActivity {
private FilterAdapter adapter = null;
@ -55,8 +56,7 @@ public class FilterShortcutActivity extends ListActivity {
Intent shortcutIntent = ShortcutActivity.createIntent(
(Filter) filter);
Bitmap bitmap = FilterListFragment.superImposeListIcon(FilterShortcutActivity.this,
filter.listingIcon, filter.listingTitle);
Bitmap bitmap = FilterListFragment.superImposeListIcon(FilterShortcutActivity.this);
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, filter.title);

@ -12,7 +12,6 @@ import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.service.ThemeService;
import org.tasks.R;
@ -25,14 +24,10 @@ public class TaskEditActivity extends AstridActivity {
protected void onCreate(Bundle savedInstanceState) {
ThemeService.applyTheme(this);
ActionBar actionBar = getSupportActionBar();
if (Preferences.getBoolean(R.string.p_save_and_cancel, false)) {
if(ThemeService.getTheme() == R.style.Theme) {
actionBar.setLogo(R.drawable.ic_action_save_light);
} else {
actionBar.setLogo(R.drawable.ic_action_save);
}
if(ThemeService.getTheme() == R.style.Theme) {
actionBar.setLogo(R.drawable.ic_action_save_light);
} else {
actionBar.setLogo(null);
actionBar.setLogo(R.drawable.ic_action_save);
}
super.onCreate(savedInstanceState);

@ -54,7 +54,6 @@ import com.todoroo.astrid.actfm.CommentsActivity;
import com.todoroo.astrid.actfm.TaskCommentsFragment;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskOutstandingDao;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.TaskAttachment;
@ -188,9 +187,6 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener {
@Autowired
private TaskAttachmentDao taskAttachmentDao;
@Autowired
private UserDao userDao;
// --- UI components
private ImageButton voiceAddNoteButton;

@ -7,8 +7,8 @@ package com.todoroo.astrid.activity;
import android.animation.LayoutTransition;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@ -16,49 +16,44 @@ import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.actfm.CommentsFragment;
import com.todoroo.astrid.actfm.TagSettingsActivity;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.adapter.TaskListFragmentPagerAdapter;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksListFragment;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagsPlugin;
import com.todoroo.astrid.tags.reusable.FeaturedListFilterMode;
import com.todoroo.astrid.ui.DateChangedAlerts;
import com.todoroo.astrid.ui.FragmentPopover;
import com.todoroo.astrid.ui.MainMenuPopover;
import com.todoroo.astrid.ui.MainMenuPopover.MainMenuListener;
import com.todoroo.astrid.ui.QuickAddBar;
import com.todoroo.astrid.ui.TaskListFragmentPager;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Flags;
import net.simonvt.menudrawer.MenuDrawer;
import org.tasks.R;
public class TaskListActivity extends AstridActivity implements MainMenuListener, OnPageChangeListener {
public class TaskListActivity extends AstridActivity implements OnPageChangeListener {
MenuDrawer menuDrawer;
/** token for indicating source of TLA launch */
public static final String TOKEN_SOURCE = "source"; //$NON-NLS-1$
@ -75,41 +70,10 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
private static final String FILTER_MODE = "filterMode"; //$NON-NLS-1$
public static final int FILTER_MODE_NORMAL = 0;
public static final int FILTER_MODE_FEATURED = 2;
private View listsNav;
private ImageView listsNavDisclosure;
private TextView lists;
private ImageView mainMenu;
private int filterMode;
private FilterModeSpec filterModeSpec;
private TaskListFragmentPager tlfPager;
private TaskListFragmentPagerAdapter tlfPagerAdapter;
private FragmentPopover listsPopover;
private MainMenuPopover mainMenuPopover;
private boolean swipeEnabled = false;
private final OnClickListener mainMenuClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
mainMenu.setSelected(true);
mainMenuPopover.show(v);
hideKeyboard();
}
};
private final OnClickListener popupMenuClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
setListsDropdownSelected(true);
listsPopover.show(v);
hideKeyboard();
}
};
/**
* @see android.app.Activity#onCreate(Bundle)
*/
@ -119,24 +83,29 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
super.onCreate(savedInstanceState);
int contentView = getContentView();
if (contentView == R.layout.task_list_wrapper_activity) {
swipeEnabled = true;
}
setContentView(contentView);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(getHeaderView());
actionBar.setDisplayUseLogoEnabled(true);
actionBar.setLogo(null);
listsNav = actionBar.getCustomView().findViewById(R.id.lists_nav);
listsNavDisclosure = (ImageView) actionBar.getCustomView().findViewById(R.id.list_disclosure_arrow);
lists = (TextView) actionBar.getCustomView().findViewById(R.id.list_title);
mainMenu = (ImageView) actionBar.getCustomView().findViewById(R.id.main_menu);
if(AndroidUtilities.isTabletSized(this)) {
menuDrawer = MenuDrawer.attach(this, MenuDrawer.Type.STATIC);
menuDrawer.setDropShadowEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
} else {
menuDrawer = MenuDrawer.attach(this, MenuDrawer.Type.OVERLAY);
menuDrawer.setDrawerIndicatorEnabled(true);
}
menuDrawer.setContentView(contentView);
// cannot use full screen until next menudrawer release
// menuDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_FULLSCREEN);
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(R.attr.ic_drawer, typedValue, true);
menuDrawer.setSlideDrawable(typedValue.resourceId);
menuDrawer.setHardwareLayerEnabled(true);
initializeFragments(actionBar);
createMainMenuPopover();
mainMenu.setOnClickListener(mainMenuClickListener);
initializeFragments();
Bundle extras = getIntent().getExtras();
if (extras != null) {
@ -165,10 +134,6 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
extras.putParcelable(TaskListFragment.TOKEN_FILTER, savedFilter);
if (swipeIsEnabled()) {
setupPagerAdapter();
}
setupTasklistFragmentWithFilter(savedFilter, extras);
if (savedFilter != null) {
@ -180,29 +145,44 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
}
}
private void setupPagerAdapter() {
FilterListFragment flf = getFilterListFragment();
if (flf == null) {
throw new RuntimeException("Filterlist fragment was null, needs to exist to construct the fragment pager"); //$NON-NLS-1$
}
FilterAdapter adapter = flf.adapter;
tlfPager = (TaskListFragmentPager) findViewById(R.id.pager);
tlfPagerAdapter = new TaskListFragmentPagerAdapter(getSupportFragmentManager(), adapter);
tlfPager.setAdapter(tlfPagerAdapter);
tlfPager.setOnPageChangeListener(this);
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
menuDrawer.closeMenu();
return super.onMenuItemSelected(featureId, item);
}
private int getHeaderView() {
return R.layout.header_nav_views;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.task_list_activity, menu);
TaskListFragment tlf = getTaskListFragment();
if(tlf instanceof TagViewFragment) {
menu.findItem(R.id.menu_delete_list).setVisible(true);
menu.findItem(R.id.menu_rename_list).setVisible(true);
} else if(tlf instanceof GtasksListFragment) {
menu.findItem(R.id.menu_sync).setTitle(R.string.actfm_TVA_menu_refresh);
menu.findItem(R.id.menu_clear_completed).setVisible(true);
menu.findItem(R.id.menu_sort).setVisible(false);
}
if(!Preferences.getBoolean(R.string.p_show_menu_search, true)) {
menu.findItem(R.id.menu_search).setVisible(false);
}
if(!Preferences.getBoolean(R.string.p_show_menu_sort, true)) {
menu.findItem(R.id.menu_sort).setVisible(false);
}
if(!Preferences.getBoolean(R.string.p_show_menu_sync, true)) {
menu.findItem(R.id.menu_sync).setVisible(false);
}
if(Preferences.getBoolean(R.string.p_use_filters, false)) {
menu.findItem(R.id.menu_new_filter).setVisible(true);
}
return true;
}
protected int getContentView() {
if (AstridPreferences.useTabletLayout(this)) {
return R.layout.task_list_wrapper_activity_3pane;
} else if (!Preferences.getBoolean(R.string.p_swipe_lists_enabled, false)) {
return R.layout.task_list_wrapper_activity_no_swipe;
} else {
return R.layout.task_list_wrapper_activity;
return R.layout.task_list_wrapper_activity_no_swipe;
}
}
@ -210,29 +190,6 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
return filterModeSpec.getDefaultFilter(this);
}
private boolean swipeIsEnabled() {
return fragmentLayout == LAYOUT_SINGLE && swipeEnabled;
}
@Override
public TaskListFragment getTaskListFragment() {
if (swipeIsEnabled()) {
return tlfPager.getCurrentFragment();
} else {
return super.getTaskListFragment();
}
}
@Override
public void setupTasklistFragmentWithFilterAndCustomTaskList(Filter filter, Bundle extras, Class<?> customTaskList) {
if (swipeIsEnabled()) {
tlfPager.showFilter(filter);
tlfPager.forceReload(); // Hack to force reload of current page
} else {
super.setupTasklistFragmentWithFilterAndCustomTaskList(filter, extras, customTaskList);
}
}
@Override
protected Bundle configureIntentAndExtrasWithFilter(Intent intent,
Filter filter) {
@ -241,18 +198,13 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
return extras;
}
protected void initializeFragments(ActionBar actionBar) {
View filterFragment = findViewById(R.id.filterlist_fragment_container);
protected void initializeFragments() {
View editFragment = findViewById(R.id.taskedit_fragment_container);
filterMode = getIntent().getIntExtra(FILTER_MODE, FILTER_MODE_NORMAL);
updateFilterModeSpec(filterMode);
if (filterFragment != null) {
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.getCustomView().findViewById(R.id.list_disclosure_arrow).setVisibility(View.GONE);
listsNav.setOnClickListener(null);
if(editFragment != null && editFragment.getVisibility() == View.INVISIBLE) {
if(editFragment != null) {
if(editFragment.getVisibility() == View.INVISIBLE) {
fragmentLayout = LAYOUT_TRIPLE;
} else {
fragmentLayout = LAYOUT_DOUBLE;
@ -260,17 +212,12 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
setupLayoutTransitions();
}
}
setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT,
R.id.filterlist_fragment_container, filterModeSpec.getFilterListClass(), false, false);
} else {
fragmentLayout = LAYOUT_SINGLE;
actionBar.setDisplayHomeAsUpEnabled(true);
listsNav.setOnClickListener(popupMenuClickListener);
createListsPopover();
setupPopoverWithFilterList((FilterListFragment) setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, 0,
filterModeSpec.getFilterListClass(), true, false));
}
setupPopoverWithFilterList((FilterListFragment) setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, 0,
filterModeSpec.getFilterListClass(), true, false));
}
private void setupLayoutTransitions() {
@ -279,110 +226,45 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
container.setLayoutTransition(transition);
}
private void createListsPopover() {
listsPopover = new FragmentPopover(this, R.layout.list_dropdown_popover);
listsPopover.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
setListsDropdownSelected(false);
}
});
}
private void createMainMenuPopover() {
int layout;
boolean isTabletLayout = AstridPreferences.useTabletLayout(this);
if (isTabletLayout) {
layout = R.layout.main_menu_popover_tablet;
} else if (AndroidUtilities.isTabletSized(this)) {
layout = R.layout.main_menu_popover_tablet_phone_layout;
} else {
layout = R.layout.main_menu_popover;
}
mainMenuPopover = new MainMenuPopover(this, layout, (fragmentLayout != LAYOUT_SINGLE), this);
mainMenuPopover.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
mainMenu.setSelected(false);
}
});
if (isTabletLayout) {
mainMenuPopover.refreshFixedItems();
}
}
private void setupPopoverWithFragment(FragmentPopover popover, Fragment frag, LayoutParams params) {
if (popover != null) {
View view = frag.getView();
if (view != null) {
FrameLayout parent = (FrameLayout) view.getParent();
if (parent != null) {
parent.removeView(view);
}
if (params == null) {
popover.setContent(view);
} else {
popover.setContent(view, params);
}
private void setupPopoverWithFragment(Fragment frag) {
View view = frag.getView();
if (view != null) {
FrameLayout parent = (FrameLayout) view.getParent();
if (parent != null) {
parent.removeView(view);
}
menuDrawer.setMenuView(view);
}
}
public void setupPopoverWithFilterList(FilterListFragment fla) {
setupPopoverWithFragment(listsPopover, fla, null);
setupPopoverWithFragment(fla);
}
@Override
public boolean onFilterItemClicked(FilterListItem item) {
if (listsPopover != null) {
listsPopover.dismiss();
}
if (swipeIsEnabled()) {
TaskListFragmentPager.showSwipeBetweenHelper(this);
tlfPager.showFilter((Filter) item);
return true;
}
TaskEditFragment.removeExtrasFromIntent(getIntent());
TaskEditFragment tef = getTaskEditFragment();
if (tef != null) {
onBackPressed();
}
menuDrawer.closeMenu();
boolean result = super.onFilterItemClicked(item);
return result;
return super.onFilterItemClicked(item);
}
@Override
public void setupActivityFragment(TagData tagData) {
super.setupActivityFragment(tagData);
int visibility = (filterModeSpec.showComments() ? View.VISIBLE : View.GONE);
if (fragmentLayout != LAYOUT_TRIPLE) {
} else {
if (fragmentLayout == LAYOUT_TRIPLE) {
View container = findViewById(R.id.taskedit_fragment_container);
if (container != null) {
container.setVisibility(visibility);
container.setVisibility(View.VISIBLE);
}
}
}
private void setListsDropdownSelected(boolean selected) {
int oldTextColor = lists.getTextColors().getDefaultColor();
int textStyle = (selected ? R.style.TextAppearance_ActionBar_ListsHeader_Selected :
R.style.TextAppearance_ActionBar_ListsHeader);
TypedValue listDisclosure = new TypedValue();
getTheme().resolveAttribute(R.attr.asListsDisclosure, listDisclosure, false);
lists.setTextAppearance(this, textStyle);
listsNav.setBackgroundColor(selected ? oldTextColor : android.R.color.transparent);
listsNavDisclosure.setSelected(selected);
}
@Override
protected void onPostResume() {
super.onPostResume();
@ -447,40 +329,15 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
}
public void setListsTitle(String title) {
lists.setText(title);
}
@Override
protected void onPause() {
super.onPause();
AndroidUtilities.tryDismissPopup(this, listsPopover);
AndroidUtilities.tryDismissPopup(this, mainMenuPopover);
}
@Override
protected void onStop() {
super.onStop();
getSupportActionBar().setTitle(title);
}
public void setSelectedItem(Filter item) {
lists.setText(item.title);
getSupportActionBar().setTitle(item.title);
}
@Override
public void onPageSelected(int position) {
if (tlfPagerAdapter != null) {
configureIntentAndExtrasWithFilter(getIntent(), tlfPagerAdapter.getFilter(position));
setListsTitle(tlfPagerAdapter.getPageTitle(position).toString());
TaskListFragment fragment = getTaskListFragment();
if (fragment != null) {
fragment.initiateAutomaticSync();
fragment.requestCommentCountUpdate();
}
if (position != 0) {
Preferences.setBoolean(TaskListFragmentPager.PREF_SHOWED_SWIPE_HELPER, true);
}
}
}
@Override
@ -490,16 +347,19 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
@Override
public void onPageScrollStateChanged(int state) { /* Nothing */ }
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menuDrawer.closeMenu();
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onBackPressed() {
// manage task edit visibility
View taskeditFragmentContainer = findViewById(R.id.taskedit_fragment_container);
if(taskeditFragmentContainer != null && taskeditFragmentContainer.getVisibility() == View.VISIBLE) {
if(fragmentLayout == LAYOUT_DOUBLE) {
boolean commentsVisible = false;
if (!commentsVisible) {
findViewById(R.id.taskedit_fragment_container).setVisibility(View.GONE);
}
findViewById(R.id.taskedit_fragment_container).setVisibility(View.GONE);
}
Flags.set(Flags.TLA_DISMISSED_FROM_TASK_EDIT);
onPostResume();
@ -509,6 +369,11 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
tuf.getView().setVisibility(View.VISIBLE);
}
}
int drawerState = menuDrawer.getDrawerState();
if(drawerState == MenuDrawer.STATE_OPEN || drawerState == MenuDrawer.STATE_OPENING) {
menuDrawer.closeMenu();
return;
}
super.onBackPressed();
}
@ -531,7 +396,7 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
if (newList != null) {
getIntent().putExtra(TOKEN_SWITCH_TO_FILTER, newList); // Handle in onPostResume()
FilterListFragment fla = getFilterListFragment();
if (fla != null && !swipeIsEnabled()) {
if (fla != null) {
fla.clear();
}
}
@ -667,107 +532,70 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
}
@Override
public boolean shouldAddMenuItem(int itemId) {
return AndroidUtilities.indexOf(filterModeSpec.getForbiddenMenuItems(), itemId) < 0;
}
@Override
public void mainMenuItemSelected(int item, Intent customIntent) {
public boolean onOptionsItemSelected(MenuItem item) {
TaskListFragment tlf = getTaskListFragment();
switch (item) {
case MainMenuPopover.MAIN_MENU_ITEM_LISTS:
if (filterMode == FILTER_MODE_NORMAL) {
listsNav.performClick();
} else {
setFilterMode(FILTER_MODE_NORMAL);
}
return;
case MainMenuPopover.MAIN_MENU_ITEM_SEARCH:
onSearchRequested();
return;
case MainMenuPopover.MAIN_MENU_ITEM_FEATURED_LISTS:
setFilterMode(FILTER_MODE_FEATURED);
return;
case MainMenuPopover.MAIN_MENU_ITEM_SETTINGS:
if (tlf != null) {
switch(item.getItemId()) {
case android.R.id.home:
if(menuDrawer.getDrawerState() != MenuDrawer.STATE_CLOSED) {
menuDrawer.closeMenu();
} else {
menuDrawer.openMenu();
}
return true;
case R.id.menu_settings:
tlf.showSettings();
}
return;
}
tlf.handleOptionsMenuItemSelected(item, customIntent);
}
public void setFilterMode(int mode) {
filterMode = mode;
updateFilterModeSpec(mode);
getIntent().putExtra(FILTER_MODE, mode);
refreshMainMenu();
if (fragmentLayout == LAYOUT_SINGLE) {
createListsPopover();
setupPopoverWithFilterList((FilterListFragment) setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, 0,
filterModeSpec.getFilterListClass(), true, true));
if (swipeIsEnabled()) {
setupPagerAdapter();
}
} else {
setupFragment(FilterListFragment.TAG_FILTERLIST_FRAGMENT, R.id.filterlist_fragment_container,
filterModeSpec.getFilterListClass(), false, true);
}
onFilterItemClicked(getDefaultFilter());
if (swipeIsEnabled()) {
setListsTitle(tlfPagerAdapter.getPageTitle(0).toString());
}
if (fragmentLayout == LAYOUT_SINGLE) {
listsNav.performClick();
return true;
case R.id.menu_search:
onSearchRequested();
return true;
case R.id.menu_sort:
AlertDialog dialog = SortSelectionActivity.createDialog(
this, tlf.hasDraggableOption(), tlf, tlf.getSortFlags(), tlf.getSort());
dialog.show();
return true;
case R.id.menu_sync:
tlf.syncActionHelper.performSyncAction();
return true;
case R.id.menu_new_filter:
Intent intent = new Intent(this, CustomFilterActivity.class);
startActivityForResult(intent, TaskListFragment.ACTIVITY_REQUEST_NEW_FILTER);
return true;
case R.id.menu_new_list:
startActivityForResult(TagsPlugin.newTagDialog(this), FilterListFragment.REQUEST_NEW_LIST);
if (!AstridPreferences.useTabletLayout(this)) {
AndroidUtilities.callOverridePendingTransition(this, R.anim.slide_left_in, R.anim.slide_left_out);
}
return true;
case R.id.menu_delete_list:
TagService.Tag deleteTag = new TagService.Tag(tlf.getActiveTagData());
Intent ret = new Intent(this, TagFilterExposer.DeleteTagActivity.class);
ret.putExtra("tag", deleteTag.tag);
ret.putExtra(TagViewFragment.EXTRA_TAG_UUID, deleteTag.uuid);
startActivityForResult(ret, FilterListFragment.REQUEST_CUSTOM_INTENT);
return true;
case R.id.menu_rename_list:
TagService.Tag renameTag = new TagService.Tag(tlf.getActiveTagData());
Intent rename = new Intent(this, TagFilterExposer.RenameTagActivity.class);
rename.putExtra("tag", renameTag.tag);
rename.putExtra(TagViewFragment.EXTRA_TAG_UUID, renameTag.uuid);
startActivityForResult(rename, FilterListFragment.REQUEST_CUSTOM_INTENT);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void refreshMainMenu() {
mainMenuPopover.refreshFixedItems();
TypedValue tv = new TypedValue();
getTheme().resolveAttribute(filterModeSpec.getMainMenuIconAttr(), tv, false);
mainMenu.setImageResource(tv.data);
}
private void updateFilterModeSpec(int mode) {
switch(mode) {
case FILTER_MODE_FEATURED:
filterModeSpec = new FeaturedListFilterMode();
break;
case FILTER_MODE_NORMAL:
default:
filterModeSpec = new DefaultFilterMode();
}
}
public MainMenuPopover getMainMenuPopover() {
return mainMenuPopover;
}
private void hideKeyboard() {
TaskListFragment tlf = getTaskListFragment();
if (tlf == null) {
return;
}
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
QuickAddBar qab = tlf.quickAddBar;
if (qab != null) {
imm.hideSoftInputFromWindow(qab.getQuickAddBox().getWindowToken(), 0);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
mainMenuPopover.suppressNextKeyEvent();
mainMenu.performClick();
return true;
} else if (keyCode == KeyEvent.KEYCODE_BACK) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
TaskEditFragment tef = getTaskEditFragment();
if (tef != null && tef.onKeyDown(keyCode)) {
return true;

@ -34,7 +34,6 @@ import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
@ -69,9 +68,7 @@ import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.TaskContextActionExposer;
import com.todoroo.astrid.api.TaskDecoration;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.core.CustomFilterActivity;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
@ -84,12 +81,8 @@ import com.todoroo.astrid.helper.SyncActionHelper;
import com.todoroo.astrid.helper.TaskListContextMenuExtensionLoader;
import com.todoroo.astrid.helper.TaskListContextMenuExtensionLoader.ContextMenuItem;
import com.todoroo.astrid.reminders.ReminderDebugContextActions;
import com.todoroo.astrid.service.AddOnService;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.service.UpgradeService;
import com.todoroo.astrid.subtasks.SubtasksHelper;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
@ -138,11 +131,7 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
// --- menu codes
protected static final int MENU_SETTINGS_ID = R.string.TLA_menu_settings;
public static final int MENU_SORT_ID = R.string.TLA_menu_sort;
protected static final int MENU_SYNC_ID = R.string.TLA_menu_sync;
protected static final int MENU_SUPPORT_ID = R.string.TLA_menu_support;
public static final int MENU_NEW_FILTER_ID = R.string.FLA_new_filter;
protected static final int MENU_ADDON_INTENT_ID = Menu.FIRST + 199;
protected static final int CONTEXT_MENU_EDIT_TASK_ID = R.string.TAd_contextEditTask;
@ -168,16 +157,8 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
@Autowired
protected TaskService taskService;
@Autowired MetadataService metadataService;
@Autowired Database database;
@Autowired AddOnService addOnService;
@Autowired UpgradeService upgradeService;
@Autowired TagDataService tagDataService;
@Autowired TaskListMetadataDao taskListMetadataDao;
private final TaskContextActionExposer[] contextItemExposers = new TaskContextActionExposer[] {
@ -445,29 +426,9 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
// Hook
}
protected void addSyncRefreshMenuItem(Menu menu, int themeFlags) {
addMenuItem(menu, R.string.TLA_menu_sync,
ThemeService.getDrawable(R.drawable.icn_menu_refresh, themeFlags), MENU_SYNC_ID, true);
}
protected void addMenuItem(Menu menu, int title, int imageRes, int id, boolean showAsAction) {
AstridActivity activity = (AstridActivity) getActivity();
if ((activity.getFragmentLayout() != AstridActivity.LAYOUT_SINGLE && showAsAction) || !(activity instanceof TaskListActivity)) {
MenuItem item = menu.add(Menu.NONE, id, Menu.NONE, title);
item.setIcon(imageRes);
if (activity instanceof TaskListActivity) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
} else {
((TaskListActivity) activity).getMainMenuPopover().addMenuItem(title, imageRes, id);
}
}
protected void addMenuItem(Menu menu, CharSequence title, Drawable image, Intent customIntent, int id) {
Activity activity = getActivity();
if (activity instanceof TaskListActivity) {
((TaskListActivity) activity).getMainMenuPopover().addMenuItem(title, image, customIntent, id);
} else {
if(!(activity instanceof TaskListActivity)) {
MenuItem item = menu.add(Menu.NONE, id, Menu.NONE, title);
item.setIcon(image);
item.setIntent(customIntent);
@ -491,29 +452,6 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
}
protected void addMenuItems(Menu menu, Activity activity) {
boolean isTablet = AstridPreferences.useTabletLayout(activity);
TaskListActivity tla = null;
if (activity instanceof TaskListActivity) {
tla = (TaskListActivity) activity;
tla.getMainMenuPopover().clear();
}
// --- sync
if (tla == null || tla.getTaskEditFragment() == null && Preferences.getBoolean(R.string.p_show_menu_sync, true)) {
addSyncRefreshMenuItem(menu, isTablet ? ThemeService.FLAG_INVERT : 0);
}
// --- sort
if (allowResorting() && Preferences.getBoolean(R.string.p_show_menu_sort, true)) {
addMenuItem(menu, R.string.TLA_menu_sort,
ThemeService.getDrawable(R.drawable.icn_menu_sort_by_size, isTablet ? ThemeService.FLAG_FORCE_DARK: 0), MENU_SORT_ID, false);
}
// --- new filter
if (Preferences.getBoolean(R.string.p_use_filters, true)) {
addMenuItem(menu, R.string.FLA_new_filter,
ThemeService.getDrawable(R.drawable.icn_menu_filters, isTablet ? ThemeService.FLAG_FORCE_DARK : 0), MENU_NEW_FILTER_ID, false);
}
// ask about plug-ins
Intent queryIntent = new Intent(
AstridApiConstants.ACTION_TASK_LIST_MENU);
@ -531,10 +469,6 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
}
}
protected boolean allowResorting() {
return true;
}
protected void setUpUiComponents() {
// set listener for quick-changing task priority
getListView().setOnKeyListener(new OnKeyListener() {
@ -799,9 +733,6 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
@Override
public void run() {
refresh();
if (activity instanceof TaskListActivity) {
((TaskListActivity) activity).refreshMainMenu();
}
}
});
}
@ -1208,28 +1139,12 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
Activity activity = getActivity();
switch(id) {
case MENU_SORT_ID:
if (activity != null) {
AlertDialog dialog = SortSelectionActivity.createDialog(
getActivity(), hasDraggableOption(), this, sortFlags, sortSort);
dialog.show();
}
return true;
case MENU_SYNC_ID:
syncActionHelper.performSyncAction();
return true;
case MENU_ADDON_INTENT_ID:
if (activity != null) {
AndroidUtilities.startExternalIntent(activity, intent,
ACTIVITY_MENU_EXTERNAL);
}
return true;
case MENU_NEW_FILTER_ID:
if (activity != null) {
intent = new Intent(activity, CustomFilterActivity.class);
activity.startActivityForResult(intent, ACTIVITY_REQUEST_NEW_FILTER);
return true;
}
}
return false;
}
@ -1353,6 +1268,14 @@ public class TaskListFragment extends SherlockListFragment implements OnSortSele
return isInbox || isTodayFilter;
}
public int getSortFlags() {
return sortFlags;
}
public int getSort() {
return sortSort;
}
@Override
public void onSortSelected(boolean always, int flags, int sort) {
boolean manualSettingChanged = SortHelper.isManualSort(sortFlags) !=

@ -5,14 +5,6 @@
*/
package com.todoroo.astrid.adapter;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
@ -40,11 +32,9 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.tasks.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.TaskListFragment;
@ -57,13 +47,19 @@ import com.todoroo.astrid.api.FilterListHeader;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.FilterWithUpdate;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.service.MarketStrategy.NookMarketStrategy;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.ResourceDrawableCache;
import org.tasks.R;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FilterAdapter extends ArrayAdapter<Filter> {
@ -147,10 +143,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
this.nook = (Constants.MARKET_STRATEGY instanceof NookMarketStrategy);
if (activity instanceof AstridActivity && ((AstridActivity) activity).getFragmentLayout() != AstridActivity.LAYOUT_SINGLE) {
filterStyle = R.style.TextAppearance_FLA_Filter_Tablet;
}
inflater = (LayoutInflater) activity.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
@ -283,8 +275,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
convertView = inflater.inflate(layout, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.view = convertView;
viewHolder.icon = (ImageView)convertView.findViewById(R.id.icon);
viewHolder.urlImage = (AsyncImageView)convertView.findViewById(R.id.url_image);
viewHolder.name = (TextView)convertView.findViewById(R.id.name);
viewHolder.selected = (ImageView)convertView.findViewById(R.id.selected);
viewHolder.size = (TextView)convertView.findViewById(R.id.size);
@ -296,8 +286,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
public static class ViewHolder {
public FilterListItem item;
public ImageView icon;
public AsyncImageView urlImage;
public TextView name;
public TextView size;
public ImageView selected;
@ -324,7 +312,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
}
if (selected != null && selected.equals(viewHolder.item)) {
convertView.setBackgroundColor(activity.getResources().getColor(R.color.tablet_list_selected));
// convertView.setBackgroundColor(activity.getResources().getColor(R.color.tablet_list_selected));
} else {
convertView.setBackgroundColor(activity.getResources().getColor(android.R.color.transparent));
}
@ -501,16 +489,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
viewHolder.name.setShadowLayer(0, 0, 0, 0);
}
// update with filter attributes (listing icon, url, update text, size)
viewHolder.urlImage.setVisibility(View.GONE);
viewHolder.icon.setVisibility(View.GONE);
if(!nook && filter.listingIcon != null) {
viewHolder.icon.setVisibility(View.VISIBLE);
viewHolder.icon.setImageBitmap(filter.listingIcon);
}
// title / size
int countInt = -1;
if(filterCounts.containsKey(filter) || (!TextUtils.isEmpty(filter.listingTitle) && filter.listingTitle.matches(".* \\(\\d+\\)$"))) { //$NON-NLS-1$
@ -550,20 +528,6 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
}
viewHolder.name.getLayoutParams().height = (int) (58 * metrics.density);
if(!nook && filter instanceof FilterWithUpdate) {
String defaultImageId = RemoteModel.NO_UUID;
FilterWithUpdate fwu = (FilterWithUpdate) filter;
Bundle customExtras = fwu.customExtras;
if (customExtras != null && customExtras.containsKey(TagViewFragment.EXTRA_TAG_UUID)) {
defaultImageId = customExtras.getString(TagViewFragment.EXTRA_TAG_UUID);
} else {
defaultImageId = viewHolder.name.getText().toString();
}
viewHolder.urlImage.setVisibility(View.VISIBLE);
viewHolder.urlImage.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, TagService.getDefaultImageIDForTag(defaultImageId)));
viewHolder.urlImage.setUrl(((FilterWithUpdate)filter).imageUrl);
}
if (nook) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewHolder.name.getLayoutParams();

@ -1,123 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.adapter;
import java.util.HashMap;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.FilterAdapter.FilterDataSourceChangedListener;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.subtasks.SubtasksHelper;
public class TaskListFragmentPagerAdapter extends FragmentStatePagerAdapter implements FilterDataSourceChangedListener {
private final HashMap<Integer, Fragment> positionToFragment;
private final FilterAdapter filterAdapter; // Shares an adapter instance with the filter list fragment
public TaskListFragmentPagerAdapter(FragmentManager fm, FilterAdapter filterAdapter) {
super(fm);
this.filterAdapter = filterAdapter;
filterAdapter.setDataSourceChangedListener(this);
positionToFragment = new HashMap<Integer, Fragment>();
}
@Override
public void filterDataSourceChanged() {
notifyDataSetChanged();
}
/**
* Instantiates and returns a fragment for the filter at the specified position.
* Also maps the position to the fragment in a cache for later lookup
*/
@Override
public Fragment getItem(int position) {
Filter filter = filterAdapter.getItem(position);
Fragment fragment = getFragmentForFilter(filter);
positionToFragment.put(position, fragment);
return fragment;
}
/**
* Lookup the fragment for the specified position
*/
public Fragment lookupFragmentForPosition(int position) {
return positionToFragment.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return filterAdapter.getItem(position).title;
}
/**
* Adds the specified filter to the data source if it doesn't exist,
* returning the position of that filter regardless
*/
public int addOrLookup(Filter filter) {
return filterAdapter.addOrLookup(filter);
}
public int getPosition(Filter filter) {
return filterAdapter.getPosition(filter);
}
public void remove(Filter filter) {
filterAdapter.remove(filter);
}
/**
* Get the filter at the specified position
*/
public Filter getFilter(int position) {
return filterAdapter.getItem(position);
}
@Override
public int getCount() {
return filterAdapter.getCount();
}
private Fragment getFragmentForFilter(Filter filter) {
Bundle extras = getExtrasForFilter(filter);
Class<?> customList = null;
if (SubtasksHelper.shouldUseSubtasksFragmentForFilter(filter)) {
customList = SubtasksHelper.subtasksClassForFilter(filter);
}
return TaskListFragment.instantiateWithFilterAndExtras(filter, extras, customList);
}
// Constructs extras corresponding to the specified filter that can be used as arguments to the fragment
private Bundle getExtrasForFilter(Filter filter) {
Bundle extras = null;
if (filter instanceof FilterWithCustomIntent) {
extras = ((FilterWithCustomIntent) filter).customExtras;
}
if (extras == null) {
extras = new Bundle();
}
if (filter != null) {
extras.putParcelable(TaskListFragment.TOKEN_FILTER, filter);
}
return extras;
}
@Override
public Parcelable saveState() {
return null; // Don't save state
}
}

@ -5,8 +5,6 @@
*/
package com.todoroo.astrid.core;
import java.util.ArrayList;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
@ -16,11 +14,8 @@ import android.content.res.Resources;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import org.tasks.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
@ -37,10 +32,12 @@ import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.ThemeService;
import org.tasks.R;
import java.util.ArrayList;
/**
* Exposes Astrid's built in filters to the {@link FilterListFragment}
*
@ -52,9 +49,6 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
private static final String TOKEN_FILTER_ID = "id"; //$NON-NLS-1$
private static final String TOKEN_FILTER_NAME = "name"; //$NON-NLS-1$
@Autowired TagDataService tagDataService;
@Autowired GtasksPreferenceService gtasksPreferenceService;
@Override
public void onReceive(Context context, Intent intent) {
FilterListItem[] list = prepareFilters(context);
@ -66,7 +60,6 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
}
private FilterListItem[] prepareFilters(Context context) {
DependencyInjectionService.getInstance().inject(this);
Resources r = context.getResources();
Filter[] savedFilters = buildSavedFilters(context, r);
@ -158,7 +151,6 @@ public final class CustomFilterExposer extends BroadcastReceiver implements Astr
}
final String name = getIntent().getStringExtra(TOKEN_FILTER_NAME);
DependencyInjectionService.getInstance().inject(this);
DialogUtilities.okCancelDialog(this,
getString(R.string.DLG_delete_this_item_question, name),
new DialogInterface.OnClickListener() {

@ -16,7 +16,6 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.activity.EditPreferences;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.User;
@ -41,9 +40,6 @@ public class CalendarAlarmListCreator extends Activity {
@Autowired
private TagDataService tagDataService;
@Autowired
private TagMetadataDao tagMetadataDao;
private ArrayList<String> names;
private ArrayList<String> emails;
private HashMap<String, User> emailsToUsers;

@ -11,8 +11,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import com.actionbarsherlock.view.Menu;
import org.tasks.R;
import com.actionbarsherlock.view.MenuItem;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
@ -25,27 +24,22 @@ import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.ProgressBarSyncResultCallback;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.subtasks.OrderedListFragmentHelperInterface;
import com.todoroo.astrid.subtasks.OrderedMetadataListFragmentHelper;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends SubtasksListFragment {
import org.tasks.R;
protected static final int MENU_CLEAR_COMPLETED_ID = MENU_ADDON_INTENT_ID + 1;
public class GtasksListFragment extends SubtasksListFragment {
public static final String TOKEN_STORE_ID = "storeId"; //$NON-NLS-1$
protected static final int MENU_REFRESH_ID = MENU_SUPPORT_ID + 1;
@Autowired private StoreObjectDao storeObjectDao;
@Autowired private GtasksTaskListUpdater gtasksTaskListUpdater;
@Autowired private GtasksMetadataService gtasksMetadataService;
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private SyncV2Service syncService;
private StoreObject list;
@ -64,11 +58,6 @@ public class GtasksListFragment extends SubtasksListFragment {
return new OrderedMetadataListFragmentHelper<StoreObject>(this, gtasksTaskListUpdater);
}
@Override
protected boolean allowResorting() {
return false;
}
@Override
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
@ -111,24 +100,17 @@ public class GtasksListFragment extends SubtasksListFragment {
}
@Override
protected void addMenuItems(Menu menu, Activity activity) {
super.addMenuItems(menu, activity);
addMenuItem(menu, R.string.gtasks_GTA_clear_completed, android.R.drawable.ic_input_delete, MENU_CLEAR_COMPLETED_ID, false);
}
@Override
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
// handle my own menus
switch (id) {
case MENU_REFRESH_ID:
refreshData(true);
return true;
case MENU_CLEAR_COMPLETED_ID:
clearCompletedTasks();
return true;
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_sync:
refreshData(true);
return true;
case R.id.menu_clear_completed:
clearCompletedTasks();
return true;
default:
return super.onOptionsItemSelected(item);
}
return super.handleOptionsMenuItemSelected(id, intent);
}
private void clearCompletedTasks() {
@ -178,15 +160,4 @@ public class GtasksListFragment extends SubtasksListFragment {
public Property<?>[] taskProperties() {
return helper.taskProperties();
}
@Override
protected void addSyncRefreshMenuItem(Menu menu, int themeFlags) {
if(gtasksPreferenceService.isLoggedIn()) {
addMenuItem(menu, R.string.actfm_TVA_menu_refresh,
ThemeService.getDrawable(R.drawable.icn_menu_refresh, themeFlags), MENU_REFRESH_ID, true);
} else {
super.addSyncRefreshMenuItem(menu, themeFlags);
}
}
}

@ -13,7 +13,6 @@ import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity;
import com.todoroo.astrid.gtasks.sync.GtasksSyncV2Provider;
import com.todoroo.astrid.sync.SyncProviderPreferences;
import com.todoroo.astrid.sync.SyncProviderUtilities;
import com.todoroo.astrid.tags.TagService;
import org.tasks.R;
@ -27,7 +26,6 @@ import org.tasks.R;
public class GtasksPreferences extends SyncProviderPreferences {
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private TagService tagService;
public GtasksPreferences() {
super();

@ -5,10 +5,6 @@
*/
package com.todoroo.astrid.gtasks.auth;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
@ -27,7 +23,6 @@ import android.widget.TextView;
import android.widget.Toast;
import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
import org.tasks.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
@ -36,7 +31,12 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.gtasks.api.GtasksInvoker;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.SyncV2Service;
import org.tasks.R;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
/**
* This activity allows users to sign in or log in to Google Tasks
@ -49,8 +49,6 @@ public class GtasksLoginActivity extends ListActivity {
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private SyncV2Service syncService;
// --- ui initialization
private GoogleAccountManager accountManager;

@ -19,11 +19,8 @@ import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TagMetadataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.StoreObject;
@ -45,7 +42,6 @@ import com.todoroo.astrid.service.SyncResultCallbackWrapper.WidgetUpdatingCallba
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.sync.SyncResultCallback;
import com.todoroo.astrid.sync.SyncV2Provider;
import com.todoroo.astrid.tags.TagService;
import org.tasks.R;
@ -60,16 +56,12 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
@Autowired TaskService taskService;
@Autowired MetadataService metadataService;
@Autowired MetadataDao metadataDao;
@Autowired StoreObjectDao storeObjectDao;
@Autowired GtasksPreferenceService gtasksPreferenceService;
@Autowired GtasksSyncService gtasksSyncService;
@Autowired GtasksListService gtasksListService;
@Autowired GtasksMetadataService gtasksMetadataService;
@Autowired GtasksTaskListUpdater gtasksTaskListUpdater;
@Autowired TagService tagService;
@Autowired TagDataDao tagDataDao;
@Autowired TagMetadataDao tagMetadataDao;
static {
AstridDependencyInjector.initialize();

@ -48,7 +48,6 @@ import com.todoroo.astrid.activity.TaskEditFragment;
import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.History;
import com.todoroo.astrid.data.Metadata;
@ -84,7 +83,6 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene
@Autowired MetadataService metadataService;
@Autowired UserActivityDao userActivityDao;
@Autowired TaskService taskService;
@Autowired TaskDao taskDao;
private final ArrayList<NoteOrUpdate> items = new ArrayList<NoteOrUpdate>();
private EditText commentField;

@ -20,10 +20,8 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.UserDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.tags.TagService;
import org.tasks.R;
@ -42,12 +40,6 @@ public class ReminderDialog extends Dialog {
@Autowired
private TaskService taskService;
@Autowired
private TagService tagService;
@Autowired
private UserDao userDao;
public ReminderDialog(final AstridActivity activity, final long taskId,
String title) {
super(activity, R.style.ReminderDialog);

@ -42,10 +42,6 @@ import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskAttachmentDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
@ -58,7 +54,6 @@ import com.todoroo.astrid.reminders.ReengagementService;
import com.todoroo.astrid.reminders.ReminderStartupReceiver;
import com.todoroo.astrid.subtasks.SubtasksMetadata;
import com.todoroo.astrid.tags.TaskToTagMetadata;
import com.todoroo.astrid.ui.TaskListFragmentPager;
import com.todoroo.astrid.utility.AstridPreferences;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.widget.TasksWidget.WidgetUpdateService;
@ -93,16 +88,8 @@ public class StartupService {
@Autowired TaskService taskService;
@Autowired TaskDao taskDao;
@Autowired TagDataDao tagDataDao;
@Autowired UserActivityDao userActivityDao;
@Autowired TaskAttachmentDao taskAttachmentDao;
@Autowired TaskListMetadataDao taskListMetadataDao;
@Autowired MetadataService metadataService;
@Autowired Database database;
@ -332,9 +319,6 @@ public class StartupService {
private void checkForSwipeListsUse() {
if (!Preferences.getBoolean(PREF_SWIPE_CHECK, false)) {
if (Preferences.getBoolean(R.string.p_swipe_lists_enabled, false)
&& Preferences.getBoolean(TaskListFragmentPager.PREF_SHOWED_SWIPE_HELPER, false)) {
}
Preferences.setBoolean(PREF_SWIPE_CHECK, true);
}
}

@ -23,7 +23,6 @@ import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.UserActivityDao;
import com.todoroo.astrid.data.History;
import com.todoroo.astrid.data.Metadata;
@ -42,7 +41,6 @@ import com.todoroo.astrid.tags.TaskToTagMetadata;
public class TagDataService {
@Autowired TagDataDao tagDataDao;
@Autowired TaskDao taskDao;
@Autowired UserActivityDao userActivityDao;
public TagDataService() {

@ -177,13 +177,12 @@ public class ThemeService {
return R.drawable.ic_action_save_light;
case R.drawable.ic_action_discard:
return R.drawable.ic_action_discard_light;
case R.drawable.ic_action_cancel:
case R.drawable.ic_action_cancel:
return R.drawable.ic_action_cancel_light;
case R.drawable.ic_action_new_attachment:
return R.drawable.ic_action_new_attachment_light;
return R.drawable.ic_action_new_attachment_light;
case R.drawable.ic_action_gear:
return R.drawable.ic_action_gear_light;
return R.drawable.ic_action_gear_light;
case R.drawable.icn_menu_refresh:
return R.drawable.icn_menu_refresh_dark;
case R.drawable.icn_menu_filters:

@ -17,8 +17,6 @@ import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.AstridActivity;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.utility.AstridPreferences;
import org.tasks.R;
@ -28,20 +26,6 @@ public final class UpgradeService {
public static final int V4_6_5 = 306;
public static final int V3_0_0 = 136;
@Autowired Database database;
@Autowired TaskService taskService;
@Autowired MetadataService metadataService;
@Autowired GtasksPreferenceService gtasksPreferenceService;
@Autowired AddOnService addOnService;
public UpgradeService() {
DependencyInjectionService.getInstance().inject(this);
}
/**
* Perform upgrade from one version to the next. Needs to be called
* on the UI thread so it can display a progress bar and then
@ -79,7 +63,9 @@ public final class UpgradeService {
new Thread() {
@Override
public void run() {
//noinspection EmptyTryBlock
try {
} finally {
finished = true;
DialogUtilities.dismissDialog(UpgradeActivity.this, dialog);
@ -87,7 +73,7 @@ public final class UpgradeService {
setResult(AstridActivity.RESULT_RESTART_ACTIVITY);
finish();
}
};
}
}.start();
} else {
finished = true;

@ -1,11 +1,5 @@
package com.todoroo.astrid.subtasks;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import android.app.Activity;
import android.database.Cursor;
import android.text.TextUtils;
@ -18,7 +12,6 @@ import android.widget.ListView;
import com.commonsware.cwac.tlv.TouchListView.DropListener;
import com.commonsware.cwac.tlv.TouchListView.GrabberClickListener;
import com.commonsware.cwac.tlv.TouchListView.SwipeListener;
import org.tasks.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
@ -35,12 +28,19 @@ import com.todoroo.astrid.adapter.TaskAdapter.OnCompletedTaskListener;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.ui.DraggableListView;
import com.todoroo.astrid.utility.AstridPreferences;
import org.tasks.R;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
public class AstridOrderedListFragmentHelper<LIST> implements OrderedListFragmentHelperInterface<LIST> {
@ -49,7 +49,6 @@ public class AstridOrderedListFragmentHelper<LIST> implements OrderedListFragmen
private final TaskListFragment fragment;
@Autowired TaskService taskService;
@Autowired MetadataService metadataService;
private DraggableTaskAdapter taskAdapter;

@ -55,7 +55,6 @@ public class SubtasksTagListFragment extends TagViewFragment {
helper.beforeSetUpTaskList(filter);
super.setUpTaskList();
setUpMembersGallery();
unregisterForContextMenu(getListView());
}

@ -11,12 +11,10 @@ import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.dao.TaskListMetadataDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
public abstract class SubtasksUpdater<T> extends AstridOrderedListUpdater<T> {
@Autowired TaskListMetadataDao taskListMetadataDao;
@Autowired TaskService taskService;
public static final String ACTIVE_TASKS_ORDER = "active_tasks_order"; //$NON-NLS-1$
public static final String TODAY_TASKS_ORDER = "today_tasks_order"; //$NON-NLS-1$

@ -5,9 +5,6 @@
*/
package com.todoroo.astrid.tags;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
@ -22,7 +19,6 @@ import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;
import org.tasks.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
@ -44,13 +40,15 @@ import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
import com.todoroo.astrid.service.AstridDependencyInjector;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.tags.TagService.Tag;
import org.tasks.R;
import java.util.ArrayList;
import java.util.List;
/**
* Exposes filters based on tags
*
@ -61,9 +59,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
private static final String TAG = "tag"; //$NON-NLS-1$
@Autowired protected TagDataService tagDataService;
@Autowired GtasksPreferenceService gtasksPreferenceService;
protected boolean addUntaggedFilter = true;
/** Create filter from new tag object */
@ -85,16 +80,9 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
filter.listingTitle += " (" + tag.count + ")";
}
int deleteIntentLabel;
if (tag.memberCount > 0 && !Task.USER_ID_SELF.equals(tag.userId)) {
deleteIntentLabel = R.string.tag_cm_leave;
} else {
deleteIntentLabel = R.string.tag_cm_delete;
}
filter.contextMenuLabels = new String[] {
context.getString(R.string.tag_cm_rename),
context.getString(deleteIntentLabel)
context.getString(R.string.tag_cm_delete)
};
filter.contextMenuIntents = new Intent[] {
newTagIntent(context, RenameTagActivity.class, tag, tag.uuid),
@ -137,7 +125,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
}
protected FilterListItem[] prepareFilters(Context context) {
DependencyInjectionService.getInstance().inject(this);
ContextManager.setContext(context);
ArrayList<FilterListItem> list = new ArrayList<FilterListItem>();
@ -223,7 +210,6 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
}
DependencyInjectionService.getInstance().inject(this);
TagData tagData = tagDataDao.fetch(uuid, TagData.MEMBER_COUNT, TagData.USER_ID);
showDialog(tagData);
}
@ -276,18 +262,7 @@ public class TagFilterExposer extends BroadcastReceiver implements AstridFilterE
@Override
protected void showDialog(TagData tagData) {
int string;
if (tagData != null && (tagMetadataDao.tagHasMembers(uuid) || tagData.getValue(TagData.MEMBER_COUNT) > 0)) {
if (Task.USER_ID_SELF.equals(tagData.getValue(TagData.USER_ID))) {
string = R.string.actfm_tag_operation_owner_delete;
} else {
string = R.string.DLG_leave_this_shared_tag_question;
}
}
else {
string = R.string.DLG_delete_this_tag_question;
}
DialogUtilities.okCancelDialog(this, getString(string, tag), getOkListener(), getCancelListener());
DialogUtilities.okCancelDialog(this, getString(R.string.DLG_delete_this_tag_question, tag), getOkListener(), getCancelListener());
}
@Override

@ -37,7 +37,6 @@ import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService;
import org.tasks.R;
@ -81,8 +80,6 @@ public final class TagService {
@Autowired MetadataDao metadataDao;
@Autowired TaskService taskService;
@Autowired TagDataService tagDataService;
@Autowired TagDataDao tagDataDao;
@ -367,16 +364,13 @@ public final class TagService {
public Intent deleteOrLeaveTag(Context context, String tag, String uuid) {
int deleted = deleteTagMetadata(uuid);
TagData tagData = tagDataDao.fetch(uuid, TagData.ID, TagData.UUID, TagData.DELETION_DATE, TagData.MEMBER_COUNT, TagData.USER_ID);
boolean shared = false;
Intent tagDeleted = new Intent(AstridApiConstants.BROADCAST_EVENT_TAG_DELETED);
if(tagData != null) {
tagData.setValue(TagData.DELETION_DATE, DateUtilities.now());
PluginServices.getTagDataService().save(tagData);
tagDeleted.putExtra(TagViewFragment.EXTRA_TAG_UUID, tagData.getUuid());
shared = tagData.getValue(TagData.MEMBER_COUNT) > 0 && !Task.USER_ID_SELF.equals(tagData.getValue(TagData.USER_ID)); // Was I a list member and NOT owner?
}
Toast.makeText(context, context.getString(shared ? R.string.TEA_tags_left : R.string.TEA_tags_deleted, tag, deleted),
Toast.LENGTH_SHORT).show();
Toast.makeText(context, context.getString(R.string.TEA_tags_deleted, tag, deleted), Toast.LENGTH_SHORT).show();
context.sendBroadcast(tagDeleted);
return tagDeleted;

@ -1,63 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.utility.Constants;
public class FeaturedListFilterAdapter extends FilterAdapter {
public static final String BROADCAST_REQUEST_FEATURED_LISTS = Constants.PACKAGE + ".REQUEST_FEATURED_LISTS"; //$NON-NLS-1$
public static final String BROADCAST_SEND_FEATURED_LISTS = Constants.PACKAGE + ".SEND_FEATURED_LISTS"; //$NON-NLS-1$
public FeaturedListFilterAdapter(Activity activity, ListView listView,
int rowLayout, boolean skipIntentFilters) {
super(activity, listView, rowLayout, skipIntentFilters);
}
@Override
public void getLists() {
Intent broadcastIntent = new Intent(BROADCAST_REQUEST_FEATURED_LISTS);
activity.sendBroadcast(broadcastIntent);
}
@Override
public void registerRecevier() {
IntentFilter peopleFilter = new IntentFilter(BROADCAST_SEND_FEATURED_LISTS);
activity.registerReceiver(filterReceiver, peopleFilter);
getLists();
}
@Override
public void unregisterRecevier() {
activity.unregisterReceiver(filterReceiver);
}
@Override
protected boolean shouldDirectlyPopulateFilters() {
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
ViewHolder viewHolder = (ViewHolder) v.getTag();
viewHolder.size.setVisibility(View.GONE);
viewHolder.name.setSingleLine(false);
viewHolder.name.setLines(2);
viewHolder.name.setMaxLines(2);
int right = (int) (metrics.density * 10);
int top = (int) (metrics.density * 2);
viewHolder.name.setPadding(0, top, right, 0);
viewHolder.name.setTextSize(14);
viewHolder.name.setLineSpacing(0.0f, 1.2f);
return v;
}
}

@ -1,107 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import java.util.List;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Functions;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.api.FilterWithUpdate;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.tags.TagService.Tag;
import com.todoroo.astrid.tags.TaskToTagMetadata;
public class FeaturedListFilterExposer extends TagFilterExposer {
public static final String PREF_SHOULD_SHOW_FEATURED_LISTS = "show_featured_lists"; //$NON-NLS-1$
@Override
public void onReceive(Context context, Intent intent) {
addUntaggedFilter = false;
FilterListItem[] listAsArray = prepareFilters(context);
Intent broadcastIntent = new Intent(FeaturedListFilterAdapter.BROADCAST_SEND_FEATURED_LISTS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, listAsArray);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
private static FilterWithCustomIntent filterFromFeaturedList(Tag tag, Criterion criterion) {
String title = tag.tag;
QueryTemplate tagTemplate = tag.queryTemplate(criterion);
ContentValues contentValues = new ContentValues();
contentValues.put(Metadata.KEY.name, TaskToTagMetadata.KEY);
contentValues.put(TaskToTagMetadata.TAG_NAME.name, tag.tag);
contentValues.put(TaskToTagMetadata.TAG_UUID.name, tag.uuid.toString());
FilterWithUpdate filter = new FilterWithUpdate(tag.tag,
title, tagTemplate,
contentValues);
Class<?> fragmentClass = FeaturedTaskListFragment.class;
filter.customTaskList = new ComponentName(ContextManager.getContext(), fragmentClass);
if(tag.image != null) {
filter.imageUrl = tag.image;
}
Bundle extras = new Bundle();
extras.putString(TagViewFragment.EXTRA_TAG_NAME, tag.tag);
extras.putString(TagViewFragment.EXTRA_TAG_UUID, tag.uuid.toString());
filter.customExtras = extras;
return filter;
}
public static Filter getDefaultFilter() {
TodorooCursor<TagData> firstFilter = PluginServices.getTagDataService()
.query(Query.select(TagData.PROPERTIES)
.where(Criterion.and(
Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).gt(0),
TagData.DELETION_DATE.eq(0),
TagData.NAME.isNotNull(),
TagData.NAME.neq(""))) //$NON-NLS-1$
.orderBy(Order.asc(TagData.NAME))
.limit(1));
try {
if (firstFilter.getCount() > 0) {
firstFilter.moveToFirst();
TagData tagData = new TagData(firstFilter);
Tag tag = new Tag(tagData);
return filterFromFeaturedList(tag, TaskCriteria.activeAndVisible());
} else {
return null;
}
} finally {
firstFilter.close();
}
}
@Override
protected Filter constructFilter(Context context, Tag tag) {
return filterFromFeaturedList(tag, TaskCriteria.activeAndVisible());
}
@Override
protected List<Tag> getTagList() {
return TagService.getInstance().getFeaturedLists();
}
}

@ -1,51 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import android.content.Context;
import org.tasks.R;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.activity.FilterModeSpec;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.core.CoreFilterExposer;
import com.todoroo.astrid.ui.MainMenuPopover;
public class FeaturedListFilterMode implements FilterModeSpec {
@Override
public int[] getForbiddenMenuItems() {
return FORBIDDEN_MENU_ITEMS;
}
private static final int[] FORBIDDEN_MENU_ITEMS = {
TaskListFragment.MENU_NEW_FILTER_ID,
MainMenuPopover.MAIN_MENU_ITEM_FEATURED_LISTS
};
@Override
public Class<? extends FilterListFragment> getFilterListClass() {
return FeaturedListFragment.class;
}
@Override
public Filter getDefaultFilter(Context context) {
Filter defaultFilter = FeaturedListFilterExposer.getDefaultFilter();
if (defaultFilter == null) {
return CoreFilterExposer.buildInboxFilter(context.getResources());
} else {
return defaultFilter;
}
}
@Override
public int getMainMenuIconAttr() {
return R.attr.asMainMenu;
}
@Override
public boolean showComments() {
return false;
}
}

@ -1,26 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import android.app.Activity;
import org.tasks.R;
import com.todoroo.astrid.activity.FilterListFragment;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.utility.AstridPreferences;
public class FeaturedListFragment extends FilterListFragment {
@Override
protected FilterAdapter instantiateAdapter() {
return new FeaturedListFilterAdapter(getActivity(), null, R.layout.filter_adapter_row, false);
}
@Override
protected int getLayout(Activity activity) {
if (AstridPreferences.useTabletLayout(activity)) {
return R.layout.filter_list_fragment_alternative_3pane;
} else {
return R.layout.filter_list_fragment_alternative;
}
}
}

@ -1,198 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import org.tasks.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.actfm.TagViewFragment;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AsyncImageView;
import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.tags.TagFilterExposer;
import com.todoroo.astrid.tags.TagService.Tag;
import com.todoroo.astrid.utility.Flags;
import com.todoroo.astrid.utility.ResourceDrawableCache;
public class FeaturedTaskListFragment extends TagViewFragment {
@Autowired private TagDataService tagDataService;
private static final int MENU_CLONE_LIST = R.string.actfm_feat_list_clone;
@Override
protected TaskAdapter createTaskAdapter(TodorooCursor<Task> cursor) {
return new ReusableTaskAdapter(this, R.layout.reusable_task_adapter_row,
cursor, sqlQueryTemplate, false, null);
}
@Override
protected void setupQuickAddBar() {
super.setupQuickAddBar();
quickAddBar.setVisibility(View.GONE);
((TextView) getView().findViewById(android.R.id.empty)).setOnClickListener(null);
}
@Override
public void onTaskListItemClicked(long taskId, boolean editable) {
// Do nothing
}
@Override
protected int getTaskListBodyLayout() {
return R.layout.task_list_body_featured_list;
}
@Override
protected void addMenuItems(Menu menu, Activity activity) {
super.addMenuItems(menu, activity);
MenuItem item = menu.add(Menu.NONE, MENU_CLONE_LIST, 0, R.string.actfm_feat_list_clone);
item.setIcon(R.drawable.ic_menu_list_copy);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
@Override
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
if (id == MENU_CLONE_LIST) {
cloneList();
return true;
}
return super.handleOptionsMenuItemSelected(id, intent);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// Do nothing
}
@Override
protected void setUpMembersGallery() {
// Repurposed this method to set up the description view
AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image);
String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM);
Bitmap bitmap = null;
if (TextUtils.isEmpty(imageUrl)) {
bitmap = tagData.getPictureBitmap(TagData.PICTURE);
}
if (!TextUtils.isEmpty(imageUrl) || bitmap != null) {
imageView.setVisibility(View.VISIBLE);
imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0));
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setUrl(imageUrl);
}
} else {
imageView.setVisibility(View.GONE);
}
final String description = tagData.getValue(TagData.TAG_DESCRIPTION);
final Resources r = getActivity().getResources();
TextView desc = (TextView) getView().findViewById(R.id.feat_list_desc);
desc.setText(description);
desc.setLines(4);
desc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogUtilities.okDialog(getActivity(), r.getString(R.string.DLG_information_title),
0, description, null);
}
});
}
private void cloneList() {
// Clone list
if (taskAdapter == null || taskAdapter.getCount() == 0) {
Toast.makeText(getActivity(), R.string.actfm_feat_list_clone_empty, Toast.LENGTH_LONG).show();
return;
}
final String localName = tagData.getValue(TagData.NAME) + " " + getString(R.string.actfm_feat_list_suffix); //$NON-NLS-1$
TagData clone = new TagData();
TodorooCursor<TagData> existing = tagDataService.query(Query.select(TagData.PROPERTIES)
.where(TagData.NAME.eqCaseInsensitive(localName)));
try {
if (existing.getCount() > 0) {
existing.moveToFirst();
clone = new TagData(existing);
} else {
clone = new TagData();
clone.setValue(TagData.NAME, localName);
tagDataService.save(clone);
}
} finally {
existing.close();
}
final ProgressDialog pd = DialogUtilities.progressDialog(getActivity(), getString(R.string.actfm_feat_list_cloning));
final TagData finalTagData = clone;
new Thread(new Runnable() {
@Override
public void run() {
final TodorooCursor<Task> tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES);
try {
Task t = new Task();
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
t.readFromCursor(tasks);
taskService.cloneReusableTask(t, localName, finalTagData.getValue(TagData.UUID));
}
final Activity activity = getActivity();
if (activity != null) {
DialogUtilities.dismissDialog(activity, pd);
DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null);
}
Flags.set(Flags.REFRESH);
if (activity instanceof TaskListActivity) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
TaskListActivity tla = (TaskListActivity) activity;
tla.setFilterMode(TaskListActivity.FILTER_MODE_NORMAL);
Filter clonedFilter;
Tag tag = new Tag(finalTagData);
clonedFilter = TagFilterExposer.filterFromTag(activity, tag, TaskCriteria.activeAndVisible());
tla.onFilterItemClicked(clonedFilter);
}
});
}
} finally {
tasks.close();
}
}
}).start();
}
@Override
protected void refresh() {
loadTaskListContent(true);
((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items);
setUpMembersGallery();
}
}

@ -1,82 +0,0 @@
package com.todoroo.astrid.tags.reusable;
import java.util.concurrent.atomic.AtomicReference;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import org.tasks.R;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.data.RemoteModel;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.utility.Flags;
public class ReusableTaskAdapter extends TaskAdapter {
public ReusableTaskAdapter(TaskListFragment fragment, int resource,
Cursor c, AtomicReference<String> query, boolean autoRequery,
OnCompletedTaskListener onCompletedTaskListener) {
super(fragment, resource, c, query, autoRequery, onCompletedTaskListener);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
ViewGroup view = (ViewGroup)inflater.inflate(resource, parent, false);
ReusableTaskViewHolder viewHolder = new ReusableTaskViewHolder();
viewHolder.task = new Task();
viewHolder.clone = (ImageView) view.findViewById(R.id.clone_task);
viewHolder.title = (TextView) view.findViewById(R.id.title);
boolean showFullTaskTitle = Preferences.getBoolean(R.string.p_fullTaskTitle, false);
if (showFullTaskTitle) {
viewHolder.title.setMaxLines(Integer.MAX_VALUE);
}
view.setTag(viewHolder);
for(int i = 0; i < view.getChildCount(); i++) {
view.getChildAt(i).setTag(viewHolder);
}
viewHolder.clone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ReusableTaskViewHolder holder = (ReusableTaskViewHolder) v.getTag();
taskService.cloneReusableTask(holder.task, null, RemoteModel.NO_UUID);
Toast.makeText(fragment.getActivity(), R.string.actfm_feat_list_task_clone_success, Toast.LENGTH_LONG).show();
Flags.set(Flags.REFRESH);
}
});
return view;
}
@Override
public void bindView(View view, Context context, Cursor c) {
TodorooCursor<Task> cursor = (TodorooCursor<Task>)c;
ReusableTaskViewHolder viewHolder = (ReusableTaskViewHolder) view.getTag();
Task task = viewHolder.task;
task.clear();
task.readFromCursor(cursor);
viewHolder.title.setText(task.getValue(Task.TITLE));
view.setMinimumHeight(minRowHeight);
}
public static class ReusableTaskViewHolder {
public Task task;
public ImageView clone;
public TextView title;
}
}

@ -1,84 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.ui;
import greendroid.widget.QuickAction;
import greendroid.widget.QuickActionWidget;
import java.util.List;
import android.content.Context;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import org.tasks.R;
public class FragmentPopover extends QuickActionWidget {
protected DisplayMetrics metrics;
public FragmentPopover(Context context, int layout) {
super(context);
setContentView(layout);
metrics = context.getResources().getDisplayMetrics();
setFocusable(true);
setTouchable(true);
}
public void setContent(View content) {
FrameLayout contentContainer = (FrameLayout) getContentView().findViewById(R.id.content);
contentContainer.addView(content);
}
public void setContent(View content, LayoutParams params) {
FrameLayout contentContainer = (FrameLayout) getContentView().findViewById(R.id.content);
contentContainer.addView(content, params);
}
@Override
protected void populateQuickActions(List<QuickAction> quickActions) {
// Do nothing
}
@Override
protected void onMeasureAndLayout(Rect anchorRect, View contentView) {
contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY),
ViewGroup.LayoutParams.WRAP_CONTENT);
int rootHeight = contentView.getMeasuredHeight();
int offsetY = getArrowOffsetY();
int dyTop = anchorRect.top;
int dyBottom = getScreenHeight() - anchorRect.bottom;
boolean onTop = (dyTop > dyBottom);
int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY;
setWidgetSpecs(popupY, onTop);
}
@Override
protected int getArrowLeftMargin(View arrow) {
return mRect.left + arrow.getMeasuredWidth() / 2 - (int) (10 * metrics.density);
}
@Override
public void show(View anchor) {
if (isShowing()) {
return;
}
super.show(anchor);
}
}

@ -1,221 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.ui;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.tasks.R;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.ui.TouchInterceptingFrameLayout.InterceptTouchListener;
import com.todoroo.astrid.utility.AstridPreferences;
public class MainMenuPopover extends FragmentPopover implements InterceptTouchListener {
public static final int MAIN_MENU_ITEM_LISTS = R.string.TLA_menu_lists;
public static final int MAIN_MENU_ITEM_FEATURED_LISTS = R.string.TLA_menu_featured_lists;
public static final int MAIN_MENU_ITEM_SEARCH = R.string.TLA_menu_search;
public static final int MAIN_MENU_ITEM_SETTINGS = R.string.TLA_menu_settings;
public interface MainMenuListener {
public boolean shouldAddMenuItem(int itemId);
public void mainMenuItemSelected(int item, Intent customIntent);
}
private MainMenuListener mListener;
private final LayoutInflater inflater;
private final LinearLayout content;
private final LinearLayout topFixed;
private final LinearLayout bottomFixed;
private final int rowLayout;
private boolean suppressNextKeyEvent = false;
private final boolean isTablet;
public void setMenuListener(MainMenuListener listener) {
this.mListener = listener;
}
public MainMenuPopover(Context context, int layout, boolean isTablet, MainMenuListener listener) {
super(context, layout);
TouchInterceptingFrameLayout rootLayout = (TouchInterceptingFrameLayout) getContentView();
rootLayout.setInterceptTouchListener(this);
rootLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
dismiss();
return false;
}
});
if (AstridPreferences.useTabletLayout(context)) {
rowLayout = R.layout.main_menu_row_tablet;
} else {
rowLayout = R.layout.main_menu_row;
}
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
content = (LinearLayout) getContentView().findViewById(R.id.content);
topFixed = (LinearLayout) getContentView().findViewById(R.id.topFixedItems);
bottomFixed = (LinearLayout) getContentView().findViewById(R.id.bottomFixedItems);
this.isTablet = isTablet;
mListener = listener;
addFixedItems();
}
@Override
public boolean didInterceptTouch(KeyEvent event) {
int keyCode = event.getKeyCode();
if (!suppressNextKeyEvent) {
if ((keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_BACK) && isShowing()) {
dismiss();
return true;
}
}
suppressNextKeyEvent = false;
return false;
}
public void suppressNextKeyEvent() {
suppressNextKeyEvent = true;
}
@Override
public void setBackgroundDrawable(Drawable background) {
super.setBackgroundDrawable(null);
}
private void addFixedItems() {
int themeFlags = isTablet ? ThemeService.FLAG_FORCE_DARK : 0;
if (Preferences.getBoolean(R.string.p_show_menu_search, true)) {
addMenuItem(R.string.TLA_menu_search,
ThemeService.getDrawable(R.drawable.icn_menu_search, themeFlags),
MAIN_MENU_ITEM_SEARCH, null, topFixed);
}
addMenuItem(R.string.TLA_menu_lists,
ThemeService.getDrawable(R.drawable.icn_menu_lists, themeFlags),
MAIN_MENU_ITEM_LISTS, null, topFixed); // Lists item
addMenuItem(R.string.TLA_menu_settings,
ThemeService.getDrawable(R.drawable.icn_menu_settings, themeFlags),
MAIN_MENU_ITEM_SETTINGS, null, bottomFixed); // Settings item
}
public void refreshFixedItems() {
topFixed.removeAllViews();
bottomFixed.removeAllViews();
addFixedItems();
}
public void setFixedItemVisibility(int index, int visibility, boolean top) {
LinearLayout container = top ? topFixed : bottomFixed;
if (index < 0 || index >= container.getChildCount()) {
return;
}
container.getChildAt(index).setVisibility(visibility);
}
@Override
protected int getArrowLeftMargin(View arrow) {
return mRect.centerX() - arrow.getMeasuredWidth() / 2 - (int) (12 * metrics.density);
}
// --- Public interface ---
public void addMenuItem(int title, int imageRes, int id) {
addMenuItem(title, imageRes, id, null, content);
}
public void addMenuItem(int title, int imageRes, Intent customIntent, int id) {
addMenuItem(title, imageRes, id, customIntent, content);
}
public void addMenuItem(CharSequence title, Drawable image, Intent customIntent, int id) {
addMenuItem(title, image, id, customIntent, content);
}
public void addSeparator() {
inflater.inflate(R.layout.fla_separator, content);
}
public void clear() {
content.removeAllViews();
}
// --- Private helpers ---
private void addMenuItem(int title, int imageRes, int id, Intent customIntent, ViewGroup container) {
if (mListener != null && !mListener.shouldAddMenuItem(id)) {
return;
}
View item = setupItemWithParams(title, imageRes);
addViewWithListener(item, container, id, customIntent);
}
private void addMenuItem(CharSequence title, Drawable image, int id, Intent customIntent, ViewGroup container) {
if (mListener != null && !mListener.shouldAddMenuItem(id)) {
return;
}
View item = setupItemWithParams(title, image);
addViewWithListener(item, container, id, customIntent);
}
private void addViewWithListener(View view, ViewGroup container, final int id, final Intent customIntent) {
container.addView(view);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (mListener != null) {
mListener.mainMenuItemSelected(id, customIntent);
}
}
});
}
private View setupItemWithParams(int title, int imageRes) {
View itemRow = inflater.inflate(rowLayout, null);
ImageView image = (ImageView) itemRow.findViewById(R.id.icon);
image.setImageResource(imageRes);
TextView name = (TextView) itemRow.findViewById(R.id.name);
name.setText(title);
return itemRow;
}
private View setupItemWithParams(CharSequence title, Drawable imageDrawable) {
View itemRow = inflater.inflate(rowLayout, null);
ImageView image = (ImageView) itemRow.findViewById(R.id.icon);
image.setImageDrawable(imageDrawable);
TextView name = (TextView) itemRow.findViewById(R.id.name);
name.setText(title);
return itemRow;
}
}

@ -78,9 +78,7 @@ public class QuickAddBar extends LinearLayout {
private String currentVoiceFile = null;
@Autowired AddOnService addOnService;
@Autowired ExceptionService exceptionService;
@Autowired MetadataService metadataService;
@Autowired
private TaskAttachmentDao taskAttachmentDao;

@ -1,124 +0,0 @@
/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.ui;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskListFragmentPagerAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.utility.Flags;
import org.tasks.R;
public class TaskListFragmentPager extends ViewPager {
public static final String PREF_SHOWED_SWIPE_HELPER = "showed_swipe_helper"; //$NON-NLS-1$
public TaskListFragmentPager(Context context, AttributeSet attrs) {
super(context, attrs);
setOffscreenPageLimit(1);
setPageMargin(1);
setPageMarginDrawable(R.drawable.vertical_separator);
}
@Override
public void setAdapter(PagerAdapter adapter) {
if (!(adapter instanceof TaskListFragmentPagerAdapter)) {
throw new ClassCastException("TaskListFragmentPager requires an adapter of type TaskListFragmentPagerAdapter"); //$NON-NLS-1$
}
super.setAdapter(adapter);
}
/**
* Hack to enable reloading fragments while they are being viewed
*/
public void forceReload() {
int position = getCurrentItem();
setAdapter(getAdapter());
setCurrentItem(position, false);
}
/**
* Show the supplied filter, adding it to the data source if it doesn't exist
*/
public void showFilter(Filter f) {
TaskListFragmentPagerAdapter adapter = (TaskListFragmentPagerAdapter) getAdapter();
showFilter(adapter.addOrLookup(f));
}
/**
* Show the filter at the supplied index, with animation
*/
public void showFilter(int index) {
setCurrentItem(index, true);
}
/**
* Returns the currently showing fragment
*/
public TaskListFragment getCurrentFragment() {
return (TaskListFragment) ((TaskListFragmentPagerAdapter) getAdapter()).lookupFragmentForPosition(getCurrentItem());
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (checkForPeopleHeaderScroll(ev)) {
return false;
}
if (Flags.check(Flags.TLFP_NO_INTERCEPT_TOUCH)) {
return false;
}
return super.onInterceptTouchEvent(ev);
}
private boolean checkForPeopleHeaderScroll(MotionEvent ev) {
TaskListFragment current = getCurrentFragment();
if (current != null) {
View v = current.getView();
if (v != null) {
View peopleView = v.findViewById(R.id.shared_with);
if (peopleView != null) {
Rect rect = new Rect();
peopleView.getHitRect(rect);
if (rect.contains((int) ev.getX(), (int) ev.getY())) {
return true;
}
}
}
}
return false;
}
public static void showSwipeBetweenHelper(Activity activity) {
if (!Preferences.getBoolean(PREF_SHOWED_SWIPE_HELPER, false)) {
String body = String.format("<h3>%s</h3><img src='%s'><br><br>%s",
activity.getString(R.string.swipe_lists_helper_header),
"subtasks_horizontal.png",
activity.getString(R.string.swipe_lists_helper_subtitle));
String color = ThemeService.getDialogTextColorString();
String html = String.format("<html><body style='text-align:center;color:%s'>%s</body></html>",
color, body);
DialogUtilities.htmlDialog(activity, html, R.string.swipe_lists_helper_title);
Preferences.setBoolean(PREF_SHOWED_SWIPE_HELPER, true);
}
}
}

@ -16,7 +16,6 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.data.User;
import com.todoroo.astrid.tags.reusable.FeaturedListFilterExposer;
import org.tasks.R;
@ -48,9 +47,6 @@ public class AstridPreferences {
spec.setIfUnset();
setShowFriendsView();
setShowFeaturedLists();
}
public static void resetToDefaults() {
@ -71,10 +67,6 @@ public class AstridPreferences {
}
}
private static void setShowFeaturedLists() {
Preferences.setBoolean(FeaturedListFilterExposer.PREF_SHOULD_SHOW_FEATURED_LISTS, false);
}
/* ======================================================================
* ========================================================= public prefs
* ====================================================================== */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save