encouragement service

pull/14/head
Tim Su 15 years ago
parent 0fdc38c7cd
commit bdf3138ef1

@ -18,11 +18,36 @@
<string name="PPW_past_due">Past Due:</string>
<string-array name="PPW_encouragements">
<item>Ready to work?</item>
<!-- general encouragements -->
<item>Hi there!</item>
<item>Have time to finish something?</item>
<item>Gosh, you are looking suave today!</item>
<item>Do something great today!</item>
<item>Make me proud today!</item>
<item>How are you doing today?</item>
</string-array>
<string-array name="PPW_encouragements_tod">
<!-- encouragements based on time of day -->
<item>Good morning!</item>
<item>Good afternoon!</item>
<item>Good evening!</item>
<item>Late night?</item>
<item>It\s early, get something done!</item>
<item>Afternoon tea, perhaps?</item>
<item>Enjoy the evening!</item>
<item>Sleep is good for you, you know!</item>
</string-array>
<string-array name="PPW_encouragements_completed">
<!-- encouragements based on tasks completed (%d => completed) -->
<item>You\'ve already completed %d tasks!</item>
<item>Score in life: %d tasks completed</item>
<item>Smile! You\'ve already finished %d tasks!</item>
</string-array>
<string name="PPW_encouragements_completed"></string>
<string-array name="PPW_colors">
<item>Black</item>
<item>White</item>

@ -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(),

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

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

Loading…
Cancel
Save