diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java index 3e47830d9..4ed137d86 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HabitCard.java @@ -43,6 +43,9 @@ public abstract class HabitCard extends LinearLayout @Nullable private Task currentRefreshTask; + protected HabitsApplication app; + protected HabitsApplicationComponent component; + public HabitCard(Context context) { super(context); @@ -118,10 +121,8 @@ public abstract class HabitCard extends LinearLayout { if(!isInEditMode()) habit = new MemoryModelFactory().buildHabit(); Context appContext = getContext().getApplicationContext(); - if(appContext instanceof HabitsApplication) - { - HabitsApplication app = (HabitsApplication) appContext; - taskRunner = app.getComponent().getTaskRunner(); - } + app = (HabitsApplication) appContext; + component = app.getComponent(); + taskRunner = component.getTaskRunner(); } } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java index 14327643c..50b85ccc6 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCard.java @@ -19,21 +19,31 @@ package org.isoron.uhabits.activities.habits.show.views; -import android.content.*; -import android.util.*; -import android.widget.*; +import android.content.Context; +import android.util.AttributeSet; +import android.widget.Button; +import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.StringRes; -import org.isoron.androidbase.utils.*; +import org.isoron.androidbase.utils.StyledResources; import org.isoron.uhabits.R; -import org.isoron.uhabits.activities.common.views.*; -import org.isoron.uhabits.core.models.*; -import org.isoron.uhabits.core.tasks.*; -import org.isoron.uhabits.core.utils.*; -import org.isoron.uhabits.utils.*; - -import butterknife.*; +import org.isoron.uhabits.activities.common.views.RingView; +import org.isoron.uhabits.core.commands.CommandRunner; +import org.isoron.uhabits.core.commands.CreateRepetitionCommand; +import org.isoron.uhabits.core.models.Habit; +import org.isoron.uhabits.core.models.HabitList; +import org.isoron.uhabits.core.models.ScoreList; +import org.isoron.uhabits.core.models.Timestamp; +import org.isoron.uhabits.core.tasks.CancelableTask; +import org.isoron.uhabits.core.tasks.Task; +import org.isoron.uhabits.core.utils.DateUtils; +import org.isoron.uhabits.utils.PaletteUtils; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; public class OverviewCard extends HabitCard { @@ -58,7 +68,14 @@ public class OverviewCard extends HabitCard @BindView(R.id.title) TextView title; + @BindView(R.id.checkHabitTodayButton) + Button checkHabitTodayButton; + private int color; + private CommandRunner commandRunner; + private HabitList habitList; + + private volatile boolean habitIsCheckedForToday; public OverviewCard(Context context) { @@ -72,6 +89,17 @@ public class OverviewCard extends HabitCard init(); } + @OnClick(R.id.checkHabitTodayButton) + public void onClickFeedback() + { + int newValue = this.habitIsCheckedForToday ? 0 : 1; + final Habit habit = getHabit(); + commandRunner.execute( + new CreateRepetitionCommand(habitList, habit, DateUtils.getToday(), newValue), + habit.getId() + ); + } + private String formatPercentageDiff(float percentageDiff) { return String.format("%s%.0f%%", (percentageDiff >= 0 ? "+" : "\u2212"), @@ -84,6 +112,13 @@ public class OverviewCard extends HabitCard ButterKnife.bind(this); cache = new Cache(); if (isInEditMode()) initEditMode(); + commandRunner = component.getCommandRunner(); + commandRunner.addListener((command, refreshKey) -> { + if(command instanceof CreateRepetitionCommand) { + refreshData(); + } + }); + habitList = component.getHabitList(); } private void initEditMode() @@ -126,6 +161,17 @@ public class OverviewCard extends HabitCard postInvalidate(); } + + private void refreshHabitChecked() + { + this.habitIsCheckedForToday = cache.habitIsCheckedForToday; + + @StringRes int checkHabitButtonTextRes = + this.habitIsCheckedForToday ? R.string.mark_undone_for_today : + R.string.mark_done_for_today; + checkHabitTodayButton.setText(checkHabitButtonTextRes); + } + private class Cache { float todayScore; @@ -135,6 +181,8 @@ public class OverviewCard extends HabitCard float lastYearScore; long totalCount; + + boolean habitIsCheckedForToday; } @Override @@ -161,6 +209,7 @@ public class OverviewCard extends HabitCard cache.lastMonthScore = (float) scores.getValue(lastMonth); cache.lastYearScore = (float) scores.getValue(lastYear); cache.totalCount = habit.getRepetitions().getTotalCount(); + cache.habitIsCheckedForToday = habit.getCheckmarks().getTodayValue() == 1; } @Override @@ -168,6 +217,7 @@ public class OverviewCard extends HabitCard { if (isCanceled()) return; refreshScore(); + refreshHabitChecked(); } @Override diff --git a/android/uhabits-android/src/main/res/layout/show_habit_overview.xml b/android/uhabits-android/src/main/res/layout/show_habit_overview.xml index 33f6a7cca..07471feb0 100644 --- a/android/uhabits-android/src/main/res/layout/show_habit_overview.xml +++ b/android/uhabits-android/src/main/res/layout/show_habit_overview.xml @@ -19,7 +19,10 @@ --> + xmlns:habit="http://isoron.org/android" + xmlns:tools="http://schemas.android.com/tools" + tools:parentTag="android.widget.LinearLayout" + tools:orientation="vertical"> + + + \ No newline at end of file diff --git a/android/uhabits-android/src/main/res/values/strings.xml b/android/uhabits-android/src/main/res/values/strings.xml index 964faf8a6..e2ac446e7 100644 --- a/android/uhabits-android/src/main/res/values/strings.xml +++ b/android/uhabits-android/src/main/res/values/strings.xml @@ -200,4 +200,6 @@ No yes-or-no habits found Increment Decrement + mark done for today + mark not done for today \ No newline at end of file