diff --git a/astrid/src/main/AndroidManifest.xml b/astrid/src/main/AndroidManifest.xml index 5e00b59f8..08e6c8c79 100644 --- a/astrid/src/main/AndroidManifest.xml +++ b/astrid/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ + android:versionCode="323"> diff --git a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index 882b8e595..a2d3aebdd 100755 --- a/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/astrid/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -752,8 +752,11 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { } if (activity instanceof TaskListActivity) { - if (title.getText().length() == 0 && isNewTask - && model != null && model.isSaved()) { + if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { + taskService.delete(model); + } + } else if (activity instanceof TaskEditActivity) { + if (title.getText().length() == 0 && isNewTask && model != null && model.isSaved()) { taskService.delete(model); } } @@ -783,8 +786,7 @@ ViewPager.OnPageChangeListener, EditNoteActivity.UpdatesChangedListener { shouldSaveState = false; // abandon editing in this case - if (title.getText().length() == 0 - || TextUtils.isEmpty(model.getValue(Task.TITLE))) { + if (title.getText().length() == 0 || TextUtils.isEmpty(model.getValue(Task.TITLE))) { if (isNewTask) { TimerPlugin.updateTimer(getActivity(), model, false); taskService.delete(model); diff --git a/astrid/src/main/java/com/todoroo/astrid/widget/WidgetUpdateService.java b/astrid/src/main/java/com/todoroo/astrid/widget/WidgetUpdateService.java index 5ce87c51e..c52d57c00 100644 --- a/astrid/src/main/java/com/todoroo/astrid/widget/WidgetUpdateService.java +++ b/astrid/src/main/java/com/todoroo/astrid/widget/WidgetUpdateService.java @@ -176,7 +176,7 @@ public class WidgetUpdateService extends Service { views.setOnClickPendingIntent(R.id.taskbody, pListIntent); } - PendingIntent pEditIntent = widgetHelper.getEditIntent(context, filter, widgetId); + PendingIntent pEditIntent = widgetHelper.getNewTaskIntent(context, filter, widgetId); if (pEditIntent != null) { views.setOnClickPendingIntent(R.id.widget_button, pEditIntent); views.setOnClickPendingIntent(R.id.widget_title, pEditIntent); diff --git a/astrid/src/main/java/org/tasks/widget/ScrollableViewsFactory.java b/astrid/src/main/java/org/tasks/widget/ScrollableViewsFactory.java index a2aaf0c8f..d4946d599 100644 --- a/astrid/src/main/java/org/tasks/widget/ScrollableViewsFactory.java +++ b/astrid/src/main/java/org/tasks/widget/ScrollableViewsFactory.java @@ -12,6 +12,9 @@ import android.widget.RemoteViewsService; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.astrid.activity.TaskEditActivity; +import com.todoroo.astrid.activity.TaskEditFragment; +import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.TaskService; @@ -109,7 +112,10 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac row.setTextViewText(R.id.text, textContent); row.setTextColor(R.id.text, textColor); - row.setOnClickFillInIntent(R.id.text, new Intent()); + Intent intent = new Intent(context, TaskEditActivity.class); + intent.putExtra(TaskEditFragment.TOKEN_ID, task.getId()); + intent.putExtra(TaskListActivity.OPEN_TASK, task.getId()); + row.setOnClickFillInIntent(R.id.text, intent); return row; } catch (Exception e) { diff --git a/astrid/src/main/java/org/tasks/widget/WidgetHelper.java b/astrid/src/main/java/org/tasks/widget/WidgetHelper.java index df2171537..0419d436a 100644 --- a/astrid/src/main/java/org/tasks/widget/WidgetHelper.java +++ b/astrid/src/main/java/org/tasks/widget/WidgetHelper.java @@ -42,17 +42,26 @@ import com.todoroo.astrid.widget.WidgetUpdateService; import org.tasks.R; +import static android.content.Intent.*; + public class WidgetHelper { static { AstridDependencyInjector.initialize(); } + private static int flags = FLAG_ACTIVITY_NEW_TASK + | FLAG_ACTIVITY_MULTIPLE_TASK + | FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET + | FLAG_ACTIVITY_NO_HISTORY + | FLAG_ACTIVITY_PREVIOUS_IS_TOP; + + public static void startWidgetService(Context context) { Class widgetServiceClass = android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH ? WidgetUpdateService.class : ScrollableWidgetUpdateService.class; - AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); + AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, widgetServiceClass); PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); @@ -62,6 +71,9 @@ public class WidgetHelper { public static void triggerUpdate(Context context) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + if (appWidgetManager == null) { + return; + } ComponentName thisWidget = new ComponentName(context, TasksWidget.class); Intent intent = new Intent(context, TasksWidget.class); intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); @@ -89,13 +101,16 @@ public class WidgetHelper { remoteViews.setRemoteAdapter(R.id.list_view, rvIntent); remoteViews.setEmptyView(R.id.list_view, R.id.empty_view); PendingIntent listIntent = getListIntent(context, filter, id); - if(listIntent != null) { + if (listIntent != null) { remoteViews.setOnClickPendingIntent(R.id.widget_title, listIntent); - remoteViews.setPendingIntentTemplate(R.id.list_view, listIntent); } - PendingIntent editIntent = getEditIntent(context, filter, id); - if (editIntent != null) { - remoteViews.setOnClickPendingIntent(R.id.widget_button, editIntent); + PendingIntent newTaskIntent = getNewTaskIntent(context, filter, id); + if (newTaskIntent != null) { + remoteViews.setOnClickPendingIntent(R.id.widget_button, newTaskIntent); + } + PendingIntent editTaskIntent = getEditTaskIntent(context, filter, id); + if (editTaskIntent != null) { + remoteViews.setPendingIntentTemplate(R.id.list_view, editTaskIntent); } return remoteViews; } @@ -104,7 +119,7 @@ public class WidgetHelper { Intent listIntent = new Intent(context, TaskListActivity.class); String customIntent = Preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_INTENT + widgetId); - if(customIntent != null) { + if (customIntent != null) { String serializedExtras = Preferences.getStringValue(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId); Bundle extras = AndroidUtilities.bundleFromSerializedString(serializedExtras); @@ -112,7 +127,7 @@ public class WidgetHelper { } listIntent.putExtra(TaskListActivity.TOKEN_SOURCE, Constants.SOURCE_WIDGET); listIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - if(filter != null) { + if (filter != null) { listIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter); listIntent.setAction("L" + widgetId + filter.getSqlQuery()); } else { @@ -126,38 +141,53 @@ public class WidgetHelper { listIntent, PendingIntent.FLAG_CANCEL_CURRENT); } - public PendingIntent getEditIntent(Context context, Filter filter, int id) { - Intent editIntent; + private PendingIntent getEditTaskIntent(Context context, Filter filter, int widgetId) { + Intent intent; + if (AstridPreferences.useTabletLayout(context)) { + intent = new Intent(context, TaskListActivity.class); + if (filter != null && filter instanceof FilterWithCustomIntent) { + Bundle customExtras = ((FilterWithCustomIntent) filter).customExtras; + intent.putExtras(customExtras); + } + } else { + intent = new Intent(context, TaskEditActivity.class); + } + intent.setFlags(flags); + intent.putExtra(TaskEditFragment.OVERRIDE_FINISH_ANIM, false); + return PendingIntent.getActivity(context, widgetId, intent, PendingIntent.FLAG_CANCEL_CURRENT); + } + + public PendingIntent getNewTaskIntent(Context context, Filter filter, int id) { + Intent intent; boolean tablet = AstridPreferences.useTabletLayout(context); if (tablet) { - editIntent = new Intent(context, TaskListActivity.class); - editIntent.putExtra(TaskListActivity.OPEN_TASK, 0L); - } - else { - editIntent = new Intent(context, TaskEditActivity.class); + intent = new Intent(context, TaskListActivity.class); + intent.putExtra(TaskListActivity.OPEN_TASK, 0L); + } else { + intent = new Intent(context, TaskEditActivity.class); } - editIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - editIntent.putExtra(TaskEditFragment.OVERRIDE_FINISH_ANIM, false); - if(filter != null) { - editIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter); + intent.setFlags(flags); + intent.putExtra(TaskEditFragment.OVERRIDE_FINISH_ANIM, false); + if (filter != null) { + intent.putExtra(TaskListFragment.TOKEN_FILTER, filter); if (filter.valuesForNewTasks != null) { String values = AndroidUtilities.contentValuesToSerializedString(filter.valuesForNewTasks); values = PermaSql.replacePlaceholders(values); - editIntent.putExtra(TaskEditFragment.TOKEN_VALUES, values); - editIntent.setAction("E" + id + values); + intent.putExtra(TaskEditFragment.TOKEN_VALUES, values); + intent.setAction("E" + id + values); } if (tablet) { if (filter instanceof FilterWithCustomIntent) { Bundle customExtras = ((FilterWithCustomIntent) filter).customExtras; - editIntent.putExtras(customExtras); + intent.putExtras(customExtras); } } } else { - editIntent.setAction("E" + id); + intent.setAction("E" + id); } - return PendingIntent.getActivity(context, -id, editIntent, 0); + return PendingIntent.getActivity(context, -id, intent, 0); } public Filter getFilter(Context context, int widgetId) { @@ -165,15 +195,15 @@ public class WidgetHelper { // base our filter off the inbox filter, replace stuff if we have it Filter filter = CoreFilterExposer.buildInboxFilter(context.getResources()); String sql = Preferences.getStringValue(WidgetConfigActivity.PREF_SQL + widgetId); - if(sql != null) { + if (sql != null) { filter.setSqlQuery(sql); } String title = Preferences.getStringValue(WidgetConfigActivity.PREF_TITLE + widgetId); - if(title != null) { + if (title != null) { filter.title = title; } String contentValues = Preferences.getStringValue(WidgetConfigActivity.PREF_VALUES + widgetId); - if(contentValues != null) { + if (contentValues != null) { filter.valuesForNewTasks = AndroidUtilities.contentValuesFromSerializedString(contentValues); } @@ -199,11 +229,11 @@ public class WidgetHelper { Preferences.setString(WidgetConfigActivity.PREF_TITLE + widgetId, filter.title); ContentValues newTaskValues = filter.valuesForNewTasks; String contentValuesString = null; - if(newTaskValues != null) { + if (newTaskValues != null) { contentValuesString = AndroidUtilities.contentValuesToSerializedString(newTaskValues); } Preferences.setString(WidgetConfigActivity.PREF_VALUES + widgetId, contentValuesString); - if (filter instanceof FilterWithCustomIntent) { + if (filter != null) { String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent) filter).customExtras); if (flattenedExtras != null) { Preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + widgetId,