diff options
| author | 2024-10-10 20:35:02 +0000 | |
|---|---|---|
| committer | 2024-10-11 02:09:43 +0000 | |
| commit | f8f5ad5b58639c7a52235627d35b204c709d71a0 (patch) | |
| tree | 956a6a5807de425ecb0124fc1ba80f25807c158c | |
| parent | 02e79df1455037866fe815e1723578610c3b43cf (diff) | |
Remove the dynamic Layer Factories
Also started removing asset loader. Required moving an id from
systemui into the customization lib so it could be referenced.
Bug: 364680879
Test: Manually checked clock
Flag: com.android.systemui.clock_reactive_variants
Change-Id: I339f571149d5937032e4432bd26b809dd19bdcca
28 files changed, 406 insertions, 519 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/WeatherClockSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/WeatherClockSection.kt index 2e39524baaad..73c4fab7b646 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/WeatherClockSection.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/WeatherClockSection.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.viewinterop.AndroidView import com.android.compose.animation.scene.ElementKey import com.android.compose.animation.scene.SceneScope import com.android.compose.modifiers.padding -import com.android.systemui.customization.R as customizationR +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.ui.composable.blueprint.WeatherClockElementKeys import com.android.systemui.keyguard.ui.composable.modifier.burnInAware import com.android.systemui.keyguard.ui.viewmodel.AodBurnInViewModel @@ -57,12 +57,12 @@ constructor( Row( modifier = Modifier.padding( - horizontal = dimensionResource(customizationR.dimen.clock_padding_start) + horizontal = dimensionResource(customR.dimen.clock_padding_start) ) .burnInAware(aodBurnInViewModel, burnInParams, isClock = true) ) { WeatherElement( - weatherClockElementViewId = customizationR.id.weather_clock_time, + weatherClockElementViewId = customR.id.weather_clock_time, clock = clock, elementKey = WeatherClockElementKeys.timeElementKey, ) @@ -75,7 +75,7 @@ constructor( modifier: Modifier = Modifier, ) { WeatherElement( - weatherClockElementViewId = customizationR.id.weather_clock_date, + weatherClockElementViewId = customR.id.weather_clock_date, clock = clock, elementKey = WeatherClockElementKeys.dateElementKey, modifier = modifier, @@ -88,7 +88,7 @@ constructor( modifier: Modifier = Modifier, ) { WeatherElement( - weatherClockElementViewId = customizationR.id.weather_clock_weather_icon, + weatherClockElementViewId = customR.id.weather_clock_weather_icon, clock = clock, elementKey = WeatherClockElementKeys.weatherIconElementKey, modifier = modifier.wrapContentSize(), @@ -101,7 +101,7 @@ constructor( modifier: Modifier = Modifier, ) { WeatherElement( - weatherClockElementViewId = customizationR.id.weather_clock_alarm_dnd, + weatherClockElementViewId = customR.id.weather_clock_alarm_dnd, clock = clock, elementKey = WeatherClockElementKeys.dndAlarmElementKey, modifier = modifier.wrapContentSize(), @@ -114,7 +114,7 @@ constructor( modifier: Modifier = Modifier, ) { WeatherElement( - weatherClockElementViewId = customizationR.id.weather_clock_temperature, + weatherClockElementViewId = customR.id.weather_clock_temperature, clock = clock, elementKey = WeatherClockElementKeys.temperatureElementKey, modifier = modifier.wrapContentSize(), @@ -159,7 +159,7 @@ constructor( modifier = Modifier.height(IntrinsicSize.Max) .padding( - horizontal = dimensionResource(customizationR.dimen.clock_padding_start) + horizontal = dimensionResource(customR.dimen.clock_padding_start) ) .burnInAware(aodBurnInViewModel, burnInParams, isClock = true) ) { @@ -168,7 +168,7 @@ constructor( modifier = Modifier.fillMaxSize() .padding( - start = dimensionResource(customizationR.dimen.clock_padding_start) + start = dimensionResource(customR.dimen.clock_padding_start) ) ) { Weather(clock = clock, modifier = Modifier.align(Alignment.TopStart)) diff --git a/packages/SystemUI/customization/res/values/ids.xml b/packages/SystemUI/customization/res/values/ids.xml index ec466f041179..3a3e06bdd377 100644 --- a/packages/SystemUI/customization/res/values/ids.xml +++ b/packages/SystemUI/customization/res/values/ids.xml @@ -1,5 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <resources> + <item type="id" name="lockscreen_clock_view_large" /> + <item type="id" name="lockscreen_clock_view" /> + <!-- View ids for elements in large weather clock --> <item type="id" name="weather_clock_time" /> <item type="id" name="weather_clock_date" /> diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt index 9b94c91a348c..eedddb28ff89 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ComposedDigitalLayerController.kt @@ -30,16 +30,16 @@ import com.android.systemui.plugins.clocks.ClockFaceEvents import com.android.systemui.plugins.clocks.ClockReactiveSetting import com.android.systemui.plugins.clocks.WeatherData import com.android.systemui.plugins.clocks.ZenData -import com.android.systemui.shared.clocks.view.DigitalClockFaceView import com.android.systemui.shared.clocks.view.FlexClockView +import com.android.systemui.shared.clocks.view.SimpleDigitalClockTextView import java.util.Locale import java.util.TimeZone class ComposedDigitalLayerController( private val ctx: Context, - private val assets: AssetLoader, + private val resources: Resources, + private val assets: AssetLoader, // TODO(b/364680879): Remove and replace w/ resources private val layer: ComposedDigitalHandLayer, - private val isLargeClock: Boolean, messageBuffer: MessageBuffer, ) : SimpleClockLayerController { private val logger = Logger(messageBuffer, ComposedDigitalLayerController::class.simpleName!!) @@ -48,34 +48,22 @@ class ComposedDigitalLayerController( val dozeState = DefaultClockController.AnimationState(1F) var isRegionDark = true - override var view: DigitalClockFaceView = - when (layer.customizedView) { - "FlexClockView" -> FlexClockView(ctx, assets, messageBuffer) - else -> { - throw IllegalStateException("CustomizedView string is not valid") - } - } - - // Matches LayerControllerConstructor - internal constructor( - ctx: Context, - assets: AssetLoader, - layer: ClockLayer, - isLargeClock: Boolean, - messageBuffer: MessageBuffer, - ) : this(ctx, assets, layer as ComposedDigitalHandLayer, isLargeClock, messageBuffer) + override val view = FlexClockView(ctx, assets, messageBuffer) init { layer.digitalLayers.forEach { + val childView = SimpleDigitalClockTextView(ctx, messageBuffer) val controller = - SimpleClockLayerController.Factory.create( + SimpleDigitalHandLayerController( ctx, + resources, assets, - it, - isLargeClock, + it as DigitalHandLayer, + childView, messageBuffer, ) - view.addView(controller.view) + + view.addView(childView) layerControllers.add(controller) } } diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt index ac268420fb75..3903dbaf64c6 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt @@ -53,11 +53,8 @@ class DefaultClockProvider( } return if (clockReactiveVariants) { - // TODO handle the case here where only the smallClock message buffer is added - val assetLoader = - AssetLoader(ctx, ctx, "clocks/", messageBuffers?.smallClockMessageBuffer!!) - - SimpleClockController(ctx, assetLoader, FLEX_DESIGN, messageBuffers) + val assets = AssetLoader(ctx, ctx, "clocks/", messageBuffers!!.infraMessageBuffer) + FlexClockController(ctx, resources, assets, FLEX_DESIGN, messageBuffers) } else { DefaultClockController( ctx, @@ -82,6 +79,9 @@ class DefaultClockProvider( resources.getString(R.string.clock_default_description), // TODO(b/352049256): Update placeholder to actual resource resources.getDrawable(R.drawable.clock_default_thumbnail, null), + isReactiveToTone = true, + isReactiveToTouch = clockReactiveVariants, + axes = listOf(), // TODO: Ater some picker definition ) } @@ -118,9 +118,9 @@ class DefaultClockProvider( alignment = DigitalAlignment( HorizontalAlignment.CENTER, - VerticalAlignment.CENTER + VerticalAlignment.CENTER, ), - dateTimeFormat = "hh" + dateTimeFormat = "hh", ), DigitalHandLayer( layerBounds = LayerBounds.FIT, @@ -146,9 +146,9 @@ class DefaultClockProvider( alignment = DigitalAlignment( HorizontalAlignment.CENTER, - VerticalAlignment.CENTER + VerticalAlignment.CENTER, ), - dateTimeFormat = "hh" + dateTimeFormat = "hh", ), DigitalHandLayer( layerBounds = LayerBounds.FIT, @@ -174,9 +174,9 @@ class DefaultClockProvider( alignment = DigitalAlignment( HorizontalAlignment.CENTER, - VerticalAlignment.CENTER + VerticalAlignment.CENTER, ), - dateTimeFormat = "mm" + dateTimeFormat = "mm", ), DigitalHandLayer( layerBounds = LayerBounds.FIT, @@ -202,11 +202,11 @@ class DefaultClockProvider( alignment = DigitalAlignment( HorizontalAlignment.CENTER, - VerticalAlignment.CENTER + VerticalAlignment.CENTER, ), - dateTimeFormat = "mm" - ) - ) + dateTimeFormat = "mm", + ), + ), ) ) @@ -230,7 +230,7 @@ class DefaultClockProvider( renderType = RenderType.CHANGE_WEIGHT, ), alignment = DigitalAlignment(HorizontalAlignment.LEFT, null), - dateTimeFormat = "h:mm" + dateTimeFormat = "h:mm", ) ) @@ -239,7 +239,7 @@ class DefaultClockProvider( name = "@string/clock_default_name", description = "@string/clock_default_description", large = ClockFace(layers = largeLayer), - small = ClockFace(layers = smallLayer) + small = ClockFace(layers = smallLayer), ) } } diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt index ec7779825bda..b8ebd0ff559b 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockController.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt @@ -18,7 +18,7 @@ package com.android.systemui.shared.clocks import android.content.Context import android.content.res.Resources -import com.android.systemui.monet.Style as MonetStyle +import com.android.systemui.customization.R import com.android.systemui.plugins.clocks.AlarmData import com.android.systemui.plugins.clocks.ClockConfig import com.android.systemui.plugins.clocks.ClockController @@ -27,21 +27,24 @@ import com.android.systemui.plugins.clocks.ClockMessageBuffers import com.android.systemui.plugins.clocks.ClockReactiveSetting import com.android.systemui.plugins.clocks.WeatherData import com.android.systemui.plugins.clocks.ZenData +import com.android.systemui.shared.clocks.view.FlexClockView import java.io.PrintWriter import java.util.Locale import java.util.TimeZone -/** Controller for a simple json specified clock */ -class SimpleClockController( +/** Controller for the default flex clock */ +class FlexClockController( private val ctx: Context, - private val assets: AssetLoader, - val design: ClockDesign, + private val resources: Resources, + private val assets: AssetLoader, // TODO(b/364680879): Remove and replace w/ resources + val design: ClockDesign, // TODO(b/364680879): Remove when done inlining val messageBuffers: ClockMessageBuffers?, ) : ClockController { override val smallClock = run { val buffer = messageBuffers?.smallClockMessageBuffer ?: LogUtil.DEFAULT_MESSAGE_BUFFER - SimpleClockFaceController( + FlexClockFaceController( ctx, + resources, assets.copy(messageBuffer = buffer), design.small ?: design.large!!, false, @@ -51,8 +54,9 @@ class SimpleClockController( override val largeClock = run { val buffer = messageBuffers?.largeClockMessageBuffer ?: LogUtil.DEFAULT_MESSAGE_BUFFER - SimpleClockFaceController( + FlexClockFaceController( ctx, + resources, assets.copy(messageBuffer = buffer), design.large ?: design.small!!, true, @@ -62,16 +66,10 @@ class SimpleClockController( override val config: ClockConfig by lazy { ClockConfig( - design.id, - design.name?.let { assets.tryReadString(it) ?: it } ?: "", - design.description?.let { assets.tryReadString(it) ?: it } ?: "", - isReactiveToTone = - design.colorPalette == null || design.colorPalette == MonetStyle.CLOCK, - useAlternateSmartspaceAODTransition = - smallClock.config.hasCustomWeatherDataDisplay || - largeClock.config.hasCustomWeatherDataDisplay, - useCustomClockScene = - smallClock.config.useCustomClockScene || largeClock.config.useCustomClockScene, + DEFAULT_CLOCK_ID, + resources.getString(R.string.clock_default_name), + resources.getString(R.string.clock_default_description), + isReactiveToTone = true, ) } @@ -80,8 +78,8 @@ class SimpleClockController( override var isReactiveTouchInteractionEnabled = false set(value) { field = value - smallClock.events.isReactiveTouchInteractionEnabled = value - largeClock.events.isReactiveTouchInteractionEnabled = value + val view = largeClock.view as FlexClockView + view.isReactiveTouchInteractionEnabled = value } override fun onTimeZoneChanged(timeZone: TimeZone) { diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt new file mode 100644 index 000000000000..ef24d2ad3071 --- /dev/null +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.shared.clocks + +import android.content.Context +import android.content.res.Resources +import android.graphics.Rect +import android.view.Gravity +import android.view.View +import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import android.widget.FrameLayout +import com.android.systemui.customization.R +import com.android.systemui.log.core.MessageBuffer +import com.android.systemui.plugins.clocks.AlarmData +import com.android.systemui.plugins.clocks.ClockAnimations +import com.android.systemui.plugins.clocks.ClockEvents +import com.android.systemui.plugins.clocks.ClockFaceConfig +import com.android.systemui.plugins.clocks.ClockFaceController +import com.android.systemui.plugins.clocks.ClockFaceEvents +import com.android.systemui.plugins.clocks.ClockFaceLayout +import com.android.systemui.plugins.clocks.ClockReactiveSetting +import com.android.systemui.plugins.clocks.DefaultClockFaceLayout +import com.android.systemui.plugins.clocks.WeatherData +import com.android.systemui.plugins.clocks.ZenData +import com.android.systemui.shared.clocks.view.FlexClockView +import com.android.systemui.shared.clocks.view.SimpleDigitalClockTextView +import java.util.Locale +import java.util.TimeZone +import kotlin.math.max + +// TODO(b/364680879): Merge w/ ComposedDigitalLayerController +class FlexClockFaceController( + ctx: Context, + private val resources: Resources, + val assets: AssetLoader, // TODO(b/364680879): Remove and replace w/ resources + face: ClockFace, + private val isLargeClock: Boolean, + messageBuffer: MessageBuffer, +) : ClockFaceController { + override val view: View + get() = layerController.view + + override val config = + ClockFaceConfig( + hasCustomPositionUpdatedAnimation = false // TODO(b/364673982) + ) + + private val keyguardLargeClockTopMargin = + resources.getDimensionPixelSize(R.dimen.keyguard_large_clock_top_margin) + val layerController: SimpleClockLayerController + val timespecHandler = DigitalTimespecHandler(DigitalTimespec.TIME_FULL_FORMAT, "hh:mm") + + init { + val lp = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) + lp.gravity = Gravity.CENTER + + val layer = face.layers[0] + + layerController = + if (isLargeClock) + ComposedDigitalLayerController( + ctx, + resources, + assets, + layer as ComposedDigitalHandLayer, + messageBuffer, + ) + else { + val childView = SimpleDigitalClockTextView(ctx, messageBuffer) + SimpleDigitalHandLayerController( + ctx, + resources, + assets, + layer as DigitalHandLayer, + childView, + messageBuffer, + ) + } + layerController.view.layoutParams = lp + } + + override val layout: ClockFaceLayout = + DefaultClockFaceLayout(view).apply { + views[0].id = + if (isLargeClock) R.id.lockscreen_clock_view_large else R.id.lockscreen_clock_view + } + + override val events = FlexClockFaceEvents() + + // TODO(b/364680879): Remove ClockEvents + inner class FlexClockFaceEvents : ClockEvents, ClockFaceEvents { + override var isReactiveTouchInteractionEnabled = false + get() = field + set(value) { + field = value + layerController.events.isReactiveTouchInteractionEnabled = value + } + + override fun onTimeTick() { + timespecHandler.updateTime() + view.contentDescription = timespecHandler.getContentDescription() + layerController.faceEvents.onTimeTick() + } + + override fun onTimeZoneChanged(timeZone: TimeZone) { + timespecHandler.timeZone = timeZone + layerController.events.onTimeZoneChanged(timeZone) + } + + override fun onTimeFormatChanged(is24Hr: Boolean) { + timespecHandler.is24Hr = is24Hr + layerController.events.onTimeFormatChanged(is24Hr) + } + + override fun onLocaleChanged(locale: Locale) { + timespecHandler.updateLocale(locale) + layerController.events.onLocaleChanged(locale) + } + + override fun onFontSettingChanged(fontSizePx: Float) { + layerController.faceEvents.onFontSettingChanged(fontSizePx) + } + + override fun onColorPaletteChanged(resources: Resources) { + layerController.events.onColorPaletteChanged(resources) + layerController.updateColors() + } + + override fun onSeedColorChanged(seedColor: Int?) { + layerController.events.onSeedColorChanged(seedColor) + layerController.updateColors() + } + + override fun onRegionDarknessChanged(isRegionDark: Boolean) { + layerController.faceEvents.onRegionDarknessChanged(isRegionDark) + } + + override fun onReactiveAxesChanged(axes: List<ClockReactiveSetting>) {} + + /** + * targetRegion passed to all customized clock applies counter translationY of + * KeyguardStatusView and keyguard_large_clock_top_margin from default clock + */ + override fun onTargetRegionChanged(targetRegion: Rect?) { + // When a clock needs to be aligned with screen, like weather clock + // it needs to offset back the translation of keyguard_large_clock_top_margin + if (isLargeClock && (view as FlexClockView).isAlignedWithScreen()) { + val topMargin = keyguardLargeClockTopMargin + targetRegion?.let { + val (_, yDiff) = computeLayoutDiff(view, it, isLargeClock) + // In LS, we use yDiff to counter translate + // the translation of KeyguardLargeClockTopMargin + // With the targetRegion passed from picker, + // we will have yDiff = 0, no translation is needed for weather clock + if (yDiff.toInt() != 0) view.translationY = yDiff - topMargin / 2 + } + return + } + + var maxWidth = 0f + var maxHeight = 0f + + layerController.faceEvents.onTargetRegionChanged(targetRegion) + maxWidth = max(maxWidth, view.layoutParams.width.toFloat()) + maxHeight = max(maxHeight, view.layoutParams.height.toFloat()) + + val lp = + if (maxHeight <= 0 || maxWidth <= 0 || targetRegion == null) { + // No specified width/height. Just match parent size. + FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) + } else { + // Scale to fit in targetRegion based on largest child elements. + val ratio = maxWidth / maxHeight + val targetRatio = targetRegion.width() / targetRegion.height().toFloat() + val scale = + if (ratio > targetRatio) targetRegion.width() / maxWidth + else targetRegion.height() / maxHeight + + FrameLayout.LayoutParams( + (maxWidth * scale).toInt(), + (maxHeight * scale).toInt(), + ) + } + + lp.gravity = Gravity.CENTER + view.layoutParams = lp + targetRegion?.let { + val (xDiff, yDiff) = computeLayoutDiff(view, it, isLargeClock) + view.translationX = xDiff + view.translationY = yDiff + } + } + + override fun onSecondaryDisplayChanged(onSecondaryDisplay: Boolean) {} + + override fun onWeatherDataChanged(data: WeatherData) { + layerController.events.onWeatherDataChanged(data) + } + + override fun onAlarmDataChanged(data: AlarmData) { + layerController.events.onAlarmDataChanged(data) + } + + override fun onZenDataChanged(data: ZenData) { + layerController.events.onZenDataChanged(data) + } + } + + override val animations = + object : ClockAnimations { + override fun enter() { + layerController.animations.enter() + } + + override fun doze(fraction: Float) { + layerController.animations.doze(fraction) + } + + override fun fold(fraction: Float) { + layerController.animations.fold(fraction) + } + + override fun charge() { + layerController.animations.charge() + } + + override fun onPickerCarouselSwiping(swipingFraction: Float) { + face.pickerScale?.let { + view.scaleX = swipingFraction * (1 - it.scaleX) + it.scaleX + view.scaleY = swipingFraction * (1 - it.scaleY) + it.scaleY + } + if (isLargeClock && !(view as FlexClockView).isAlignedWithScreen()) { + view.translationY = keyguardLargeClockTopMargin / 2F * swipingFraction + } + layerController.animations.onPickerCarouselSwiping(swipingFraction) + view.invalidate() + } + + override fun onPositionUpdated(fromLeft: Int, direction: Int, fraction: Float) { + layerController.animations.onPositionUpdated(fromLeft, direction, fraction) + } + + override fun onPositionUpdated(distance: Float, fraction: Float) { + layerController.animations.onPositionUpdated(distance, fraction) + } + } +} diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockFaceController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockFaceController.kt deleted file mode 100644 index ef398d1a52a0..000000000000 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockFaceController.kt +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Copyright (C) 2024 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.shared.clocks - -import android.content.Context -import android.content.res.Resources -import android.graphics.Rect -import android.view.Gravity -import android.view.View -import android.view.ViewGroup.LayoutParams.MATCH_PARENT -import android.widget.FrameLayout -import com.android.systemui.log.core.MessageBuffer -import com.android.systemui.plugins.clocks.AlarmData -import com.android.systemui.plugins.clocks.ClockAnimations -import com.android.systemui.plugins.clocks.ClockEvents -import com.android.systemui.plugins.clocks.ClockFaceConfig -import com.android.systemui.plugins.clocks.ClockFaceController -import com.android.systemui.plugins.clocks.ClockFaceEvents -import com.android.systemui.plugins.clocks.ClockFaceLayout -import com.android.systemui.plugins.clocks.ClockReactiveSetting -import com.android.systemui.plugins.clocks.ClockTickRate -import com.android.systemui.plugins.clocks.DefaultClockFaceLayout -import com.android.systemui.plugins.clocks.WeatherData -import com.android.systemui.plugins.clocks.ZenData -import com.android.systemui.shared.clocks.view.DigitalClockFaceView -import java.util.Locale -import java.util.TimeZone -import kotlin.math.max - -interface ClockEventUnion : ClockEvents, ClockFaceEvents - -class SimpleClockFaceController( - ctx: Context, - val assets: AssetLoader, - face: ClockFace, - isLargeClock: Boolean, - messageBuffer: MessageBuffer, -) : ClockFaceController { - override val view: View - override val config: ClockFaceConfig by lazy { - ClockFaceConfig( - hasCustomWeatherDataDisplay = layers.any { it.config.hasCustomWeatherDataDisplay }, - hasCustomPositionUpdatedAnimation = - layers.any { it.config.hasCustomPositionUpdatedAnimation }, - tickRate = getTickRate(), - useCustomClockScene = layers.any { it.config.useCustomClockScene }, - ) - } - - val layers = mutableListOf<SimpleClockLayerController>() - - val timespecHandler = DigitalTimespecHandler(DigitalTimespec.TIME_FULL_FORMAT, "hh:mm") - - init { - val lp = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) - lp.gravity = Gravity.CENTER - view = - if (face.layers.size == 1) { - // Optimize a clocks with a single layer by excluding the face level view group. We - // expect the view container from the host process to always be a FrameLayout. - val layer = face.layers[0] - val controller = - SimpleClockLayerController.Factory.create( - ctx, - assets, - layer, - isLargeClock, - messageBuffer, - ) - layers.add(controller) - controller.view.layoutParams = lp - controller.view - } else { - // For multiple views, we use an intermediate RelativeLayout so that we can do some - // intelligent laying out between the children views. - val group = SimpleClockRelativeLayout(ctx, face.faceLayout) - group.layoutParams = lp - group.gravity = Gravity.CENTER - group.clipChildren = false - for (layer in face.layers) { - face.faceLayout?.let { - if (layer is DigitalHandLayer) { - layer.faceLayout = it - } - } - val controller = - SimpleClockLayerController.Factory.create( - ctx, - assets, - layer, - isLargeClock, - messageBuffer, - ) - group.addView(controller.view) - layers.add(controller) - } - group - } - } - - override val layout: ClockFaceLayout = - DefaultClockFaceLayout(view).apply { - views[0].id = - if (isLargeClock) { - assets.getResourcesId("lockscreen_clock_view_large") - } else { - assets.getResourcesId("lockscreen_clock_view") - } - } - - override val events = - object : ClockEventUnion { - override var isReactiveTouchInteractionEnabled = false - get() = field - set(value) { - field = value - layers.forEach { it.events.isReactiveTouchInteractionEnabled = value } - } - - override fun onTimeTick() { - timespecHandler.updateTime() - if ( - config.tickRate == ClockTickRate.PER_MINUTE || - view.contentDescription != timespecHandler.getContentDescription() - ) { - view.contentDescription = timespecHandler.getContentDescription() - } - layers.forEach { it.faceEvents.onTimeTick() } - } - - override fun onTimeZoneChanged(timeZone: TimeZone) { - timespecHandler.timeZone = timeZone - layers.forEach { it.events.onTimeZoneChanged(timeZone) } - } - - override fun onTimeFormatChanged(is24Hr: Boolean) { - timespecHandler.is24Hr = is24Hr - layers.forEach { it.events.onTimeFormatChanged(is24Hr) } - } - - override fun onLocaleChanged(locale: Locale) { - timespecHandler.updateLocale(locale) - layers.forEach { it.events.onLocaleChanged(locale) } - } - - override fun onFontSettingChanged(fontSizePx: Float) { - layers.forEach { it.faceEvents.onFontSettingChanged(fontSizePx) } - } - - override fun onColorPaletteChanged(resources: Resources) { - layers.forEach { - it.events.onColorPaletteChanged(resources) - it.updateColors() - } - } - - override fun onSeedColorChanged(seedColor: Int?) { - layers.forEach { - it.events.onSeedColorChanged(seedColor) - it.updateColors() - } - } - - override fun onRegionDarknessChanged(isRegionDark: Boolean) { - layers.forEach { it.faceEvents.onRegionDarknessChanged(isRegionDark) } - } - - override fun onReactiveAxesChanged(axes: List<ClockReactiveSetting>) {} - - /** - * targetRegion passed to all customized clock applies counter translationY of - * KeyguardStatusView and keyguard_large_clock_top_margin from default clock - */ - override fun onTargetRegionChanged(targetRegion: Rect?) { - // When a clock needs to be aligned with screen, like weather clock - // it needs to offset back the translation of keyguard_large_clock_top_margin - if (view is DigitalClockFaceView && view.isAlignedWithScreen()) { - val topMargin = getKeyguardLargeClockTopMargin(assets) - targetRegion?.let { - val (_, yDiff) = computeLayoutDiff(view, it, isLargeClock) - // In LS, we use yDiff to counter translate - // the translation of KeyguardLargeClockTopMargin - // With the targetRegion passed from picker, - // we will have yDiff = 0, no translation is needed for weather clock - if (yDiff.toInt() != 0) view.translationY = yDiff - topMargin / 2 - } - return - } - - var maxWidth = 0f - var maxHeight = 0f - - for (layer in layers) { - layer.faceEvents.onTargetRegionChanged(targetRegion) - maxWidth = max(maxWidth, layer.view.layoutParams.width.toFloat()) - maxHeight = max(maxHeight, layer.view.layoutParams.height.toFloat()) - } - - val lp = - if (maxHeight <= 0 || maxWidth <= 0 || targetRegion == null) { - // No specified width/height. Just match parent size. - FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) - } else { - // Scale to fit in targetRegion based on largest child elements. - val ratio = maxWidth / maxHeight - val targetRatio = targetRegion.width() / targetRegion.height().toFloat() - val scale = - if (ratio > targetRatio) targetRegion.width() / maxWidth - else targetRegion.height() / maxHeight - - FrameLayout.LayoutParams( - (maxWidth * scale).toInt(), - (maxHeight * scale).toInt(), - ) - } - - lp.gravity = Gravity.CENTER - view.layoutParams = lp - targetRegion?.let { - val (xDiff, yDiff) = computeLayoutDiff(view, it, isLargeClock) - view.translationX = xDiff - view.translationY = yDiff - } - } - - override fun onSecondaryDisplayChanged(onSecondaryDisplay: Boolean) {} - - override fun onWeatherDataChanged(data: WeatherData) { - layers.forEach { it.events.onWeatherDataChanged(data) } - } - - override fun onAlarmDataChanged(data: AlarmData) { - layers.forEach { it.events.onAlarmDataChanged(data) } - } - - override fun onZenDataChanged(data: ZenData) { - layers.forEach { it.events.onZenDataChanged(data) } - } - } - - override val animations = - object : ClockAnimations { - override fun enter() { - layers.forEach { it.animations.enter() } - } - - override fun doze(fraction: Float) { - layers.forEach { it.animations.doze(fraction) } - } - - override fun fold(fraction: Float) { - layers.forEach { it.animations.fold(fraction) } - } - - override fun charge() { - layers.forEach { it.animations.charge() } - } - - override fun onPickerCarouselSwiping(swipingFraction: Float) { - face.pickerScale?.let { - view.scaleX = swipingFraction * (1 - it.scaleX) + it.scaleX - view.scaleY = swipingFraction * (1 - it.scaleY) + it.scaleY - } - if (!(view is DigitalClockFaceView && view.isAlignedWithScreen())) { - val topMargin = getKeyguardLargeClockTopMargin(assets) - view.translationY = topMargin / 2F * swipingFraction - } - layers.forEach { it.animations.onPickerCarouselSwiping(swipingFraction) } - view.invalidate() - } - - override fun onPositionUpdated(fromLeft: Int, direction: Int, fraction: Float) { - layers.forEach { it.animations.onPositionUpdated(fromLeft, direction, fraction) } - } - - override fun onPositionUpdated(distance: Float, fraction: Float) { - layers.forEach { it.animations.onPositionUpdated(distance, fraction) } - } - } - - private fun getTickRate(): ClockTickRate { - var tickRate = ClockTickRate.PER_MINUTE - for (layer in layers) { - if (layer.config.tickRate.value < tickRate.value) { - tickRate = layer.config.tickRate - } - } - return tickRate - } - - private fun getKeyguardLargeClockTopMargin(assets: AssetLoader): Int { - val topMarginRes = - assets.resolveResourceId(null, "dimen", "keyguard_large_clock_top_margin") - if (topMarginRes != null) { - val (res, id) = topMarginRes - return res.getDimensionPixelSize(id) - } - return 0 - } -} diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt index f71543efa650..5d1a2dbc4209 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleClockLayerController.kt @@ -16,25 +16,12 @@ package com.android.systemui.shared.clocks -import android.content.Context import android.view.View import androidx.annotation.VisibleForTesting -import com.android.systemui.log.core.MessageBuffer import com.android.systemui.plugins.clocks.ClockAnimations import com.android.systemui.plugins.clocks.ClockEvents import com.android.systemui.plugins.clocks.ClockFaceConfig import com.android.systemui.plugins.clocks.ClockFaceEvents -import com.android.systemui.shared.clocks.view.SimpleDigitalClockTextView -import kotlin.reflect.KClass - -typealias LayerControllerConstructor = - ( - ctx: Context, - assets: AssetLoader, - layer: ClockLayer, - isLargeClock: Boolean, - messageBuffer: MessageBuffer, - ) -> SimpleClockLayerController interface SimpleClockLayerController { val view: View @@ -48,55 +35,4 @@ interface SimpleClockLayerController { // Called immediately after either onColorPaletteChanged or onSeedColorChanged is called. // Provided for convience to not duplicate color update logic after state updated. fun updateColors() {} - - companion object Factory { - val constructorMap = mutableMapOf<Pair<KClass<*>, KClass<*>?>, LayerControllerConstructor>() - - internal inline fun <reified TLayer> registerConstructor( - noinline constructor: LayerControllerConstructor, - ) where TLayer : ClockLayer { - constructorMap[Pair(TLayer::class, null)] = constructor - } - - inline fun <reified TLayer, reified TStyle> registerTextConstructor( - noinline constructor: LayerControllerConstructor, - ) where TLayer : ClockLayer, TStyle : TextStyle { - constructorMap[Pair(TLayer::class, TStyle::class)] = constructor - } - - init { - registerConstructor<ComposedDigitalHandLayer>(::ComposedDigitalLayerController) - registerTextConstructor<DigitalHandLayer, FontTextStyle>(::createSimpleDigitalLayer) - } - - private fun createSimpleDigitalLayer( - ctx: Context, - assets: AssetLoader, - layer: ClockLayer, - isLargeClock: Boolean, - messageBuffer: MessageBuffer - ): SimpleClockLayerController { - val view = SimpleDigitalClockTextView(ctx, messageBuffer) - return SimpleDigitalHandLayerController( - ctx, - assets, - layer as DigitalHandLayer, - view, - messageBuffer - ) - } - - fun create( - ctx: Context, - assets: AssetLoader, - layer: ClockLayer, - isLargeClock: Boolean, - messageBuffer: MessageBuffer - ): SimpleClockLayerController { - val styleClass = if (layer is DigitalHandLayer) layer.style::class else null - val key = Pair(layer::class, styleClass) - return constructorMap[key]?.invoke(ctx, assets, layer, isLargeClock, messageBuffer) - ?: throw IllegalArgumentException("Unrecognized ClockLayer type: $key") - } - } } diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt index a3240f81e499..ce1eae48546a 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/SimpleDigitalHandLayerController.kt @@ -42,7 +42,8 @@ private val TAG = SimpleDigitalHandLayerController::class.simpleName!! open class SimpleDigitalHandLayerController<T>( private val ctx: Context, - private val assets: AssetLoader, + private val resources: Resources, + private val assets: AssetLoader, // TODO(b/364680879): Remove and replace w/ resources private val layer: DigitalHandLayer, override val view: T, messageBuffer: MessageBuffer, @@ -68,7 +69,7 @@ open class SimpleDigitalHandLayerController<T>( view.layoutParams = RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, - ViewGroup.LayoutParams.WRAP_CONTENT + ViewGroup.LayoutParams.WRAP_CONTENT, ) if (layer.alignment != null) { layer.alignment.verticalAlignment?.let { view.verticalAlignment = it } diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/DigitalClockFaceView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/DigitalClockFaceView.kt index eb7234646a64..81efcb9de4d8 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/DigitalClockFaceView.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/DigitalClockFaceView.kt @@ -31,6 +31,7 @@ import com.android.systemui.shared.clocks.AssetLoader import com.android.systemui.shared.clocks.LogUtil import java.util.Locale +// TODO(b/364680879): Merge w/ only subclass FlexClockView abstract class DigitalClockFaceView(ctx: Context, messageBuffer: MessageBuffer) : FrameLayout(ctx) { protected val logger = Logger(messageBuffer, this::class.simpleName!!) get() = field ?: LogUtil.FALLBACK_INIT_LOGGER @@ -140,7 +141,6 @@ abstract class DigitalClockFaceView(ctx: Context, messageBuffer: MessageBuffer) open val useCustomClockScene get() = false - // TODO: implement ClockEventUnion? open fun onLocaleChanged(locale: Locale) {} open fun onWeatherDataChanged(data: WeatherData) {} diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt index c29c8dac8ba6..25b2ad772b32 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/FlexClockView.kt @@ -35,7 +35,7 @@ import kotlin.math.min fun clamp(value: Float, minVal: Float, maxVal: Float): Float = max(min(value, maxVal), minVal) -class FlexClockView(context: Context, val assetLoader: AssetLoader, messageBuffer: MessageBuffer) : +class FlexClockView(context: Context, val assets: AssetLoader, messageBuffer: MessageBuffer) : DigitalClockFaceView(context, messageBuffer) { override var digitalClockTextViewMap = mutableMapOf<Int, SimpleDigitalClockTextView>() val digitLeftTopMap = mutableMapOf<Int, Point>() @@ -57,11 +57,9 @@ class FlexClockView(context: Context, val assetLoader: AssetLoader, messageBuffe private var prevY = 0f private var isDown = false - // TODO(b/340253296): Genericize; json spec private var wght = 603f private var wdth = 100f - // TODO(b/340253296): Json spec private val MAX_WGHT = 950f private val MIN_WGHT = 50f private val WGHT_SCALE = 0.5f @@ -71,7 +69,6 @@ class FlexClockView(context: Context, val assetLoader: AssetLoader, messageBuffe private val WDTH_SCALE = 0.2f override fun onTouchEvent(evt: MotionEvent): Boolean { - // TODO(b/340253296): implement on DigitalClockFaceView? if (!isReactiveTouchInteractionEnabled) { return super.onTouchEvent(evt) } @@ -94,12 +91,11 @@ class FlexClockView(context: Context, val assetLoader: AssetLoader, messageBuffe prevX = evt.x prevY = evt.y - // TODO(b/340253296): Genericize; json spec val fvar = "'wght' $wght, 'wdth' $wdth, 'opsz' 144, 'ROND' 100" digitalClockTextViewMap.forEach { (_, view) -> val textStyle = view.textStyle as FontTextStyle textStyle.fontVariation = fvar - view.applyStyles(assetLoader, textStyle, view.aodStyle) + view.applyStyles(assets, textStyle, view.aodStyle) } requestLayout() diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java index 2bb9e68a357a..00c5577b8017 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchControllerBaseTest.java @@ -156,8 +156,12 @@ public class KeyguardClockSwitchControllerBaseTest extends SysuiTestCase { when(mResources.getInteger(R.integer.keyguard_date_weather_view_invisibility)) .thenReturn(INVISIBLE); - when(mView.findViewById(R.id.lockscreen_clock_view_large)).thenReturn(mLargeClockFrame); - when(mView.findViewById(R.id.lockscreen_clock_view)).thenReturn(mSmallClockFrame); + when(mView + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view_large)) + .thenReturn(mLargeClockFrame); + when(mView + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view)) + .thenReturn(mSmallClockFrame); when(mSmallClockView.getContext()).thenReturn(getContext()); when(mLargeClockView.getContext()).thenReturn(getContext()); diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchTest.java b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchTest.java index 0bf9d12a09d5..4ed5fd0a6e71 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardClockSwitchTest.java @@ -113,8 +113,10 @@ public class KeyguardClockSwitchTest extends SysuiTestCase { }); mKeyguardClockSwitch = (KeyguardClockSwitch) layoutInflater.inflate(R.layout.keyguard_clock_switch, null); - mSmallClockFrame = mKeyguardClockSwitch.findViewById(R.id.lockscreen_clock_view); - mLargeClockFrame = mKeyguardClockSwitch.findViewById(R.id.lockscreen_clock_view_large); + mSmallClockFrame = mKeyguardClockSwitch + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view); + mLargeClockFrame = mKeyguardClockSwitch + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view_large); mStatusArea = mKeyguardClockSwitch.findViewById(R.id.keyguard_status_area); mKeyguardClockSwitch.mChildrenAreLaidOut = true; } diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt index 2e41246a62a1..245388c214a5 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardUnfoldTransitionTest.kt @@ -17,10 +17,10 @@ package com.android.keyguard import android.view.View -import android.view.ViewGroup import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.ui.view.KeyguardRootView import com.android.systemui.kosmos.Kosmos import com.android.systemui.plugins.statusbar.StatusBarStateController @@ -88,7 +88,7 @@ class KeyguardUnfoldTransitionTest : SysuiTestCase() { underTest.statusViewCentered = true val view = View(context) - whenever(keyguardRootView.findViewById<View>(R.id.lockscreen_clock_view_large)).thenReturn( + whenever(keyguardRootView.findViewById<View>(customR.id.lockscreen_clock_view_large)).thenReturn( view ) @@ -110,7 +110,7 @@ class KeyguardUnfoldTransitionTest : SysuiTestCase() { whenever(statusBarStateController.getState()).thenReturn(SHADE) val view = View(context) - whenever(keyguardRootView.findViewById<View>(R.id.lockscreen_clock_view_large)).thenReturn( + whenever(keyguardRootView.findViewById<View>(customR.id.lockscreen_clock_view_large)).thenReturn( view ) @@ -134,7 +134,7 @@ class KeyguardUnfoldTransitionTest : SysuiTestCase() { val view = View(context) whenever( notificationShadeWindowView - .findViewById<View>(R.id.lockscreen_clock_view_large) + .findViewById<View>(customR.id.lockscreen_clock_view_large) ).thenReturn(view) progressListener.onTransitionStarted() diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt index 1c99eff0d328..d94c97af6f14 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSectionTest.kt @@ -28,12 +28,12 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags import com.android.systemui.SysuiTestCase +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.KeyguardUnlockAnimationController import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardSmartspaceInteractor import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel -import com.android.systemui.res.R import com.android.systemui.shared.R as sharedR import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController import com.android.systemui.util.mockito.any @@ -135,7 +135,7 @@ class SmartspaceSectionTest : SysuiTestCase() { assertThat(smartspaceConstraints.layout.topToBottom).isEqualTo(dateView.id) val dateConstraints = constraintSet.getConstraint(dateView.id) - assertThat(dateConstraints.layout.topToBottom).isEqualTo(R.id.lockscreen_clock_view) + assertThat(dateConstraints.layout.topToBottom).isEqualTo(customR.id.lockscreen_clock_view) } @Test diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml index fc9c917c152b..8bef4759c55d 100644 --- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml +++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml @@ -26,7 +26,7 @@ android:clipChildren="false" android:layout_gravity="center_horizontal|top"> <com.android.keyguard.KeyguardClockFrame - android:id="@+id/lockscreen_clock_view" + android:id="@id/lockscreen_clock_view" android:layout_width="wrap_content" android:layout_height="@dimen/small_clock_height" android:layout_alignParentStart="true" @@ -35,7 +35,7 @@ android:paddingStart="@dimen/clock_padding_start" android:visibility="invisible" /> <com.android.keyguard.KeyguardClockFrame - android:id="@+id/lockscreen_clock_view_large" + android:id="@id/lockscreen_clock_view_large" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java index 4a96e9e0845a..c7ea98052b66 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java @@ -193,12 +193,16 @@ public class KeyguardClockSwitch extends RelativeLayout { protected void onFinishInflate() { super.onFinishInflate(); if (!MigrateClocksToBlueprint.isEnabled()) { - mSmallClockFrame = findViewById(R.id.lockscreen_clock_view); - mLargeClockFrame = findViewById(R.id.lockscreen_clock_view_large); + mSmallClockFrame = findViewById( + com.android.systemui.customization.R.id.lockscreen_clock_view); + mLargeClockFrame = findViewById( + com.android.systemui.customization.R.id.lockscreen_clock_view_large); mStatusArea = findViewById(R.id.keyguard_status_area); } else { - removeView(findViewById(R.id.lockscreen_clock_view)); - removeView(findViewById(R.id.lockscreen_clock_view_large)); + removeView(findViewById( + com.android.systemui.customization.R.id.lockscreen_clock_view)); + removeView(findViewById( + com.android.systemui.customization.R.id.lockscreen_clock_view_large)); } onConfigChanged(); } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index d468f2f0b0aa..7cba845460ca 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -241,8 +241,10 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS mKeyguardSliceViewController.init(); if (!MigrateClocksToBlueprint.isEnabled()) { - mSmallClockFrame = mView.findViewById(R.id.lockscreen_clock_view); - mLargeClockFrame = mView.findViewById(R.id.lockscreen_clock_view_large); + mSmallClockFrame = mView + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view); + mLargeClockFrame = mView + .findViewById(com.android.systemui.customization.R.id.lockscreen_clock_view_large); } if (!mOnlyClock) { diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java index 63a4af949c8c..0684824ea0b8 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java @@ -534,7 +534,8 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV // KeyguardClockViewBinder if (customClockAnimation && !MigrateClocksToBlueprint.isEnabled()) { // Find the clock, so we can exclude it from this transition. - FrameLayout clockContainerView = mView.findViewById(R.id.lockscreen_clock_view_large); + FrameLayout clockContainerView = mView.findViewById( + com.android.systemui.customization.R.id.lockscreen_clock_view_large); // The clock container can sometimes be null. If it is, just fall back to the // old animation rather than setting up the custom animations. diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt index 19d918f5c556..5a02486d5096 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUnfoldTransition.kt @@ -18,6 +18,7 @@ package com.android.keyguard import android.content.Context import android.view.View +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.MigrateClocksToBlueprint import com.android.systemui.keyguard.ui.view.KeyguardRootView import com.android.systemui.plugins.statusbar.StatusBarStateController @@ -98,12 +99,12 @@ constructor( viewsIdToTranslate = setOf( ViewIdToTranslate( - viewId = R.id.lockscreen_clock_view_large, + viewId = customR.id.lockscreen_clock_view_large, direction = START, shouldBeAnimated = filterKeyguardAndSplitShadeOnly ), ViewIdToTranslate( - viewId = R.id.lockscreen_clock_view, + viewId = customR.id.lockscreen_clock_view, direction = START, shouldBeAnimated = filterKeyguard ), diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt index 00aa44fe795b..0470e086ad27 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt @@ -23,6 +23,7 @@ import androidx.constraintlayout.widget.ConstraintSet import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.tracing.coroutines.launch +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.KeyguardBottomAreaRefactor import com.android.systemui.keyguard.shared.model.KeyguardBlueprint import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.BaseBlueprintTransition @@ -32,7 +33,6 @@ import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel import com.android.systemui.lifecycle.repeatWhenAttached -import com.android.systemui.res.R import com.android.systemui.shared.R as sharedR import com.android.systemui.util.kotlin.pairwise @@ -128,7 +128,7 @@ object KeyguardBlueprintViewBinder { ) { val currentClock = viewModel.currentClock.value if (!DEBUG || currentClock == null) return - val smallClockViewId = R.id.lockscreen_clock_view + val smallClockViewId = customR.id.lockscreen_clock_view val largeClockViewId = currentClock.largeClock.layout.views[0].id val smartspaceDateId = sharedR.id.date_smartspace_view Log.i( diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt index 57cb10ff9367..17b929d6d7fb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt @@ -35,7 +35,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.repeatOnLifecycle import com.android.app.tracing.coroutines.launch import com.android.internal.policy.SystemBarUtils -import com.android.systemui.customization.R as customizationR +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.shared.model.ClockSizeSetting import com.android.systemui.keyguard.ui.preview.KeyguardPreviewRenderer import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection.Companion.getDimen @@ -120,25 +120,25 @@ object KeyguardPreviewClockViewBinder { private fun applyClockDefaultConstraints(context: Context, constraints: ConstraintSet) { constraints.apply { - constrainWidth(R.id.lockscreen_clock_view_large, ConstraintSet.WRAP_CONTENT) + constrainWidth(customR.id.lockscreen_clock_view_large, ConstraintSet.WRAP_CONTENT) // The following two lines make lockscreen_clock_view_large is constrained to available // height when it goes beyond constraints; otherwise, it use WRAP_CONTENT - constrainHeight(R.id.lockscreen_clock_view_large, WRAP_CONTENT) - constrainMaxHeight(R.id.lockscreen_clock_view_large, 0) + constrainHeight(customR.id.lockscreen_clock_view_large, WRAP_CONTENT) + constrainMaxHeight(customR.id.lockscreen_clock_view_large, 0) val largeClockTopMargin = SystemBarUtils.getStatusBarHeight(context) + context.resources.getDimensionPixelSize( - customizationR.dimen.small_clock_padding_top + customR.dimen.small_clock_padding_top ) + context.resources.getDimensionPixelSize( R.dimen.keyguard_smartspace_top_offset ) + getDimen(context, DATE_WEATHER_VIEW_HEIGHT) + getDimen(context, ENHANCED_SMARTSPACE_HEIGHT) - connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin) - connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START) + connect(customR.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin) + connect(customR.id.lockscreen_clock_view_large, START, PARENT_ID, START) connect( - R.id.lockscreen_clock_view_large, + customR.id.lockscreen_clock_view_large, ConstraintSet.END, PARENT_ID, ConstraintSet.END, @@ -148,7 +148,7 @@ object KeyguardPreviewClockViewBinder { // and nothing for non-UDFPS devices, // but we need position of device entry icon to constrain clock if (getConstraint(R.id.lock_icon_view) != null) { - connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.lock_icon_view, TOP) + connect(customR.id.lockscreen_clock_view_large, BOTTOM, R.id.lock_icon_view, TOP) } else { // Copied calculation codes from applyConstraints in DefaultDeviceEntrySection val bottomPaddingPx = @@ -159,7 +159,7 @@ object KeyguardPreviewClockViewBinder { val lockIconRadiusPx = (defaultDensity * 36).toInt() val clockBottomMargin = bottomPaddingPx + 2 * lockIconRadiusPx connect( - R.id.lockscreen_clock_view_large, + customR.id.lockscreen_clock_view_large, BOTTOM, PARENT_ID, BOTTOM, @@ -167,23 +167,23 @@ object KeyguardPreviewClockViewBinder { ) } - constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT) + constrainWidth(customR.id.lockscreen_clock_view, WRAP_CONTENT) constrainHeight( - R.id.lockscreen_clock_view, - context.resources.getDimensionPixelSize(customizationR.dimen.small_clock_height), + customR.id.lockscreen_clock_view, + context.resources.getDimensionPixelSize(customR.dimen.small_clock_height), ) connect( - R.id.lockscreen_clock_view, + customR.id.lockscreen_clock_view, START, PARENT_ID, START, - context.resources.getDimensionPixelSize(customizationR.dimen.clock_padding_start) + + context.resources.getDimensionPixelSize(customR.dimen.clock_padding_start) + context.resources.getDimensionPixelSize(R.dimen.status_view_margin_horizontal), ) val smallClockTopMargin = context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) + Utils.getStatusBarHeaderHeightKeyguard(context) - connect(R.id.lockscreen_clock_view, TOP, PARENT_ID, TOP, smallClockTopMargin) + connect(customR.id.lockscreen_clock_view, TOP, PARENT_ID, TOP, smallClockTopMargin) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt index ee2ee522cd0e..447ee9dd4ccd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt @@ -52,6 +52,7 @@ import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.common.ui.view.onApplyWindowInsets import com.android.systemui.common.ui.view.onLayoutChanged import com.android.systemui.common.ui.view.onTouchListener +import com.android.systemui.customization.R as customR import com.android.systemui.deviceentry.domain.interactor.DeviceEntryHapticsInteractor import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor import com.android.systemui.keyguard.KeyguardBottomAreaRefactor @@ -622,8 +623,8 @@ object KeyguardRootViewBinder { private val statusViewId = R.id.keyguard_status_view private val burnInLayerId = R.id.burn_in_layer private val aodNotificationIconContainerId = R.id.aod_notification_icon_container - private val largeClockId = R.id.lockscreen_clock_view_large - private val smallClockId = R.id.lockscreen_clock_view + private val largeClockId = customR.id.lockscreen_clock_view_large + private val smallClockId = customR.id.lockscreen_clock_view private val indicationArea = R.id.keyguard_indication_area private val startButton = R.id.start_button private val endButton = R.id.end_button diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt index d74552231209..ee4f41ddd5a0 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt @@ -30,7 +30,7 @@ import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.constraintlayout.widget.ConstraintSet.VISIBLE import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT -import com.android.systemui.customization.R as custR +import com.android.systemui.customization.R as customR import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.MigrateClocksToBlueprint import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor @@ -153,7 +153,7 @@ constructor( R.id.weather_clock_bc_smartspace_bottom, Barrier.BOTTOM, getDimen(ENHANCED_SMARTSPACE_HEIGHT), - (custR.id.weather_clock_time), + (customR.id.weather_clock_time), ) if ( rootViewModel.isNotifIconContainerVisible.value.value && @@ -184,40 +184,40 @@ constructor( if (keyguardClockViewModel.clockShouldBeCentered.value) PARENT_ID else R.id.split_shade_guideline constraints.apply { - connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START) - connect(R.id.lockscreen_clock_view_large, END, guideline, END) - connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.device_entry_icon_view, TOP) + connect(customR.id.lockscreen_clock_view_large, START, PARENT_ID, START) + connect(customR.id.lockscreen_clock_view_large, END, guideline, END) + connect(customR.id.lockscreen_clock_view_large, BOTTOM, R.id.device_entry_icon_view, TOP) val largeClockTopMargin = keyguardClockViewModel.getLargeClockTopMargin() + getDimen(DATE_WEATHER_VIEW_HEIGHT) + getDimen(ENHANCED_SMARTSPACE_HEIGHT) - connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin) - constrainWidth(R.id.lockscreen_clock_view_large, WRAP_CONTENT) + connect(customR.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin) + constrainWidth(customR.id.lockscreen_clock_view_large, WRAP_CONTENT) // The following two lines make lockscreen_clock_view_large is constrained to available // height when it goes beyond constraints; otherwise, it use WRAP_CONTENT - constrainHeight(R.id.lockscreen_clock_view_large, WRAP_CONTENT) - constrainMaxHeight(R.id.lockscreen_clock_view_large, 0) - constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT) + constrainHeight(customR.id.lockscreen_clock_view_large, WRAP_CONTENT) + constrainMaxHeight(customR.id.lockscreen_clock_view_large, 0) + constrainWidth(customR.id.lockscreen_clock_view, WRAP_CONTENT) constrainHeight( - R.id.lockscreen_clock_view, - context.resources.getDimensionPixelSize(custR.dimen.small_clock_height), + customR.id.lockscreen_clock_view, + context.resources.getDimensionPixelSize(customR.dimen.small_clock_height), ) connect( - R.id.lockscreen_clock_view, + customR.id.lockscreen_clock_view, START, PARENT_ID, START, - context.resources.getDimensionPixelSize(custR.dimen.clock_padding_start) + + context.resources.getDimensionPixelSize(customR.dimen.clock_padding_start) + context.resources.getDimensionPixelSize(R.dimen.status_view_margin_horizontal), ) val smallClockTopMargin = keyguardClockViewModel.getSmallClockTopMargin() create(R.id.small_clock_guideline_top, ConstraintSet.HORIZONTAL_GUIDELINE) setGuidelineBegin(R.id.small_clock_guideline_top, smallClockTopMargin) - connect(R.id.lockscreen_clock_view, TOP, R.id.small_clock_guideline_top, BOTTOM) + connect(customR.id.lockscreen_clock_view, TOP, R.id.small_clock_guideline_top, BOTTOM) // Explicitly clear pivot to force recalculate pivot instead of using legacy value - setTransformPivot(R.id.lockscreen_clock_view_large, Float.NaN, Float.NaN) + setTransformPivot(customR.id.lockscreen_clock_view_large, Float.NaN, Float.NaN) val smallClockBottom = keyguardClockViewModel.getSmallClockTopMargin() + diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSliceViewSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSliceViewSection.kt index b33d55244037..604318a2751c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSliceViewSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/KeyguardSliceViewSection.kt @@ -22,6 +22,7 @@ import android.view.ViewGroup import androidx.constraintlayout.widget.Barrier import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.MigrateClocksToBlueprint import com.android.systemui.keyguard.shared.model.KeyguardSection import com.android.systemui.res.R @@ -67,7 +68,7 @@ constructor( connect( R.id.keyguard_slice_view, ConstraintSet.TOP, - R.id.lockscreen_clock_view, + customR.id.lockscreen_clock_view, ConstraintSet.BOTTOM ) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt index 99160f8a9158..6ddcae38ce92 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SmartspaceSection.kt @@ -23,6 +23,7 @@ import android.view.ViewTreeObserver.OnGlobalLayoutListener import androidx.constraintlayout.widget.Barrier import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet +import com.android.systemui.customization.R as customR import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.KeyguardUnlockAnimationController import com.android.systemui.keyguard.MigrateClocksToBlueprint @@ -157,7 +158,7 @@ constructor( connect( sharedR.id.date_smartspace_view, ConstraintSet.TOP, - R.id.lockscreen_clock_view, + customR.id.lockscreen_clock_view, ConstraintSet.BOTTOM ) connect( diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt index 4d914c721d0c..c11005d38986 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt @@ -29,6 +29,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver.OnPreDrawListener import com.android.app.animation.Interpolators +import com.android.systemui.customization.R as customR import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type import com.android.systemui.keyguard.ui.view.layout.sections.transitions.ClockSizeTransition.SmartspaceMoveTransition.Companion.STATUS_AREA_MOVE_DOWN_MILLIS @@ -242,11 +243,11 @@ class ClockSizeTransition( } ?: run { Log.e(TAG, "No large clock set, falling back") - addTarget(R.id.lockscreen_clock_view_large) + addTarget(customR.id.lockscreen_clock_view_large) } } else { if (DEBUG) Log.i(TAG, "Adding small clock") - addTarget(R.id.lockscreen_clock_view) + addTarget(customR.id.lockscreen_clock_view) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt index 96a0aadacbc3..ecc62e908a4f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt @@ -298,7 +298,7 @@ class ClockSectionTest : SysuiTestCase() { underTest.applyDefaultConstraints(cs) val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom) - referencedIds.contentEquals(intArrayOf(R.id.lockscreen_clock_view)) + referencedIds.contentEquals(intArrayOf(customR.id.lockscreen_clock_view)) } @Test @@ -323,7 +323,7 @@ class ClockSectionTest : SysuiTestCase() { } private fun assertLargeClockTop(cs: ConstraintSet, expectedLargeClockTopMargin: Int) { - val largeClockConstraint = cs.getConstraint(R.id.lockscreen_clock_view_large) + val largeClockConstraint = cs.getConstraint(customR.id.lockscreen_clock_view_large) assertThat(largeClockConstraint.layout.topToTop).isEqualTo(ConstraintSet.PARENT_ID) assertThat(largeClockConstraint.layout.topMargin).isEqualTo(expectedLargeClockTopMargin) } @@ -332,7 +332,7 @@ class ClockSectionTest : SysuiTestCase() { val smallClockGuidelineConstraint = cs.getConstraint(R.id.small_clock_guideline_top) assertThat(smallClockGuidelineConstraint.layout.topToTop).isEqualTo(-1) - val smallClockConstraint = cs.getConstraint(R.id.lockscreen_clock_view) + val smallClockConstraint = cs.getConstraint(customR.id.lockscreen_clock_view) assertThat(smallClockConstraint.layout.topToBottom) .isEqualTo(R.id.small_clock_guideline_top) assertThat(smallClockConstraint.layout.topMargin).isEqualTo(0) |