summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/widget/RotarySelector.java74
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_ringer_off.pngbin0 -> 1378 bytes
-rw-r--r--core/res/res/drawable-hdpi/ic_lock_ringer_on.pngbin0 -> 1757 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lock_ringer_off.pngbin0 -> 906 bytes
-rw-r--r--core/res/res/drawable-mdpi/ic_lock_ringer_on.pngbin0 -> 977 bytes
-rw-r--r--core/res/res/layout/keyguard_screen_rotary_unlock.xml10
6 files changed, 47 insertions, 37 deletions
diff --git a/core/java/com/android/internal/widget/RotarySelector.java b/core/java/com/android/internal/widget/RotarySelector.java
index 712f1bf..750b2a9 100644
--- a/core/java/com/android/internal/widget/RotarySelector.java
+++ b/core/java/com/android/internal/widget/RotarySelector.java
@@ -70,12 +70,6 @@ public class RotarySelector extends View {
private AccelerateInterpolator mInterpolator;
/**
- * True after triggering an action if the user of {@link OnDialTriggerListener} wants to
- * freeze the UI (until they transition to another screen).
- */
- private boolean mFrozen = false;
-
- /**
* If the user is currently dragging something.
*/
private int mGrabbedState = NOTHING_GRABBED;
@@ -119,6 +113,9 @@ public class RotarySelector extends View {
private static final boolean DRAW_CENTER_DIMPLE = false;
private int mEdgeTriggerThresh;
+ private int mDimpleWidth;
+ private int mBackgroundWidth;
+ private int mBackgroundHeight;
public RotarySelector(Context context) {
this(context, null);
@@ -155,6 +152,11 @@ public class RotarySelector extends View {
mInterpolator = new AccelerateInterpolator();
mEdgeTriggerThresh = (int) (mDensity * EDGE_TRIGGER_DIP);
+
+ mDimpleWidth = mDimple.getIntrinsicWidth();
+
+ mBackgroundWidth = mBackground.getIntrinsicWidth();
+ mBackgroundHeight = mBackground.getIntrinsicHeight();
}
/**
@@ -214,7 +216,7 @@ public class RotarySelector extends View {
final int width = MeasureSpec.getSize(widthMeasureSpec); // screen width
final int arrowH = mArrowShortLeftAndRight.getIntrinsicHeight();
- final int backgroundH = mBackground.getIntrinsicHeight();
+ final int backgroundH = mBackgroundHeight;
// by making the height less than arrow + bg, arrow and bg will be scrunched together,
// overlaying somewhat (though on transparent portions of the drawable).
@@ -228,9 +230,9 @@ public class RotarySelector extends View {
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
- mLeftHandleX = (int) (EDGE_PADDING_DIP * mDensity) + mDimple.getIntrinsicWidth() / 2;
+ mLeftHandleX = (int) (EDGE_PADDING_DIP * mDensity) + mDimpleWidth / 2;
mRightHandleX =
- getWidth() - (int) (EDGE_PADDING_DIP * mDensity) - mDimple.getIntrinsicWidth() / 2;
+ getWidth() - (int) (EDGE_PADDING_DIP * mDensity) - mDimpleWidth / 2;
}
// private Paint mPaint = new Paint();
@@ -239,15 +241,14 @@ public class RotarySelector extends View {
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (DBG) {
- log(String.format("onDraw: mAnimating=%s, mTouchDragOffset=%d, mGrabbedState=%d," +
- "mFrozen=%s",
- mAnimating, mTouchDragOffset, mGrabbedState, mFrozen));
+ log(String.format("onDraw: mAnimating=%s, mTouchDragOffset=%d, mGrabbedState=%d",
+ mAnimating, mTouchDragOffset, mGrabbedState));
}
final int height = getHeight();
// update animating state before we draw anything
- if (mAnimating && !mFrozen) {
+ if (mAnimating) {
long millisLeft = mAnimationEndTime - currentAnimationTimeMillis();
if (DBG) log("millisleft for animating: " + millisLeft);
if (millisLeft <= 0) {
@@ -260,8 +261,8 @@ public class RotarySelector extends View {
}
// Background:
- final int backgroundW = mBackground.getIntrinsicWidth();
- final int backgroundH = mBackground.getIntrinsicHeight();
+ final int backgroundW = mBackgroundWidth;
+ final int backgroundH = mBackgroundHeight;
final int backgroundY = height - backgroundH;
if (DBG) log("- Background INTRINSIC: " + backgroundW + " x " + backgroundH);
mBackground.setBounds(0, backgroundY,
@@ -383,12 +384,12 @@ public class RotarySelector extends View {
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (mAnimating || mFrozen) {
+ if (mAnimating) {
return true;
}
final int eventX = (int) event.getX();
- final int hitWindow = mDimple.getIntrinsicWidth();
+ final int hitWindow = mDimpleWidth;
final int action = event.getAction();
switch (action) {
@@ -419,14 +420,29 @@ public class RotarySelector extends View {
invalidate();
if (eventX >= getRight() - mEdgeTriggerThresh && !mTriggered) {
mTriggered = true;
- mFrozen = dispatchTriggerEvent(OnDialTriggerListener.LEFT_HANDLE);
+ dispatchTriggerEvent(OnDialTriggerListener.LEFT_HANDLE);
+ // set up "spin around animation"
+ mAnimating = true;
+ mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS;
+ mAnimatingDelta = -mBackgroundWidth;
+ mTouchDragOffset = 0;
+ mGrabbedState = NOTHING_GRABBED;
+ invalidate();
+
}
} else if (mGrabbedState == RIGHT_HANDLE_GRABBED) {
mTouchDragOffset = eventX - mRightHandleX;
invalidate();
if (eventX <= mEdgeTriggerThresh && !mTriggered) {
mTriggered = true;
- mFrozen = dispatchTriggerEvent(OnDialTriggerListener.RIGHT_HANDLE);
+ dispatchTriggerEvent(OnDialTriggerListener.RIGHT_HANDLE);
+ // set up "spin around animation"
+ mAnimating = true;
+ mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS;
+ mAnimatingDelta = mBackgroundWidth;
+ mTouchDragOffset = 0;
+ mGrabbedState = NOTHING_GRABBED;
+ invalidate();
}
}
break;
@@ -435,11 +451,13 @@ public class RotarySelector extends View {
// handle animating back to start if they didn't trigger
if (mGrabbedState == LEFT_HANDLE_GRABBED
&& Math.abs(eventX - mLeftHandleX) > 5) {
+ // set up "snap back" animation
mAnimating = true;
mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS;
mAnimatingDelta = eventX - mLeftHandleX;
} else if (mGrabbedState == RIGHT_HANDLE_GRABBED
&& Math.abs(eventX - mRightHandleX) > 5) {
+ // set up "snap back" animation
mAnimating = true;
mAnimationEndTime = currentAnimationTimeMillis() + ANIMATION_DURATION_MILLIS;
mAnimatingDelta = eventX - mRightHandleX;
@@ -504,12 +522,11 @@ public class RotarySelector extends View {
/**
* Dispatches a trigger event to our listener.
*/
- private boolean dispatchTriggerEvent(int whichHandle) {
+ private void dispatchTriggerEvent(int whichHandle) {
vibrate(VIBRATE_LONG);
if (mOnDialTriggerListener != null) {
- return mOnDialTriggerListener.onDialTrigger(this, whichHandle);
+ mOnDialTriggerListener.onDialTrigger(this, whichHandle);
}
- return false;
}
/**
@@ -530,22 +547,13 @@ public class RotarySelector extends View {
public static final int RIGHT_HANDLE = 2;
/**
- * @hide
- * The center handle is currently unused.
- */
- public static final int CENTER_HANDLE = 3;
-
- /**
* Called when the dial is triggered.
*
* @param v The view that was triggered
* @param whichHandle Which "dial handle" the user grabbed,
- * either {@link #LEFT_HANDLE}, {@link #RIGHT_HANDLE}, or
- * {@link #CENTER_HANDLE}.
- * @return Whether the widget should freeze (e.g when the action goes to another screen,
- * you want the UI to stay put until the transition occurs).
+ * either {@link #LEFT_HANDLE}, {@link #RIGHT_HANDLE}.
*/
- boolean onDialTrigger(View v, int whichHandle);
+ void onDialTrigger(View v, int whichHandle);
}
diff --git a/core/res/res/drawable-hdpi/ic_lock_ringer_off.png b/core/res/res/drawable-hdpi/ic_lock_ringer_off.png
new file mode 100644
index 0000000..e7cb234
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_lock_ringer_off.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_ringer_on.png b/core/res/res/drawable-hdpi/ic_lock_ringer_on.png
new file mode 100644
index 0000000..ce0cfab
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_lock_ringer_on.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_ringer_off.png b/core/res/res/drawable-mdpi/ic_lock_ringer_off.png
new file mode 100644
index 0000000..98cfb11
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_lock_ringer_off.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_ringer_on.png b/core/res/res/drawable-mdpi/ic_lock_ringer_on.png
new file mode 100644
index 0000000..691b99e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_lock_ringer_on.png
Binary files differ
diff --git a/core/res/res/layout/keyguard_screen_rotary_unlock.xml b/core/res/res/layout/keyguard_screen_rotary_unlock.xml
index cf97d04..9f18124 100644
--- a/core/res/res/layout/keyguard_screen_rotary_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_rotary_unlock.xml
@@ -83,6 +83,7 @@
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary"
+ android:drawablePadding="4dip"
/>
<TextView
@@ -94,6 +95,7 @@
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary"
+ android:drawablePadding="4dip"
/>
<TextView
@@ -108,15 +110,15 @@
android:layout_marginTop="12dip"
/>
- <!-- By having the rotary selector hang below "screen locked" text, we get a layout more
- robust for different screen sizes. On wvga, the widget should be flush with the bottom.-->
+ <!-- By having the rotary selector hang from the top, we get a layout more
+ robust for different screen sizes. On hvga, the widget should be flush with the bottom.-->
<com.android.internal.widget.RotarySelector
android:id="@+id/rotary"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_below="@id/screenLocked"
android:layout_centerHorizontal="true"
- android:layout_marginTop="24dip"
+ android:layout_alignParentTop="true"
+ android:layout_marginTop="286dip"
/>
<!-- emergency call button shown when sim is missing or PUKd -->