AOD/LS - Large clock animations
Match latest specs for large/small clock transitions, including a fade and y-axis shift. Bug: 172360102 Test: manual, show/hide all notifications Change-Id: I8d756bfbc524481d7b8835946acf05aa4893a1d5
This commit is contained in:
@@ -677,6 +677,8 @@
|
||||
<dimen name="keyguard_clock_top_margin">36dp</dimen>
|
||||
<!-- The margin between top of clock and bottom of lock icon. -->
|
||||
<dimen name="keyguard_clock_lock_margin">16dp</dimen>
|
||||
<!-- The amount to shift the clocks during a small/large transition -->
|
||||
<dimen name="keyguard_clock_switch_y_shift">10dp</dimen>
|
||||
|
||||
<item name="scrim_behind_alpha" format="float" type="dimen">0.62</item>
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.android.keyguard;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.Paint;
|
||||
@@ -48,6 +50,9 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
*/
|
||||
private static final float TO_BOLD_TRANSITION_FRACTION = 0.7f;
|
||||
|
||||
private static final long CLOCK_OUT_MILLIS = 150;
|
||||
private static final long CLOCK_IN_MILLIS = 200;
|
||||
|
||||
/**
|
||||
* Layout transition that scales the default clock face.
|
||||
*/
|
||||
@@ -112,6 +117,7 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
private int[] mColorPalette;
|
||||
|
||||
private int mLockScreenMode = KeyguardUpdateMonitor.LOCK_SCREEN_MODE_NORMAL;
|
||||
private int mClockSwitchYAmount;
|
||||
|
||||
public KeyguardClockSwitch(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
@@ -130,6 +136,17 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply dp changes on font/scale change
|
||||
*/
|
||||
public void onDensityOrFontScaleChanged() {
|
||||
setTextSize(TypedValue.COMPLEX_UNIT_PX, mContext.getResources()
|
||||
.getDimensionPixelSize(R.dimen.widget_big_font_size));
|
||||
|
||||
mClockSwitchYAmount = mContext.getResources().getDimensionPixelSize(
|
||||
R.dimen.keyguard_clock_switch_y_shift);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if this view is presenting a custom clock, or the default implementation.
|
||||
*/
|
||||
@@ -181,6 +198,8 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
mNewLockscreenLargeClockFrame = findViewById(R.id.new_lockscreen_clock_view_large);
|
||||
mSmallClockFrame = findViewById(R.id.clock_view);
|
||||
mKeyguardStatusArea = findViewById(R.id.keyguard_status_area);
|
||||
|
||||
onDensityOrFontScaleChanged();
|
||||
}
|
||||
|
||||
void setClockPlugin(ClockPlugin plugin, int statusBarState) {
|
||||
@@ -296,31 +315,43 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
mClockViewBold.setFormat24Hour(format);
|
||||
}
|
||||
|
||||
private void updateClockLayout(boolean useLargeClock) {
|
||||
private void animateClockChange(boolean useLargeClock) {
|
||||
if (mLockScreenMode != KeyguardUpdateMonitor.LOCK_SCREEN_MODE_LAYOUT_1) return;
|
||||
|
||||
Fade fadeIn = new Fade();
|
||||
fadeIn.setDuration(KeyguardSliceView.DEFAULT_ANIM_DURATION);
|
||||
fadeIn.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
|
||||
|
||||
Fade fadeOut = new Fade();
|
||||
fadeOut.setDuration(KeyguardSliceView.DEFAULT_ANIM_DURATION / 2);
|
||||
fadeOut.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
|
||||
|
||||
View in, out;
|
||||
int direction = 1;
|
||||
if (useLargeClock) {
|
||||
TransitionManager.beginDelayedTransition(mNewLockscreenClockFrame, fadeOut);
|
||||
TransitionManager.beginDelayedTransition(mNewLockscreenLargeClockFrame, fadeIn);
|
||||
|
||||
mNewLockscreenClockFrame.setVisibility(View.INVISIBLE);
|
||||
addView(mNewLockscreenLargeClockFrame);
|
||||
mNewLockscreenLargeClockFrame.setVisibility(View.VISIBLE);
|
||||
out = mNewLockscreenClockFrame;
|
||||
in = mNewLockscreenLargeClockFrame;
|
||||
addView(in);
|
||||
direction = -1;
|
||||
} else {
|
||||
TransitionManager.beginDelayedTransition(mNewLockscreenClockFrame, fadeIn);
|
||||
TransitionManager.beginDelayedTransition(mNewLockscreenLargeClockFrame, fadeOut);
|
||||
in = mNewLockscreenClockFrame;
|
||||
out = mNewLockscreenLargeClockFrame;
|
||||
|
||||
removeView(mNewLockscreenLargeClockFrame);
|
||||
mNewLockscreenClockFrame.setVisibility(View.VISIBLE);
|
||||
// Must remove in order for notifications to appear in the proper place
|
||||
removeView(out);
|
||||
}
|
||||
|
||||
AnimatorSet outAnim = new AnimatorSet();
|
||||
outAnim.setDuration(CLOCK_OUT_MILLIS);
|
||||
outAnim.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
|
||||
outAnim.playTogether(
|
||||
ObjectAnimator.ofFloat(out, View.ALPHA, 0f),
|
||||
ObjectAnimator.ofFloat(out, View.TRANSLATION_Y, 0,
|
||||
direction * -mClockSwitchYAmount));
|
||||
|
||||
in.setAlpha(0);
|
||||
in.setVisibility(View.VISIBLE);
|
||||
AnimatorSet inAnim = new AnimatorSet();
|
||||
inAnim.setDuration(CLOCK_IN_MILLIS);
|
||||
inAnim.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
|
||||
inAnim.playTogether(ObjectAnimator.ofFloat(in, View.ALPHA, 1f),
|
||||
ObjectAnimator.ofFloat(in, View.TRANSLATION_Y, direction * mClockSwitchYAmount, 0));
|
||||
inAnim.setStartDelay(CLOCK_OUT_MILLIS / 2);
|
||||
|
||||
inAnim.start();
|
||||
outAnim.start();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -343,7 +374,8 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
if (hasVisibleNotifications == mHasVisibleNotifications) {
|
||||
return;
|
||||
}
|
||||
updateClockLayout(!hasVisibleNotifications);
|
||||
|
||||
animateClockChange(!hasVisibleNotifications);
|
||||
|
||||
mHasVisibleNotifications = hasVisibleNotifications;
|
||||
if (mDarkAmount == 0f && mBigClockContainer != null) {
|
||||
|
||||
@@ -21,7 +21,6 @@ import android.content.ContentResolver;
|
||||
import android.content.res.Resources;
|
||||
import android.provider.Settings;
|
||||
import android.text.format.DateFormat;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
@@ -146,11 +145,10 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates clock's text
|
||||
* Apply dp changes on font/scale change
|
||||
*/
|
||||
public void onDensityOrFontScaleChanged() {
|
||||
mView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
|
||||
mResources.getDimensionPixelSize(R.dimen.widget_big_font_size));
|
||||
mView.onDensityOrFontScaleChanged();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user