Clean up code after conversions

This commit is contained in:
Quentin Hibon
2021-01-21 23:42:04 +01:00
parent f882e18be9
commit f1c88797a3
26 changed files with 152 additions and 217 deletions

View File

@@ -27,8 +27,8 @@ import androidx.test.filters.MediumTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import junit.framework.TestCase
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.hamcrest.CoreMatchers.hasItems
import org.hamcrest.MatcherAssert.assertThat
import org.isoron.uhabits.core.models.HabitList
import org.isoron.uhabits.core.models.ModelFactory
import org.isoron.uhabits.core.models.Timestamp
@@ -109,9 +109,9 @@ abstract class BaseAndroidTest : TestCase() {
val manager = AppWidgetManager.getInstance(targetContext)
val installedProviders: MutableList<ComponentName> = LinkedList()
for (info in manager.installedProviders) installedProviders.add(info.provider)
MatcherAssert.assertThat<List<ComponentName>>(
assertThat<List<ComponentName>>(
installedProviders,
CoreMatchers.hasItems(provider)
hasItems(provider)
)
}
@@ -208,7 +208,6 @@ abstract class BaseAndroidTest : TestCase() {
@Throws(Exception::class)
fun restoreSystemTime() {
if (savedCalendar == null) throw NullPointerException()
setSystemTime(savedCalendar)
}

View File

@@ -99,8 +99,8 @@ open class BaseUserInterfaceTest {
@Throws(Exception::class)
protected fun rotateDevice() {
device!!.setOrientationLeft()
device!!.setOrientationNatural()
device.setOrientationLeft()
device.setOrientationNatural()
}
companion object {

View File

@@ -34,12 +34,10 @@ import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.util.Random
import kotlin.math.abs
open class BaseViewTest : BaseAndroidTest() {
var similarityCutoff = 0.00018
override fun setUp() {
super.setUp()
}
@Throws(IOException::class)
protected fun assertRenders(view: View, expectedImagePath: String) {
@@ -134,10 +132,10 @@ open class BaseViewTest : BaseAndroidTest() {
if (random.nextInt(4) != 0) continue
val argb1 = colorToArgb(b1.getPixel(x, y))
val argb2 = colorToArgb(b2.getPixel(x, y))
distance += Math.abs(argb1[0] - argb2[0]).toDouble()
distance += Math.abs(argb1[1] - argb2[1]).toDouble()
distance += Math.abs(argb1[2] - argb2[2]).toDouble()
distance += Math.abs(argb1[3] - argb2[3]).toDouble()
distance += abs(argb1[0] - argb2[0]).toDouble()
distance += abs(argb1[1] - argb2[1]).toDouble()
distance += abs(argb1[2] - argb2[2]).toDouble()
distance += abs(argb1[3] - argb2[3]).toDouble()
}
}
distance /= 255.0 * 16 * b1.width * b1.height

View File

@@ -20,8 +20,8 @@ package org.isoron.uhabits
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.hamcrest.CoreMatchers.containsString
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import java.io.IOException
@@ -35,6 +35,6 @@ class HabitsApplicationTest : BaseAndroidTest() {
val msg = "LOGCAT TEST"
RuntimeException(msg).printStackTrace()
val log = AndroidBugReporter(targetContext).getLogcat()
MatcherAssert.assertThat(log, CoreMatchers.containsString(msg))
assertThat(log, containsString(msg))
}
}

View File

@@ -33,16 +33,17 @@ import org.junit.runner.RunWith
class ScoreChartTest : BaseViewTest() {
private lateinit var habit: Habit
private lateinit var view: ScoreChart
@Before
override fun setUp() {
super.setUp()
fixtures.purgeHabits(habitList)
habit = fixtures.createLongHabit()
val (scores, bucketSize, _, color) = buildState(habit, prefs.firstWeekdayInt, 0)
val state = buildState(habit, prefs.firstWeekdayInt, 0)
view = ScoreChart(targetContext).apply {
setScores(scores.toMutableList())
setColor(color.toFixedAndroidColor())
setBucketSize(bucketSize)
setScores(state.scores)
setColor(state.color.toFixedAndroidColor())
setBucketSize(state.bucketSize)
}
measureView(view, dpToPixels(300), dpToPixels(200))
}
@@ -71,12 +72,8 @@ class ScoreChartTest : BaseViewTest() {
@Test
@Throws(Throwable::class)
fun testRender_withMonthlyBucket() {
val (scores, bucketSize) = buildState(
habit,
prefs.firstWeekdayInt,
2
)
view.setScores(scores.toMutableList())
val (scores, bucketSize) = buildState(habit, prefs.firstWeekdayInt, 2)
view.setScores(scores)
view.setBucketSize(bucketSize)
view.invalidate()
assertRenders(view, BASE_PATH + "renderMonthly.png")
@@ -92,13 +89,9 @@ class ScoreChartTest : BaseViewTest() {
@Test
@Throws(Throwable::class)
fun testRender_withYearlyBucket() {
val (scores, bucketSize) = buildState(
habit,
prefs.firstWeekdayInt,
4
)
view.setScores(scores.toMutableList())
view.setBucketSize(bucketSize)
val state = buildState(habit, prefs.firstWeekdayInt, 4)
view.setScores(state.scores)
view.setBucketSize(state.bucketSize)
view.invalidate()
assertRenders(view, BASE_PATH + "renderYearly.png")
}

View File

@@ -23,8 +23,8 @@ import androidx.test.filters.MediumTest
import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.whenever
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.core.ui.screens.habits.list.HintList
import org.junit.Before
@@ -36,6 +36,7 @@ import org.junit.runner.RunWith
class HintViewTest : BaseViewTest() {
private lateinit var view: HintView
private lateinit var list: HintList
@Before
override fun setUp() {
super.setUp()
@@ -58,10 +59,10 @@ class HintViewTest : BaseViewTest() {
@Test
@Throws(Exception::class)
fun testClick() {
MatcherAssert.assertThat(view.alpha, CoreMatchers.equalTo(1f))
assertThat(view.alpha, equalTo(1f))
view.performClick()
skipAnimation(view)
MatcherAssert.assertThat(view.alpha, CoreMatchers.equalTo(0f))
assertThat(view.alpha, equalTo(0f))
}
companion object {

View File

@@ -24,7 +24,7 @@ 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.ui.screens.habits.show.views.ScoreCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter.Companion.buildState
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -43,13 +43,7 @@ class ScoreCardViewTest : BaseViewTest() {
.from(targetContext)
.inflate(R.layout.show_habit, null)
.findViewById<View>(R.id.scoreCard) as ScoreCardView
view.setState(
ScoreCardPresenter.buildState(
habit = habit,
firstWeekday = 0,
spinnerPosition = 0,
)
)
view.setState(buildState(habit = habit, firstWeekday = 0, spinnerPosition = 0))
measureView(view, 800f, 600f)
}

View File

@@ -19,12 +19,11 @@
package org.isoron.uhabits.database
import android.database.sqlite.SQLiteDatabase
import org.hamcrest.MatcherAssert
import org.hamcrest.core.IsEqual
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.core.IsEqual.equalTo
import org.isoron.uhabits.BaseAndroidTest
import org.isoron.uhabits.core.database.Cursor
import org.junit.Test
import java.util.HashMap
class AndroidDatabaseTest : BaseAndroidTest() {
private lateinit var db: AndroidDatabase
@@ -37,13 +36,11 @@ class AndroidDatabaseTest : BaseAndroidTest() {
@Test
@Throws(Exception::class)
fun testInsert() {
val map = HashMap<String, Any?>()
map["name"] = "asd"
map["color"] = null
val map = mapOf(Pair("name", "asd"), Pair("color", null))
db.insert("test", map)
val c: Cursor = db.query("select * from test")
c.moveToNext()
assertNull(c.getInt(0))
MatcherAssert.assertThat(c.getString(1), IsEqual.equalTo("asd"))
c.getInt(0)!!
assertThat(c.getString(1), equalTo("asd"))
}
}

View File

@@ -24,7 +24,9 @@ import android.widget.FrameLayout
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.equalTo
import org.hamcrest.MatcherAssert.assertThat
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Entry
@@ -50,26 +52,26 @@ class CheckmarkWidgetTest : BaseViewTest() {
entries = habit.computedEntries
val widget = CheckmarkWidget(targetContext, 0, habit)
view = convertToView(widget, 150, 200)
MatcherAssert.assertThat(entries.get(today).value, CoreMatchers.equalTo(Entry.YES_MANUAL))
assertThat(entries.get(today).value, equalTo(Entry.YES_MANUAL))
}
@Test
@Throws(Exception::class)
fun testClick() {
val button = view.findViewById<View>(R.id.button) as Button
MatcherAssert.assertThat(
assertThat(
button,
CoreMatchers.`is`(CoreMatchers.not(CoreMatchers.nullValue()))
`is`(CoreMatchers.not(CoreMatchers.nullValue()))
)
// A better test would be to capture the intent, but it doesn't seem
// possible to capture intents sent to BroadcastReceivers.
button.performClick()
sleep(1000)
MatcherAssert.assertThat(entries.get(today).value, CoreMatchers.equalTo(Entry.SKIP))
assertThat(entries.get(today).value, equalTo(Entry.SKIP))
button.performClick()
sleep(1000)
MatcherAssert.assertThat(entries.get(today).value, CoreMatchers.equalTo(Entry.NO))
assertThat(entries.get(today).value, equalTo(Entry.NO))
}
@Test

View File

@@ -53,10 +53,6 @@ constructor(
}
}
// override fun getCurrentTheme(): Theme {
// return currentTheme
// }
override fun applyDarkTheme() {
currentTheme = DarkTheme()
context.setTheme(R.style.AppBaseThemeDark)

View File

@@ -62,7 +62,7 @@ class ScoreChart : ScrollableChart {
private var nColumns = 0
private var textColor = 0
private var gridColor = 0
private var scores: MutableList<Score>? = null
private var scores: List<Score>? = null
private var primaryColor = 0
@Deprecated("")
@@ -113,7 +113,7 @@ class ScoreChart : ScrollableChart {
postInvalidate()
}
fun setScores(scores: MutableList<Score>) {
fun setScores(scores: List<Score>) {
this.scores = scores
postInvalidate()
}

View File

@@ -37,10 +37,10 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
private set
private var scrollerBucketSize = 1
private var direction = 1
private var detector: GestureDetector? = null
private var scroller: Scroller? = null
private var scrollAnimator: ValueAnimator? = null
private var scrollController: ScrollController? = null
private lateinit var detector: GestureDetector
private lateinit var scroller: Scroller
private lateinit var scrollAnimator: ValueAnimator
private lateinit var scrollController: ScrollController
private var maxDataOffset = 10000
constructor(context: Context?) : super(context) {
@@ -52,11 +52,11 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
}
override fun onAnimationUpdate(animation: ValueAnimator) {
if (!scroller!!.isFinished) {
scroller!!.computeScrollOffset()
if (!scroller.isFinished) {
scroller.computeScrollOffset()
updateDataOffset()
} else {
scrollAnimator!!.cancel()
scrollAnimator.cancel()
}
}
@@ -70,9 +70,9 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
velocityX: Float,
velocityY: Float
): Boolean {
scroller!!.fling(
scroller!!.currX,
scroller!!.currY,
scroller.fling(
scroller.currX,
scroller.currY,
direction * velocityX.toInt() / 2,
0,
0,
@@ -81,13 +81,13 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
0
)
invalidate()
scrollAnimator!!.duration = scroller!!.duration.toLong()
scrollAnimator!!.start()
scrollAnimator.duration = scroller.duration.toLong()
scrollAnimator.start()
return false
}
private val maxX: Int
private get() = maxDataOffset * scrollerBucketSize
get() = maxDataOffset * scrollerBucketSize
public override fun onRestoreInstanceState(state: Parcelable) {
if (state !is BundleSavedState) {
@@ -99,16 +99,16 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
direction = state.bundle.getInt("direction")
dataOffset = state.bundle.getInt("dataOffset")
maxDataOffset = state.bundle.getInt("maxDataOffset")
scroller!!.startScroll(0, 0, x, y, 0)
scroller!!.computeScrollOffset()
scroller.startScroll(0, 0, x, y, 0)
scroller.computeScrollOffset()
super.onRestoreInstanceState(state.superState)
}
public override fun onSaveInstanceState(): Parcelable? {
val superState = super.onSaveInstanceState()
val bundle = Bundle().apply {
putInt("x", scroller!!.currX)
putInt("y", scroller!!.currY)
putInt("x", scroller.currX)
putInt("y", scroller.currY)
putInt("dataOffset", dataOffset)
putInt("direction", direction)
putInt("maxDataOffset", maxDataOffset)
@@ -124,15 +124,15 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
parent?.requestDisallowInterceptTouchEvent(true)
}
dx *= -direction
dx = min(dx, (maxX - scroller!!.currX).toFloat())
scroller!!.startScroll(
scroller!!.currX,
scroller!!.currY,
dx = min(dx, (maxX - scroller.currX).toFloat())
scroller.startScroll(
scroller.currX,
scroller.currY,
dx.toInt(),
dy.toInt(),
0
)
scroller!!.computeScrollOffset()
scroller.computeScrollOffset()
updateDataOffset()
return true
}
@@ -143,7 +143,7 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
}
override fun onTouchEvent(event: MotionEvent): Boolean {
return detector!!.onTouchEvent(event)
return detector.onTouchEvent(event)
}
fun setScrollDirection(direction: Int) {
@@ -155,11 +155,11 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
fun setMaxDataOffset(maxDataOffset: Int) {
this.maxDataOffset = maxDataOffset
dataOffset = min(dataOffset, maxDataOffset)
scrollController!!.onDataOffsetChanged(dataOffset)
scrollController.onDataOffsetChanged(dataOffset)
postInvalidate()
}
fun setScrollController(scrollController: ScrollController?) {
fun setScrollController(scrollController: ScrollController) {
this.scrollController = scrollController
}
@@ -177,18 +177,18 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat
}
fun reset() {
scroller!!.finalX = 0
scroller!!.computeScrollOffset()
scroller.finalX = 0
scroller.computeScrollOffset()
updateDataOffset()
}
private fun updateDataOffset() {
var newDataOffset = scroller!!.currX / scrollerBucketSize
var newDataOffset = scroller.currX / scrollerBucketSize
newDataOffset = max(0, newDataOffset)
newDataOffset = min(maxDataOffset, newDataOffset)
if (newDataOffset != dataOffset) {
dataOffset = newDataOffset
scrollController!!.onDataOffsetChanged(dataOffset)
scrollController.onDataOffsetChanged(dataOffset)
postInvalidate()
}
}

View File

@@ -22,7 +22,6 @@ package org.isoron.uhabits.activities.habits.list.views
import android.content.Context
import android.graphics.text.LineBreaker.BREAK_STRATEGY_BALANCED
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES.LOLLIPOP
import android.os.Build.VERSION_CODES.M
import android.os.Handler
import android.os.Looper
@@ -159,7 +158,7 @@ class HabitCardView(
gravity = Gravity.CENTER_VERTICAL
orientation = LinearLayout.HORIZONTAL
layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
if (SDK_INT >= LOLLIPOP) elevation = dp(1f)
elevation = dp(1f)
addView(scoreRing)
addView(label)
@@ -167,8 +166,7 @@ class HabitCardView(
addView(numberPanel)
setOnTouchListener { v, event ->
if (SDK_INT >= LOLLIPOP)
v.background.setHotspot(event.x, event.y)
v.background.setHotspot(event.x, event.y)
false
}
}
@@ -247,7 +245,7 @@ class HabitCardView(
private fun triggerRipple(x: Float, y: Float) {
val background = innerFrame.background
if (SDK_INT >= LOLLIPOP) background.setHotspot(x, y)
background.setHotspot(x, y)
background.state = intArrayOf(
android.R.attr.state_pressed,
android.R.attr.state_enabled
@@ -256,14 +254,6 @@ class HabitCardView(
}
private fun updateBackground(isSelected: Boolean) {
if (SDK_INT < LOLLIPOP) {
val background = when (isSelected) {
true -> sres.getDrawable(R.attr.selectedBackground)
false -> sres.getDrawable(R.attr.cardBackground)
}
innerFrame.setBackgroundDrawable(background)
return
}
val background = when (isSelected) {
true -> R.drawable.selected_box

View File

@@ -25,8 +25,6 @@ import android.graphics.Color
import android.graphics.Paint
import android.graphics.RectF
import android.graphics.Typeface
import android.os.Build.VERSION.SDK_INT
import android.os.Build.VERSION_CODES.LOLLIPOP
import android.text.TextPaint
import android.view.View.MeasureSpec.EXACTLY
import org.isoron.uhabits.R
@@ -60,7 +58,7 @@ class HeaderView(
init {
setScrollerBucketSize(dim(R.dimen.checkmarkWidth).toInt())
setBackgroundColor(sres.getColor(R.attr.headerBackgroundColor))
if (SDK_INT >= LOLLIPOP) elevation = dp(2.0f)
elevation = dp(2.0f)
}
override fun atMidnight() {

View File

@@ -161,15 +161,19 @@ class NumberButtonView(
val label: String
val typeface: Typeface
if (value >= 0) {
label = value.toShortString()
typeface = BOLD_TYPEFACE
} else if (preferences.areQuestionMarksEnabled()) {
label = resources.getString(R.string.fa_question)
typeface = getFontAwesome()
} else {
label = "0"
typeface = BOLD_TYPEFACE
when {
value >= 0 -> {
label = value.toShortString()
typeface = BOLD_TYPEFACE
}
preferences.areQuestionMarksEnabled() -> {
label = resources.getString(R.string.fa_question)
typeface = getFontAwesome()
}
else -> {
label = "0"
typeface = BOLD_TYPEFACE
}
}
pBold.color = activeColor

View File

@@ -36,7 +36,7 @@ class ScoreCardView(context: Context, attrs: AttributeSet) : LinearLayout(contex
val androidColor = state.color.toThemedAndroidColor(context)
binding.title.setTextColor(androidColor)
binding.spinner.setSelection(state.spinnerPosition)
binding.scoreView.setScores(state.scores.toMutableList())
binding.scoreView.setScores(state.scores)
binding.scoreView.reset()
binding.scoreView.setBucketSize(state.bucketSize)
binding.scoreView.setColor(androidColor)

View File

@@ -75,7 +75,6 @@ class AndroidTaskRunner : TaskRunner {
}
override fun onPreExecute() {
// isCancelled = task.isCanceled
if (isCancelled) return
for (l in listeners) l.onTaskStarted(task)
activeTasks.add(this)

View File

@@ -52,7 +52,7 @@ class ScoreWidget(
setIsTransparencyEnabled(true)
setBucketSize(viewModel.bucketSize)
setColor(habit.color.toThemedAndroidColor(context))
setScores(viewModel.scores.toMutableList())
setScores(viewModel.scores)
}
}