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));