1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.media.controls.ui.drawable 18 19 import android.graphics.Canvas 20 import android.graphics.Color 21 import android.graphics.LightingColorFilter 22 import android.graphics.Paint 23 import android.graphics.Rect 24 import android.testing.TestableLooper 25 import androidx.test.ext.junit.runners.AndroidJUnit4 26 import androidx.test.filters.SmallTest 27 import com.android.internal.graphics.ColorUtils 28 import com.android.systemui.SysuiTestCase 29 import com.android.systemui.util.mockito.any 30 import com.google.common.truth.Truth.assertThat 31 import org.junit.Before 32 import org.junit.Rule 33 import org.junit.Test 34 import org.junit.runner.RunWith 35 import org.mockito.ArgumentCaptor 36 import org.mockito.Captor 37 import org.mockito.Mock 38 import org.mockito.Mockito.times 39 import org.mockito.Mockito.verify 40 import org.mockito.junit.MockitoJUnit 41 42 @SmallTest 43 @RunWith(AndroidJUnit4::class) 44 @TestableLooper.RunWithLooper 45 class SquigglyProgressTest : SysuiTestCase() { 46 47 private val colorFilter = LightingColorFilter(Color.RED, Color.BLUE) 48 private val strokeWidth = 5f 49 private val alpha = 128 50 private val tint = Color.GREEN 51 52 lateinit var squigglyProgress: SquigglyProgress 53 @Mock lateinit var canvas: Canvas 54 @Captor lateinit var paintCaptor: ArgumentCaptor<Paint> 55 @JvmField @Rule val mockitoRule = MockitoJUnit.rule() 56 57 @Before setupnull58 fun setup() { 59 squigglyProgress = SquigglyProgress() 60 squigglyProgress.waveLength = 30f 61 squigglyProgress.lineAmplitude = 10f 62 squigglyProgress.phaseSpeed = 8f 63 squigglyProgress.strokeWidth = strokeWidth 64 squigglyProgress.bounds = Rect(0, 0, 300, 30) 65 } 66 67 @Test testDrawPathAndLinenull68 fun testDrawPathAndLine() { 69 squigglyProgress.draw(canvas) 70 71 verify(canvas, times(2)).drawPath(any(), paintCaptor.capture()) 72 } 73 74 @Test testOnLevelChangednull75 fun testOnLevelChanged() { 76 assertThat(squigglyProgress.setLevel(5)).isFalse() 77 squigglyProgress.animate = true 78 assertThat(squigglyProgress.setLevel(4)).isTrue() 79 } 80 81 @Test testStrokeWidthnull82 fun testStrokeWidth() { 83 squigglyProgress.draw(canvas) 84 85 verify(canvas, times(2)).drawPath(any(), paintCaptor.capture()) 86 val (wavePaint, linePaint) = paintCaptor.getAllValues() 87 88 assertThat(wavePaint.strokeWidth).isEqualTo(strokeWidth) 89 assertThat(linePaint.strokeWidth).isEqualTo(strokeWidth) 90 } 91 92 @Test testAlphanull93 fun testAlpha() { 94 squigglyProgress.alpha = alpha 95 squigglyProgress.draw(canvas) 96 97 verify(canvas, times(2)).drawPath(any(), paintCaptor.capture()) 98 val (wavePaint, linePaint) = paintCaptor.getAllValues() 99 100 assertThat(squigglyProgress.alpha).isEqualTo(alpha) 101 assertThat(wavePaint.alpha).isEqualTo(alpha) 102 assertThat(linePaint.alpha).isEqualTo((alpha / 255f * DISABLED_ALPHA).toInt()) 103 } 104 105 @Test testColorFilternull106 fun testColorFilter() { 107 squigglyProgress.colorFilter = colorFilter 108 squigglyProgress.draw(canvas) 109 110 verify(canvas, times(2)).drawPath(any(), paintCaptor.capture()) 111 val (wavePaint, linePaint) = paintCaptor.getAllValues() 112 113 assertThat(wavePaint.colorFilter).isEqualTo(colorFilter) 114 assertThat(linePaint.colorFilter).isEqualTo(colorFilter) 115 } 116 117 @Test testTintnull118 fun testTint() { 119 squigglyProgress.setTint(tint) 120 squigglyProgress.draw(canvas) 121 122 verify(canvas, times(2)).drawPath(any(), paintCaptor.capture()) 123 val (wavePaint, linePaint) = paintCaptor.getAllValues() 124 125 assertThat(wavePaint.color).isEqualTo(tint) 126 assertThat(linePaint.color).isEqualTo(ColorUtils.setAlphaComponent(tint, DISABLED_ALPHA)) 127 } 128 } 129