Save task before switching filter

pull/384/head
Alex Baker 8 years ago
parent 120639ff4e
commit 1fc2c1603c

@ -122,7 +122,7 @@ public class ShortcutActivity extends InjectingAppCompatActivity {
} else {
filter = new Filter(title, sql, values);
}
taskListIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter);
taskListIntent.putExtra(TaskListActivity.OPEN_FILTER, filter);
}
startActivity(taskListIntent);

@ -340,7 +340,7 @@ public final class TaskEditFragment extends InjectingFragment implements EditNot
* ======================================================================
*/
private List<TaskEditControlFragment> getFragments() {
public List<TaskEditControlFragment> getFragments() {
List<TaskEditControlFragment> fragments = new ArrayList<>();
for (int fragmentId : rowIds) {
TaskEditControlFragment fragment = (TaskEditControlFragment) getFragmentManager().findFragmentById(fragmentId);

@ -86,7 +86,8 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
public static final String TOKEN_CREATE_NEW_LIST = "createNewList"; //$NON-NLS-1$
public static final String TOKEN_CREATE_NEW_LIST_NAME = "newListName"; //$NON-NLS-1$
public static final String OPEN_TASK = "openTask"; //$NON-NLS-1$
public static final String OPEN_FILTER = "open_filter"; //$NON-NLS-1$
public static final String OPEN_TASK = "open_task"; //$NON-NLS-1$
/**
* @see android.app.Activity#onCreate(Bundle)
@ -118,7 +119,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
controlOrder = BeastModePreferences.constructOrderedControlList(preferences, this);
controlOrder.add(0, getString(EditTitleControlSet.TAG));
readIntent();
handleIntent();
}
@Override
@ -127,51 +128,35 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
setIntent(intent);
readIntent();
handleIntent();
}
private void readIntent() {
private void handleIntent() {
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
extras = (Bundle) extras.clone();
}
if (extras == null) {
extras = new Bundle();
TaskEditFragment taskEditFragment = getTaskEditFragment();
List<TaskEditControlFragment> taskEditControlFragments = new ArrayList<>();
if (taskEditFragment != null) {
if (intent.hasExtra(OPEN_FILTER) || intent.hasExtra(OPEN_TASK)) {
taskEditFragment.save();
taskEditFragment = null;
} else {
taskEditControlFragments.addAll(taskEditFragment.getFragments());
}
}
TaskListFragment taskListFragment;
if (intent.hasExtra(TaskListFragment.TOKEN_FILTER)) {
Filter filter = intent.getParcelableExtra(TaskListFragment.TOKEN_FILTER);
extras.putAll(configureIntentAndExtrasWithFilter(intent, filter));
taskListFragment = newTaskListFragment(filter, extras);
intent.removeExtra(TaskListFragment.TOKEN_FILTER);
if (intent.hasExtra(OPEN_FILTER)) {
Filter filter = intent.getParcelableExtra(OPEN_FILTER);
intent.removeExtra(OPEN_FILTER);
taskListFragment = newTaskListFragment(filter);
} else {
taskListFragment = getTaskListFragment();
if (taskListFragment == null) {
Filter filter = getDefaultFilter();
Bundle bundle = configureIntentAndExtrasWithFilter(intent, filter);
if (bundle != null) {
extras.putAll(bundle);
}
taskListFragment = newTaskListFragment(filter, extras);
}
}
TaskEditFragment taskEditFragment = getTaskEditFragment();
List<TaskEditControlFragment> taskEditControlFragments = new ArrayList<>();
if (taskEditFragment != null) {
for (int rowId : TaskEditFragment.rowIds) {
TaskEditControlFragment fragment = (TaskEditControlFragment) getFragmentManager().findFragmentById(rowId);
if (fragment == null) {
break;
}
taskEditControlFragments.add(fragment);
taskListFragment = newTaskListFragment(getDefaultFilter());
}
}
loadTaskListFragment(true, taskListFragment);
loadTaskListFragment(taskListFragment);
if (isDoublePaneLayout()) {
getFragmentManager().beginTransaction()
@ -184,13 +169,9 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
}
}
private void loadTaskListFragment(boolean onCreate, TaskListFragment taskListFragment) {
private void loadTaskListFragment(TaskListFragment taskListFragment) {
FragmentManager fragmentManager = getFragmentManager();
if (onCreate) {
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.beginTransaction()
.replace(isDoublePaneLayout() ? R.id.master_dual : R.id.single_pane, taskListFragment, TaskListFragment.TAG_TASKLIST_FRAGMENT)
.addToBackStack(TaskListFragment.TAG_TASKLIST_FRAGMENT)
@ -256,7 +237,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
}
}
private TaskListFragment newTaskListFragment(Filter filter, Bundle extras) {
private TaskListFragment newTaskListFragment(Filter filter) {
Class<?> customTaskList = null;
if (subtasksHelper.shouldUseSubtasksFragmentForFilter(filter)) {
@ -283,7 +264,7 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
Timber.e(e, e.getMessage());
newFragment = new TaskListFragment();
}
newFragment.initialize(filter, extras);
newFragment.initialize(filter);
return newFragment;
}
@ -292,17 +273,14 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
super.onPostResume();
if (getIntent().hasExtra(OPEN_TASK)) {
long id = getIntent().getLongExtra(OPEN_TASK, 0);
if (id > 0) {
onTaskListItemClicked(id);
long taskId = getIntent().getLongExtra(OPEN_TASK, 0);
getIntent().removeExtra(OPEN_TASK);
if (taskId > 0) {
onTaskListItemClicked(taskId);
} else {
TaskListFragment tlf = getTaskListFragment();
if (tlf != null) {
Task task = tlf.addTask("");//$NON-NLS-1$
onTaskListItemClicked(task.getId());
}
Task task = getTaskListFragment().addTask("");
onTaskListItemClicked(task.getId());
}
getIntent().removeExtra(OPEN_TASK);
}
if (getIntent().getBooleanExtra(TOKEN_CREATE_NEW_LIST, false)) {
@ -472,25 +450,6 @@ public class TaskListActivity extends InjectingAppCompatActivity implements
.findFragmentByTag(TaskEditFragment.TAG_TASKEDIT_FRAGMENT);
}
protected Bundle configureIntentAndExtrasWithFilter(Intent intent, Filter filter) {
Bundle extras;
if(filter instanceof FilterWithCustomIntent) {
Intent customIntent = ((FilterWithCustomIntent)filter).getCustomIntent();
customIntent.putExtra(NavigationDrawerFragment.TOKEN_LAST_SELECTED, intent.getIntExtra(NavigationDrawerFragment.TOKEN_LAST_SELECTED, 0));
if (intent.hasExtra(OPEN_TASK)) {
customIntent.putExtra(OPEN_TASK, intent.getLongExtra(OPEN_TASK, 0));
}
setIntent(customIntent);
extras = customIntent.getExtras();
} else {
extras = intent.getExtras();
}
if (extras != null) {
extras = (Bundle) extras.clone();
}
return extras;
}
/**
* Loads action item from the given intent
*/

@ -52,6 +52,7 @@ import com.todoroo.astrid.adapter.TaskAdapter.ViewHolder;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.CustomFilter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.core.SortHelper;
import com.todoroo.astrid.dao.TagDataDao;
@ -128,11 +129,6 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
protected static final int CONTEXT_MENU_UNDELETE_TASK_ID = R.string.TAd_contextUndeleteTask;
protected static final int CONTEXT_MENU_PURGE_TASK_ID = R.string.TAd_contextPurgeTask;
// --- constants
/** token for passing a {@link Filter} object through extras */
public static final String TOKEN_FILTER = "filter"; //$NON-NLS-1$
// --- instance variables
@Inject TaskService taskService;
@ -226,9 +222,11 @@ public class TaskListFragment extends InjectingListFragment implements SwipeRefr
setTaskAdapter();
}
public void initialize(Filter filter, Bundle extras) {
public void initialize(Filter filter) {
this.filter = filter;
this.extras = extras;
this.extras = filter instanceof FilterWithCustomIntent
? ((FilterWithCustomIntent) filter).getCustomIntent().getExtras()
: new Bundle();
}
@Override

@ -45,12 +45,9 @@ public class FilterWithCustomIntent extends Filter {
public Intent getCustomIntent() {
Intent intent = new Intent();
intent.putExtra("filter", this); //$NON-NLS-1$
intent.setComponent(new ComponentName(BuildConfig.APPLICATION_ID, "com.todoroo.astrid.activity.TaskListActivity")); //$NON-NLS-1$
if(customExtras != null) {
intent.putExtras(customExtras);
}
return intent;
}

@ -9,7 +9,6 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment;
@ -202,7 +201,7 @@ public class CalendarReminderActivity extends InjectingAppCompatActivity {
FilterWithCustomIntent filter = TagFilterExposer.filterFromTagData(CalendarReminderActivity.this, tag);
Intent listIntent = new Intent(CalendarReminderActivity.this, TaskListActivity.class);
listIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter);
listIntent.putExtra(TaskListActivity.OPEN_FILTER, filter);
listIntent.putExtras(filter.customExtras);
startActivity(listIntent);

@ -34,7 +34,7 @@ public class TasksWidget extends InjectingAppWidgetProvider {
public static final String EDIT_TASK = "EDIT_TASK";
public static final String EXTRA_FILTER = "extra_filter";
public static final String EXTRA_ID = "id"; //$NON-NLS-1$
public static final String EXTRA_ID = "extra_id"; //$NON-NLS-1$
public static long suppressUpdateFlag = 0; // Timestamp--don't update widgets if this flag is non-zero and now() is within 5 minutes
private static final long SUPPRESS_TIME = DateUtilities.ONE_MINUTE * 5;
@ -48,11 +48,9 @@ public class TasksWidget extends InjectingAppWidgetProvider {
broadcaster.toggleCompletedState(intent.getLongExtra(EXTRA_ID, 0));
break;
case EDIT_TASK:
getEditTaskStack(
context,
(Filter) intent.getParcelableExtra(EXTRA_FILTER),
intent.getLongExtra(EXTRA_ID, 0))
.startActivities();
long taskId = intent.getLongExtra(EXTRA_ID, 0);
Filter filter = intent.getParcelableExtra(EXTRA_FILTER);
getEditTaskStack(context, filter, taskId).startActivities();
break;
case BROADCAST_EVENT_REFRESH:
updateWidgets(context);

@ -158,7 +158,7 @@ public class Notifier {
PendingIntent pendingIntent = PendingIntent.getActivity(context, (title + query).hashCode(), new Intent(context, TaskListActivity.class) {{
setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK);
putExtra(TaskListFragment.TOKEN_FILTER, new Filter(title, query, AndroidUtilities.contentValuesFromSerializedString(valuesForNewTasks)));
putExtra(TaskListActivity.OPEN_FILTER, new Filter(title, query, AndroidUtilities.contentValuesFromSerializedString(valuesForNewTasks)));
}}, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context)

@ -7,18 +7,17 @@ import android.support.v4.app.TaskStackBuilder;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterWithCustomIntent;
public class TaskIntents {
public static Intent getNewTaskIntent(Context context, Filter filter) {
return getEditTaskIntent(context, filter, 0L);
}
public static TaskStackBuilder getEditTaskStack(Context context, final Filter filter, final long taskId) {
return TaskStackBuilder.create(context).addNextIntent(getEditTaskIntent(context, filter, taskId));
}
public static Intent getNewTaskIntent(Context context, Filter filter) {
return getEditTaskIntent(context, filter, 0L);
}
public static Intent getEditTaskIntent(Context context, final Filter filter, final long taskId) {
Intent taskListIntent = getTaskListIntent(context, filter);
taskListIntent.putExtra(TaskListActivity.OPEN_TASK, taskId);
@ -26,13 +25,10 @@ public class TaskIntents {
}
public static Intent getTaskListIntent(Context context, final Filter filter) {
return new Intent(context, TaskListActivity.class) {{
if (filter != null) {
if (filter instanceof FilterWithCustomIntent) {
putExtras(((FilterWithCustomIntent) filter).customExtras);
}
putExtra(TaskListFragment.TOKEN_FILTER, filter);
}
}};
Intent intent = new Intent(context, TaskListActivity.class);
if (filter != null) {
intent.putExtra(TaskListActivity.OPEN_FILTER, filter);
}
return intent;
}
}

@ -18,10 +18,10 @@ import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskService;
import com.todoroo.astrid.subtasks.SubtasksHelper;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.widget.TasksWidget;
import com.todoroo.astrid.widget.WidgetConfigActivity;
import org.tasks.BuildConfig;
import org.tasks.R;
import org.tasks.preferences.Preferences;
import org.tasks.ui.WidgetCheckBoxes;
@ -135,13 +135,13 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
textContent = task.getTitle();
RemoteViews row = new RemoteViews(Constants.PACKAGE, R.layout.widget_row);
RemoteViews row = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.widget_row);
if (task.isCompleted()) {
textColor = r.getColor(R.color.task_list_done);
row.setInt(R.id.text, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
row.setInt(R.id.widget_text, "setPaintFlags", Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
} else {
row.setInt(R.id.text, "setPaintFlags", Paint.ANTI_ALIAS_FLAG);
row.setInt(R.id.widget_text, "setPaintFlags", Paint.ANTI_ALIAS_FLAG);
}
if (showDueDates) {
@ -150,23 +150,22 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
textColor = r.getColor(R.color.overdue);
}
final long taskId = task.getId();
row.setTextViewText(R.id.text, textContent);
row.setTextColor(R.id.text, textColor);
row.setImageViewBitmap(R.id.completeBox, getCheckbox(task));
row.setOnClickFillInIntent(R.id.widget_body, new Intent() {{
setAction(TasksWidget.EDIT_TASK);
putExtra(TasksWidget.EXTRA_FILTER, filter);
putExtra(TasksWidget.EXTRA_ID, taskId);
}});
row.setTextViewText(R.id.widget_text, textContent);
row.setTextColor(R.id.widget_text, textColor);
row.setImageViewBitmap(R.id.widget_complete_box, getCheckbox(task));
long taskId = task.getId();
Intent editIntent = new Intent(TasksWidget.EDIT_TASK);
editIntent.putExtra(TasksWidget.EXTRA_FILTER, filter);
editIntent.putExtra(TasksWidget.EXTRA_ID, taskId);
row.setOnClickFillInIntent(R.id.widget_row, editIntent);
if (hideCheckboxes) {
row.setViewVisibility(R.id.completeBox, View.GONE);
row.setViewVisibility(R.id.widget_complete_box, View.GONE);
} else {
row.setOnClickFillInIntent(R.id.completeBox, new Intent() {{
setAction(TasksWidget.COMPLETE_TASK);
putExtra(TasksWidget.EXTRA_ID, taskId);
}});
Intent completeIntent = new Intent(TasksWidget.COMPLETE_TASK);
completeIntent.putExtra(TasksWidget.EXTRA_ID, taskId);
row.setOnClickFillInIntent(R.id.widget_complete_box, completeIntent);
}
return row;
@ -210,13 +209,13 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
public void formatDueDate(RemoteViews row, Task task, int textColor) {
if (task.hasDueDate()) {
Resources resources = context.getResources();
row.setViewVisibility(R.id.dueDate, View.VISIBLE);
row.setTextViewText(R.id.dueDate, task.isCompleted()
row.setViewVisibility(R.id.widget_due_date, View.VISIBLE);
row.setTextViewText(R.id.widget_due_date, task.isCompleted()
? resources.getString(R.string.TAd_completed, DateUtilities.getRelativeDateStringWithTime(context, task.getCompletionDate()))
: DateUtilities.getRelativeDateStringWithTime(context, task.getDueDate()));
row.setTextColor(R.id.dueDate, task.isOverdue() ? resources.getColor(R.color.overdue) : textColor);
row.setTextColor(R.id.widget_due_date, task.isOverdue() ? resources.getColor(R.color.overdue) : textColor);
} else {
row.setViewVisibility(R.id.dueDate, View.GONE);
row.setViewVisibility(R.id.widget_due_date, View.GONE);
}
}
}

@ -77,35 +77,25 @@ public class WidgetHelper {
remoteViews.setEmptyView(R.id.list_view, R.id.empty_view);
remoteViews.setOnClickPendingIntent(R.id.widget_title, getOpenListIntent(context, filter, id));
remoteViews.setOnClickPendingIntent(R.id.widget_button, getNewTaskIntent(context, filter, id));
remoteViews.setPendingIntentTemplate(R.id.list_view, getFillInIntent(context, filter, id));
remoteViews.setPendingIntentTemplate(R.id.list_view, getPendingIntentTemplate(context));
return remoteViews;
}
private PendingIntent getFillInIntent(Context context, Filter filter, int widgetId) {
private PendingIntent getPendingIntentTemplate(Context context) {
Intent intent = new Intent(context, TasksWidget.class);
if (filter != null && filter instanceof FilterWithCustomIntent) {
Bundle customExtras = ((FilterWithCustomIntent) filter).customExtras;
intent.putExtras(customExtras);
}
return PendingIntent.getBroadcast(context, -widgetId, intent, 0);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public PendingIntent getOpenListIntent(Context context, Filter filter, int widgetId) {
Intent listIntent = TaskIntents.getTaskListIntent(context, filter);
listIntent.setFlags(flags);
String customIntent = preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_INTENT + widgetId);
if (customIntent != null) {
String serializedExtras = preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId);
Bundle extras = AndroidUtilities.bundleFromSerializedString(serializedExtras);
listIntent.putExtras(extras);
}
return PendingIntent.getActivity(context, widgetId, listIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Intent intent = TaskIntents.getTaskListIntent(context, filter);
intent.setFlags(flags);
return PendingIntent.getActivity(context, widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public PendingIntent getNewTaskIntent(Context context, Filter filter, int id) {
public PendingIntent getNewTaskIntent(Context context, Filter filter, int widgetId) {
Intent intent = TaskIntents.getNewTaskIntent(context, filter);
intent.setFlags(flags);
return PendingIntent.getActivity(context, -id, intent, PendingIntent.FLAG_CANCEL_CURRENT);
return PendingIntent.getActivity(context, -widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public Filter getFilter(Context context, int widgetId) {
@ -151,12 +141,10 @@ public class WidgetHelper {
contentValuesString = AndroidUtilities.contentValuesToSerializedString(newTaskValues);
}
preferences.setString(WidgetConfigActivity.PREF_VALUES + widgetId, contentValuesString);
if (filter != null) {
String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent) filter).customExtras);
if (flattenedExtras != null) {
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId,
flattenedExtras);
}
String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent) filter).customExtras);
if (flattenedExtras != null) {
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId,
flattenedExtras);
}
}
} else {

@ -4,11 +4,13 @@
** See the file "LICENSE" for the full license governing this code.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_row"
android:clickable="false"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/completeBox"
android:id="@+id/widget_complete_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
@ -20,7 +22,6 @@
android:paddingEnd="5dp"/>
<LinearLayout
android:id="@+id/widget_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@ -28,7 +29,7 @@
android:gravity="center_vertical">
<TextView
android:id="@+id/text"
android:id="@+id/widget_text"
style="@style/TextAppearance.Widget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
@ -37,7 +38,7 @@
android:singleLine="true" />
<TextView
android:id="@+id/dueDate"
android:id="@+id/widget_due_date"
style="@style/TextAppearance.WidgetDueDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

Loading…
Cancel
Save