diff options
Diffstat (limited to 'java/com/android/dialershared/bubble/MoveHandler.java')
-rw-r--r-- | java/com/android/dialershared/bubble/MoveHandler.java | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/java/com/android/dialershared/bubble/MoveHandler.java b/java/com/android/dialershared/bubble/MoveHandler.java index 8a21cd7e1..bc6db64bc 100644 --- a/java/com/android/dialershared/bubble/MoveHandler.java +++ b/java/com/android/dialershared/bubble/MoveHandler.java @@ -39,7 +39,7 @@ class MoveHandler implements OnTouchListener { // Amount the ViewConfiguration's minFlingVelocity will be scaled by for our own minVelocity private static final int MIN_FLING_VELOCITY_FACTOR = 8; // The friction multiplier to control how slippery the bubble is when flung - private static final float SCROLL_FRICTION_MULTIPLIER = 8f; + private static final float SCROLL_FRICTION_MULTIPLIER = 4f; private final Context context; private final WindowManager windowManager; @@ -78,12 +78,22 @@ class MoveHandler implements OnTouchListener { @Override public void setValue(LayoutParams windowParams, float value) { + boolean wasOnRight = (windowParams.gravity & Gravity.RIGHT) == Gravity.RIGHT; int displayWidth = context.getResources().getDisplayMetrics().widthPixels; - boolean onRight = value > displayWidth / 2; + boolean onRight; + Integer gravityOverride = bubble.getGravityOverride(); + if (gravityOverride == null) { + onRight = value > displayWidth / 2; + } else { + onRight = (gravityOverride & Gravity.RIGHT) == Gravity.RIGHT; + } int centeringOffset = bubbleSize / 2 + shadowPaddingSize; windowParams.x = (int) (onRight ? (displayWidth - value - centeringOffset) : value - centeringOffset); windowParams.gravity = Gravity.TOP | (onRight ? Gravity.RIGHT : Gravity.LEFT); + if (wasOnRight != onRight) { + bubble.onLeftRightSwitch(onRight); + } if (bubble.isShowing()) { windowManager.updateViewLayout(bubble.getRootView(), windowParams); } @@ -134,6 +144,11 @@ class MoveHandler implements OnTouchListener { return isMoving; } + public void undoGravityOverride() { + LayoutParams windowParams = bubble.getWindowParams(); + xProperty.setValue(windowParams, xProperty.getValue(windowParams)); + } + @Override public boolean onTouch(View v, MotionEvent event) { float eventX = event.getRawX(); @@ -190,13 +205,12 @@ class MoveHandler implements OnTouchListener { } else { snapX(); } - + isMoving = false; bubble.onMoveFinish(); } else { v.performClick(); bubble.primaryButtonClick(); } - isMoving = false; break; } return true; |