diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java deleted file mode 100644 index ebe8aed46..000000000 --- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.activities.habits.show.views; - -import androidx.test.filters.*; -import androidx.test.runner.*; -import android.view.*; - -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.isoron.uhabits.*; -import org.isoron.uhabits.core.models.*; -import org.junit.*; -import org.junit.runner.*; - -@RunWith(AndroidJUnit4.class) -@MediumTest -public class StreakCardTest extends BaseViewTest -{ - public static final String PATH = "habits/show/StreakCard/"; - - private StreakCard view; - - private Habit habit; - - @Before - @Override - public void setUp() - { - super.setUp(); - habit = fixtures.createLongHabit(); - - view = (StreakCard) LayoutInflater - .from(targetContext) - .inflate(R.layout.show_habit, null) - .findViewById(R.id.streakCard); - - view.setHabit(habit); - view.refreshData(); - - measureView(view, 800, 600); - } - - @Test - public void testRender() throws Exception - { - assertRenders(view, PATH + "render.png"); - } -} diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt new file mode 100644 index 000000000..5b1ececac --- /dev/null +++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.activities.habits.show.views + +import android.view.* +import androidx.test.ext.junit.runners.* +import org.junit.runner.RunWith +import androidx.test.filters.MediumTest +import org.isoron.uhabits.BaseViewTest +import org.isoron.uhabits.activities.habits.show.views.StreakCardView +import org.isoron.uhabits.R +import org.isoron.uhabits.activities.habits.show.views.StreakCardViewTest +import org.isoron.uhabits.core.models.* +import org.junit.* +import java.lang.Exception + +@RunWith(AndroidJUnit4::class) +@MediumTest +class StreakCardViewTest : BaseViewTest() { + val PATH = "habits/show/StreakCard/" + private lateinit var view: StreakCardView + + @Before + override fun setUp() { + super.setUp() + val habit = fixtures.createLongHabit() + view = LayoutInflater + .from(targetContext) + .inflate(R.layout.show_habit, null) + .findViewById(R.id.streakCard) as StreakCardView + view.update(StreakCardViewModel( + bestStreaks = habit.streaks.getBest(10), + color = habit.color, + )) + measureView(view, 800f, 600f) + } + + @Test + fun testRender() { + assertRenders(view, PATH + "render.png") + } +} \ No newline at end of file diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index 4c4811fe8..f3b395365 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -84,6 +84,7 @@ data class ShowHabitViewModel( val overview: OverviewCardViewModel, val notes: NotesCardViewModel, val target: TargetCardViewModel, + val streaks: StreakCardViewModel, ) class ShowHabitView(context: Context) : FrameLayout(context) { @@ -99,7 +100,7 @@ class ShowHabitView(context: Context) : FrameLayout(context) { binding.overviewCard.update(data.overview) binding.notesCard.update(data.notes) binding.targetCard.update(data.target) - + binding.streakCard.update(data.streaks) if (data.isNumerical) { binding.overviewCard.visibility = GONE binding.streakCard.visibility = GONE @@ -123,11 +124,10 @@ class ShowHabitPresenter( private val subtitleCardPresenter = SubtitleCardPresenter(habit, context) private val overviewCardPresenter = OverviewCardPresenter(habit) private val notesCardPresenter = NotesCardPresenter(habit) - private val targetCardPresenter = TargetCardPresenter( - habit = habit, - firstWeekday = preferences.firstWeekday, - resources = context.resources - ) + private val targetCardPresenter = TargetCardPresenter(habit = habit, + firstWeekday = preferences.firstWeekday, + resources = context.resources) + private val streakCartPresenter = StreakCartPresenter(habit) suspend fun present(): ShowHabitViewModel { return ShowHabitViewModel( @@ -138,6 +138,7 @@ class ShowHabitPresenter( overview = overviewCardPresenter.present(), notes = notesCardPresenter.present(), target = targetCardPresenter.present(), + streaks = streakCartPresenter.present(), ) } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java deleted file mode 100644 index 5028ca25b..000000000 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.uhabits.activities.habits.show.views; - -import android.content.*; -import android.util.*; -import android.widget.*; - -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.utils.*; - -import java.util.*; - -import butterknife.*; - -public class StreakCard extends HabitCard -{ - public static final int NUM_STREAKS = 10; - - @BindView(R.id.title) - TextView title; - - @BindView(R.id.streakChart) - StreakChart streakChart; - - public StreakCard(Context context) - { - super(context); - init(); - } - - public StreakCard(Context context, AttributeSet attrs) - { - super(context, attrs); - init(); - } - - private void init() - { - inflate(getContext(), R.layout.show_habit_streak, this); - ButterKnife.bind(this); - setOrientation(VERTICAL); - if (isInEditMode()) initEditMode(); - } - - private void initEditMode() - { - int color = PaletteUtils.getAndroidTestColor(1); - title.setTextColor(color); - streakChart.setColor(color); - streakChart.populateWithRandomData(); - } - - @Override - protected Task createRefreshTask() - { - return new RefreshTask(); - } - - private class RefreshTask extends CancelableTask - { - List bestStreaks; - - @Override - public void doInBackground() - { - if (isCanceled()) return; - StreakList streaks = getHabit().getStreaks(); - bestStreaks = streaks.getBest(NUM_STREAKS); - } - - @Override - public void onPostExecute() - { - if (isCanceled()) return; - streakChart.setStreaks(bestStreaks); - } - - @Override - public void onPreExecute() - { - int color = - PaletteUtilsKt.toThemedAndroidColor(getHabit().getColor(), getContext()); - title.setTextColor(color); - streakChart.setColor(color); - } - } -} diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.kt new file mode 100644 index 000000000..6035430fa --- /dev/null +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCard.kt @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.uhabits.activities.habits.show.views + +import android.content.* +import android.util.* +import android.view.* +import android.widget.* +import kotlinx.coroutines.* +import org.isoron.uhabits.core.models.* +import org.isoron.uhabits.databinding.* +import org.isoron.uhabits.utils.* + +data class StreakCardViewModel( + val color: PaletteColor, + val bestStreaks: List +) + +class StreakCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { + private val binding = ShowHabitStreakBinding.inflate(LayoutInflater.from(context), this) + fun update(data: StreakCardViewModel) { + val color = data.color.toThemedAndroidColor(context) + binding.title.setTextColor(color) + binding.streakChart.setColor(color) + binding.streakChart.setStreaks(data.bestStreaks) + postInvalidate() + } +} + +class StreakCartPresenter(val habit: Habit) { + suspend fun present(): StreakCardViewModel = Dispatchers.IO { + return@IO StreakCardViewModel( + color = habit.color, + bestStreaks = habit.streaks.getBest(10), + ) + } +} \ No newline at end of file diff --git a/android/uhabits-android/src/main/res/layout/show_habit.xml b/android/uhabits-android/src/main/res/layout/show_habit.xml index 41c7e6582..b94dd2999 100644 --- a/android/uhabits-android/src/main/res/layout/show_habit.xml +++ b/android/uhabits-android/src/main/res/layout/show_habit.xml @@ -78,7 +78,7 @@ android:gravity="center" android:paddingBottom="0dp"/> -