diff --git a/AndroidManifest.xml b/AndroidManifest.xml index f1ff3a5e9..fa41044ea 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="73" + android:versionName="2.2.0"> @@ -31,7 +31,8 @@ android:theme="@android:style/Theme.Dialog" android:launchMode="singleTask" /> - + diff --git a/res/drawable/notification_clock.png b/res/drawable/notification_clock.png new file mode 100644 index 000000000..e2672c206 Binary files /dev/null and b/res/drawable/notification_clock.png differ diff --git a/res/drawable/notification_tag_pink.png b/res/drawable/notification_tag_pink.png new file mode 100644 index 000000000..76e2296cc Binary files /dev/null and b/res/drawable/notification_tag_pink.png differ diff --git a/res/values/strings.xml b/res/values/strings.xml index f9d4c862f..6ff3792ec 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -126,6 +126,7 @@ Astrid: Editing Task Astrid: Editing + Astrid: New Task Basic Dates @@ -273,6 +274,7 @@ Wish me luck!\n Absolute Deadline! Goal Deadline! + Working on: diff --git a/src/com/timsu/astrid/R.java b/src/com/timsu/astrid/R.java index f70626b22..238ed8489 100644 --- a/src/com/timsu/astrid/R.java +++ b/src/com/timsu/astrid/R.java @@ -68,24 +68,26 @@ public final class R { public static final int ic_dialog_time_c=0x7f020013; public static final int icon=0x7f020014; public static final int icon_timer=0x7f020015; - public static final int notification_icon=0x7f020016; - public static final int timepicker_down_btn=0x7f020017; - public static final int timepicker_down_disabled=0x7f020018; - public static final int timepicker_down_disabled_focused=0x7f020019; - public static final int timepicker_down_normal=0x7f02001a; - public static final int timepicker_down_pressed=0x7f02001b; - public static final int timepicker_down_selected=0x7f02001c; - public static final int timepicker_input=0x7f02001d; - public static final int timepicker_input_disabled=0x7f02001e; - public static final int timepicker_input_normal=0x7f02001f; - public static final int timepicker_input_pressed=0x7f020020; - public static final int timepicker_input_selected=0x7f020021; - public static final int timepicker_up_btn=0x7f020022; - public static final int timepicker_up_disabled=0x7f020023; - public static final int timepicker_up_disabled_focused=0x7f020024; - public static final int timepicker_up_normal=0x7f020025; - public static final int timepicker_up_pressed=0x7f020026; - public static final int timepicker_up_selected=0x7f020027; + public static final int notification_clock=0x7f020016; + public static final int notification_icon=0x7f020017; + public static final int notification_tag_pink=0x7f020018; + public static final int timepicker_down_btn=0x7f020019; + public static final int timepicker_down_disabled=0x7f02001a; + public static final int timepicker_down_disabled_focused=0x7f02001b; + public static final int timepicker_down_normal=0x7f02001c; + public static final int timepicker_down_pressed=0x7f02001d; + public static final int timepicker_down_selected=0x7f02001e; + public static final int timepicker_input=0x7f02001f; + public static final int timepicker_input_disabled=0x7f020020; + public static final int timepicker_input_normal=0x7f020021; + public static final int timepicker_input_pressed=0x7f020022; + public static final int timepicker_input_selected=0x7f020023; + public static final int timepicker_up_btn=0x7f020024; + public static final int timepicker_up_disabled=0x7f020025; + public static final int timepicker_up_disabled_focused=0x7f020026; + public static final int timepicker_up_normal=0x7f020027; + public static final int timepicker_up_pressed=0x7f020028; + public static final int timepicker_up_selected=0x7f020029; } public static final class id { public static final int addAlert=0x7f0b0036; @@ -212,38 +214,38 @@ public final class R { public static final int Ntasks=0x7f090000; } public static final class string { - public static final int add_alert=0x7f08004b; + public static final int add_alert=0x7f08004c; public static final int addtask_label=0x7f08000d; - public static final int ago_suffix=0x7f080065; - public static final int alerts_label=0x7f08004a; + public static final int ago_suffix=0x7f080066; + public static final int alerts_label=0x7f08004b; /** application */ public static final int app_name=0x7f080000; - public static final int blank_button_title=0x7f080055; - public static final int blockingOn_label=0x7f080040; + public static final int blank_button_title=0x7f080056; + public static final int blockingOn_label=0x7f080041; public static final int daysVertical=0x7f080008; - public static final int definiteDueDate_label=0x7f08003b; - public static final int delete_label=0x7f080054; - public static final int delete_this_tag_title=0x7f080090; - public static final int delete_this_task_title=0x7f08008f; - public static final int delete_title=0x7f08008e; - public static final int discard_label=0x7f080053; - public static final int displayedFields_PrefScreen_Desc=0x7f0800b2; - public static final int displayedFields_PrefScreen_Title=0x7f0800b1; - public static final int edit_label=0x7f08005c; - public static final int elapsedDuration_label=0x7f08003a; - public static final int error_opening=0x7f080094; - public static final int error_saving=0x7f080095; - public static final int estimatedDuration_label=0x7f080039; - public static final int flag_after=0x7f080048; - public static final int flag_before=0x7f080046; - public static final int flag_during=0x7f080047; - public static final int flag_nonstop=0x7f080049; - public static final int flags_label=0x7f080045; - public static final int hiddenUntil_label=0x7f08003d; + public static final int definiteDueDate_label=0x7f08003c; + public static final int delete_label=0x7f080055; + public static final int delete_this_tag_title=0x7f080091; + public static final int delete_this_task_title=0x7f080090; + public static final int delete_title=0x7f08008f; + public static final int discard_label=0x7f080054; + public static final int displayedFields_PrefScreen_Desc=0x7f0800b4; + public static final int displayedFields_PrefScreen_Title=0x7f0800b3; + public static final int edit_label=0x7f08005d; + public static final int elapsedDuration_label=0x7f08003b; + public static final int error_opening=0x7f080096; + public static final int error_saving=0x7f080097; + public static final int estimatedDuration_label=0x7f08003a; + public static final int flag_after=0x7f080049; + public static final int flag_before=0x7f080047; + public static final int flag_during=0x7f080048; + public static final int flag_nonstop=0x7f08004a; + public static final int flags_label=0x7f080046; + public static final int hiddenUntil_label=0x7f08003e; /** dialog boxes */ - public static final int hour_minutes_dialog=0x7f08004c; + public static final int hour_minutes_dialog=0x7f08004d; public static final int hoursVertical=0x7f080009; /** Importance Labels */ @@ -251,139 +253,141 @@ public final class R { public static final int importance_2=0x7f080002; public static final int importance_3=0x7f080003; public static final int importance_4=0x7f080004; - public static final int importance_label=0x7f080037; - public static final int information_title=0x7f080088; - public static final int name_hint=0x7f080036; + public static final int importance_label=0x7f080038; + public static final int information_title=0x7f080089; + public static final int name_hint=0x7f080037; /** labels */ - public static final int name_label=0x7f080035; - public static final int notes_hint=0x7f080042; - public static final int notes_label=0x7f080041; - public static final int notif_definiteDueDate=0x7f080092; - public static final int notif_preferredDueDate=0x7f080093; - public static final int notification_dialog=0x7f08004d; - public static final int notification_label=0x7f080043; - public static final int notification_prefix=0x7f080044; - public static final int notify_no=0x7f08008c; - public static final int notify_snooze=0x7f08008b; - public static final int notify_snooze_title=0x7f08008d; - public static final int notify_yes=0x7f08008a; - public static final int overdue_suffix=0x7f080064; - public static final int p_colorize=0x7f0800a7; - public static final int p_deadlineTime=0x7f0800ae; - public static final int p_fontSize=0x7f0800aa; - public static final int p_notif_annoy=0x7f0800a0; - public static final int p_notif_defaultRemind=0x7f08009d; - public static final int p_notif_quietEnd=0x7f08009a; - public static final int p_notif_quietStart=0x7f080097; - public static final int p_notification_ringtone=0x7f0800a3; - public static final int p_sync_background=0x7f08007e; - public static final int p_sync_button=0x7f080078; - public static final int p_sync_every=0x7f080075; - public static final int p_sync_quiet=0x7f08007b; - public static final int p_sync_rtm=0x7f080072; - public static final int preferredDueDate_label=0x7f08003c; - public static final int prefs_annoy_desc=0x7f0800a2; - public static final int prefs_annoy_title=0x7f0800a1; - public static final int prefs_category_alerts=0x7f080096; - public static final int prefs_category_appearance=0x7f0800a6; - public static final int prefs_category_other=0x7f0800ad; - public static final int prefs_colorize_desc=0x7f0800a9; - public static final int prefs_colorize_title=0x7f0800a8; - public static final int prefs_deadlineTime_desc=0x7f0800b0; - public static final int prefs_deadlineTime_title=0x7f0800af; - public static final int prefs_deadlineVisible=0x7f0800b7; - public static final int prefs_deadlineVisible_default=0x7f0800ba; - public static final int prefs_deadlineVisible_desc=0x7f0800b9; - public static final int prefs_deadlineVisible_title=0x7f0800b8; - public static final int prefs_defaultRemind_desc=0x7f08009f; - public static final int prefs_defaultRemind_title=0x7f08009e; - public static final int prefs_fontSize_desc=0x7f0800ac; - public static final int prefs_fontSize_title=0x7f0800ab; - public static final int prefs_importanceVisible=0x7f0800bf; - public static final int prefs_importanceVisible_default=0x7f0800c2; - public static final int prefs_importanceVisible_desc=0x7f0800c1; - public static final int prefs_importanceVisible_title=0x7f0800c0; - public static final int prefs_notesVisible=0x7f0800cf; - public static final int prefs_notesVisible_default=0x7f0800d2; - public static final int prefs_notesVisible_desc=0x7f0800d1; - public static final int prefs_notesVisible_title=0x7f0800d0; - public static final int prefs_notification_desc=0x7f0800a5; - public static final int prefs_notification_title=0x7f0800a4; - public static final int prefs_quietEnd_desc=0x7f08009c; - public static final int prefs_quietEnd_title=0x7f08009b; - public static final int prefs_quietStart_desc=0x7f080099; - public static final int prefs_quietStart_title=0x7f080098; - public static final int prefs_reminderVisible=0x7f0800cb; - public static final int prefs_reminderVisible_default=0x7f0800ce; - public static final int prefs_reminderVisible_desc=0x7f0800cd; - public static final int prefs_reminderVisible_title=0x7f0800cc; - public static final int prefs_repeatVisible=0x7f0800c7; - public static final int prefs_repeatVisible_default=0x7f0800ca; - public static final int prefs_repeatVisible_desc=0x7f0800c9; - public static final int prefs_repeatVisible_title=0x7f0800c8; - public static final int prefs_tagsVisible=0x7f0800c3; - public static final int prefs_tagsVisible_default=0x7f0800c6; - public static final int prefs_tagsVisible_desc=0x7f0800c5; - public static final int prefs_tagsVisible_title=0x7f0800c4; - public static final int prefs_timeVisible=0x7f0800bb; - public static final int prefs_timeVisible_default=0x7f0800be; - public static final int prefs_timeVisible_desc=0x7f0800bd; - public static final int prefs_timeVisible_title=0x7f0800bc; - public static final int prefs_titleVisible=0x7f0800b3; - public static final int prefs_titleVisible_default=0x7f0800b6; - public static final int prefs_titleVisible_desc=0x7f0800b5; - public static final int prefs_titleVisible_title=0x7f0800b4; - public static final int progress_dialog=0x7f080066; - public static final int progress_suffix=0x7f08005b; - public static final int question_title=0x7f080089; + public static final int name_label=0x7f080036; + public static final int notes_hint=0x7f080043; + public static final int notes_label=0x7f080042; + public static final int notif_definiteDueDate=0x7f080093; + public static final int notif_preferredDueDate=0x7f080094; + public static final int notif_timerStarted=0x7f080095; + public static final int notification_dialog=0x7f08004e; + public static final int notification_label=0x7f080044; + public static final int notification_prefix=0x7f080045; + public static final int notify_no=0x7f08008d; + public static final int notify_snooze=0x7f08008c; + public static final int notify_snooze_title=0x7f08008e; + public static final int notify_yes=0x7f08008b; + public static final int overdue_suffix=0x7f080065; + public static final int p_colorize=0x7f0800a9; + public static final int p_deadlineTime=0x7f0800b0; + public static final int p_fontSize=0x7f0800ac; + public static final int p_notif_annoy=0x7f0800a2; + public static final int p_notif_defaultRemind=0x7f08009f; + public static final int p_notif_quietEnd=0x7f08009c; + public static final int p_notif_quietStart=0x7f080099; + public static final int p_notification_ringtone=0x7f0800a5; + public static final int p_sync_background=0x7f08007f; + public static final int p_sync_button=0x7f080079; + public static final int p_sync_every=0x7f080076; + public static final int p_sync_quiet=0x7f08007c; + public static final int p_sync_rtm=0x7f080073; + public static final int preferredDueDate_label=0x7f08003d; + public static final int prefs_annoy_desc=0x7f0800a4; + public static final int prefs_annoy_title=0x7f0800a3; + public static final int prefs_category_alerts=0x7f080098; + public static final int prefs_category_appearance=0x7f0800a8; + public static final int prefs_category_other=0x7f0800af; + public static final int prefs_colorize_desc=0x7f0800ab; + public static final int prefs_colorize_title=0x7f0800aa; + public static final int prefs_deadlineTime_desc=0x7f0800b2; + public static final int prefs_deadlineTime_title=0x7f0800b1; + public static final int prefs_deadlineVisible=0x7f0800b9; + public static final int prefs_deadlineVisible_default=0x7f0800bc; + public static final int prefs_deadlineVisible_desc=0x7f0800bb; + public static final int prefs_deadlineVisible_title=0x7f0800ba; + public static final int prefs_defaultRemind_desc=0x7f0800a1; + public static final int prefs_defaultRemind_title=0x7f0800a0; + public static final int prefs_fontSize_desc=0x7f0800ae; + public static final int prefs_fontSize_title=0x7f0800ad; + public static final int prefs_importanceVisible=0x7f0800c1; + public static final int prefs_importanceVisible_default=0x7f0800c4; + public static final int prefs_importanceVisible_desc=0x7f0800c3; + public static final int prefs_importanceVisible_title=0x7f0800c2; + public static final int prefs_notesVisible=0x7f0800d1; + public static final int prefs_notesVisible_default=0x7f0800d4; + public static final int prefs_notesVisible_desc=0x7f0800d3; + public static final int prefs_notesVisible_title=0x7f0800d2; + public static final int prefs_notification_desc=0x7f0800a7; + public static final int prefs_notification_title=0x7f0800a6; + public static final int prefs_quietEnd_desc=0x7f08009e; + public static final int prefs_quietEnd_title=0x7f08009d; + public static final int prefs_quietStart_desc=0x7f08009b; + public static final int prefs_quietStart_title=0x7f08009a; + public static final int prefs_reminderVisible=0x7f0800cd; + public static final int prefs_reminderVisible_default=0x7f0800d0; + public static final int prefs_reminderVisible_desc=0x7f0800cf; + public static final int prefs_reminderVisible_title=0x7f0800ce; + public static final int prefs_repeatVisible=0x7f0800c9; + public static final int prefs_repeatVisible_default=0x7f0800cc; + public static final int prefs_repeatVisible_desc=0x7f0800cb; + public static final int prefs_repeatVisible_title=0x7f0800ca; + public static final int prefs_tagsVisible=0x7f0800c5; + public static final int prefs_tagsVisible_default=0x7f0800c8; + public static final int prefs_tagsVisible_desc=0x7f0800c7; + public static final int prefs_tagsVisible_title=0x7f0800c6; + public static final int prefs_timeVisible=0x7f0800bd; + public static final int prefs_timeVisible_default=0x7f0800c0; + public static final int prefs_timeVisible_desc=0x7f0800bf; + public static final int prefs_timeVisible_title=0x7f0800be; + public static final int prefs_titleVisible=0x7f0800b5; + public static final int prefs_titleVisible_default=0x7f0800b8; + public static final int prefs_titleVisible_desc=0x7f0800b7; + public static final int prefs_titleVisible_title=0x7f0800b6; + public static final int progress_dialog=0x7f080067; + public static final int progress_suffix=0x7f08005c; + public static final int question_title=0x7f08008a; /** Repeat Interval Labels */ public static final int repeat_days=0x7f080005; - public static final int repeat_help_dialog=0x7f080050; - public static final int repeat_help_dialog_title=0x7f08004f; - public static final int repeat_help_hide=0x7f080051; - public static final int repeat_label=0x7f08003e; + public static final int repeat_help_dialog=0x7f080051; + public static final int repeat_help_dialog_title=0x7f080050; + public static final int repeat_help_hide=0x7f080052; + public static final int repeat_label=0x7f08003f; public static final int repeat_months=0x7f080007; - public static final int repeat_picker_title=0x7f08004e; - public static final int repeat_value_unset=0x7f08003f; + public static final int repeat_picker_title=0x7f08004f; + public static final int repeat_value_unset=0x7f080040; public static final int repeat_weeks=0x7f080006; /** buttons */ - public static final int save_label=0x7f080052; - public static final int startTimer_label=0x7f080059; - public static final int stopTimer_label=0x7f08005a; - public static final int stop_timer_title=0x7f080091; - public static final int sync_auth_request=0x7f080082; - public static final int sync_background_desc=0x7f080080; - public static final int sync_background_title=0x7f08007f; - public static final int sync_button_desc=0x7f08007a; - public static final int sync_button_title=0x7f080079; - public static final int sync_error=0x7f080081; - public static final int sync_every_desc=0x7f080077; - public static final int sync_every_title=0x7f080076; - public static final int sync_forget=0x7f080085; - public static final int sync_forget_confirm=0x7f080086; - public static final int sync_no_synchronizers=0x7f080087; - public static final int sync_now=0x7f080084; - public static final int sync_pref_group=0x7f08006f; - public static final int sync_pref_group_actions=0x7f080070; - public static final int sync_pref_group_options=0x7f080071; - public static final int sync_quiet_desc=0x7f08007d; - public static final int sync_quiet_title=0x7f08007c; - public static final int sync_rtm_desc=0x7f080074; - public static final int sync_rtm_notes=0x7f080083; - public static final int sync_rtm_title=0x7f080073; - public static final int tagList_context_create=0x7f080068; - public static final int tagList_context_delete=0x7f08006a; - public static final int tagList_context_edit=0x7f080069; - public static final int tagList_context_hideTag=0x7f08006c; - public static final int tagList_context_showTag=0x7f08006b; - public static final int tagList_menu_sortAlpha=0x7f08006d; - public static final int tagList_menu_sortSize=0x7f08006e; - public static final int tagList_titlePrefix=0x7f080067; - public static final int tags_label=0x7f080038; - public static final int taskEdit_menu_save=0x7f080056; + public static final int save_label=0x7f080053; + public static final int startTimer_label=0x7f08005a; + public static final int stopTimer_label=0x7f08005b; + public static final int stop_timer_title=0x7f080092; + public static final int sync_auth_request=0x7f080083; + public static final int sync_background_desc=0x7f080081; + public static final int sync_background_title=0x7f080080; + public static final int sync_button_desc=0x7f08007b; + public static final int sync_button_title=0x7f08007a; + public static final int sync_error=0x7f080082; + public static final int sync_every_desc=0x7f080078; + public static final int sync_every_title=0x7f080077; + public static final int sync_forget=0x7f080086; + public static final int sync_forget_confirm=0x7f080087; + public static final int sync_no_synchronizers=0x7f080088; + public static final int sync_now=0x7f080085; + public static final int sync_pref_group=0x7f080070; + public static final int sync_pref_group_actions=0x7f080071; + public static final int sync_pref_group_options=0x7f080072; + public static final int sync_quiet_desc=0x7f08007e; + public static final int sync_quiet_title=0x7f08007d; + public static final int sync_rtm_desc=0x7f080075; + public static final int sync_rtm_notes=0x7f080084; + public static final int sync_rtm_title=0x7f080074; + public static final int tagList_context_create=0x7f080069; + public static final int tagList_context_delete=0x7f08006b; + public static final int tagList_context_edit=0x7f08006a; + public static final int tagList_context_hideTag=0x7f08006d; + public static final int tagList_context_showTag=0x7f08006c; + public static final int tagList_menu_sortAlpha=0x7f08006e; + public static final int tagList_menu_sortSize=0x7f08006f; + public static final int tagList_titlePrefix=0x7f080068; + public static final int tags_label=0x7f080039; + public static final int taskEdit_label=0x7f080032; + public static final int taskEdit_menu_save=0x7f080057; public static final int taskEdit_titleGeneric=0x7f080030; public static final int taskEdit_titlePrefix=0x7f080031; public static final int taskList_alarmSuffix=0x7f080017; @@ -423,18 +427,18 @@ public final class R { public static final int taskList_tagsPrefix=0x7f080018; public static final int taskList_titlePrefix=0x7f08000a; public static final int taskList_titleTagPrefix=0x7f08000b; - public static final int taskView_creationDate=0x7f080061; - public static final int taskView_definiteDueDate=0x7f08005f; - public static final int taskView_elapsed=0x7f08005d; - public static final int taskView_estimated=0x7f08005e; - public static final int taskView_notes=0x7f080063; - public static final int taskView_notifyTitle=0x7f080058; - public static final int taskView_preferredDueDate=0x7f080060; - public static final int taskView_tags=0x7f080062; - public static final int taskView_title=0x7f080057; - public static final int task_edit_tab_1=0x7f080032; - public static final int task_edit_tab_2=0x7f080033; - public static final int task_edit_tab_3=0x7f080034; + public static final int taskView_creationDate=0x7f080062; + public static final int taskView_definiteDueDate=0x7f080060; + public static final int taskView_elapsed=0x7f08005e; + public static final int taskView_estimated=0x7f08005f; + public static final int taskView_notes=0x7f080064; + public static final int taskView_notifyTitle=0x7f080059; + public static final int taskView_preferredDueDate=0x7f080061; + public static final int taskView_tags=0x7f080063; + public static final int taskView_title=0x7f080058; + public static final int task_edit_tab_1=0x7f080033; + public static final int task_edit_tab_2=0x7f080034; + public static final int task_edit_tab_3=0x7f080035; } public static final class style { public static final int Alert=0x7f0a0000; diff --git a/src/com/timsu/astrid/activities/TaskEdit.java b/src/com/timsu/astrid/activities/TaskEdit.java index 8eeae09d8..d2d276701 100644 --- a/src/com/timsu/astrid/activities/TaskEdit.java +++ b/src/com/timsu/astrid/activities/TaskEdit.java @@ -239,6 +239,11 @@ public class TaskEdit extends TaskModificationTabbedActivity { if(name.getText().length() == 0) return; + // if we've removed a deadline, delete alarms + if((definiteDueDate.getDate() == null && model.getDefiniteDueDate() != null) || + (preferredDueDate.getDate() == null && model.getPreferredDueDate() != null)) + Notifications.deleteAlarm(this, model.getTaskIdentifier().getId()); + model.setName(name.getText().toString()); model.setEstimatedSeconds(estimatedDuration.getTimeDurationInSeconds()); model.setElapsedSeconds(elapsedDuration.getTimeDurationInSeconds()); diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java index ea81e9a16..b7860763f 100644 --- a/src/com/timsu/astrid/activities/TaskListAdapter.java +++ b/src/com/timsu/astrid/activities/TaskListAdapter.java @@ -120,14 +120,33 @@ public class TaskListAdapter extends ArrayAdapter { public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; - if(view == null) + if(view == null) { view = inflater.inflate(resource, parent, false); + initializeView(view); + } setupView(view, objects.get(position)); addListeners(position, view); return view; } + + /** + * Perform initial setup on the row + * + * @param view + */ + private void initializeView(View view) { + final TextView name = ((TextView)view.findViewById(R.id.task_name)); + if(fontSizePreference != null && fontSizePreference > 0) + name.setTextSize(fontSizePreference); + } + /** + * Setup the given view for the specified task + * + * @param view + * @param task + */ private void setupView(View view, final TaskModelForList task) { Resources r = activity.getResources(); @@ -148,7 +167,7 @@ public class TaskListAdapter extends ArrayAdapter { } /** Helper method to set the visibility based on if there's stuff inside */ - private void setVisibility(TextView v) { + private static void setVisibility(TextView v) { if(v.getText().length() > 0) v.setVisibility(View.VISIBLE); else @@ -174,14 +193,10 @@ public class TaskListAdapter extends ArrayAdapter { task.putCachedLabel(KEY_NAME, cachedResult); } name.setText(cachedResult); - if(CACHE_TRUE.equals(task.getCachedLabel(KEY_HIDDEN))) name.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); - else if(name.getTypeface().isItalic()) + else name.setTypeface(Typeface.DEFAULT_BOLD); - - if(fontSizePreference != null && fontSizePreference > 0) - name.setTextSize(fontSizePreference); } setVisibility(name); diff --git a/src/com/timsu/astrid/data/task/TaskController.java b/src/com/timsu/astrid/data/task/TaskController.java index 883dd4207..811ffbd98 100644 --- a/src/com/timsu/astrid/data/task/TaskController.java +++ b/src/com/timsu/astrid/data/task/TaskController.java @@ -24,6 +24,7 @@ import java.util.Date; import java.util.HashSet; import java.util.List; +import android.R; import android.app.Activity; import android.content.ContentValues; import android.content.Context; @@ -217,12 +218,7 @@ public class TaskController extends AbstractController { if(values.size() == 0) // nothing changed return true; - // if this task is completed, perform some handling - if(values.containsKey(AbstractTaskModel.PROGRESS_PERCENTAGE) && - values.getAsInteger(AbstractTaskModel.PROGRESS_PERCENTAGE) - == AbstractTaskModel.COMPLETE_PERCENTAGE) { - onTaskSetCompleted(task, values); - } + onTaskSave(task, values); saveSucessful = database.update(TASK_TABLE_NAME, values, KEY_ROWID + "=" + id, null) > 0; @@ -238,7 +234,35 @@ public class TaskController extends AbstractController { return saveSucessful; } - /** Called when this task is set to completed. + /** + * Called when the task is saved. Perform some processing on the task. + * + * @param task + * @param values + */ + private void onTaskSave(AbstractTaskModel task, ContentValues values) { + // task was completed + if(values.containsKey(AbstractTaskModel.PROGRESS_PERCENTAGE) && + values.getAsInteger(AbstractTaskModel.PROGRESS_PERCENTAGE) + == AbstractTaskModel.COMPLETE_PERCENTAGE) { + onTaskSetCompleted(task, values); + } + + // task timer was updated + if(values.containsKey(AbstractTaskModel.TIMER_START)) { + // show notification bar if timer was started + if(values.get(AbstractTaskModel.TIMER_START) != null) { + Notifications.showTimingNotification(context, + task.getTaskIdentifier(), task.getName()); + } else { + Notifications.clearAllNotifications(context, task.getTaskIdentifier()); + } + } + } + + + /** + * Called when this task is set to completed. * * @param task task to process * @param values mutable map of values to save @@ -246,14 +270,7 @@ public class TaskController extends AbstractController { private void onTaskSetCompleted(AbstractTaskModel task, ContentValues values) { values.put(AbstractTaskModel.COMPLETION_DATE, System.currentTimeMillis()); - // handle repeat - Cursor cursor = fetchTaskCursor(task.getTaskIdentifier(), - TaskModelForRepeat.FIELD_LIST); - TaskModelForRepeat repeatModel = new TaskModelForRepeat(cursor, values); - RepeatInfo repeatInfo = repeatModel.getRepeat(); - if(repeatInfo != null) - repeatModel.repeatTaskBy(context, this, repeatInfo); - cursor.close(); + } /** Set last notification date */ diff --git a/src/com/timsu/astrid/sync/RTMSyncService.java b/src/com/timsu/astrid/sync/RTMSyncService.java index 72720dbaa..85725c09b 100644 --- a/src/com/timsu/astrid/sync/RTMSyncService.java +++ b/src/com/timsu/astrid/sync/RTMSyncService.java @@ -282,11 +282,13 @@ public class RTMSyncService extends SynchronizationService { id.taskId, Priority.values()[task.importance.ordinal()]); // due date - Date dueDate = task.definiteDueDate; + Date dueDate = task.dueDate; + if(dueDate == null) + dueDate = task.definiteDueDate; if(dueDate == null) dueDate = task.preferredDueDate; - if(dueDate != remoteTask.definiteDueDate && - !dueDate.equals(remoteTask.definiteDueDate)) + if(dueDate != remoteTask.dueDate && + !dueDate.equals(remoteTask.dueDate)) rtmService.tasks_setDueDate(timeline, id.listId, id.taskSeriesId, id.taskId, dueDate, dueDate != null); @@ -374,14 +376,12 @@ public class RTMSyncService extends SynchronizationService { if(rtmTask.getDue() != null) { Date due = rtmTask.getDue(); - // just a day - set it to midnight + // if no time is set, set it to midnight if(due.getHours() == 0 && due.getMinutes() == 0 && due.getSeconds() == 0) { due.setHours(23); due.setMinutes(59); } - - task.definiteDueDate = due; - + task.dueDate = due; } task.progressPercentage = (rtmTask.getCompleted() == null) ? 0 : 100; diff --git a/src/com/timsu/astrid/sync/TaskProxy.java b/src/com/timsu/astrid/sync/TaskProxy.java index 0247a806d..02e741141 100644 --- a/src/com/timsu/astrid/sync/TaskProxy.java +++ b/src/com/timsu/astrid/sync/TaskProxy.java @@ -41,6 +41,7 @@ public class TaskProxy { Date creationDate = null; Date completionDate = null; + Date dueDate = null; Date definiteDueDate = null; Date preferredDueDate = null; Date hiddenUntil = null; @@ -93,6 +94,8 @@ public class TaskProxy { creationDate = other.creationDate; if(other.completionDate != null) completionDate = other.completionDate; + if(other.dueDate != null) + dueDate = other.dueDate; if(other.definiteDueDate != null) definiteDueDate = other.definiteDueDate; if(other.preferredDueDate != null) @@ -119,6 +122,7 @@ public class TaskProxy { completionDate = task.getCompletionDate(); definiteDueDate = task.getDefiniteDueDate(); preferredDueDate = task.getPreferredDueDate(); + dueDate = definiteDueDate != null ? definiteDueDate : preferredDueDate; hiddenUntil = task.getHiddenUntil(); estimatedSeconds = task.getEstimatedSeconds(); elapsedSeconds = task.getElapsedSeconds(); @@ -154,13 +158,27 @@ public class TaskProxy { task.setCreationDate(creationDate); if(completionDate != null) task.setCompletionDate(completionDate); - if(definiteDueDate != null) - task.setDefiniteDueDate(definiteDueDate); - if(preferredDueDate != null) - task.setPreferredDueDate(preferredDueDate); + + // date handling: if sync service only supports one type of due date, + // we have to figure out which field to write to based on what + // already has data + + if(dueDate != null) { + if(task.getDefiniteDueDate() != null) + task.setDefiniteDueDate(dueDate); + else if(task.getPreferredDueDate() != null) + task.setPreferredDueDate(dueDate); + else + task.setDefiniteDueDate(dueDate); + } else { + if(definiteDueDate != null) + task.setDefiniteDueDate(definiteDueDate); + if(preferredDueDate != null) + task.setPreferredDueDate(preferredDueDate); + } + if(hiddenUntil != null) task.setHiddenUntil(hiddenUntil); - if(estimatedSeconds != null) task.setEstimatedSeconds(estimatedSeconds); if(elapsedSeconds != null) diff --git a/src/com/timsu/astrid/utilities/Notifications.java b/src/com/timsu/astrid/utilities/Notifications.java index 3445a8437..09696c31b 100644 --- a/src/com/timsu/astrid/utilities/Notifications.java +++ b/src/com/timsu/astrid/utilities/Notifications.java @@ -20,6 +20,7 @@ import android.net.Uri; import android.util.Log; import com.timsu.astrid.R; +import com.timsu.astrid.activities.TaskView; import com.timsu.astrid.activities.TaskViewNotifier; import com.timsu.astrid.data.alerts.AlertController; import com.timsu.astrid.data.task.TaskController; @@ -135,9 +136,10 @@ public class Notifications extends BroadcastReceiver { if(task.getTaskIdentifier() == null) return; + // return if we don't need to go any further if(shouldDeleteAlarm(task)) { - deleteAlarm(context, task.getTaskIdentifier().getId()); - return; + deleteAlarm(context, task.getTaskIdentifier().getId()); + return; } // periodic reminders @@ -386,7 +388,7 @@ public class Notifications extends BroadcastReceiver { // create notification object String appName = r.getString(R.string.app_name); Notification notification = new Notification( - R.drawable.notification_icon, reminder, + R.drawable.notification_tag_pink, reminder, System.currentTimeMillis()); notification.setLatestEventInfo(context, appName, @@ -434,4 +436,39 @@ public class Notifications extends BroadcastReceiver { return true; } + /** Show a notification when a user is "on-the-clock" for a given task */ + public static boolean showTimingNotification(Context context, + TaskIdentifier taskId, String taskName) { + + String text = context.getResources().getString(R.string.notif_timerStarted) + + " " + taskName; + NotificationManager nm = (NotificationManager) context + .getSystemService(Context.NOTIFICATION_SERVICE); + Resources r = context.getResources(); + + Intent notifyIntent = new Intent(context, TaskView.class); + notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); + notifyIntent.putExtra(TaskViewNotifier.LOAD_INSTANCE_TOKEN, taskId.getId()); + notifyIntent.putExtra(TaskViewNotifier.FROM_NOTIFICATION_TOKEN, true); + PendingIntent pendingIntent = PendingIntent.getActivity(context, + (int)taskId.getId(), notifyIntent, PendingIntent.FLAG_ONE_SHOT); + + // create notification object + String appName = r.getString(R.string.app_name); + Notification notification = new Notification( + R.drawable.notification_clock, text, + System.currentTimeMillis()); + notification.setLatestEventInfo(context, + appName, + text, + pendingIntent); + notification.flags |= Notification.FLAG_ONGOING_EVENT; + + Log.w("Astrid", "Logging timing notification: " + text); + nm.notify((int)taskId.getId(), notification); + + return true; + } + + } \ No newline at end of file