Loading packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -131,6 +131,11 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); } } /** Animate the clock appearance */ public void animateAppear() { mView.animateAppear(); } /** /** * Updates the time for the view. * Updates the time for the view. */ */ Loading packages/SystemUI/src/com/android/keyguard/AnimatableClockView.java +25 −0 Original line number Original line Diff line number Diff line Loading @@ -44,6 +44,7 @@ public class AnimatableClockView extends TextView { private static final CharSequence SINGLE_LINE_FORMAT_12_HOUR = "h:mm"; private static final CharSequence SINGLE_LINE_FORMAT_12_HOUR = "h:mm"; private static final CharSequence SINGLE_LINE_FORMAT_24_HOUR = "HH:mm"; private static final CharSequence SINGLE_LINE_FORMAT_24_HOUR = "HH:mm"; private static final long DOZE_ANIM_DURATION = 300; private static final long DOZE_ANIM_DURATION = 300; private static final long APPEAR_ANIM_DURATION = 350; private static final long CHARGE_ANIM_DURATION_PHASE_0 = 500; private static final long CHARGE_ANIM_DURATION_PHASE_0 = 500; private static final long CHARGE_ANIM_DURATION_PHASE_1 = 1000; private static final long CHARGE_ANIM_DURATION_PHASE_1 = 1000; Loading Loading @@ -156,6 +157,30 @@ public class AnimatableClockView extends TextView { mLockScreenColor = lockScreenColor; mLockScreenColor = lockScreenColor; } } void animateAppear() { if (mTextAnimator == null) { return; } setTextStyle( mDozingWeight, -1 /* text size, no update */, mLockScreenColor, false /* animate */, 0 /* duration */, 0 /* delay */, null /* onAnimationEnd */); setTextStyle( mLockScreenWeight, -1 /* text size, no update */, mLockScreenColor, true, /* animate */ APPEAR_ANIM_DURATION, 0 /* delay */, null /* onAnimationEnd */); } void animateDisappear() { void animateDisappear() { if (mTextAnimator == null) { if (mTextAnimator == null) { return; return; Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +34 −4 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class KeyguardClockSwitch extends RelativeLayout { private static final long CLOCK_OUT_MILLIS = 150; private static final long CLOCK_OUT_MILLIS = 150; private static final long CLOCK_IN_MILLIS = 200; private static final long CLOCK_IN_MILLIS = 200; private static final long SMARTSPACE_MOVE_MILLIS = 350; /** /** * Optional/alternative clock injected via plugin. * Optional/alternative clock injected via plugin. Loading @@ -54,6 +55,8 @@ public class KeyguardClockSwitch extends RelativeLayout { * show it below the alternate clock. * show it below the alternate clock. */ */ private View mKeyguardStatusArea; private View mKeyguardStatusArea; /** Mutually exclusive with mKeyguardStatusArea */ private View mSmartspaceView; /** /** * Maintain state so that a newly connected plugin can be initialized. * Maintain state so that a newly connected plugin can be initialized. Loading @@ -67,6 +70,7 @@ public class KeyguardClockSwitch extends RelativeLayout { private AnimatorSet mClockInAnim = null; private AnimatorSet mClockInAnim = null; private AnimatorSet mClockOutAnim = null; private AnimatorSet mClockOutAnim = null; private ObjectAnimator mSmartspaceAnim = null; /** /** * If the Keyguard Slice has a header (big center-aligned text.) * If the Keyguard Slice has a header (big center-aligned text.) Loading Loading @@ -177,17 +181,22 @@ public class KeyguardClockSwitch extends RelativeLayout { private void animateClockChange(boolean useLargeClock) { private void animateClockChange(boolean useLargeClock) { if (mClockInAnim != null) mClockInAnim.cancel(); if (mClockInAnim != null) mClockInAnim.cancel(); if (mClockOutAnim != null) mClockOutAnim.cancel(); if (mClockOutAnim != null) mClockOutAnim.cancel(); if (mSmartspaceAnim != null) mSmartspaceAnim.cancel(); View in, out; View in, out; int direction = 1; int direction = 1; float smartspaceYTranslation; if (useLargeClock) { if (useLargeClock) { out = mClockFrame; out = mClockFrame; in = mLargeClockFrame; in = mLargeClockFrame; if (indexOfChild(in) == -1) addView(in); if (indexOfChild(in) == -1) addView(in); direction = -1; direction = -1; smartspaceYTranslation = mSmartspaceView == null ? 0 : mClockFrame.getY() - mSmartspaceView.getY(); } else { } else { in = mClockFrame; in = mClockFrame; out = mLargeClockFrame; out = mLargeClockFrame; smartspaceYTranslation = 0f; // Must remove in order for notifications to appear in the proper place // Must remove in order for notifications to appear in the proper place removeView(out); removeView(out); Loading Loading @@ -222,6 +231,19 @@ public class KeyguardClockSwitch extends RelativeLayout { mClockInAnim.start(); mClockInAnim.start(); mClockOutAnim.start(); mClockOutAnim.start(); if (mSmartspaceView != null) { mSmartspaceAnim = ObjectAnimator.ofFloat(mSmartspaceView, View.TRANSLATION_Y, smartspaceYTranslation); mSmartspaceAnim.setDuration(SMARTSPACE_MOVE_MILLIS); mSmartspaceAnim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); mSmartspaceAnim.addListener(new AnimatorListenerAdapter() { public void onAnimationEnd(Animator animation) { mSmartspaceAnim = null; } }); mSmartspaceAnim.start(); } } } /** /** Loading @@ -237,15 +259,18 @@ public class KeyguardClockSwitch extends RelativeLayout { } } /** /** * Set whether or not the lock screen is showing notifications. * Based upon whether notifications are showing or not, display/hide the large clock and * the smaller version. */ */ void setHasVisibleNotifications(boolean hasVisibleNotifications) { boolean willSwitchToLargeClock(boolean hasVisibleNotifications) { if (hasVisibleNotifications == mHasVisibleNotifications) { if (hasVisibleNotifications == mHasVisibleNotifications) { return; return false; } } animateClockChange(!hasVisibleNotifications); boolean useLargeClock = !hasVisibleNotifications; animateClockChange(useLargeClock); mHasVisibleNotifications = hasVisibleNotifications; mHasVisibleNotifications = hasVisibleNotifications; return useLargeClock; } } public Paint getPaint() { public Paint getPaint() { Loading Loading @@ -303,6 +328,10 @@ public class KeyguardClockSwitch extends RelativeLayout { } } } } void setSmartspaceView(View smartspaceView) { mSmartspaceView = smartspaceView; } void updateColors(ColorExtractor.GradientColors colors) { void updateColors(ColorExtractor.GradientColors colors) { mSupportsDarkText = colors.supportsDarkText(); mSupportsDarkText = colors.supportsDarkText(); mColorPalette = colors.getColorPalette(); mColorPalette = colors.getColorPalette(); Loading @@ -317,6 +346,7 @@ public class KeyguardClockSwitch extends RelativeLayout { pw.println(" mClockFrame: " + mClockFrame); pw.println(" mClockFrame: " + mClockFrame); pw.println(" mLargeClockFrame: " + mLargeClockFrame); pw.println(" mLargeClockFrame: " + mLargeClockFrame); pw.println(" mKeyguardStatusArea: " + mKeyguardStatusArea); pw.println(" mKeyguardStatusArea: " + mKeyguardStatusArea); pw.println(" mSmartspaceView: " + mSmartspaceView); pw.println(" mDarkAmount: " + mDarkAmount); pw.println(" mDarkAmount: " + mDarkAmount); pw.println(" mSupportsDarkText: " + mSupportsDarkText); pw.println(" mSupportsDarkText: " + mSupportsDarkText); pw.println(" mColorPalette: " + Arrays.toString(mColorPalette)); pw.println(" mColorPalette: " + Arrays.toString(mColorPalette)); Loading packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -185,6 +185,8 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS lp = (RelativeLayout.LayoutParams) nic.getLayoutParams(); lp = (RelativeLayout.LayoutParams) nic.getLayoutParams(); lp.addRule(RelativeLayout.BELOW, mSmartspaceView.getId()); lp.addRule(RelativeLayout.BELOW, mSmartspaceView.getId()); nic.setLayoutParams(lp); nic.setLayoutParams(lp); mView.setSmartspaceView(mSmartspaceView); } } } } Loading Loading @@ -220,7 +222,9 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS * Set whether or not the lock screen is showing notifications. * Set whether or not the lock screen is showing notifications. */ */ public void setHasVisibleNotifications(boolean hasVisibleNotifications) { public void setHasVisibleNotifications(boolean hasVisibleNotifications) { mView.setHasVisibleNotifications(hasVisibleNotifications); if (mView.willSwitchToLargeClock(hasVisibleNotifications)) { mLargeClockViewController.animateAppear(); } } } /** /** Loading Loading
packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -131,6 +131,11 @@ public class AnimatableClockController extends ViewController<AnimatableClockVie mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback); } } /** Animate the clock appearance */ public void animateAppear() { mView.animateAppear(); } /** /** * Updates the time for the view. * Updates the time for the view. */ */ Loading
packages/SystemUI/src/com/android/keyguard/AnimatableClockView.java +25 −0 Original line number Original line Diff line number Diff line Loading @@ -44,6 +44,7 @@ public class AnimatableClockView extends TextView { private static final CharSequence SINGLE_LINE_FORMAT_12_HOUR = "h:mm"; private static final CharSequence SINGLE_LINE_FORMAT_12_HOUR = "h:mm"; private static final CharSequence SINGLE_LINE_FORMAT_24_HOUR = "HH:mm"; private static final CharSequence SINGLE_LINE_FORMAT_24_HOUR = "HH:mm"; private static final long DOZE_ANIM_DURATION = 300; private static final long DOZE_ANIM_DURATION = 300; private static final long APPEAR_ANIM_DURATION = 350; private static final long CHARGE_ANIM_DURATION_PHASE_0 = 500; private static final long CHARGE_ANIM_DURATION_PHASE_0 = 500; private static final long CHARGE_ANIM_DURATION_PHASE_1 = 1000; private static final long CHARGE_ANIM_DURATION_PHASE_1 = 1000; Loading Loading @@ -156,6 +157,30 @@ public class AnimatableClockView extends TextView { mLockScreenColor = lockScreenColor; mLockScreenColor = lockScreenColor; } } void animateAppear() { if (mTextAnimator == null) { return; } setTextStyle( mDozingWeight, -1 /* text size, no update */, mLockScreenColor, false /* animate */, 0 /* duration */, 0 /* delay */, null /* onAnimationEnd */); setTextStyle( mLockScreenWeight, -1 /* text size, no update */, mLockScreenColor, true, /* animate */ APPEAR_ANIM_DURATION, 0 /* delay */, null /* onAnimationEnd */); } void animateDisappear() { void animateDisappear() { if (mTextAnimator == null) { if (mTextAnimator == null) { return; return; Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java +34 −4 Original line number Original line Diff line number Diff line Loading @@ -35,6 +35,7 @@ public class KeyguardClockSwitch extends RelativeLayout { private static final long CLOCK_OUT_MILLIS = 150; private static final long CLOCK_OUT_MILLIS = 150; private static final long CLOCK_IN_MILLIS = 200; private static final long CLOCK_IN_MILLIS = 200; private static final long SMARTSPACE_MOVE_MILLIS = 350; /** /** * Optional/alternative clock injected via plugin. * Optional/alternative clock injected via plugin. Loading @@ -54,6 +55,8 @@ public class KeyguardClockSwitch extends RelativeLayout { * show it below the alternate clock. * show it below the alternate clock. */ */ private View mKeyguardStatusArea; private View mKeyguardStatusArea; /** Mutually exclusive with mKeyguardStatusArea */ private View mSmartspaceView; /** /** * Maintain state so that a newly connected plugin can be initialized. * Maintain state so that a newly connected plugin can be initialized. Loading @@ -67,6 +70,7 @@ public class KeyguardClockSwitch extends RelativeLayout { private AnimatorSet mClockInAnim = null; private AnimatorSet mClockInAnim = null; private AnimatorSet mClockOutAnim = null; private AnimatorSet mClockOutAnim = null; private ObjectAnimator mSmartspaceAnim = null; /** /** * If the Keyguard Slice has a header (big center-aligned text.) * If the Keyguard Slice has a header (big center-aligned text.) Loading Loading @@ -177,17 +181,22 @@ public class KeyguardClockSwitch extends RelativeLayout { private void animateClockChange(boolean useLargeClock) { private void animateClockChange(boolean useLargeClock) { if (mClockInAnim != null) mClockInAnim.cancel(); if (mClockInAnim != null) mClockInAnim.cancel(); if (mClockOutAnim != null) mClockOutAnim.cancel(); if (mClockOutAnim != null) mClockOutAnim.cancel(); if (mSmartspaceAnim != null) mSmartspaceAnim.cancel(); View in, out; View in, out; int direction = 1; int direction = 1; float smartspaceYTranslation; if (useLargeClock) { if (useLargeClock) { out = mClockFrame; out = mClockFrame; in = mLargeClockFrame; in = mLargeClockFrame; if (indexOfChild(in) == -1) addView(in); if (indexOfChild(in) == -1) addView(in); direction = -1; direction = -1; smartspaceYTranslation = mSmartspaceView == null ? 0 : mClockFrame.getY() - mSmartspaceView.getY(); } else { } else { in = mClockFrame; in = mClockFrame; out = mLargeClockFrame; out = mLargeClockFrame; smartspaceYTranslation = 0f; // Must remove in order for notifications to appear in the proper place // Must remove in order for notifications to appear in the proper place removeView(out); removeView(out); Loading Loading @@ -222,6 +231,19 @@ public class KeyguardClockSwitch extends RelativeLayout { mClockInAnim.start(); mClockInAnim.start(); mClockOutAnim.start(); mClockOutAnim.start(); if (mSmartspaceView != null) { mSmartspaceAnim = ObjectAnimator.ofFloat(mSmartspaceView, View.TRANSLATION_Y, smartspaceYTranslation); mSmartspaceAnim.setDuration(SMARTSPACE_MOVE_MILLIS); mSmartspaceAnim.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); mSmartspaceAnim.addListener(new AnimatorListenerAdapter() { public void onAnimationEnd(Animator animation) { mSmartspaceAnim = null; } }); mSmartspaceAnim.start(); } } } /** /** Loading @@ -237,15 +259,18 @@ public class KeyguardClockSwitch extends RelativeLayout { } } /** /** * Set whether or not the lock screen is showing notifications. * Based upon whether notifications are showing or not, display/hide the large clock and * the smaller version. */ */ void setHasVisibleNotifications(boolean hasVisibleNotifications) { boolean willSwitchToLargeClock(boolean hasVisibleNotifications) { if (hasVisibleNotifications == mHasVisibleNotifications) { if (hasVisibleNotifications == mHasVisibleNotifications) { return; return false; } } animateClockChange(!hasVisibleNotifications); boolean useLargeClock = !hasVisibleNotifications; animateClockChange(useLargeClock); mHasVisibleNotifications = hasVisibleNotifications; mHasVisibleNotifications = hasVisibleNotifications; return useLargeClock; } } public Paint getPaint() { public Paint getPaint() { Loading Loading @@ -303,6 +328,10 @@ public class KeyguardClockSwitch extends RelativeLayout { } } } } void setSmartspaceView(View smartspaceView) { mSmartspaceView = smartspaceView; } void updateColors(ColorExtractor.GradientColors colors) { void updateColors(ColorExtractor.GradientColors colors) { mSupportsDarkText = colors.supportsDarkText(); mSupportsDarkText = colors.supportsDarkText(); mColorPalette = colors.getColorPalette(); mColorPalette = colors.getColorPalette(); Loading @@ -317,6 +346,7 @@ public class KeyguardClockSwitch extends RelativeLayout { pw.println(" mClockFrame: " + mClockFrame); pw.println(" mClockFrame: " + mClockFrame); pw.println(" mLargeClockFrame: " + mLargeClockFrame); pw.println(" mLargeClockFrame: " + mLargeClockFrame); pw.println(" mKeyguardStatusArea: " + mKeyguardStatusArea); pw.println(" mKeyguardStatusArea: " + mKeyguardStatusArea); pw.println(" mSmartspaceView: " + mSmartspaceView); pw.println(" mDarkAmount: " + mDarkAmount); pw.println(" mDarkAmount: " + mDarkAmount); pw.println(" mSupportsDarkText: " + mSupportsDarkText); pw.println(" mSupportsDarkText: " + mSupportsDarkText); pw.println(" mColorPalette: " + Arrays.toString(mColorPalette)); pw.println(" mColorPalette: " + Arrays.toString(mColorPalette)); Loading
packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +5 −1 Original line number Original line Diff line number Diff line Loading @@ -185,6 +185,8 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS lp = (RelativeLayout.LayoutParams) nic.getLayoutParams(); lp = (RelativeLayout.LayoutParams) nic.getLayoutParams(); lp.addRule(RelativeLayout.BELOW, mSmartspaceView.getId()); lp.addRule(RelativeLayout.BELOW, mSmartspaceView.getId()); nic.setLayoutParams(lp); nic.setLayoutParams(lp); mView.setSmartspaceView(mSmartspaceView); } } } } Loading Loading @@ -220,7 +222,9 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS * Set whether or not the lock screen is showing notifications. * Set whether or not the lock screen is showing notifications. */ */ public void setHasVisibleNotifications(boolean hasVisibleNotifications) { public void setHasVisibleNotifications(boolean hasVisibleNotifications) { mView.setHasVisibleNotifications(hasVisibleNotifications); if (mView.willSwitchToLargeClock(hasVisibleNotifications)) { mLargeClockViewController.animateAppear(); } } } /** /** Loading