From 1150f21f2be19861510c59d6d999d3431b966389 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 18 May 2012 12:49:19 -0700 Subject: [PATCH 1/5] Skeleton for reengagement notifications --- astrid/AndroidManifest.xml | 6 +++ .../reminders/ReengagementReceiver.java | 24 +++++++++++ .../astrid/reminders/ReengagementService.java | 41 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index c68897521..87accd564 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -209,6 +209,12 @@ + + + + + + diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java new file mode 100644 index 000000000..f6019b8e8 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java @@ -0,0 +1,24 @@ +package com.todoroo.astrid.reminders; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.andlib.utility.Preferences; + +public class ReengagementReceiver extends BroadcastReceiver { + + + + @Override + public void onReceive(Context context, Intent intent) { + + int reengagementReminders = Preferences.getInt(ReengagementService.PREF_REENGAGEMENT_COUNT, 1); + Preferences.setInt(ReengagementService.PREF_REENGAGEMENT_COUNT, reengagementReminders + 1); + + // TODO: show dialog + + ReengagementService.scheduleReengagementAlarm(context); + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java new file mode 100644 index 000000000..6b6a1cde5 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java @@ -0,0 +1,41 @@ +package com.todoroo.astrid.reminders; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; + +import com.todoroo.andlib.utility.DateUtilities; +import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.utility.Constants; + +public final class ReengagementService { + + private static final int REQUEST_CODE = 10; + + public static final String PREF_REENGAGEMENT_COUNT = "pref_reengagement_count"; //$NON-NLS-1$ + + public static final String BROADCAST_SHOW_REENGAGEMENT = Constants.PACKAGE + ".SHOW_REENGAGEMENT"; //$NON-NLS-1$ + + public static void scheduleReengagementAlarm(Context context) { + AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); + Intent intent = new Intent(BROADCAST_SHOW_REENGAGEMENT); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, 0); + am.cancel(pendingIntent); + + long time = getNextReminderTime(); + am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); + } + + private static long getNextReminderTime() { + int reengagementReminders = Preferences.getInt(PREF_REENGAGEMENT_COUNT, 1); + int days; + if (reengagementReminders >= 4) + days = 12; + else + days = 3 * reengagementReminders; + + return DateUtilities.now() + DateUtilities.ONE_DAY * days; + } + +} From cfcbc468c832e885a1b918bc9c57127129d2dbe9 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 18 May 2012 13:49:58 -0700 Subject: [PATCH 2/5] More skeleton stuff for reengagement, deferring for design --- .../reminders/ReengagementActivity.java | 63 ++++++++++++++++ .../reminders/ReengagementReceiver.java | 4 +- .../res/layout/astrid_reengagement_view.xml | 71 +++++++++++++++++++ astrid/res/layout/reengagement_activity.xml | 9 +++ astrid/res/values/strings-reminders.xml | 8 +++ 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java create mode 100644 astrid/res/layout/astrid_reengagement_view.xml create mode 100644 astrid/res/layout/reengagement_activity.xml diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java new file mode 100644 index 000000000..f967bf09d --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java @@ -0,0 +1,63 @@ +package com.todoroo.astrid.reminders; + +import android.app.Activity; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.TextView; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.service.StartupService; +import com.todoroo.astrid.service.ThemeService; + +public class ReengagementActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + new StartupService().onStartupApplication(this); + super.onCreate(savedInstanceState); + DependencyInjectionService.getInstance().inject(this); + + setContentView(R.layout.reengagement_activity); + + setUpUi(); + } + + private void setUpUi() { + View dismiss1 = findViewById(R.id.dismiss); + View dismiss2 = findViewById(R.id.dismiss_button); + OnClickListener dismissListener = new OnClickListener() { + @Override + public void onClick(View v) { + finish(); + AndroidUtilities.callOverridePendingTransition(ReengagementActivity.this, 0, android.R.anim.fade_out); + } + }; + + dismiss1.setOnClickListener(dismissListener); + dismiss2.setOnClickListener(dismissListener); + + TextView seeTasksButton = (TextView) findViewById(R.id.see_tasks_button); + seeTasksButton.setBackgroundColor(getResources().getColor(ThemeService.getThemeColor())); + seeTasksButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // + } + }); + + + ((TextView) findViewById(R.id.reminder_title)).setText("TITLE"); + + if (!Preferences.getBoolean(R.string.p_rmd_nagging, true)) { + findViewById(R.id.missed_calls_speech_bubble).setVisibility(View.GONE); + } else { + TextView dialogView = (TextView) findViewById(R.id.reminder_message); + dialogView.setText(Notifications.getRandomReminder(getResources().getStringArray(R.array.rmd_reengage_dialog_options))); + } + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java index f6019b8e8..3a75ffb68 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java @@ -16,7 +16,9 @@ public class ReengagementReceiver extends BroadcastReceiver { int reengagementReminders = Preferences.getInt(ReengagementService.PREF_REENGAGEMENT_COUNT, 1); Preferences.setInt(ReengagementService.PREF_REENGAGEMENT_COUNT, reengagementReminders + 1); - // TODO: show dialog + Intent reengagement = new Intent(context, ReengagementActivity.class); + reengagement.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + context.startActivity(reengagement); ReengagementService.scheduleReengagementAlarm(context); } diff --git a/astrid/res/layout/astrid_reengagement_view.xml b/astrid/res/layout/astrid_reengagement_view.xml new file mode 100644 index 000000000..c88db9640 --- /dev/null +++ b/astrid/res/layout/astrid_reengagement_view.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/astrid/res/layout/reengagement_activity.xml b/astrid/res/layout/reengagement_activity.xml new file mode 100644 index 000000000..ebe33d588 --- /dev/null +++ b/astrid/res/layout/reengagement_activity.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/astrid/res/values/strings-reminders.xml b/astrid/res/values/strings-reminders.xml index 4b928404b..f0af2220b 100644 --- a/astrid/res/values/strings-reminders.xml +++ b/astrid/res/values/strings-reminders.xml @@ -60,6 +60,14 @@ Reminder: + + + See my tasks + + + Some stuff! + + From 27c3d3cd4af1ba7e6b5f69edd89834392c35a354 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 1 Jun 2012 18:55:42 -0700 Subject: [PATCH 3/5] Reengagement notifications are working in full --- astrid/AndroidManifest.xml | 2 +- .../reminders/NotificationFragment.java | 8 -- .../reminders/ReengagementActivity.java | 63 ---------------- .../reminders/ReengagementFragment.java | 49 ++++++++++++ .../reminders/ReengagementReceiver.java | 60 ++++++++++++++- .../astrid/reminders/ReengagementService.java | 4 +- .../speech_bubble_reminder.9.png | Bin 760 -> 2358 bytes .../res/drawable/speech_bubble_reminder.9.png | Bin 760 -> 2358 bytes .../res/layout/astrid_reengagement_view.xml | 71 ------------------ astrid/res/layout/reengagement_activity.xml | 9 --- .../layout/task_list_body_reengagement.xml | 71 ++++++++++++++++++ astrid/res/values/strings-reminders.xml | 6 +- .../astrid/activity/TaskListActivity.java | 2 + .../astrid/service/StartupService.java | 3 + .../astrid/service/StatisticsConstants.java | 1 + .../com/todoroo/astrid/utility/Constants.java | 1 + 16 files changed, 190 insertions(+), 160 deletions(-) delete mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementFragment.java delete mode 100644 astrid/res/layout/astrid_reengagement_view.xml delete mode 100644 astrid/res/layout/reengagement_activity.xml create mode 100644 astrid/res/layout/task_list_body_reengagement.xml diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index 87accd564..543e3a012 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -210,7 +210,7 @@ - + diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java index a4a44cd4b..e4183d6ed 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/NotificationFragment.java @@ -43,7 +43,6 @@ import com.todoroo.astrid.activity.DisposableTaskListFragment; import com.todoroo.astrid.core.PluginServices; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.repeats.RepeatControlSet; -import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.ui.NumberPicker; @@ -66,13 +65,6 @@ public class NotificationFragment extends DisposableTaskListFragment implements private long taskId; - @Override - public void onCreate(Bundle savedInstanceState) { - StartupService.bypassInitialization(); - - super.onCreate(savedInstanceState); - } - /* (non-Javadoc) * @see com.todoroo.astrid.activity.TaskListActivity#onActivityCreated(android.os.Bundle) */ diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java deleted file mode 100644 index f967bf09d..000000000 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementActivity.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.todoroo.astrid.reminders; - -import android.app.Activity; -import android.os.Bundle; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.TextView; - -import com.timsu.astrid.R; -import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.andlib.utility.Preferences; -import com.todoroo.astrid.service.StartupService; -import com.todoroo.astrid.service.ThemeService; - -public class ReengagementActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - new StartupService().onStartupApplication(this); - super.onCreate(savedInstanceState); - DependencyInjectionService.getInstance().inject(this); - - setContentView(R.layout.reengagement_activity); - - setUpUi(); - } - - private void setUpUi() { - View dismiss1 = findViewById(R.id.dismiss); - View dismiss2 = findViewById(R.id.dismiss_button); - OnClickListener dismissListener = new OnClickListener() { - @Override - public void onClick(View v) { - finish(); - AndroidUtilities.callOverridePendingTransition(ReengagementActivity.this, 0, android.R.anim.fade_out); - } - }; - - dismiss1.setOnClickListener(dismissListener); - dismiss2.setOnClickListener(dismissListener); - - TextView seeTasksButton = (TextView) findViewById(R.id.see_tasks_button); - seeTasksButton.setBackgroundColor(getResources().getColor(ThemeService.getThemeColor())); - seeTasksButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - // - } - }); - - - ((TextView) findViewById(R.id.reminder_title)).setText("TITLE"); - - if (!Preferences.getBoolean(R.string.p_rmd_nagging, true)) { - findViewById(R.id.missed_calls_speech_bubble).setVisibility(View.GONE); - } else { - TextView dialogView = (TextView) findViewById(R.id.reminder_message); - dialogView.setText(Notifications.getRandomReminder(getResources().getStringArray(R.array.rmd_reengage_dialog_options))); - } - } - -} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementFragment.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementFragment.java new file mode 100644 index 000000000..696c81160 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementFragment.java @@ -0,0 +1,49 @@ +package com.todoroo.astrid.reminders; + +import android.content.res.Resources; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.timsu.astrid.R; +import com.todoroo.astrid.activity.DisposableTaskListFragment; +import com.todoroo.astrid.service.ThemeService; + +public class ReengagementFragment extends DisposableTaskListFragment { + + @Override + protected void initializeData() { + // hide quick add + getView().findViewById(R.id.taskListFooter).setVisibility(View.GONE); + + Resources r = getActivity().getResources(); + + int color = r.getColor(ThemeService.getThemeColor()); + + View snooze = getView().findViewById(R.id.reminder_snooze); + snooze.setBackgroundColor(color); + snooze.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + getActivity().finish(); + } + }); + + TextView reminder = (TextView) getView().findViewById(R.id.reminder_message); + reminder.setText(Notifications.getRandomReminder(r.getStringArray(R.array.rmd_reengage_dialog_options))); + + super.initializeData(); + } + + @Override + protected View getListBody(ViewGroup root) { + ViewGroup parent = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.task_list_body_reengagement, root, false); + + View taskListView = super.getListBody(parent); + parent.addView(taskListView, 0); + + return parent; + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java index 3a75ffb68..4e685adda 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementReceiver.java @@ -1,14 +1,28 @@ package com.todoroo.astrid.reminders; +import android.app.Notification; +import android.app.PendingIntent; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import com.timsu.astrid.R; +import com.todoroo.andlib.service.NotificationManager; +import com.todoroo.andlib.service.NotificationManager.AndroidNotificationManager; +import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.utility.Preferences; +import com.todoroo.astrid.activity.TaskListActivity; +import com.todoroo.astrid.activity.TaskListFragment; +import com.todoroo.astrid.api.FilterWithCustomIntent; +import com.todoroo.astrid.core.SortHelper; +import com.todoroo.astrid.data.TaskApiDao.TaskCriteria; +import com.todoroo.astrid.utility.Constants; public class ReengagementReceiver extends BroadcastReceiver { - + private static final int TASK_LIMIT = 3; @Override public void onReceive(Context context, Intent intent) { @@ -16,9 +30,47 @@ public class ReengagementReceiver extends BroadcastReceiver { int reengagementReminders = Preferences.getInt(ReengagementService.PREF_REENGAGEMENT_COUNT, 1); Preferences.setInt(ReengagementService.PREF_REENGAGEMENT_COUNT, reengagementReminders + 1); - Intent reengagement = new Intent(context, ReengagementActivity.class); - reengagement.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - context.startActivity(reengagement); + Intent notifIntent = new Intent(context, TaskListActivity.class); + + QueryTemplate template = new QueryTemplate().where(TaskCriteria.activeVisibleMine()); + String sql = SortHelper.adjustQueryForFlagsAndSort(template.toString(), 0, SortHelper.SORT_AUTO) + " LIMIT " + TASK_LIMIT; //$NON-NLS-1$ + + FilterWithCustomIntent filter = new FilterWithCustomIntent(context.getString(R.string.rmd_NoA_filter), + context.getString(R.string.rmd_NoA_filter), + sql, + null); + filter.customTaskList = new ComponentName(context, ReengagementFragment.class); + + notifIntent.setAction("NOTIFY_reengagement"); //$NON-NLS-1$ + notifIntent.putExtra(TaskListFragment.TOKEN_FILTER, filter); + notifIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + notifIntent.putExtra(TaskListActivity.TOKEN_SOURCE, Constants.SOURCE_REENGAGEMENT); + + String text = context.getString(R.string.rmd_reengage_notif); + NotificationManager manager = new AndroidNotificationManager(context); + Notification notification = new Notification(R.drawable.notif_astrid, + text, System.currentTimeMillis()); + + PendingIntent pendingIntent = PendingIntent.getActivity(context, + 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + notification.setLatestEventInfo(context, + "", //$NON-NLS-1$ + text, + pendingIntent); + + notification.flags |= Notification.FLAG_AUTO_CANCEL; + if(Preferences.getBoolean(R.string.p_rmd_persistent, true)) { + notification.flags |= Notification.FLAG_NO_CLEAR | + Notification.FLAG_SHOW_LIGHTS; + notification.ledOffMS = 5000; + notification.ledOnMS = 700; + notification.ledARGB = Color.YELLOW; + } else { + notification.defaults = Notification.DEFAULT_LIGHTS; + } + + manager.notify(0, notification); ReengagementService.scheduleReengagementAlarm(context); } diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java index 6b6a1cde5..632f1352c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReengagementService.java @@ -31,9 +31,9 @@ public final class ReengagementService { int reengagementReminders = Preferences.getInt(PREF_REENGAGEMENT_COUNT, 1); int days; if (reengagementReminders >= 4) - days = 12; + days = 8; else - days = 3 * reengagementReminders; + days = 2 * reengagementReminders; return DateUtilities.now() + DateUtilities.ONE_DAY * days; } diff --git a/astrid/res/drawable-hdpi/speech_bubble_reminder.9.png b/astrid/res/drawable-hdpi/speech_bubble_reminder.9.png index aa29d212ef67aa6670198a6612d618e966c991d0..50b1902ef72f8d6301a4c14100e5aeab2ca1c1f2 100644 GIT binary patch literal 2358 zcmV-63CZ?}P)yyk{~L91chsS%V%@ySy;G(J9Y_l+$qEC4Jyw{PFRdydxD z)>CR)R#2}uy|yT^XtkErHhWT?(|J{S1N_a*&(8x0fsgw72C~@_U9v3yNYz-_0alqT z@r5NNWy*p18X8jMb7Fnw|8urkf@1K+xJ3qUx0Rpj;h$d-^) z!S>?Ms}f68RMd}CQZl+j;fNB<>@5E9AgVd#Lcq?y?w)?4Z*I}0E*ejXQHxI{XgoT*AM_Qd2eug_1n z*xqIO=1l;h&EH-i{`sN7XsNm1cMVrOW-rgDre!updVA?6t8;p020&=D-U)^t6wHdp4u;JzGpx?3sVM-V@vCM0 zJ7*6HMuT7g9xa&1UXn#35t?Sx+2rITfY4^yUfk&{S2vh&IIPrpryS4G!~5CA7lp`r{UpI0HIAxOj7YTrD_Kg zQ0g2W9sv*<-&&{^%$+Y^W;gqMe&y*fLqo#=LgQNt{wO9@g4wWP!_N|v(>&c?FAa~3 z(BRMzfY8Rq$LUJ(H%~SgNs?ZYWYb2r9P8$Hr-dUCgX(Hx$DgX0!e1w(UD73yUt2FA$*N??UMt7ywu{_<4Ql zO7Wuyvu2IFiiPqPfA;LI-FxQwhdDjr5PQK9>K`1S-u`}oWoL-(#V=jH!h*3sTrfJF z?nS*`j!j5RsoeMBeyXUfqDWsK4Gj-dAAeEy-vG-MKhGa37_C;jnr-A$QqwZp4}Nxt z>gpR=Abedn%wA}KBE9_p%iiG72wlANfF+s3;aHiJl=P}SF?sivE!)B;zCK0nmNx1i z7*s@h`zRdgW%>Y~34DUMco5- zFgWz!V7{MaY__C7T5XA+Z`!|6T!2b34#kAVev7VwqTg^QQTVtt5B ze@u-0ir!#MO-@N~`0(HR$yt7le1RbKvT#ByoM0#nu&nWOoj>{Vp@O;R0>BG;z5J#n zKHJq^QOIKY-~L4ak3U*LM=VD25!(bBIa*|H-oJ=^o?e?F&* z>n`#KdXx(S`~ZPq2w>UZSIYQ@^Z$1+_xxzmPuQ&UuFalw<%3;+yH!|pf!f%*VE$*xW-$ETXtsWooxM47`0!Ekc)Ib&hUF0qn*a(6pKvhW zk9AQ|FC`_XdYhYDlv#$~NCqIXFx#K277QEDrKV*zH@jQd`Y%X6zaKzoJ)sa46c(uy z%$-}5Gu=%r7(biN`0vC3h%DF>qVold5DfpkrkfoQKxBc%2!?+%!0QW;r`rc0H2#sv zx$}i829uWQZfI<#Zm*xZJYE2y`TRl3KUbi3Fik8NA3I<-fY5yYfcnAIH#D;8%uAhJ z9sr^7jsN|Ep(hiJtOQe6-=Ngl(b)wcG`>jwRLm?2(624E%NfusT@pg1GRT}sI{#VKxmy^UdqiwFaS#_n0gjW7dv1F zfY3U-y44S+x~7)e+B>MFwGBXM{7M;rAdITPxT2_UkT)^_!S;m<1L(;2@n20&zdYr%hAPvu~$STJtl_r(B+ zj9)2JJ(zDRD%o__MEt%O0Fm)4Wv5P`Q74$SYaJ_7Qq!Bit+=k#$?uB+5E)-7ojjF8 z*7yWfo=dhOF*()6pYo4jV7Uate^|_Hu{Em^jE0q%TXf;FvSF&NYXA@$zfyMS%cCUA zrWB1DLzXR>hmU-v1XEp847Op1q{g$$wHM7)g?TyVbFM)>U1LKR5`D-`B-2 zV5Mhd_r=7-{8XdTSYff+b92t*QGG)bJ8&I&gK`~T@&IT1ePjSb)E7*_cG@-WutGhSob*`j^{LsIoNde zx-B88l)r&<=Zln06ki|miUF32Dpw8hEd;;9o0+v~z-TnvG*4@+UAuOrWVEca+mp|4 z+Pro2U;92{Z|oR-b^Ih9KLPM`@bmA;(c|>VfrGSt#|Lw%X_+l%vu&p&#s5OHR7PB! zBWe$!-$cbKiV2D2r;+hn$R02UKJ@5~lk4Vy`J84RYsXbpznX|>uHG#D5d%V!Y4 cQ})Q?zsXjmgv-52ZvX%Q07*qoM6N<$f`&Yfpa1{> literal 760 zcmVFh-bgUie8e6}GQF;Ia_%8qBBy*{XcOWB-GN3tNh@AlNp zvutjsBAK7{x;ZsLruWL;H7G9!EE#x%hDY~vom zWJMK`49PCIEe+CBMJS`PCvHoFT>a-?#F`g6vF!USCp5*EDngl(y>?rgL@4kFp_D=a zZ&5%fAQTV^2nB>96oeua5DEwdY7)vsp&*p@q0GtNIxRx^c_1^h-Pv%+6f*@^6xGa-~V|C!J4nU?Ly?l>1hY5$S0k=d&3Z1&OV z5K8-K=4E@br%s4ae(%YGTAyFJ?34(leK1|wlI&FJOY9NKZ-0@bFSAD|zHtko_*P&L z3J3*+0zv_yfKY^jP=o?P0il3UKqw#-5Q2yHHwB zKIA9hBa}9wjLmwTmIk?1{A*?3bF18RTN-40QH8wVlWt3cEUhY()ox2eyvW8?6-sw@ z+l^^}V?~wn04uYv?o5rn&*m0Y%Y*E4Yiev~(Fu8=A>U*1mW8@GoOKnQRQ5ed>Rq>| z23nsi-`4s^z8DC3;L+LUvhVpGKX`pGh$k1$7wl+JGJ;)xJb#RZf q8`<7$T{b`KE&$-aQJM|F{>V4WkkGFkf0HEu0000yyk{~L91chsS%V%@ySy;G(J9Y_l+$qEC4Jyw{PFRdydxD z)>CR)R#2}uy|yT^XtkErHhWT?(|J{S1N_a*&(8x0fsgw72C~@_U9v3yNYz-_0alqT z@r5NNWy*p18X8jMb7Fnw|8urkf@1K+xJ3qUx0Rpj;h$d-^) z!S>?Ms}f68RMd}CQZl+j;fNB<>@5E9AgVd#Lcq?y?w)?4Z*I}0E*ejXQHxI{XgoT*AM_Qd2eug_1n z*xqIO=1l;h&EH-i{`sN7XsNm1cMVrOW-rgDre!updVA?6t8;p020&=D-U)^t6wHdp4u;JzGpx?3sVM-V@vCM0 zJ7*6HMuT7g9xa&1UXn#35t?Sx+2rITfY4^yUfk&{S2vh&IIPrpryS4G!~5CA7lp`r{UpI0HIAxOj7YTrD_Kg zQ0g2W9sv*<-&&{^%$+Y^W;gqMe&y*fLqo#=LgQNt{wO9@g4wWP!_N|v(>&c?FAa~3 z(BRMzfY8Rq$LUJ(H%~SgNs?ZYWYb2r9P8$Hr-dUCgX(Hx$DgX0!e1w(UD73yUt2FA$*N??UMt7ywu{_<4Ql zO7Wuyvu2IFiiPqPfA;LI-FxQwhdDjr5PQK9>K`1S-u`}oWoL-(#V=jH!h*3sTrfJF z?nS*`j!j5RsoeMBeyXUfqDWsK4Gj-dAAeEy-vG-MKhGa37_C;jnr-A$QqwZp4}Nxt z>gpR=Abedn%wA}KBE9_p%iiG72wlANfF+s3;aHiJl=P}SF?sivE!)B;zCK0nmNx1i z7*s@h`zRdgW%>Y~34DUMco5- zFgWz!V7{MaY__C7T5XA+Z`!|6T!2b34#kAVev7VwqTg^QQTVtt5B ze@u-0ir!#MO-@N~`0(HR$yt7le1RbKvT#ByoM0#nu&nWOoj>{Vp@O;R0>BG;z5J#n zKHJq^QOIKY-~L4ak3U*LM=VD25!(bBIa*|H-oJ=^o?e?F&* z>n`#KdXx(S`~ZPq2w>UZSIYQ@^Z$1+_xxzmPuQ&UuFalw<%3;+yH!|pf!f%*VE$*xW-$ETXtsWooxM47`0!Ekc)Ib&hUF0qn*a(6pKvhW zk9AQ|FC`_XdYhYDlv#$~NCqIXFx#K277QEDrKV*zH@jQd`Y%X6zaKzoJ)sa46c(uy z%$-}5Gu=%r7(biN`0vC3h%DF>qVold5DfpkrkfoQKxBc%2!?+%!0QW;r`rc0H2#sv zx$}i829uWQZfI<#Zm*xZJYE2y`TRl3KUbi3Fik8NA3I<-fY5yYfcnAIH#D;8%uAhJ z9sr^7jsN|Ep(hiJtOQe6-=Ngl(b)wcG`>jwRLm?2(624E%NfusT@pg1GRT}sI{#VKxmy^UdqiwFaS#_n0gjW7dv1F zfY3U-y44S+x~7)e+B>MFwGBXM{7M;rAdITPxT2_UkT)^_!S;m<1L(;2@n20&zdYr%hAPvu~$STJtl_r(B+ zj9)2JJ(zDRD%o__MEt%O0Fm)4Wv5P`Q74$SYaJ_7Qq!Bit+=k#$?uB+5E)-7ojjF8 z*7yWfo=dhOF*()6pYo4jV7Uate^|_Hu{Em^jE0q%TXf;FvSF&NYXA@$zfyMS%cCUA zrWB1DLzXR>hmU-v1XEp847Op1q{g$$wHM7)g?TyVbFM)>U1LKR5`D-`B-2 zV5Mhd_r=7-{8XdTSYff+b92t*QGG)bJ8&I&gK`~T@&IT1ePjSb)E7*_cG@-WutGhSob*`j^{LsIoNde zx-B88l)r&<=Zln06ki|miUF32Dpw8hEd;;9o0+v~z-TnvG*4@+UAuOrWVEca+mp|4 z+Pro2U;92{Z|oR-b^Ih9KLPM`@bmA;(c|>VfrGSt#|Lw%X_+l%vu&p&#s5OHR7PB! zBWe$!-$cbKiV2D2r;+hn$R02UKJ@5~lk4Vy`J84RYsXbpznX|>uHG#D5d%V!Y4 cQ})Q?zsXjmgv-52ZvX%Q07*qoM6N<$f`&Yfpa1{> literal 760 zcmVFh-bgUie8e6}GQF;Ia_%8qBBy*{XcOWB-GN3tNh@AlNp zvutjsBAK7{x;ZsLruWL;H7G9!EE#x%hDY~vom zWJMK`49PCIEe+CBMJS`PCvHoFT>a-?#F`g6vF!USCp5*EDngl(y>?rgL@4kFp_D=a zZ&5%fAQTV^2nB>96oeua5DEwdY7)vsp&*p@q0GtNIxRx^c_1^h-Pv%+6f*@^6xGa-~V|C!J4nU?Ly?l>1hY5$S0k=d&3Z1&OV z5K8-K=4E@br%s4ae(%YGTAyFJ?34(leK1|wlI&FJOY9NKZ-0@bFSAD|zHtko_*P&L z3J3*+0zv_yfKY^jP=o?P0il3UKqw#-5Q2yHHwB zKIA9hBa}9wjLmwTmIk?1{A*?3bF18RTN-40QH8wVlWt3cEUhY()ox2eyvW8?6-sw@ z+l^^}V?~wn04uYv?o5rn&*m0Y%Y*E4Yiev~(Fu8=A>U*1mW8@GoOKnQRQ5ed>Rq>| z23nsi-`4s^z8DC3;L+LUvhVpGKX`pGh$k1$7wl+JGJ;)xJb#RZf q8`<7$T{b`KE&$-aQJM|F{>V4WkkGFkf0HEu0000 - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/astrid/res/layout/reengagement_activity.xml b/astrid/res/layout/reengagement_activity.xml deleted file mode 100644 index ebe33d588..000000000 --- a/astrid/res/layout/reengagement_activity.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/astrid/res/layout/task_list_body_reengagement.xml b/astrid/res/layout/task_list_body_reengagement.xml new file mode 100644 index 000000000..f96b95c19 --- /dev/null +++ b/astrid/res/layout/task_list_body_reengagement.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + +