summaryrefslogtreecommitdiffstats
path: root/policy
diff options
context:
space:
mode:
Diffstat (limited to 'policy')
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/ChallengeLayout.java5
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java16
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java18
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java1
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java9
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java16
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java28
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/MultiPaneChallengeLayout.java7
-rw-r--r--policy/src/com/android/internal/policy/impl/keyguard/SlidingChallengeLayout.java35
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);