diff options
Diffstat (limited to 'policy')
9 files changed, 105 insertions, 30 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java index 605a738..8ece559 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java @@ -59,6 +59,11 @@ public interface ChallengeLayout { boolean isBouncing(); /** + * Returns the duration of the bounce animation. + */ + int getBouncerAnimationDuration(); + + /** * Set a listener that will respond to changes in bouncer state. * * @param listener listener to register diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 916d966..368cfce 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -159,6 +159,8 @@ public class KeyguardHostView extends KeyguardViewBase { } }; + private SlidingChallengeLayout mSlidingChallengeLayout; + @Override public boolean onTouchEvent(MotionEvent ev) { boolean result = super.onTouchEvent(ev); @@ -199,17 +201,17 @@ public class KeyguardHostView extends KeyguardViewBase { mAppWidgetContainer.setDeleteDropTarget(deleteDropTarget); mAppWidgetContainer.setMinScale(0.5f); - SlidingChallengeLayout slider = - (SlidingChallengeLayout) findViewById(R.id.sliding_layout); - if (slider != null) { - slider.setOnChallengeScrolledListener(mViewStateManager); + mSlidingChallengeLayout = (SlidingChallengeLayout) findViewById(R.id.sliding_layout); + if (mSlidingChallengeLayout != null) { + mSlidingChallengeLayout.setOnChallengeScrolledListener(mViewStateManager); } mAppWidgetContainer.setViewStateManager(mViewStateManager); mAppWidgetContainer.setLockPatternUtils(mLockPatternUtils); - ChallengeLayout challenge = slider != null ? slider : + ChallengeLayout challenge = mSlidingChallengeLayout != null ? mSlidingChallengeLayout : (ChallengeLayout) findViewById(R.id.multi_pane_challenge); challenge.setOnBouncerStateChangedListener(mViewStateManager); + mAppWidgetContainer.setBouncerAnimationDuration(challenge.getBouncerAnimationDuration()); mViewStateManager.setPagedView(mAppWidgetContainer); mViewStateManager.setChallengeLayout(challenge); mSecurityViewContainer = (KeyguardSecurityViewFlipper) findViewById(R.id.view_flipper); @@ -735,6 +737,10 @@ public class KeyguardHostView extends KeyguardViewBase { mAppWidgetContainer.setVisibility( isSimOrAccount && fullScreenEnabled ? View.GONE : View.VISIBLE); + if (mSlidingChallengeLayout != null) { + mSlidingChallengeLayout.setChallengeInteractive(!fullScreenEnabled); + } + // Emulate Activity life cycle if (oldView != null) { oldView.onPause(); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java index 062f1ec..76cbbd5 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java @@ -21,6 +21,7 @@ import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.provider.Settings; import android.util.AttributeSet; @@ -45,9 +46,12 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri private GlowPadView mGlowPadView; private ObjectAnimator mAnim; private View mFadeView; + private boolean mIsBouncing; private boolean mCameraDisabled; private boolean mSearchDisabled; private LockPatternUtils mLockPatternUtils; + private SecurityMessageDisplay mSecurityMessageDisplay; + private Drawable mBouncerFrame; OnTriggerListener mOnTriggerListener = new OnTriggerListener() { @@ -80,7 +84,9 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri } public void onReleased(View v, int handle) { - doTransition(mFadeView, 1.0f); + if (!mIsBouncing) { + doTransition(mFadeView, 1.0f); + } } public void onGrabbed(View v, int handle) { @@ -143,6 +149,10 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view); mGlowPadView.setOnTriggerListener(mOnTriggerListener); updateTargets(); + + mSecurityMessageDisplay = new KeyguardMessageArea.Helper(this); + View bouncerFrameView = findViewById(R.id.keyguard_selector_view_frame); + mBouncerFrame = bouncerFrameView.getBackground(); } public void setCarrierArea(View carrierArea) { @@ -264,9 +274,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri @Override public void showBouncer(int duration) { + mIsBouncing = true; + KeyguardSecurityViewHelper. + showBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration); } @Override public void hideBouncer(int duration) { + mIsBouncing = false; + KeyguardSecurityViewHelper. + hideBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration); } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java index 3aab3c0..c81ff55 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java @@ -168,6 +168,7 @@ public class KeyguardViewManager { int flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR + | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; if (!mNeedsInput) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java index a4063b3..945e9c2 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java @@ -221,6 +221,11 @@ public class KeyguardViewStateManager implements mKeyguardWidgetPager.setWidgetToResetOnPageFadeOut(mPageListeningToSlider); } } + if (frame.isSmall()) { + // This is to make sure that if the scroller animation gets cut off midway + // that the frame doesn't stay in a partial down position. + frame.setFrameHeight(frame.getSmallFrameHeight()); + } if (scrollState != SlidingChallengeLayout.SCROLL_STATE_FADING) { frame.hideFrame(this); } @@ -251,7 +256,7 @@ public class KeyguardViewStateManager implements if (!frame.isSmall()) { // We need to fetch the final page, in case the pages are in motion. mPageListeningToSlider = mKeyguardWidgetPager.getNextPage(); - frame.shrinkWidget(); + frame.shrinkWidget(false); } } else { if (!frame.isSmall()) { @@ -270,7 +275,7 @@ public class KeyguardViewStateManager implements public void onScrollPositionChanged(float scrollPosition, int challengeTop) { mChallengeTop = challengeTop; KeyguardWidgetFrame frame = mKeyguardWidgetPager.getWidgetPageAt(mPageListeningToSlider); - if (frame != null && !mKeyguardWidgetPager.isPageMoving()) { + if (frame != null && mLastScrollState != SlidingChallengeLayout.SCROLL_STATE_FADING) { frame.adjustFrame(getChallengeTopRelativeToFrame(frame, mChallengeTop)); } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java index d9953bf..4c7ab6c 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java @@ -329,6 +329,7 @@ public class KeyguardWidgetFrame extends FrameLayout { public void setMaxChallengeTop(int top) { boolean dirty = mMaxChallengeTop != top; + mMaxChallengeTop = top; mSmallWidgetHeight = top - getPaddingTop(); mSmallFrameHeight = top + getPaddingBottom(); if (dirty && mIsSmall) { @@ -348,10 +349,21 @@ public class KeyguardWidgetFrame extends FrameLayout { setFrameHeight(frameHeight); } - public void shrinkWidget() { + public void shrinkWidget(boolean alsoShrinkFrame) { mIsSmall = true; setWidgetHeight(mSmallWidgetHeight); - setFrameHeight(mSmallFrameHeight); + + if (alsoShrinkFrame) { + setFrameHeight(mSmallFrameHeight); + } + } + + public int getSmallFrameHeight() { + return mSmallFrameHeight; + } + + public void shrinkWidget() { + shrinkWidget(true); } public void setWidgetLockedSmall(boolean locked) { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java index 7df1512..c21e04f 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java @@ -36,6 +36,7 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import com.android.internal.widget.LockPatternUtils; @@ -71,7 +72,7 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit private int mWidgetToResetAfterFadeOut; // Bouncer - protected int BOUNCER_ZOOM_IN_OUT_DURATION = 250; + private int mBouncerZoomInOutDuration = 250; private float BOUNCER_SCALE_FACTOR = 0.67f; // Background worker thread: used here for persistence, also made available to widget frames @@ -747,6 +748,10 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } } + void setBouncerAnimationDuration(int duration) { + mBouncerZoomInOutDuration = duration; + } + // Zoom in after the bouncer is dismissed void zoomInFromBouncer() { if (mZoomInOutAnim != null && mZoomInOutAnim.isRunning()) { @@ -755,10 +760,11 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit final View currentPage = getPageAt(getCurrentPage()); if (currentPage.getScaleX() < 1f || currentPage.getScaleY() < 1f) { mZoomInOutAnim = new AnimatorSet(); - mZoomInOutAnim.setDuration(BOUNCER_ZOOM_IN_OUT_DURATION); mZoomInOutAnim.playTogether( ObjectAnimator.ofFloat(currentPage, "scaleX", 1f), ObjectAnimator.ofFloat(currentPage , "scaleY", 1f)); + mZoomInOutAnim.setDuration(mBouncerZoomInOutDuration); + mZoomInOutAnim.setInterpolator(new DecelerateInterpolator(1.5f)); mZoomInOutAnim.start(); } } @@ -768,18 +774,22 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit if (mZoomInOutAnim != null && mZoomInOutAnim.isRunning()) { mZoomInOutAnim.cancel(); } - View currentPage = getPageAt(getCurrentPage()); - currentPage.setPivotY(0); - // Note: we are working around the issue that setting the x-pivot to the same value as it - // was does not actually work. - currentPage.setPivotX(0); - currentPage.setPivotX(currentPage.getMeasuredWidth() / 2); + int curPage = getCurrentPage(); + View currentPage = getPageAt(curPage); + if (shouldSetTopAlignedPivotForWidget(curPage)) { + currentPage.setPivotY(0); + // Note: we are working around the issue that setting the x-pivot to the same value as it + // was does not actually work. + currentPage.setPivotX(0); + currentPage.setPivotX(currentPage.getMeasuredWidth() / 2); + } if (!(currentPage.getScaleX() < 1f || currentPage.getScaleY() < 1f)) { mZoomInOutAnim = new AnimatorSet(); - mZoomInOutAnim.setDuration(BOUNCER_ZOOM_IN_OUT_DURATION); mZoomInOutAnim.playTogether( ObjectAnimator.ofFloat(currentPage, "scaleX", BOUNCER_SCALE_FACTOR), ObjectAnimator.ofFloat(currentPage, "scaleY", BOUNCER_SCALE_FACTOR)); + mZoomInOutAnim.setDuration(mBouncerZoomInOutDuration); + mZoomInOutAnim.setInterpolator(new DecelerateInterpolator(1.5f)); mZoomInOutAnim.start(); } } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java index 026f1bd..0ca46c3 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java @@ -40,7 +40,7 @@ public class MultiPaneChallengeLayout extends ViewGroup implements ChallengeLayo public static final int HORIZONTAL = LinearLayout.HORIZONTAL; public static final int VERTICAL = LinearLayout.VERTICAL; - protected static final int ANIMATE_BOUNCE_DURATION = 750; + public static final int ANIMATE_BOUNCE_DURATION = 350; private KeyguardSecurityContainer mChallengeView; private View mUserSwitcherView; @@ -97,6 +97,11 @@ public class MultiPaneChallengeLayout extends ViewGroup implements ChallengeLayo } @Override + public int getBouncerAnimationDuration() { + return ANIMATE_BOUNCE_DURATION; + } + + @Override public void showBouncer() { if (mIsBouncing) return; mIsBouncing = true; diff --git a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java b/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java index c734423..073225f 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java @@ -56,7 +56,7 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout private static final int DRAG_HANDLE_OPEN_ABOVE = 8; // dp private static final int DRAG_HANDLE_OPEN_BELOW = 0; // dp - private static final int HANDLE_ANIMATE_DURATION = 200; // ms + private static final int HANDLE_ANIMATE_DURATION = 250; // ms // Drawn to show the drag handle in closed state; crossfades to the challenge view // when challenge is fully visible @@ -469,24 +469,30 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout } @Override + public int getBouncerAnimationDuration() { + return HANDLE_ANIMATE_DURATION; + } + + @Override public void showBouncer() { if (mIsBouncing) return; mWasChallengeShowing = mChallengeShowing; mIsBouncing = true; showChallenge(true); if (mScrimView != null) { - mScrimView.setVisibility(VISIBLE); + Animator anim = ObjectAnimator.ofFloat(mScrimView, "alpha", 1f); + anim.setDuration(HANDLE_ANIMATE_DURATION); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + mScrimView.setVisibility(VISIBLE); + } + }); + anim.start(); } if (mChallengeView != null) { mChallengeView.showBouncer(HANDLE_ANIMATE_DURATION); } - // Mess with padding/margin to inset the bouncer frame. - // We have more space available to us otherwise. - if (mChallengeView != null) { - final LayoutParams lp = (LayoutParams) mChallengeView.getLayoutParams(); - lp.leftMargin = lp.rightMargin = getChallengeMargin(false); - mChallengeView.setLayoutParams(lp); - } if (mBouncerListener != null) { mBouncerListener.onBouncerStateChanged(true); @@ -498,8 +504,17 @@ public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout if (!mIsBouncing) return; if (!mWasChallengeShowing) showChallenge(false); mIsBouncing = false; + if (mScrimView != null) { - mScrimView.setVisibility(GONE); + Animator anim = ObjectAnimator.ofFloat(mScrimView, "alpha", 0f); + anim.setDuration(HANDLE_ANIMATE_DURATION); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mScrimView.setVisibility(GONE); + } + }); + anim.start(); } if (mChallengeView != null) { mChallengeView.hideBouncer(HANDLE_ANIMATE_DURATION); |
