diff options
7 files changed, 72 insertions, 59 deletions
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml index 8b8ebf00e190..3ad7c8c4369c 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"> <FrameLayout android:id="@+id/lockscreen_clock_view" @@ -30,16 +31,13 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:paddingStart="@dimen/clock_padding_start"> - </FrameLayout> + android:paddingStart="@dimen/clock_padding_start" /> <FrameLayout android:id="@+id/lockscreen_clock_view_large" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@id/keyguard_slice_view" - android:paddingTop="@dimen/keyguard_large_clock_top_padding" - android:visibility="gone"> - </FrameLayout> + android:layout_marginTop="@dimen/keyguard_large_clock_top_margin" + android:visibility="gone" /> <!-- Not quite optimal but needed to translate these items as a group. The NotificationIconContainer has its own logic for translation. --> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index a77575418e5f..e3be36503c87 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -669,7 +669,7 @@ <!-- When large clock is showing, offset the smartspace by this amount --> <dimen name="keyguard_smartspace_top_offset">12dp</dimen> <!-- With the large clock, move up slightly from the center --> - <dimen name="keyguard_large_clock_top_padding">100dp</dimen> + <dimen name="keyguard_large_clock_top_margin">-60dp</dimen> <dimen name="notification_scrim_corner_radius">32dp</dimen> diff --git a/packages/SystemUI/shared/res/layout/clock_default_small.xml b/packages/SystemUI/shared/res/layout/clock_default_small.xml index 390ff5e3ff78..ff6d7f9e2240 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 @@ --> <com.android.systemui.shared.clocks.AnimatableClockView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="start" android:gravity="start" diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt index 2099f165b079..5c20b691b991 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt @@ -13,12 +13,14 @@ */ package com.android.systemui.shared.clocks +import android.content.Context import android.content.res.Resources import android.graphics.Color import android.graphics.drawable.Drawable import android.icu.text.NumberFormat import android.util.TypedValue import android.view.LayoutInflater +import android.widget.FrameLayout import com.android.internal.annotations.VisibleForTesting import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.Clock @@ -39,6 +41,7 @@ const val DEFAULT_CLOCK_ID = "DEFAULT" /** Provides the default system clock */ class DefaultClockProvider @Inject constructor( + val ctx: Context, val layoutInflater: LayoutInflater, @Main val resources: Resources ) : ClockProvider { @@ -49,7 +52,7 @@ class DefaultClockProvider @Inject constructor( if (id != DEFAULT_CLOCK_ID) { throw IllegalArgumentException("$id is unsupported by $TAG") } - return DefaultClock(layoutInflater, resources) + return DefaultClock(ctx, layoutInflater, resources) } override fun getClockThumbnail(id: ClockId): Drawable? { @@ -69,14 +72,13 @@ class DefaultClockProvider @Inject constructor( * AnimatableClockView used by the existing lockscreen clock. */ class DefaultClock( + ctx: Context, private val layoutInflater: LayoutInflater, private val resources: Resources ) : Clock { - override val smallClock = - layoutInflater.inflate(R.layout.clock_default_small, null) as AnimatableClockView - override val largeClock = - layoutInflater.inflate(R.layout.clock_default_large, null) as AnimatableClockView - private val clocks = listOf(smallClock, largeClock) + override val smallClock: AnimatableClockView + override val largeClock: AnimatableClockView + private val clocks get() = listOf(smallClock, largeClock) private val burmeseNf = NumberFormat.getInstance(Locale.forLanguageTag("my")) private val burmeseNumerals = burmeseNf.format(FORMAT_NUMBER.toLong()) @@ -84,17 +86,42 @@ class DefaultClock( resources.getFloat(R.dimen.keyguard_clock_line_spacing_scale_burmese) private val defaultLineSpacing = resources.getFloat(R.dimen.keyguard_clock_line_spacing_scale) - private fun updateClockColor(clock: AnimatableClockView, isRegionDark: Boolean) { - val color = if (isRegionDark) { - resources.getColor(android.R.color.system_accent1_100) - } else { - resources.getColor(android.R.color.system_accent2_600) - } - clock.setColors(DOZE_COLOR, color) - clock.animateAppearOnLockscreen() + override val events: ClockEvents + override lateinit var animations: ClockAnimations + private set + + init { + val parent = FrameLayout(ctx) + + smallClock = layoutInflater.inflate( + R.layout.clock_default_small, + parent, + false + ) as AnimatableClockView + + largeClock = layoutInflater.inflate( + R.layout.clock_default_large, + parent, + false + ) as AnimatableClockView + + events = DefaultClockEvents() + animations = DefaultClockAnimations(0f, 0f) + + events.onLocaleChanged(Locale.getDefault()) + + // DOZE_COLOR is a placeholder, and will be assigned correctly in initialize + clocks.forEach { it.setColors(DOZE_COLOR, DOZE_COLOR) } + } + + override fun initialize(resources: Resources, dozeFraction: Float, foldFraction: Float) { + recomputePadding() + animations = DefaultClockAnimations(dozeFraction, foldFraction) + events.onColorPaletteChanged(resources, true, true) + events.onTimeTick() } - override val events = object : ClockEvents { + inner class DefaultClockEvents() : ClockEvents { override fun onTimeTick() = clocks.forEach { it.refreshTime() } override fun onTimeFormatChanged(is24Hr: Boolean) = @@ -136,9 +163,6 @@ class DefaultClock( } } - override var animations = DefaultClockAnimations(0f, 0f) - private set - inner class DefaultClockAnimations( dozeFraction: Float, foldFraction: Float @@ -194,29 +218,20 @@ class DefaultClock( } } - init { - events.onLocaleChanged(Locale.getDefault()) - clocks.forEach { it.setColors(DOZE_COLOR, DOZE_COLOR) } - } - - override fun initialize( - resources: Resources, - dozeFraction: Float, - foldFraction: Float - ) { - recomputePadding() - animations = DefaultClockAnimations(dozeFraction, foldFraction) - events.onColorPaletteChanged( - resources, - true, - true - ) - events.onTimeTick() + private fun updateClockColor(clock: AnimatableClockView, isRegionDark: Boolean) { + val color = if (isRegionDark) { + resources.getColor(android.R.color.system_accent1_100) + } else { + resources.getColor(android.R.color.system_accent2_600) + } + clock.setColors(DOZE_COLOR, color) + clock.animateAppearOnLockscreen() } private fun recomputePadding() { - val topPadding = -1 * (largeClock.bottom.toInt() - 180) - largeClock.setPadding(0, topPadding, 0, 0) + val lp = largeClock.getLayoutParams() as FrameLayout.LayoutParams + lp.topMargin = (-0.5f * largeClock.bottom).toInt() + largeClock.setLayoutParams(lp) } override fun dump(pw: PrintWriter) = clocks.forEach { it.dump(pw) } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 10d6d9fda548..d7cd1d0dbc6f 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -8,7 +8,6 @@ import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.View; -import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.RelativeLayout; @@ -106,9 +105,7 @@ public class KeyguardClockSwitch extends RelativeLayout { } // Attach small and big clock views to hierarchy. - mSmallClockFrame.addView(clock.getSmallClock(), -1, - new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.WRAP_CONTENT)); + mSmallClockFrame.addView(clock.getSmallClock()); mLargeClockFrame.addView(clock.getLargeClock()); } @@ -223,7 +220,7 @@ public class KeyguardClockSwitch extends RelativeLayout { public void dump(PrintWriter pw, String[] args) { pw.println("KeyguardClockSwitch:"); - pw.println(" mClockFrame: " + mSmallClockFrame); + pw.println(" mSmallClockFrame: " + mSmallClockFrame); pw.println(" mLargeClockFrame: " + mLargeClockFrame); pw.println(" mStatusArea: " + mStatusArea); pw.println(" mDisplayedClockSize: " + mDisplayedClockSize); diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index dd78f1cef78c..2165099b474e 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -72,7 +72,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS private final DumpManager mDumpManager; private final ClockEventController mClockEventController; - /** Clock frames for both small and large sizes */ private FrameLayout mSmallClockFrame; // top aligned clock private FrameLayout mLargeClockFrame; // centered clock @@ -151,7 +150,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS * Attach the controller to the view it relates to. */ @Override - public void onInit() { + protected void onInit() { mKeyguardSliceViewController.init(); mSmallClockFrame = mView.findViewById(R.id.lockscreen_clock_view); @@ -390,8 +389,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS * bounds during the unlock transition. */ private void setClipChildrenForUnlock(boolean clip) { - mView.setClipChildren(clip); - if (mStatusArea != null) { mStatusArea.setClipChildren(clip); } 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 2f22455f8fe0..a978294c98ec 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 @@ -21,10 +21,12 @@ 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 @@ -35,6 +37,7 @@ 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.Mock @@ -58,14 +61,16 @@ class DefaultClockProviderTest : SysuiTestCase() { @Before fun setUp() { - whenever(layoutInflater.inflate(R.layout.clock_default_small, null)) + whenever(layoutInflater.inflate(eq(R.layout.clock_default_small), any(), anyBoolean())) .thenReturn(mockSmallClockView) - whenever(layoutInflater.inflate(R.layout.clock_default_large, null)) + 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 @@ -95,6 +100,7 @@ class DefaultClockProviderTest : SysuiTestCase() { verify(mockLargeClockView, times(2)).setColors(eq(DOZE_COLOR), anyInt()) verify(mockSmallClockView).refreshTime() verify(mockLargeClockView).refreshTime() + verify(mockLargeClockView).setLayoutParams(any()) } @Test @@ -132,7 +138,7 @@ class DefaultClockProviderTest : SysuiTestCase() { verify(mockSmallClockView).setTextSize(eq(TypedValue.COMPLEX_UNIT_PX), anyFloat()) verify(mockLargeClockView).setTextSize(eq(TypedValue.COMPLEX_UNIT_PX), anyFloat()) - verify(mockLargeClockView).setPadding(eq(0), anyInt(), eq(0), eq(0)) + verify(mockLargeClockView).setLayoutParams(any()) } @Test |