Loading packages/SystemUI/res/values/dimens.xml +3 −0 Original line number Original line Diff line number Diff line Loading @@ -332,4 +332,7 @@ <!-- The width of the region on the left/right edge of the screen for performing the camera/ <!-- The width of the region on the left/right edge of the screen for performing the camera/ phone hints. --> phone hints. --> <dimen name="edge_tap_area_width">48dp</dimen> <dimen name="edge_tap_area_width">48dp</dimen> <!-- the distance the panel moves up when starting the up motion on Keyguard --> <dimen name="keyguard_panel_move_up_distance">100dp</dimen> </resources> </resources> packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +8 −6 Original line number Original line Diff line number Diff line Loading @@ -88,13 +88,15 @@ public class KeyguardClockPositionAlgorithm { public void run(Result result) { public void run(Result result) { int y = getClockY() - mKeyguardStatusHeight/2; int y = getClockY() - mKeyguardStatusHeight/2; float clockAdjustment = getClockYExpansionAdjustment(); float topAdjustment = getTopExpansionAdjustment(); float topPaddingAdjMultiplier = getTopPaddingAdjMultiplier(); float topPaddingAdjMultiplier = getTopPaddingAdjMultiplier(); result.stackScrollerPaddingAdjustment = (int) (clockAdjustment*topPaddingAdjMultiplier); result.stackScrollerPaddingAdjustment = (int) (topAdjustment*topPaddingAdjMultiplier); int clockNotificationsPadding = getClockNotificationsPadding() int clockNotificationsPadding = getClockNotificationsPadding() + result.stackScrollerPaddingAdjustment; + result.stackScrollerPaddingAdjustment; int padding = y + clockNotificationsPadding; int padding = y + clockNotificationsPadding; y += clockAdjustment; if (mNotificationCount == 0) { y += topAdjustment; } result.clockY = y; result.clockY = y; result.stackScrollerPadding = mKeyguardStatusHeight + padding; result.stackScrollerPadding = mKeyguardStatusHeight + padding; result.clockAlpha = getClockAlpha(result.stackScrollerPadding result.clockAlpha = getClockAlpha(result.stackScrollerPadding Loading @@ -117,8 +119,8 @@ public class KeyguardClockPositionAlgorithm { return (int) (getClockYFraction() * mHeight); return (int) (getClockYFraction() * mHeight); } } private float getClockYExpansionAdjustment() { private float getTopExpansionAdjustment() { float rubberbandFactor = getClockYExpansionRubberbandFactor(); float rubberbandFactor = getTopExpansionRubberbandFactor(); float value = (rubberbandFactor * (mMaxPanelHeight - mExpandedHeight)); float value = (rubberbandFactor * (mMaxPanelHeight - mExpandedHeight)); float t = value / mMaxPanelHeight; float t = value / mMaxPanelHeight; float slowedDownValue = -sSlowDownInterpolator.getInterpolation(t) * SLOW_DOWN_FACTOR float slowedDownValue = -sSlowDownInterpolator.getInterpolation(t) * SLOW_DOWN_FACTOR Loading @@ -130,7 +132,7 @@ public class KeyguardClockPositionAlgorithm { } } } } private float getClockYExpansionRubberbandFactor() { private float getTopExpansionRubberbandFactor() { float t = getNotificationAmountT(); float t = getNotificationAmountT(); t = Math.min(t, 1.0f); t = Math.min(t, 1.0f); t = (float) Math.pow(t, 0.3f); t = (float) Math.pow(t, 0.3f); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -695,6 +695,11 @@ public class NotificationPanelView extends PanelView implements return super.isScrolledToBottom(); return super.isScrolledToBottom(); } } @Override protected boolean hasNotifications() { return mNotificationStackScroller.getNotGoneChildCount() > 0; } @Override @Override protected int getMaxPanelHeight() { protected int getMaxPanelHeight() { // TODO: Figure out transition for collapsing when QS is open, adjust height here. // TODO: Figure out transition for collapsing when QS is open, adjust height here. Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +68 −2 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,8 @@ import android.view.ViewConfiguration; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver; import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.view.animation.PathInterpolator; import android.widget.FrameLayout; import android.widget.FrameLayout; import com.android.systemui.R; import com.android.systemui.R; Loading @@ -43,6 +45,8 @@ public abstract class PanelView extends FrameLayout { public static final boolean DEBUG = PanelBar.DEBUG; public static final boolean DEBUG = PanelBar.DEBUG; public static final String TAG = PanelView.class.getSimpleName(); public static final String TAG = PanelView.class.getSimpleName(); private static final long KEYGUARD_MOVE_UP_LENGTH = 300; private final void logf(String fmt, Object... args) { private final void logf(String fmt, Object... args) { Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); } } Loading @@ -62,6 +66,9 @@ public abstract class PanelView extends FrameLayout { protected int mTouchSlop; protected int mTouchSlop; protected boolean mHintAnimationRunning; protected boolean mHintAnimationRunning; private boolean mOverExpandedBeforeFling; private boolean mOverExpandedBeforeFling; private boolean mKeyguardMovingUp; private int mKeyguardMoveUpDistance; private float mKeyguardFingerHeight; private ValueAnimator mHeightAnimator; private ValueAnimator mHeightAnimator; private ObjectAnimator mPeekAnimator; private ObjectAnimator mPeekAnimator; Loading @@ -82,6 +89,8 @@ public abstract class PanelView extends FrameLayout { private Interpolator mLinearOutSlowInInterpolator; private Interpolator mLinearOutSlowInInterpolator; private Interpolator mBounceInterpolator; private Interpolator mBounceInterpolator; private Interpolator mKeyguardMoveUpInterpolator; private final Interpolator mLinearInterpolator = new LinearInterpolator(); protected void onExpandingFinished() { protected void onExpandingFinished() { mBar.onExpandingFinished(); mBar.onExpandingFinished(); Loading Loading @@ -109,6 +118,7 @@ public abstract class PanelView extends FrameLayout { mLinearOutSlowInInterpolator = mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); mBounceInterpolator = new BounceInterpolator(); mBounceInterpolator = new BounceInterpolator(); mKeyguardMoveUpInterpolator = new PathInterpolator(0.6f, 0f, 0.4f, 1f); } } protected void loadDimens() { protected void loadDimens() { Loading @@ -120,6 +130,8 @@ public abstract class PanelView extends FrameLayout { mTouchSlop = configuration.getScaledTouchSlop(); mTouchSlop = configuration.getScaledTouchSlop(); mHintDistance = res.getDimension(R.dimen.hint_move_distance); mHintDistance = res.getDimension(R.dimen.hint_move_distance); mEdgeTapAreaWidth = res.getDimensionPixelSize(R.dimen.edge_tap_area_width); mEdgeTapAreaWidth = res.getDimensionPixelSize(R.dimen.edge_tap_area_width); mKeyguardMoveUpDistance = res.getDimensionPixelSize(R.dimen.keyguard_panel_move_up_distance); } } private void trackMovement(MotionEvent event) { private void trackMovement(MotionEvent event) { Loading Loading @@ -217,9 +229,14 @@ public abstract class PanelView extends FrameLayout { mJustPeeked = false; mJustPeeked = false; } } if (!mJustPeeked && (!waitForTouchSlop || mTracking)) { if (!mJustPeeked && (!waitForTouchSlop || mTracking)) { if (mStatusBar.getBarState() == StatusBarState.KEYGUARD && !hasNotifications()) { setExpandedHeightKeyguard(newHeight); } else { setExpandedHeightInternal(newHeight); setExpandedHeightInternal(newHeight); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); } } } trackMovement(event); trackMovement(event); break; break; Loading Loading @@ -247,10 +264,56 @@ public abstract class PanelView extends FrameLayout { return !waitForTouchSlop || mTracking; return !waitForTouchSlop || mTracking; } } protected abstract boolean hasNotifications(); private void setExpandedHeightKeyguard(float newHeight) { mKeyguardFingerHeight = newHeight; if (newHeight < getMaxPanelHeight() && !mKeyguardMovingUp) { mKeyguardMovingUp = true; ValueAnimator anim = createHeightAnimator( getMaxPanelHeight() - mKeyguardMoveUpDistance); anim.setDuration(KEYGUARD_MOVE_UP_LENGTH); anim.setInterpolator(mKeyguardMoveUpInterpolator); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mHeightAnimator = null; } }); mHeightAnimator = anim; anim.start(); postOnAnimationDelayed(new Runnable() { @Override public void run() { if (mKeyguardFingerHeight < mExpandedHeight && mHeightAnimator != null && mKeyguardMovingUp) { mHeightAnimator.cancel(); float target = getMaxPanelHeight() - 1.75f * mKeyguardMoveUpDistance; float diff = mExpandedHeight - target; ValueAnimator anim = createHeightAnimator(target); float velocity = 2.5f * mKeyguardMoveUpDistance / (KEYGUARD_MOVE_UP_LENGTH / 1000f); anim.setInterpolator(mLinearInterpolator); anim.setDuration(Math.max(0, (long) (diff / velocity * 1000f))); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mHeightAnimator = null; } }); mHeightAnimator = anim; anim.start(); } } }, KEYGUARD_MOVE_UP_LENGTH / 2); } } protected abstract boolean hasConflictingGestures(); protected abstract boolean hasConflictingGestures(); protected void onTrackingStopped(boolean expand) { protected void onTrackingStopped(boolean expand) { mTracking = false; mTracking = false; mKeyguardMovingUp = false; mBar.onTrackingStopped(PanelView.this, expand); mBar.onTrackingStopped(PanelView.this, expand); } } Loading Loading @@ -381,6 +444,9 @@ public abstract class PanelView extends FrameLayout { protected void fling(float vel, boolean expand) { protected void fling(float vel, boolean expand) { cancelPeek(); cancelPeek(); if (mHeightAnimator != null) { mHeightAnimator.cancel(); } float target = expand ? getMaxPanelHeight() : 0.0f; float target = expand ? getMaxPanelHeight() : 0.0f; if (target == mExpandedHeight || getOverExpansionAmount() > 0f && expand) { if (target == mExpandedHeight || getOverExpansionAmount() > 0f && expand) { onExpandingFinished(); onExpandingFinished(); Loading Loading
packages/SystemUI/res/values/dimens.xml +3 −0 Original line number Original line Diff line number Diff line Loading @@ -332,4 +332,7 @@ <!-- The width of the region on the left/right edge of the screen for performing the camera/ <!-- The width of the region on the left/right edge of the screen for performing the camera/ phone hints. --> phone hints. --> <dimen name="edge_tap_area_width">48dp</dimen> <dimen name="edge_tap_area_width">48dp</dimen> <!-- the distance the panel moves up when starting the up motion on Keyguard --> <dimen name="keyguard_panel_move_up_distance">100dp</dimen> </resources> </resources>
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +8 −6 Original line number Original line Diff line number Diff line Loading @@ -88,13 +88,15 @@ public class KeyguardClockPositionAlgorithm { public void run(Result result) { public void run(Result result) { int y = getClockY() - mKeyguardStatusHeight/2; int y = getClockY() - mKeyguardStatusHeight/2; float clockAdjustment = getClockYExpansionAdjustment(); float topAdjustment = getTopExpansionAdjustment(); float topPaddingAdjMultiplier = getTopPaddingAdjMultiplier(); float topPaddingAdjMultiplier = getTopPaddingAdjMultiplier(); result.stackScrollerPaddingAdjustment = (int) (clockAdjustment*topPaddingAdjMultiplier); result.stackScrollerPaddingAdjustment = (int) (topAdjustment*topPaddingAdjMultiplier); int clockNotificationsPadding = getClockNotificationsPadding() int clockNotificationsPadding = getClockNotificationsPadding() + result.stackScrollerPaddingAdjustment; + result.stackScrollerPaddingAdjustment; int padding = y + clockNotificationsPadding; int padding = y + clockNotificationsPadding; y += clockAdjustment; if (mNotificationCount == 0) { y += topAdjustment; } result.clockY = y; result.clockY = y; result.stackScrollerPadding = mKeyguardStatusHeight + padding; result.stackScrollerPadding = mKeyguardStatusHeight + padding; result.clockAlpha = getClockAlpha(result.stackScrollerPadding result.clockAlpha = getClockAlpha(result.stackScrollerPadding Loading @@ -117,8 +119,8 @@ public class KeyguardClockPositionAlgorithm { return (int) (getClockYFraction() * mHeight); return (int) (getClockYFraction() * mHeight); } } private float getClockYExpansionAdjustment() { private float getTopExpansionAdjustment() { float rubberbandFactor = getClockYExpansionRubberbandFactor(); float rubberbandFactor = getTopExpansionRubberbandFactor(); float value = (rubberbandFactor * (mMaxPanelHeight - mExpandedHeight)); float value = (rubberbandFactor * (mMaxPanelHeight - mExpandedHeight)); float t = value / mMaxPanelHeight; float t = value / mMaxPanelHeight; float slowedDownValue = -sSlowDownInterpolator.getInterpolation(t) * SLOW_DOWN_FACTOR float slowedDownValue = -sSlowDownInterpolator.getInterpolation(t) * SLOW_DOWN_FACTOR Loading @@ -130,7 +132,7 @@ public class KeyguardClockPositionAlgorithm { } } } } private float getClockYExpansionRubberbandFactor() { private float getTopExpansionRubberbandFactor() { float t = getNotificationAmountT(); float t = getNotificationAmountT(); t = Math.min(t, 1.0f); t = Math.min(t, 1.0f); t = (float) Math.pow(t, 0.3f); t = (float) Math.pow(t, 0.3f); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -695,6 +695,11 @@ public class NotificationPanelView extends PanelView implements return super.isScrolledToBottom(); return super.isScrolledToBottom(); } } @Override protected boolean hasNotifications() { return mNotificationStackScroller.getNotGoneChildCount() > 0; } @Override @Override protected int getMaxPanelHeight() { protected int getMaxPanelHeight() { // TODO: Figure out transition for collapsing when QS is open, adjust height here. // TODO: Figure out transition for collapsing when QS is open, adjust height here. Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +68 −2 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,8 @@ import android.view.ViewConfiguration; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver; import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.view.animation.PathInterpolator; import android.widget.FrameLayout; import android.widget.FrameLayout; import com.android.systemui.R; import com.android.systemui.R; Loading @@ -43,6 +45,8 @@ public abstract class PanelView extends FrameLayout { public static final boolean DEBUG = PanelBar.DEBUG; public static final boolean DEBUG = PanelBar.DEBUG; public static final String TAG = PanelView.class.getSimpleName(); public static final String TAG = PanelView.class.getSimpleName(); private static final long KEYGUARD_MOVE_UP_LENGTH = 300; private final void logf(String fmt, Object... args) { private final void logf(String fmt, Object... args) { Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args)); } } Loading @@ -62,6 +66,9 @@ public abstract class PanelView extends FrameLayout { protected int mTouchSlop; protected int mTouchSlop; protected boolean mHintAnimationRunning; protected boolean mHintAnimationRunning; private boolean mOverExpandedBeforeFling; private boolean mOverExpandedBeforeFling; private boolean mKeyguardMovingUp; private int mKeyguardMoveUpDistance; private float mKeyguardFingerHeight; private ValueAnimator mHeightAnimator; private ValueAnimator mHeightAnimator; private ObjectAnimator mPeekAnimator; private ObjectAnimator mPeekAnimator; Loading @@ -82,6 +89,8 @@ public abstract class PanelView extends FrameLayout { private Interpolator mLinearOutSlowInInterpolator; private Interpolator mLinearOutSlowInInterpolator; private Interpolator mBounceInterpolator; private Interpolator mBounceInterpolator; private Interpolator mKeyguardMoveUpInterpolator; private final Interpolator mLinearInterpolator = new LinearInterpolator(); protected void onExpandingFinished() { protected void onExpandingFinished() { mBar.onExpandingFinished(); mBar.onExpandingFinished(); Loading Loading @@ -109,6 +118,7 @@ public abstract class PanelView extends FrameLayout { mLinearOutSlowInInterpolator = mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in); mBounceInterpolator = new BounceInterpolator(); mBounceInterpolator = new BounceInterpolator(); mKeyguardMoveUpInterpolator = new PathInterpolator(0.6f, 0f, 0.4f, 1f); } } protected void loadDimens() { protected void loadDimens() { Loading @@ -120,6 +130,8 @@ public abstract class PanelView extends FrameLayout { mTouchSlop = configuration.getScaledTouchSlop(); mTouchSlop = configuration.getScaledTouchSlop(); mHintDistance = res.getDimension(R.dimen.hint_move_distance); mHintDistance = res.getDimension(R.dimen.hint_move_distance); mEdgeTapAreaWidth = res.getDimensionPixelSize(R.dimen.edge_tap_area_width); mEdgeTapAreaWidth = res.getDimensionPixelSize(R.dimen.edge_tap_area_width); mKeyguardMoveUpDistance = res.getDimensionPixelSize(R.dimen.keyguard_panel_move_up_distance); } } private void trackMovement(MotionEvent event) { private void trackMovement(MotionEvent event) { Loading Loading @@ -217,9 +229,14 @@ public abstract class PanelView extends FrameLayout { mJustPeeked = false; mJustPeeked = false; } } if (!mJustPeeked && (!waitForTouchSlop || mTracking)) { if (!mJustPeeked && (!waitForTouchSlop || mTracking)) { if (mStatusBar.getBarState() == StatusBarState.KEYGUARD && !hasNotifications()) { setExpandedHeightKeyguard(newHeight); } else { setExpandedHeightInternal(newHeight); setExpandedHeightInternal(newHeight); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); mBar.panelExpansionChanged(PanelView.this, mExpandedFraction); } } } trackMovement(event); trackMovement(event); break; break; Loading Loading @@ -247,10 +264,56 @@ public abstract class PanelView extends FrameLayout { return !waitForTouchSlop || mTracking; return !waitForTouchSlop || mTracking; } } protected abstract boolean hasNotifications(); private void setExpandedHeightKeyguard(float newHeight) { mKeyguardFingerHeight = newHeight; if (newHeight < getMaxPanelHeight() && !mKeyguardMovingUp) { mKeyguardMovingUp = true; ValueAnimator anim = createHeightAnimator( getMaxPanelHeight() - mKeyguardMoveUpDistance); anim.setDuration(KEYGUARD_MOVE_UP_LENGTH); anim.setInterpolator(mKeyguardMoveUpInterpolator); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mHeightAnimator = null; } }); mHeightAnimator = anim; anim.start(); postOnAnimationDelayed(new Runnable() { @Override public void run() { if (mKeyguardFingerHeight < mExpandedHeight && mHeightAnimator != null && mKeyguardMovingUp) { mHeightAnimator.cancel(); float target = getMaxPanelHeight() - 1.75f * mKeyguardMoveUpDistance; float diff = mExpandedHeight - target; ValueAnimator anim = createHeightAnimator(target); float velocity = 2.5f * mKeyguardMoveUpDistance / (KEYGUARD_MOVE_UP_LENGTH / 1000f); anim.setInterpolator(mLinearInterpolator); anim.setDuration(Math.max(0, (long) (diff / velocity * 1000f))); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mHeightAnimator = null; } }); mHeightAnimator = anim; anim.start(); } } }, KEYGUARD_MOVE_UP_LENGTH / 2); } } protected abstract boolean hasConflictingGestures(); protected abstract boolean hasConflictingGestures(); protected void onTrackingStopped(boolean expand) { protected void onTrackingStopped(boolean expand) { mTracking = false; mTracking = false; mKeyguardMovingUp = false; mBar.onTrackingStopped(PanelView.this, expand); mBar.onTrackingStopped(PanelView.this, expand); } } Loading Loading @@ -381,6 +444,9 @@ public abstract class PanelView extends FrameLayout { protected void fling(float vel, boolean expand) { protected void fling(float vel, boolean expand) { cancelPeek(); cancelPeek(); if (mHeightAnimator != null) { mHeightAnimator.cancel(); } float target = expand ? getMaxPanelHeight() : 0.0f; float target = expand ? getMaxPanelHeight() : 0.0f; if (target == mExpandedHeight || getOverExpansionAmount() > 0f && expand) { if (target == mExpandedHeight || getOverExpansionAmount() > 0f && expand) { onExpandingFinished(); onExpandingFinished(); Loading