blob: e9a0a40fe8ae04c3d798cdd362a899d3234130db [file] [log] [blame]
Robert Snoeberger7dffd372020-04-01 17:32:44 -04001/*
2 * Copyright (C) 2020 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
17package com.android.systemui.media
18
Robert Snoeberger7dffd372020-04-01 17:32:44 -040019import android.testing.AndroidTestingRunner
20import android.testing.TestableLooper
21import android.view.View
22import android.widget.SeekBar
23import android.widget.TextView
24import androidx.test.filters.SmallTest
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040025import com.android.systemui.R
Robert Snoeberger7dffd372020-04-01 17:32:44 -040026import com.android.systemui.SysuiTestCase
27import com.google.common.truth.Truth.assertThat
Robert Snoeberger7dffd372020-04-01 17:32:44 -040028import org.junit.Before
29import org.junit.Test
30import org.junit.runner.RunWith
31import org.mockito.Mock
32import org.mockito.Mockito.mock
33import org.mockito.Mockito.`when` as whenever
34
35@SmallTest
36@RunWith(AndroidTestingRunner::class)
37@TestableLooper.RunWithLooper
38public class SeekBarObserverTest : SysuiTestCase() {
39
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040040 private val disabledHeight = 1
41 private val enabledHeight = 2
42
Robert Snoeberger7dffd372020-04-01 17:32:44 -040043 private lateinit var observer: SeekBarObserver
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040044 @Mock private lateinit var mockHolder: PlayerViewHolder
Robert Snoeberger7dffd372020-04-01 17:32:44 -040045 private lateinit var seekBarView: SeekBar
46 private lateinit var elapsedTimeView: TextView
47 private lateinit var totalTimeView: TextView
48
49 @Before
50 fun setUp() {
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040051 mockHolder = mock(PlayerViewHolder::class.java)
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040052
53 context.orCreateTestableResources
54 .addOverride(R.dimen.qs_media_enabled_seekbar_height, enabledHeight)
55 context.orCreateTestableResources
56 .addOverride(R.dimen.qs_media_disabled_seekbar_height, disabledHeight)
57
Robert Snoeberger7dffd372020-04-01 17:32:44 -040058 seekBarView = SeekBar(context)
59 elapsedTimeView = TextView(context)
60 totalTimeView = TextView(context)
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040061 whenever(mockHolder.seekBar).thenReturn(seekBarView)
62 whenever(mockHolder.elapsedTimeView).thenReturn(elapsedTimeView)
63 whenever(mockHolder.totalTimeView).thenReturn(totalTimeView)
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040064
Robert Snoeberger45be3fb2020-05-19 02:00:43 -040065 observer = SeekBarObserver(mockHolder)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040066 }
67
68 @Test
69 fun seekBarGone() {
70 // WHEN seek bar is disabled
71 val isEnabled = false
Lucas Dupin81e9beb2020-05-14 19:28:36 -070072 val data = SeekBarViewModel.Progress(isEnabled, false, null, null)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040073 observer.onChanged(data)
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040074 // THEN seek bar shows just a thin line with no text
Robert Snoebergera9b8d7f2020-04-07 17:44:51 -040075 assertThat(seekBarView.isEnabled()).isFalse()
76 assertThat(seekBarView.getThumb().getAlpha()).isEqualTo(0)
77 assertThat(elapsedTimeView.getText()).isEqualTo("")
78 assertThat(totalTimeView.getText()).isEqualTo("")
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040079 assertThat(seekBarView.maxHeight).isEqualTo(disabledHeight)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040080 }
81
82 @Test
83 fun seekBarVisible() {
84 // WHEN seek bar is enabled
85 val isEnabled = true
Lucas Dupin81e9beb2020-05-14 19:28:36 -070086 val data = SeekBarViewModel.Progress(isEnabled, true, 3000, 12000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040087 observer.onChanged(data)
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040088 // THEN seek bar is visible and thick
Robert Snoeberger7dffd372020-04-01 17:32:44 -040089 assertThat(seekBarView.getVisibility()).isEqualTo(View.VISIBLE)
90 assertThat(elapsedTimeView.getVisibility()).isEqualTo(View.VISIBLE)
91 assertThat(totalTimeView.getVisibility()).isEqualTo(View.VISIBLE)
Fabian Kozynski1b9ca1e2020-06-22 21:10:39 -040092 assertThat(seekBarView.maxHeight).isEqualTo(enabledHeight)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040093 }
94
95 @Test
96 fun seekBarProgress() {
97 // WHEN seek bar progress is about half
Lucas Dupin81e9beb2020-05-14 19:28:36 -070098 val data = SeekBarViewModel.Progress(true, true, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -040099 observer.onChanged(data)
100 // THEN seek bar is visible
101 assertThat(seekBarView.progress).isEqualTo(100)
102 assertThat(seekBarView.max).isEqualTo(120000)
103 assertThat(elapsedTimeView.getText()).isEqualTo("00:03")
104 assertThat(totalTimeView.getText()).isEqualTo("02:00")
105 }
106
107 @Test
108 fun seekBarDisabledWhenSeekNotAvailable() {
109 // WHEN seek is not available
110 val isSeekAvailable = false
Lucas Dupin81e9beb2020-05-14 19:28:36 -0700111 val data = SeekBarViewModel.Progress(true, isSeekAvailable, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -0400112 observer.onChanged(data)
113 // THEN seek bar is not enabled
114 assertThat(seekBarView.isEnabled()).isFalse()
115 }
116
117 @Test
118 fun seekBarEnabledWhenSeekNotAvailable() {
119 // WHEN seek is available
120 val isSeekAvailable = true
Lucas Dupin81e9beb2020-05-14 19:28:36 -0700121 val data = SeekBarViewModel.Progress(true, isSeekAvailable, 3000, 120000)
Robert Snoeberger7dffd372020-04-01 17:32:44 -0400122 observer.onChanged(data)
123 // THEN seek bar is not enabled
124 assertThat(seekBarView.isEnabled()).isTrue()
125 }
Robert Snoeberger7dffd372020-04-01 17:32:44 -0400126}