diff --git a/astrid/res/values/strings-widget.xml b/astrid/res/values/strings-widget.xml
index 388f6c04a..9ee6d99aa 100644
--- a/astrid/res/values/strings-widget.xml
+++ b/astrid/res/values/strings-widget.xml
@@ -18,11 +18,36 @@
Past Due:
- - Ready to work?
+
+ - Hi there!
- Have time to finish something?
- Gosh, you are looking suave today!
+ - Do something great today!
+ - Make me proud today!
+ - How are you doing today?
+
+
+ - Good morning!
+ - Good afternoon!
+ - Good evening!
+ - Late night?
+ - It\s early, get something done!
+ - Afternoon tea, perhaps?
+ - Enjoy the evening!
+ - Sleep is good for you, you know!
+
+
+
+
+ - You\'ve already completed %d tasks!
+ - Score in life: %d tasks completed
+ - Smile! You\'ve already finished %d tasks!
+
+
+
+
- Black
- White
diff --git a/astrid/src/com/todoroo/astrid/service/AstridDependencyInjector.java b/astrid/src/com/todoroo/astrid/service/AstridDependencyInjector.java
index ff60b23ff..2b6ab2cfd 100644
--- a/astrid/src/com/todoroo/astrid/service/AstridDependencyInjector.java
+++ b/astrid/src/com/todoroo/astrid/service/AstridDependencyInjector.java
@@ -14,9 +14,10 @@ import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.gtasks.GtasksListService;
import com.todoroo.astrid.gtasks.GtasksMetadataService;
import com.todoroo.astrid.gtasks.GtasksPreferenceService;
-import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdater;
+import com.todoroo.astrid.tags.TagService;
import com.todoroo.astrid.utility.Constants;
+import com.todoroo.astrid.widget.EncouragementService;
/**
* Astrid application dependency injector loads classes in Astrid with the
@@ -75,6 +76,9 @@ public class AstridDependencyInjector extends AbstractDependencyInjector {
// com.todoroo.astrid.tags
injectables.put("tagService", TagService.class);
+ // com.todoroo.astrid.widget
+ injectables.put("encouragementService", EncouragementService.class);
+
// these make reference to fields defined above
injectables.put("errorReporters", new ErrorReporter[] {
new AndroidLogReporter(),
diff --git a/astrid/src/com/todoroo/astrid/widget/EncouragementService.java b/astrid/src/com/todoroo/astrid/widget/EncouragementService.java
new file mode 100644
index 000000000..1249cbcab
--- /dev/null
+++ b/astrid/src/com/todoroo/astrid/widget/EncouragementService.java
@@ -0,0 +1,84 @@
+package com.todoroo.astrid.widget;
+
+import java.util.Date;
+
+import com.timsu.astrid.R;
+import com.todoroo.andlib.service.Autowired;
+import com.todoroo.andlib.service.ContextManager;
+import com.todoroo.andlib.service.DependencyInjectionService;
+import com.todoroo.andlib.sql.QueryTemplate;
+import com.todoroo.astrid.api.Filter;
+import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
+import com.todoroo.astrid.service.TaskService;
+
+public class EncouragementService {
+
+ @Autowired private TaskService taskService;
+
+ private final EncouragementProvider[] providers = new EncouragementProvider[] {
+ new ResourceEncouragementProvider(),
+ new TimeOfDayEncouragementProvider(),
+ new CompletionCountEncouragementProvider()
+ };
+
+ public EncouragementService() {
+ DependencyInjectionService.getInstance().inject(this);
+ }
+
+ public String getEncouragement() {
+ int index = (int)Math.floor(Math.random() * providers.length);
+ return providers[index].getEncouragement();
+ }
+
+
+ public interface EncouragementProvider {
+ public String getEncouragement();
+ }
+
+ public static class ResourceEncouragementProvider implements EncouragementProvider {
+ @Override
+ public String getEncouragement() {
+ String[] encouragements = ContextManager.getResources().getStringArray(R.array.PPW_encouragements);
+ int encouragementIdx = (int)Math.floor(Math.random() * encouragements.length);
+ return encouragements[encouragementIdx];
+ }
+ }
+
+ public static class TimeOfDayEncouragementProvider implements EncouragementProvider {
+ private static int GOOD_MORNING = 0;
+ private static int GOOD_AFTERNOON = 1;
+ private static int GOOD_EVENING = 2;
+ private static int LATE_NIGHT = 3;
+ @Override
+ public String getEncouragement() {
+ String[] encouragements = ContextManager.getResources().
+ getStringArray(R.array.PPW_encouragements_tod);
+
+ int index = (int)Math.floor(Math.random() * (encouragements.length / 4));
+
+ int hour = new Date().getHours();
+ if(hour >= 6 && hour < 12)
+ return encouragements[4*index + GOOD_MORNING];
+ else if(hour >= 12 && hour < 18)
+ return encouragements[4*index + GOOD_AFTERNOON];
+ else if(hour >= 18 && hour < 23)
+ return encouragements[4*index + GOOD_EVENING];
+
+ return encouragements[4*index + LATE_NIGHT];
+ }
+ }
+
+ public class CompletionCountEncouragementProvider implements EncouragementProvider {
+ @Override
+ public String getEncouragement() {
+ Filter filter = new Filter(null, null, new QueryTemplate().where(TaskCriteria.completed()), null);
+ int completed = taskService.countTasks(filter);
+
+ String[] encouragements = ContextManager.getResources().
+ getStringArray(R.array.PPW_encouragements_completed);
+ int index = (int)Math.floor(Math.random() * (encouragements.length));
+
+ return String.format(encouragements[index], completed);
+ }
+ }
+}
diff --git a/astrid/src/com/todoroo/astrid/widget/PowerWidget.java b/astrid/src/com/todoroo/astrid/widget/PowerWidget.java
index eccdcbe96..7836ac2d7 100644
--- a/astrid/src/com/todoroo/astrid/widget/PowerWidget.java
+++ b/astrid/src/com/todoroo/astrid/widget/PowerWidget.java
@@ -206,6 +206,9 @@ abstract public class PowerWidget extends AppWidgetProvider implements DatabaseU
@Autowired
private TaskService taskService;
+ @Autowired
+ private EncouragementService encouragementService;
+
public UpdateService() {
DependencyInjectionService.getInstance().inject(this);
}
@@ -283,9 +286,8 @@ abstract public class PowerWidget extends AppWidgetProvider implements DatabaseU
if (showEncouragements){
// is it time to update the encouragement?
if (System.currentTimeMillis() - lastRotation > ENCOURAGEMENT_CYCLE_TIME){
- String[] encouragements = context.getResources().getStringArray(R.array.PPW_encouragements);
- int encouragementIdx = (int)Math.floor(Math.random() * encouragements.length);
- Preferences.setString(PowerWidget.PREF_ENCOURAGEMENT_CURRENT + appWidgetId, encouragements[encouragementIdx]);
+ String encouragement = encouragementService.getEncouragement();
+ Preferences.setString(PowerWidget.PREF_ENCOURAGEMENT_CURRENT + appWidgetId, encouragement);
Preferences.setLong(PowerWidget.PREF_ENCOURAGEMENT_LAST_ROTATION_TIME + appWidgetId, System.currentTimeMillis());
}
views.setTextViewText(R.id.encouragement_text, Preferences.getStringValue(PowerWidget.PREF_ENCOURAGEMENT_CURRENT + appWidgetId));