diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index d2241b80f..9fa7b0fbd 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -519,4 +519,6 @@ To start, which parts of your life do you want to improve? Each month, subscribers will receive a mystery item. This is usually released about one week before the end of the month. Open You open the box and find %s! + You earned a %1$s as a reward for your devotion to improving your life. + Your next prize unlocks at %1$d Check-Ins diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java index 3fcf97f50..d14211371 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/components/AppComponent.java @@ -73,6 +73,7 @@ import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider; import com.habitrpg.android.habitica.widget.DailiesWidgetProvider; import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider; import com.habitrpg.android.habitica.widget.HabitButtonWidgetService; +import com.habitrpg.android.habitica.widget.TaskListFactory; import com.habitrpg.android.habitica.widget.TaskListWidgetProvider; import javax.inject.Singleton; @@ -225,4 +226,6 @@ public interface AppComponent { void inject(ChallengeTasksRecyclerViewFragment.ChallengeTasksRecyclerViewAdapter challengeTasksRecyclerViewAdapter); void inject(ChallengeTasksRecyclerViewFragment challengeTasksRecyclerViewFragment); + + void inject(TaskListFactory taskListFactory); } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java index 86be64a8b..16c896344 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/PopupNotificationsManager.java @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.helpers; +import android.content.Context; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; @@ -28,12 +29,14 @@ public class PopupNotificationsManager { private Map seenNotifications; private APIHelper apiHelper; private static PopupNotificationsManager instance; + private Context context; // @TODO: A queue for displaying alert dialogues private PopupNotificationsManager(APIHelper apiHelper) { this.apiHelper = apiHelper; this.seenNotifications = new HashMap<>(); + context.getApplicationContext(); } public static PopupNotificationsManager getInstance(APIHelper apiHelper) { @@ -65,17 +68,17 @@ public class PopupNotificationsManager { earnedString += ", "; } } - youEarnedMessage = "You earned a " + earnedString + " as a reward for your devotion to improving your life."; + youEarnedMessage = context.getString(R.string.checkInRewardEarned,earnedString); } } DataBindingUtils.loadImage(imageView, imageKey); - String message = "Your next prize unlocks at " + notification.data.nextRewardAt + " Check-Ins"; - TextView nextUnlockTextView = (TextView) view.findViewById(R.id.next_unlock_message); - nextUnlockTextView.setText(message); + TextView youEarnedTexView = (TextView) view.findViewById(R.id.you_earned_message); + youEarnedTexView.setText(youEarnedMessage); - TextView youEarnedTexView = (TextView) view.findViewById(R.id.you_earned_message); - youEarnedTexView.setText(youEarnedMessage); + String message = context.getString(R.string.nextPrizeUnlocks,notification.data.nextRewardAt); + TextView nextUnlockTextView = (TextView) view.findViewById(R.id.next_unlock_message); + nextUnlockTextView.setText(message); Button confirmButton = (Button) view.findViewById(R.id.confirm_button); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java index 6c329a8ed..957b40d3a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/TaskListFactory.java @@ -8,8 +8,10 @@ import android.text.style.DynamicDrawableSpan; import android.widget.RemoteViews; import android.widget.RemoteViewsService; +import com.habitrpg.android.habitica.HabiticaApplication; import com.habitrpg.android.habitica.R; import com.habitrpg.android.habitica.ui.helpers.MarkdownParser; +import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task; import com.raizlabs.android.dbflow.sql.builder.Condition; import com.raizlabs.android.dbflow.sql.language.OrderBy; @@ -20,12 +22,16 @@ import net.pherth.android.emoji_library.EmojiHandler; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; +import javax.inject.Named; + import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public abstract class TaskListFactory implements RemoteViewsService.RemoteViewsFactory { private final int widgetId; + private Integer customDayStart; private int listItemResId; private int listItemTextResId; private String taskType; @@ -33,6 +39,10 @@ public abstract class TaskListFactory implements RemoteViewsService.RemoteViewsF private Context context = null; private boolean reloadData; + @Inject + @Named("UserID") + public String userID; + public TaskListFactory(Context context, Intent intent, String taskType, int listItemResId, int listItemTextResId) { this.context = context; this.widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0); @@ -41,7 +51,19 @@ public abstract class TaskListFactory implements RemoteViewsService.RemoteViewsF this.reloadData = false; this.taskType = taskType; - this.loadData(); + if (userID == null) { + HabiticaApplication.getComponent().inject(this); + } + + if (customDayStart == null) { + Observable.defer(() -> Observable.just(new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(userID)).querySingle())) + .subscribe(habitRPGUser -> { + customDayStart = habitRPGUser.getPreferences().getDayStart(); + this.loadData(); + }, throwable -> {}); + } else { + this.loadData(); + } } private void loadData() { @@ -51,7 +73,7 @@ public abstract class TaskListFactory implements RemoteViewsService.RemoteViewsF .and(Condition.column("completed").eq(false)) .orderBy(OrderBy.columns("position", "dateCreated").descending()) .queryList())) - .filter(task -> task.type.equals(Task.TYPE_TODO) || task.isDisplayedActive(0)) + .filter(task -> task.type.equals(Task.TYPE_TODO) || task.isDisplayedActive(customDayStart)) .toList() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())