Refactor NotesCard

pull/699/head
Alinson S. Xavier 5 years ago
parent 45574753c7
commit c2d89c7a60

@ -1,79 +0,0 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.habits.show.views;
import android.view.LayoutInflater;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
import org.isoron.uhabits.BaseViewTest;
import org.isoron.uhabits.R;
import org.isoron.uhabits.core.models.Habit;
import org.isoron.uhabits.core.models.Reminder;
import org.isoron.uhabits.core.models.WeekdayList;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
@MediumTest
public class NotesCardTest extends BaseViewTest
{
public static final String PATH = "habits/show/NotesCard/";
private NotesCard view;
private Habit habit;
@Before
@Override
public void setUp()
{
super.setUp();
habit = fixtures.createLongHabit();
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
view = LayoutInflater
.from(targetContext)
.inflate(R.layout.show_habit, null)
.findViewById(R.id.notesCard);
view.setHabit(habit);
view.refreshData();
measureView(view, 800, 200);
}
@Test
public void testRender() throws Exception
{
assertRenders(view, PATH + "render.png");
}
@Test
public void testRenderEmptyDescription() throws Exception
{
habit.setDescription("");
view.refreshData();
assertRenders(view, PATH + "render-empty-description.png");
}
}

@ -0,0 +1,62 @@
/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.activities.habits.show.views
import android.view.*
import androidx.test.ext.junit.runners.*
import androidx.test.filters.*
import org.isoron.uhabits.*
import org.isoron.uhabits.activities.habits.show.*
import org.junit.*
import org.junit.runner.*
@RunWith(AndroidJUnit4::class)
@MediumTest
class NotesCardTest : BaseViewTest() {
val PATH = "habits/show/NotesCard"
private lateinit var view: NotesCard
@Before
override fun setUp() {
super.setUp()
view = LayoutInflater
.from(targetContext)
.inflate(R.layout.show_habit, null)
.findViewById(R.id.notesCard)
view.onData(ShowHabitViewModel(
description = "This is a test description",
))
measureView(view, 800f, 200f)
}
@Test
@Throws(Exception::class)
fun testRender() {
assertRenders(view, "$PATH/render.png")
}
@Test
@Throws(Exception::class)
fun testRenderEmptyDescription() {
view.onData(ShowHabitViewModel(
description = "",
))
assertRenders(view, "$PATH/render-empty-description.png")
}
}

@ -76,6 +76,7 @@ class ShowHabitPresenter
val scoreLastYear = scores.getValue(lastYear).toFloat()
data = ShowHabitViewModel(
title = habit.name,
description = habit.description,
color = habit.color,
isNumerical = habit.isNumerical,
scoreToday = scoreToday,

@ -45,9 +45,9 @@ class ShowHabitRootView
displayHomeAsUp = true
binding.overviewCard.presenter = presenter
binding.notesCard.presenter = presenter
binding.subtitleCard.habit = habit
binding.notesCard.habit = habit
binding.scoreCard.habit = habit
binding.historyCard.habit = habit
binding.streakCard.habit = habit

@ -23,6 +23,7 @@ import org.isoron.uhabits.core.models.*
data class ShowHabitViewModel(
val title: String = "",
val description: String = "",
val isNumerical: Boolean = false,
val scoreToday: Float = 0f,
val scoreMonthDiff: Float = 0f,

@ -1,26 +1,37 @@
package org.isoron.uhabits.activities.habits.show.views
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.TextView
import org.isoron.uhabits.R
import org.isoron.uhabits.core.tasks.Task
import android.content.*
import android.util.*
import android.view.*
import android.widget.*
import org.isoron.uhabits.activities.habits.show.*
import org.isoron.uhabits.databinding.*
class NotesCard(context: Context?, attrs: AttributeSet?) : HabitCard(context, attrs) {
class NotesCard(
context: Context,
attrs: AttributeSet
) : LinearLayout(context, attrs), ShowHabitPresenter.Listener {
private val notesTextView: TextView
private val binding = ShowHabitNotesBinding.inflate(LayoutInflater.from(context), this)
lateinit var presenter: ShowHabitPresenter
init {
View.inflate(getContext(), R.layout.show_habit_notes, this)
notesTextView = findViewById(R.id.habitNotes)
override fun onAttachedToWindow() {
super.onAttachedToWindow()
presenter.addListener(this)
presenter.requestData(this)
}
override fun refreshData() {
notesTextView.text = habit.description
visibility = if(habit.description.isEmpty()) View.GONE else View.VISIBLE
notesTextView.visibility = visibility
override fun onDetachedFromWindow() {
presenter.removeListener(this)
super.onDetachedFromWindow()
}
override fun createRefreshTask(): Task = error("refresh task should never be called.")
override fun onData(data: ShowHabitViewModel) {
if (data.description.isEmpty()) {
visibility = GONE
} else {
visibility = VISIBLE
binding.habitNotes.text = data.description
}
}
}

@ -30,6 +30,5 @@
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="?highContrastTextColor"
android:visibility="gone"
tools:text="This is some example text for the notes" />
</merge>
Loading…
Cancel
Save