diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
index 4889dbd239133..01e5d86549ebd 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
@@ -61,11 +61,7 @@ interface Clock {
/** Initializes various rendering parameters. If never called, provides reasonable defaults. */
fun initialize(resources: Resources, dozeFraction: Float, foldFraction: Float) {
- events.onColorPaletteChanged(
- resources,
- ClockDarkness.DEFAULT,
- ClockDarkness.DEFAULT
- )
+ events.onColorPaletteChanged(resources, true, true)
animations.doze(dozeFraction)
animations.fold(foldFraction)
events.onTimeTick()
@@ -95,8 +91,8 @@ interface ClockEvents {
/** Call whenever the color palette should update */
fun onColorPaletteChanged(
resources: Resources,
- smallClockIsDark: ClockDarkness,
- largeClockIsDark: ClockDarkness
+ smallClockIsDark: Boolean,
+ largeClockIsDark: Boolean
) { }
}
@@ -120,12 +116,3 @@ data class ClockMetadata(
val clockId: ClockId,
val name: String
)
-
-/**
- * Enum for whether clock region is dark or light.
- */
-enum class ClockDarkness(val isDark: Boolean) {
- DEFAULT(true),
- DARK(true),
- LIGHT(false)
-}
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
index 8b8ebf00e190d..3ad7c8c4369ca 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
@@ -23,6 +23,7 @@
android:id="@+id/keyguard_clock_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:clipChildren="false"
android:layout_gravity="center_horizontal|top">
-
+ android:paddingStart="@dimen/clock_padding_start" />
-
+ android:layout_marginTop="@dimen/keyguard_large_clock_top_margin"
+ android:visibility="gone" />
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index a77575418e5f2..e3be36503c873 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -669,7 +669,7 @@
12dp
- 100dp
+ -60dp
32dp
diff --git a/packages/SystemUI/shared/res/layout/clock_default_small.xml b/packages/SystemUI/shared/res/layout/clock_default_small.xml
index 390ff5e3ff787..ff6d7f9e22403 100644
--- a/packages/SystemUI/shared/res/layout/clock_default_small.xml
+++ b/packages/SystemUI/shared/res/layout/clock_default_small.xml
@@ -18,7 +18,7 @@
-->
()
verify(configurationController).addCallback(capture(captor))
captor.value.onThemeChanged()
- verify(events).onColorPaletteChanged(any(), any(), any())
+ verify(events, times(2)).onColorPaletteChanged(any(), any(), any())
}
@Test
@@ -257,6 +259,7 @@ class ClockEventControllerTest : SysuiTestCase() {
@Test
fun unregisterListeners_validate() {
+ clockEventController.clock = clock
clockEventController.unregisterListeners()
verify(broadcastDispatcher).unregisterReceiver(any())
verify(configurationController).removeCallback(any())
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
index 78694480ad5b6..2b4a109282ce1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
@@ -19,17 +19,31 @@ package com.android.systemui.shared.clocks
import android.content.res.Resources
import android.graphics.drawable.Drawable
import android.testing.AndroidTestingRunner
+import android.util.TypedValue
import android.view.LayoutInflater
+import android.widget.FrameLayout
import androidx.test.filters.SmallTest
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.shared.clocks.DefaultClock.Companion.DOZE_COLOR
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+import java.util.Locale
+import java.util.TimeZone
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertNotNull
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyBoolean
+import org.mockito.ArgumentMatchers.anyFloat
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.notNull
import org.mockito.Mock
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` as whenever
import org.mockito.junit.MockitoJUnit
@@ -39,7 +53,8 @@ class DefaultClockProviderTest : SysuiTestCase() {
@JvmField @Rule val mockito = MockitoJUnit.rule()
- @Mock private lateinit var mockClockView: AnimatableClockView
+ @Mock private lateinit var mockSmallClockView: AnimatableClockView
+ @Mock private lateinit var mockLargeClockView: AnimatableClockView
@Mock private lateinit var layoutInflater: LayoutInflater
@Mock private lateinit var mockClockThumbnail: Drawable
@Mock private lateinit var resources: Resources
@@ -47,14 +62,16 @@ class DefaultClockProviderTest : SysuiTestCase() {
@Before
fun setUp() {
- whenever(layoutInflater.inflate(R.layout.clock_default_small, null))
- .thenReturn(mockClockView)
- whenever(layoutInflater.inflate(R.layout.clock_default_large, null))
- .thenReturn(mockClockView)
+ whenever(layoutInflater.inflate(eq(R.layout.clock_default_small), any(), anyBoolean()))
+ .thenReturn(mockSmallClockView)
+ whenever(layoutInflater.inflate(eq(R.layout.clock_default_large), any(), anyBoolean()))
+ .thenReturn(mockLargeClockView)
whenever(resources.getDrawable(R.drawable.clock_default_thumbnail, null))
.thenReturn(mockClockThumbnail)
+ whenever(mockSmallClockView.getLayoutParams()).thenReturn(FrameLayout.LayoutParams(10, 10))
+ whenever(mockLargeClockView.getLayoutParams()).thenReturn(FrameLayout.LayoutParams(10, 10))
- provider = DefaultClockProvider(layoutInflater, resources)
+ provider = DefaultClockProvider(context, layoutInflater, resources)
}
@Test
@@ -71,7 +88,79 @@ class DefaultClockProviderTest : SysuiTestCase() {
// Default clock provider must always provide the default clock
val clock = provider.createClock(DEFAULT_CLOCK_ID)
assertNotNull(clock)
- assertEquals(clock.smallClock, mockClockView)
- assertEquals(clock.largeClock, mockClockView)
+ assertEquals(clock.smallClock, mockSmallClockView)
+ assertEquals(clock.largeClock, mockLargeClockView)
+ }
+
+ @Test
+ fun defaultClock_initialize() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.initialize(resources, 0f, 0f)
+
+ verify(mockSmallClockView, times(2)).setColors(eq(DOZE_COLOR), anyInt())
+ verify(mockLargeClockView, times(2)).setColors(eq(DOZE_COLOR), anyInt())
+ verify(mockSmallClockView).onTimeZoneChanged(notNull())
+ verify(mockLargeClockView).onTimeZoneChanged(notNull())
+ verify(mockSmallClockView).refreshTime()
+ verify(mockLargeClockView).refreshTime()
+ verify(mockLargeClockView).setLayoutParams(any())
+ }
+
+ @Test
+ fun defaultClock_events_onTimeTick() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onTimeTick()
+
+ verify(mockSmallClockView).refreshTime()
+ verify(mockLargeClockView).refreshTime()
+ }
+
+ @Test
+ fun defaultClock_events_onTimeFormatChanged() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onTimeFormatChanged(true)
+
+ verify(mockSmallClockView).refreshFormat(true)
+ verify(mockLargeClockView).refreshFormat(true)
+ }
+
+ @Test
+ fun defaultClock_events_onTimeZoneChanged() {
+ val timeZone = mock()
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onTimeZoneChanged(timeZone)
+
+ verify(mockSmallClockView).onTimeZoneChanged(timeZone)
+ verify(mockLargeClockView).onTimeZoneChanged(timeZone)
+ }
+
+ @Test
+ fun defaultClock_events_onFontSettingChanged() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onFontSettingChanged()
+
+ verify(mockSmallClockView).setTextSize(eq(TypedValue.COMPLEX_UNIT_PX), anyFloat())
+ verify(mockLargeClockView).setTextSize(eq(TypedValue.COMPLEX_UNIT_PX), anyFloat())
+ verify(mockLargeClockView).setLayoutParams(any())
+ }
+
+ @Test
+ fun defaultClock_events_onColorPaletteChanged() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onColorPaletteChanged(resources, true, true)
+
+ verify(mockSmallClockView, times(2)).setColors(eq(DOZE_COLOR), anyInt())
+ verify(mockLargeClockView, times(2)).setColors(eq(DOZE_COLOR), anyInt())
+ }
+
+ @Test
+ fun defaultClock_events_onLocaleChanged() {
+ val clock = provider.createClock(DEFAULT_CLOCK_ID)
+ clock.events.onLocaleChanged(Locale.getDefault())
+
+ verify(mockSmallClockView, times(2)).setLineSpacingScale(anyFloat())
+ verify(mockLargeClockView, times(2)).setLineSpacingScale(anyFloat())
+ verify(mockSmallClockView, times(2)).refreshFormat()
+ verify(mockLargeClockView, times(2)).refreshFormat()
}
}