Merge "Refactor various rendering parameters into config structure" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3b43e66624
@@ -25,8 +25,10 @@ import android.widget.FrameLayout
|
|||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import com.android.systemui.customization.R
|
import com.android.systemui.customization.R
|
||||||
import com.android.systemui.plugins.ClockAnimations
|
import com.android.systemui.plugins.ClockAnimations
|
||||||
|
import com.android.systemui.plugins.ClockConfig
|
||||||
import com.android.systemui.plugins.ClockController
|
import com.android.systemui.plugins.ClockController
|
||||||
import com.android.systemui.plugins.ClockEvents
|
import com.android.systemui.plugins.ClockEvents
|
||||||
|
import com.android.systemui.plugins.ClockFaceConfig
|
||||||
import com.android.systemui.plugins.ClockFaceController
|
import com.android.systemui.plugins.ClockFaceController
|
||||||
import com.android.systemui.plugins.ClockFaceEvents
|
import com.android.systemui.plugins.ClockFaceEvents
|
||||||
import com.android.systemui.plugins.ClockSettings
|
import com.android.systemui.plugins.ClockSettings
|
||||||
@@ -63,6 +65,8 @@ class DefaultClockController(
|
|||||||
override lateinit var animations: DefaultClockAnimations
|
override lateinit var animations: DefaultClockAnimations
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
override val config = ClockConfig(hasCustomPositionUpdatedAnimation = true)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val parent = FrameLayout(ctx)
|
val parent = FrameLayout(ctx)
|
||||||
smallClock =
|
smallClock =
|
||||||
@@ -103,6 +107,8 @@ class DefaultClockController(
|
|||||||
private var isRegionDark = false
|
private var isRegionDark = false
|
||||||
protected var targetRegion: Rect? = null
|
protected var targetRegion: Rect? = null
|
||||||
|
|
||||||
|
override val config = ClockFaceConfig()
|
||||||
|
|
||||||
override var logBuffer: LogBuffer?
|
override var logBuffer: LogBuffer?
|
||||||
get() = view.logBuffer
|
get() = view.logBuffer
|
||||||
set(value) {
|
set(value) {
|
||||||
@@ -254,9 +260,6 @@ class DefaultClockController(
|
|||||||
override fun onPositionUpdated(fromRect: Rect, toRect: Rect, fraction: Float) {
|
override fun onPositionUpdated(fromRect: Rect, toRect: Rect, fraction: Float) {
|
||||||
largeClock.moveForSplitShade(fromRect, toRect, fraction)
|
largeClock.moveForSplitShade(fromRect, toRect, fraction)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val hasCustomPositionUpdatedAnimation: Boolean
|
|
||||||
get() = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class AnimationState(
|
class AnimationState(
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ interface ClockController {
|
|||||||
/** A large version of the clock, appropriate when a bigger viewport is available */
|
/** A large version of the clock, appropriate when a bigger viewport is available */
|
||||||
val largeClock: ClockFaceController
|
val largeClock: ClockFaceController
|
||||||
|
|
||||||
|
/** Determines the way the hosting app should behave when rendering either clock face */
|
||||||
|
val config: ClockConfig
|
||||||
|
|
||||||
/** Events that clocks may need to respond to */
|
/** Events that clocks may need to respond to */
|
||||||
val events: ClockEvents
|
val events: ClockEvents
|
||||||
|
|
||||||
@@ -91,6 +94,9 @@ interface ClockFaceController {
|
|||||||
/** View that renders the clock face */
|
/** View that renders the clock face */
|
||||||
val view: View
|
val view: View
|
||||||
|
|
||||||
|
/** Determines the way the hosting app should behave when rendering this clock face */
|
||||||
|
val config: ClockFaceConfig
|
||||||
|
|
||||||
/** Events specific to this clock face */
|
/** Events specific to this clock face */
|
||||||
val events: ClockFaceEvents
|
val events: ClockFaceEvents
|
||||||
|
|
||||||
@@ -109,9 +115,6 @@ interface ClockEvents {
|
|||||||
/** Call whenever the locale changes */
|
/** Call whenever the locale changes */
|
||||||
fun onLocaleChanged(locale: Locale) {}
|
fun onLocaleChanged(locale: Locale) {}
|
||||||
|
|
||||||
val isReactiveToTone
|
|
||||||
get() = true
|
|
||||||
|
|
||||||
/** Call whenever the color palette should update */
|
/** Call whenever the color palette should update */
|
||||||
fun onColorPaletteChanged(resources: Resources) {}
|
fun onColorPaletteChanged(resources: Resources) {}
|
||||||
|
|
||||||
@@ -144,14 +147,6 @@ interface ClockAnimations {
|
|||||||
* 0.0 -> clock is scaled down in the shade; previewRatio is previewSize / screenSize
|
* 0.0 -> clock is scaled down in the shade; previewRatio is previewSize / screenSize
|
||||||
*/
|
*/
|
||||||
fun onPickerCarouselSwiping(swipingFraction: Float, previewRatio: Float) {}
|
fun onPickerCarouselSwiping(swipingFraction: Float, previewRatio: Float) {}
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether this clock has a custom position update animation. If true, the keyguard will call
|
|
||||||
* `onPositionUpdated` to notify the clock of a position update animation. If false, a default
|
|
||||||
* animation will be used (e.g. a simple translation).
|
|
||||||
*/
|
|
||||||
val hasCustomPositionUpdatedAnimation
|
|
||||||
get() = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Events that have specific data about the related face */
|
/** Events that have specific data about the related face */
|
||||||
@@ -159,14 +154,6 @@ interface ClockFaceEvents {
|
|||||||
/** Call every time tick */
|
/** Call every time tick */
|
||||||
fun onTimeTick() {}
|
fun onTimeTick() {}
|
||||||
|
|
||||||
/** Expected interval between calls to onTimeTick. Can always reduce to PER_MINUTE in AOD. */
|
|
||||||
val tickRate: ClockTickRate
|
|
||||||
get() = ClockTickRate.PER_MINUTE
|
|
||||||
|
|
||||||
/** Call to check whether the clock consumes weather data */
|
|
||||||
val hasCustomWeatherDataDisplay: Boolean
|
|
||||||
get() = false
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Region Darkness specific to the clock face.
|
* Region Darkness specific to the clock face.
|
||||||
* - isRegionDark = dark theme -> clock should be light
|
* - isRegionDark = dark theme -> clock should be light
|
||||||
@@ -203,6 +190,28 @@ data class ClockMetadata(
|
|||||||
val name: String,
|
val name: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/** Render configuration for the full clock. Modifies the way systemUI behaves with this clock. */
|
||||||
|
data class ClockConfig(
|
||||||
|
/**
|
||||||
|
* Whether this clock has a custom position update animation. If true, the keyguard will call
|
||||||
|
* `onPositionUpdated` to notify the clock of a position update animation. If false, a default
|
||||||
|
* animation will be used (e.g. a simple translation).
|
||||||
|
*/
|
||||||
|
val hasCustomPositionUpdatedAnimation: Boolean = false,
|
||||||
|
|
||||||
|
/** True if the clock will react to tone changes in the seed color. */
|
||||||
|
val isReactiveToTone: Boolean = true,
|
||||||
|
)
|
||||||
|
|
||||||
|
/** Render configuration options for a clock face. Modifies the way SystemUI behaves. */
|
||||||
|
data class ClockFaceConfig(
|
||||||
|
/** Expected interval between calls to onTimeTick. Can always reduce to PER_MINUTE in AOD. */
|
||||||
|
val tickRate: ClockTickRate = ClockTickRate.PER_MINUTE,
|
||||||
|
|
||||||
|
/** Call to check whether the clock consumes weather data */
|
||||||
|
val hasCustomWeatherDataDisplay: Boolean = false,
|
||||||
|
)
|
||||||
|
|
||||||
/** Structure for keeping clock-specific settings */
|
/** Structure for keeping clock-specific settings */
|
||||||
@Keep
|
@Keep
|
||||||
data class ClockSettings(
|
data class ClockSettings(
|
||||||
|
|||||||
@@ -46,10 +46,10 @@ import com.android.systemui.log.dagger.KeyguardSmallClockLog
|
|||||||
import com.android.systemui.plugins.ClockController
|
import com.android.systemui.plugins.ClockController
|
||||||
import com.android.systemui.plugins.ClockFaceController
|
import com.android.systemui.plugins.ClockFaceController
|
||||||
import com.android.systemui.plugins.ClockTickRate
|
import com.android.systemui.plugins.ClockTickRate
|
||||||
|
import com.android.systemui.plugins.WeatherData
|
||||||
import com.android.systemui.plugins.log.LogBuffer
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
import com.android.systemui.plugins.log.LogLevel.DEBUG
|
import com.android.systemui.plugins.log.LogLevel.DEBUG
|
||||||
import com.android.systemui.shared.regionsampling.RegionSampler
|
import com.android.systemui.shared.regionsampling.RegionSampler
|
||||||
import com.android.systemui.plugins.WeatherData
|
|
||||||
import com.android.systemui.statusbar.policy.BatteryController
|
import com.android.systemui.statusbar.policy.BatteryController
|
||||||
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback
|
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
@@ -144,8 +144,10 @@ constructor(
|
|||||||
val currentViewRect = Rect(left, top, right, bottom)
|
val currentViewRect = Rect(left, top, right, bottom)
|
||||||
val oldViewRect = Rect(oldLeft, oldTop, oldRight, oldBottom)
|
val oldViewRect = Rect(oldLeft, oldTop, oldRight, oldBottom)
|
||||||
|
|
||||||
if (currentViewRect.width() != oldViewRect.width() ||
|
if (
|
||||||
currentViewRect.height() != oldViewRect.height()) {
|
currentViewRect.width() != oldViewRect.width() ||
|
||||||
|
currentViewRect.height() != oldViewRect.height()
|
||||||
|
) {
|
||||||
updateRegionSampler(view)
|
updateRegionSampler(view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -425,7 +427,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
isRunning = true
|
isRunning = true
|
||||||
when (clockFace.events.tickRate) {
|
when (clockFace.config.tickRate) {
|
||||||
ClockTickRate.PER_MINUTE -> {
|
ClockTickRate.PER_MINUTE -> {
|
||||||
/* Handled by KeyguardClockSwitchController */
|
/* Handled by KeyguardClockSwitchController */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ import com.android.systemui.dagger.qualifiers.Main;
|
|||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
|
||||||
import com.android.systemui.log.dagger.KeyguardClockLog;
|
import com.android.systemui.log.dagger.KeyguardClockLog;
|
||||||
import com.android.systemui.plugins.ClockAnimations;
|
|
||||||
import com.android.systemui.plugins.ClockController;
|
import com.android.systemui.plugins.ClockController;
|
||||||
import com.android.systemui.plugins.log.LogBuffer;
|
import com.android.systemui.plugins.log.LogBuffer;
|
||||||
import com.android.systemui.plugins.log.LogLevel;
|
import com.android.systemui.plugins.log.LogLevel;
|
||||||
@@ -469,7 +468,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ClockController getClock() {
|
public ClockController getClock() {
|
||||||
return mClockEventController.getClock();
|
return mClockEventController.getClock();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -535,13 +534,6 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ((mCurrentClockSize == LARGE) ? clock.getLargeClock() : clock.getSmallClock())
|
return ((mCurrentClockSize == LARGE) ? clock.getLargeClock() : clock.getSmallClock())
|
||||||
.getEvents().getHasCustomWeatherDataDisplay();
|
.getConfig().getHasCustomWeatherDataDisplay();
|
||||||
}
|
|
||||||
|
|
||||||
/** Gets the animations for the current clock. */
|
|
||||||
@Nullable
|
|
||||||
public ClockAnimations getClockAnimations() {
|
|
||||||
ClockController clock = getClock();
|
|
||||||
return clock == null ? null : clock.getAnimations();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,13 @@
|
|||||||
|
|
||||||
package com.android.keyguard;
|
package com.android.keyguard;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import com.android.keyguard.KeyguardClockSwitch.ClockSize;
|
import com.android.keyguard.KeyguardClockSwitch.ClockSize;
|
||||||
import com.android.keyguard.logging.KeyguardLogger;
|
import com.android.keyguard.logging.KeyguardLogger;
|
||||||
import com.android.systemui.plugins.ClockAnimations;
|
import com.android.systemui.plugins.ClockController;
|
||||||
import com.android.systemui.statusbar.notification.AnimatableProperty;
|
import com.android.systemui.statusbar.notification.AnimatableProperty;
|
||||||
import com.android.systemui.statusbar.notification.PropertyAnimator;
|
import com.android.systemui.statusbar.notification.PropertyAnimator;
|
||||||
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
|
import com.android.systemui.statusbar.notification.stack.AnimationProperties;
|
||||||
@@ -241,8 +242,9 @@ public class KeyguardStatusViewController extends ViewController<KeyguardStatusV
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the animations for the current clock. */
|
/** Gets the current clock controller. */
|
||||||
public ClockAnimations getClockAnimations() {
|
@Nullable
|
||||||
return mKeyguardClockSwitchController.getClockAnimations();
|
public ClockController getClockController() {
|
||||||
|
return mKeyguardClockSwitchController.getClock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ import com.android.systemui.multishade.domain.interactor.MultiShadeInteractor;
|
|||||||
import com.android.systemui.navigationbar.NavigationBarController;
|
import com.android.systemui.navigationbar.NavigationBarController;
|
||||||
import com.android.systemui.navigationbar.NavigationBarView;
|
import com.android.systemui.navigationbar.NavigationBarView;
|
||||||
import com.android.systemui.navigationbar.NavigationModeController;
|
import com.android.systemui.navigationbar.NavigationModeController;
|
||||||
import com.android.systemui.plugins.ClockAnimations;
|
import com.android.systemui.plugins.ClockController;
|
||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
|
import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
|
||||||
import com.android.systemui.plugins.qs.QS;
|
import com.android.systemui.plugins.qs.QS;
|
||||||
@@ -1627,9 +1627,9 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
|||||||
transition.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
transition.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
||||||
transition.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
|
transition.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
|
||||||
|
|
||||||
ClockAnimations clockAnims = mKeyguardStatusViewController.getClockAnimations();
|
ClockController clock = mKeyguardStatusViewController.getClockController();
|
||||||
boolean customClockAnimation = clockAnims != null
|
boolean customClockAnimation = clock != null
|
||||||
&& clockAnims.getHasCustomPositionUpdatedAnimation();
|
&& clock.getConfig().getHasCustomPositionUpdatedAnimation();
|
||||||
|
|
||||||
if (mFeatureFlags.isEnabled(Flags.STEP_CLOCK_ANIMATION) && customClockAnimation) {
|
if (mFeatureFlags.isEnabled(Flags.STEP_CLOCK_ANIMATION) && customClockAnimation) {
|
||||||
// Find the clock, so we can exclude it from this transition.
|
// Find the clock, so we can exclude it from this transition.
|
||||||
@@ -5159,12 +5159,12 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
|
|||||||
Rect to = (Rect) endValues.values.get(PROP_BOUNDS);
|
Rect to = (Rect) endValues.values.get(PROP_BOUNDS);
|
||||||
|
|
||||||
anim.addUpdateListener(animation -> {
|
anim.addUpdateListener(animation -> {
|
||||||
ClockAnimations clockAnims = mController.getClockAnimations();
|
ClockController clock = mController.getClockController();
|
||||||
if (clockAnims == null) {
|
if (clock == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
clockAnims.onPositionUpdated(from, to, animation.getAnimatedFraction());
|
clock.getAnimations().onPositionUpdated(from, to, animation.getAnimatedFraction());
|
||||||
});
|
});
|
||||||
|
|
||||||
return anim;
|
return anim;
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import com.android.systemui.plugins.ClockAnimations
|
|||||||
import com.android.systemui.plugins.ClockController
|
import com.android.systemui.plugins.ClockController
|
||||||
import com.android.systemui.plugins.ClockEvents
|
import com.android.systemui.plugins.ClockEvents
|
||||||
import com.android.systemui.plugins.ClockFaceController
|
import com.android.systemui.plugins.ClockFaceController
|
||||||
|
import com.android.systemui.plugins.ClockFaceConfig
|
||||||
import com.android.systemui.plugins.ClockFaceEvents
|
import com.android.systemui.plugins.ClockFaceEvents
|
||||||
import com.android.systemui.plugins.ClockTickRate
|
import com.android.systemui.plugins.ClockTickRate
|
||||||
import com.android.systemui.plugins.log.LogBuffer
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
@@ -101,8 +102,10 @@ class ClockEventControllerTest : SysuiTestCase() {
|
|||||||
whenever(largeClockController.events).thenReturn(largeClockEvents)
|
whenever(largeClockController.events).thenReturn(largeClockEvents)
|
||||||
whenever(clock.events).thenReturn(events)
|
whenever(clock.events).thenReturn(events)
|
||||||
whenever(clock.animations).thenReturn(animations)
|
whenever(clock.animations).thenReturn(animations)
|
||||||
whenever(smallClockEvents.tickRate).thenReturn(ClockTickRate.PER_MINUTE)
|
whenever(smallClockController.config)
|
||||||
whenever(largeClockEvents.tickRate).thenReturn(ClockTickRate.PER_MINUTE)
|
.thenReturn(ClockFaceConfig(tickRate = ClockTickRate.PER_MINUTE))
|
||||||
|
whenever(largeClockController.config)
|
||||||
|
.thenReturn(ClockFaceConfig(tickRate = ClockTickRate.PER_MINUTE))
|
||||||
|
|
||||||
repository = FakeKeyguardRepository()
|
repository = FakeKeyguardRepository()
|
||||||
bouncerRepository = FakeKeyguardBouncerRepository()
|
bouncerRepository = FakeKeyguardBouncerRepository()
|
||||||
|
|||||||
@@ -315,8 +315,8 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetClockAnimationsForwardsToClock() {
|
public void testGetClock_ForwardsToClock() {
|
||||||
assertEquals(mClockAnimations, mController.getClockAnimations());
|
assertEquals(mClockController, mController.getClock());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -367,9 +367,9 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetClockAnimations_nullClock_returnsNull() {
|
public void testGetClock_nullClock_returnsNull() {
|
||||||
when(mClockEventController.getClock()).thenReturn(null);
|
when(mClockEventController.getClock()).thenReturn(null);
|
||||||
assertNull(mController.getClockAnimations());
|
assertNull(mController.getClock());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyAttachment(VerificationMode times) {
|
private void verifyAttachment(VerificationMode times) {
|
||||||
|
|||||||
@@ -16,17 +16,17 @@
|
|||||||
|
|
||||||
package com.android.keyguard;
|
package com.android.keyguard;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.test.suitebuilder.annotation.SmallTest;
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
|
|
||||||
import com.android.keyguard.logging.KeyguardLogger;
|
import com.android.keyguard.logging.KeyguardLogger;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.plugins.ClockAnimations;
|
import com.android.systemui.plugins.ClockController;
|
||||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||||
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
|
import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
@@ -118,14 +118,10 @@ public class KeyguardStatusViewControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getClockAnimations_forwardsToClockSwitch() {
|
public void getClock_forwardsToClockSwitch() {
|
||||||
ClockAnimations mockClockAnimations = mock(ClockAnimations.class);
|
ClockController mockClock = mock(ClockController.class);
|
||||||
when(mKeyguardClockSwitchController.getClockAnimations()).thenReturn(mockClockAnimations);
|
when(mKeyguardClockSwitchController.getClock()).thenReturn(mockClock);
|
||||||
|
|
||||||
Rect r1 = new Rect(1, 2, 3, 4);
|
assertEquals(mockClock, mController.getClockController());
|
||||||
Rect r2 = new Rect(5, 6, 7, 8);
|
|
||||||
mController.getClockAnimations().onPositionUpdated(r1, r2, 0.3f);
|
|
||||||
|
|
||||||
verify(mockClockAnimations).onPositionUpdated(r1, r2, 0.3f);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user