diff options
| author | Chris Wren <cwren@android.com> | 2012-10-26 21:50:32 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-26 21:50:34 -0700 |
| commit | 1d269e8e8fc508f59e4010777f4da6a2feafb0a4 (patch) | |
| tree | d4332853f536a02743f087a717b92ace43222fef | |
| parent | fdbbbba4cd4807bed1200f714609d4000501d4ee (diff) | |
| parent | f0ee5b813597e97123d518b227c555c0ea0c0f29 (diff) | |
| download | frameworks_base-1d269e8e8fc508f59e4010777f4da6a2feafb0a4.zip frameworks_base-1d269e8e8fc508f59e4010777f4da6a2feafb0a4.tar.gz frameworks_base-1d269e8e8fc508f59e4010777f4da6a2feafb0a4.tar.bz2 | |
Merge "single unlock target with honycomb semantics" into jb-mr1-lockscreen-dev
| -rw-r--r-- | core/java/com/android/internal/widget/multiwaveview/GlowPadView.java | 60 | ||||
| -rw-r--r-- | core/res/res/layout/keyguard_glow_pad_view.xml | 6 | ||||
| -rw-r--r-- | core/res/res/values-land/integers.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values-sw600dp-land/integers.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/arrays.xml | 8 | ||||
| -rwxr-xr-x | core/res/res/values/attrs.xml | 6 | ||||
| -rw-r--r-- | core/res/res/values/integers.xml | 1 |
7 files changed, 73 insertions, 14 deletions
diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java index b7f64ec..209bd3c 100644 --- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java @@ -116,6 +116,8 @@ public class GlowPadView extends View { private float mOuterRadius = 0.0f; private float mSnapMargin = 0.0f; + private float mFirstItemOffset = 0.0f; + private boolean mMagneticTargets = false; private boolean mDragging; private int mNewTargetResources; @@ -212,6 +214,9 @@ public class GlowPadView extends View { mInnerRadius = a.getDimension(R.styleable.GlowPadView_innerRadius, mInnerRadius); mOuterRadius = a.getDimension(R.styleable.GlowPadView_outerRadius, mOuterRadius); mSnapMargin = a.getDimension(R.styleable.GlowPadView_snapMargin, mSnapMargin); + mFirstItemOffset = (float) Math.toRadians( + a.getFloat(R.styleable.GlowPadView_firstItemOffset, + (float) Math.toDegrees(mFirstItemOffset))); mVibrationDuration = a.getInt(R.styleable.GlowPadView_vibrationDuration, mVibrationDuration); mFeedbackCount = a.getInt(R.styleable.GlowPadView_feedbackCount, @@ -223,6 +228,7 @@ public class GlowPadView extends View { getResourceId(a, R.styleable.GlowPadView_outerRingDrawable)); mAlwaysTrackFinger = a.getBoolean(R.styleable.GlowPadView_alwaysTrackFinger, false); + mMagneticTargets = a.getBoolean(R.styleable.GlowPadView_magneticTargets, mMagneticTargets); int pointId = getResourceId(a, R.styleable.GlowPadView_pointDrawable); Drawable pointDrawable = pointId != 0 ? res.getDrawable(pointId) : null; @@ -820,6 +826,7 @@ public class GlowPadView extends View { int ntargets = targets.size(); float x = 0.0f; float y = 0.0f; + float activeAngle = 0.0f; int actionIndex = event.findPointerIndex(mPointerId); if (actionIndex == -1) { @@ -852,15 +859,18 @@ public class GlowPadView extends View { for (int i = 0; i < ntargets; i++) { TargetDrawable target = targets.get(i); - double targetMinRad = (i - 0.5) * 2 * Math.PI / ntargets; - double targetMaxRad = (i + 0.5) * 2 * Math.PI / ntargets; + double targetMinRad = mFirstItemOffset + (i - 0.5) * 2 * Math.PI / ntargets; + double targetMaxRad = mFirstItemOffset + (i + 0.5) * 2 * Math.PI / ntargets; if (target.isEnabled()) { boolean angleMatches = (angleRad > targetMinRad && angleRad <= targetMaxRad) || (angleRad + 2 * Math.PI > targetMinRad && - angleRad + 2 * Math.PI <= targetMaxRad); + angleRad + 2 * Math.PI <= targetMaxRad) || + (angleRad - 2 * Math.PI > targetMinRad && + angleRad - 2 * Math.PI <= targetMaxRad); if (angleMatches && (dist2(tx, ty) > snapDistance2)) { activeTarget = i; + activeAngle = (float) -angleRad; } } } @@ -888,6 +898,9 @@ public class GlowPadView extends View { if (target.hasState(TargetDrawable.STATE_FOCUSED)) { target.setState(TargetDrawable.STATE_INACTIVE); } + if (mMagneticTargets) { + updateTargetPosition(mActiveTarget, mWaveCenterX, mWaveCenterY); + } } // Focus the new target if (activeTarget != -1) { @@ -895,6 +908,9 @@ public class GlowPadView extends View { if (target.hasState(TargetDrawable.STATE_FOCUSED)) { target.setState(TargetDrawable.STATE_FOCUSED); } + if (mMagneticTargets) { + updateTargetPosition(activeTarget, mWaveCenterX, mWaveCenterY, activeAngle); + } if (AccessibilityManager.getInstance(mContext).isEnabled()) { String targetContentDescription = getTargetDescription(activeTarget); announceForAccessibility(targetContentDescription); @@ -1039,14 +1055,15 @@ public class GlowPadView extends View { if (DEBUG) dump(); } - private void updateTargetPositions(float centerX, float centerY) { - // Reposition the target drawables if the view changed. - ArrayList<TargetDrawable> targets = mTargetDrawables; - final int size = targets.size(); - final float alpha = (float) (-2.0f * Math.PI / size); - for (int i = 0; i < size; i++) { + private void updateTargetPosition(int i, float centerX, float centerY) { + final float angle = getAngle(getSliceAngle(), i); + updateTargetPosition(i, centerX, centerY, angle); + } + + private void updateTargetPosition(int i, float centerX, float centerY, float angle) { + if (i >= 0) { + ArrayList<TargetDrawable> targets = mTargetDrawables; final TargetDrawable targetIcon = targets.get(i); - final float angle = alpha * i; targetIcon.setPositionX(centerX); targetIcon.setPositionY(centerY); targetIcon.setX(mOuterRadius * (float) Math.cos(angle)); @@ -1054,6 +1071,29 @@ public class GlowPadView extends View { } } + private void updateTargetPositions(float centerX, float centerY) { + updateTargetPositions(centerX, centerY, false); + } + + private void updateTargetPositions(float centerX, float centerY, boolean skipActive) { + final int size = mTargetDrawables.size(); + final float alpha = getSliceAngle(); + // Reposition the target drawables if the view changed. + for (int i = 0; i < size; i++) { + if (!skipActive || i != mActiveTarget) { + updateTargetPosition(i, centerX, centerY, getAngle(alpha, i)); + } + } + } + + private float getAngle(float alpha, int i) { + return mFirstItemOffset + alpha * i; + } + + private float getSliceAngle() { + return (float) (-2.0f * Math.PI / mTargetDrawables.size()); + } + private void updatePointCloudPosition(float centerX, float centerY) { mPointCloud.setCenter(centerX, centerY); } diff --git a/core/res/res/layout/keyguard_glow_pad_view.xml b/core/res/res/layout/keyguard_glow_pad_view.xml index 509e77b..a416a77 100644 --- a/core/res/res/layout/keyguard_glow_pad_view.xml +++ b/core/res/res/layout/keyguard_glow_pad_view.xml @@ -29,14 +29,16 @@ android:gravity="@integer/kg_selector_gravity" android:focusable="true" - prvandroid:targetDrawables="@*android:array/lockscreen_targets_with_camera" - prvandroid:targetDescriptions="@*android:array/lockscreen_target_descriptions_with_camera" + prvandroid:targetDrawables="@array/lockscreen_targets_unlock_only" + prvandroid:targetDescriptions="@array/lockscreen_target_descriptions_unlock_only" prvandroid:directionDescriptions="@*android:array/lockscreen_direction_descriptions" prvandroid:handleDrawable="@*android:drawable/ic_lockscreen_handle" prvandroid:outerRingDrawable="@*android:drawable/ic_lockscreen_outerring" prvandroid:outerRadius="@*android:dimen/glowpadview_target_placement_radius" prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" prvandroid:snapMargin="@*android:dimen/glowpadview_snap_margin" + prvandroid:firstItemOffset="@integer/kg_glowpad_rotation_offset" + prvandroid:magneticTargets="true" prvandroid:feedbackCount="1" prvandroid:vibrationDuration="20" prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius" diff --git a/core/res/res/values-land/integers.xml b/core/res/res/values-land/integers.xml index 6613d68..020fd23 100644 --- a/core/res/res/values-land/integers.xml +++ b/core/res/res/values-land/integers.xml @@ -22,4 +22,5 @@ <integer name="kg_selector_gravity">0x13</integer> <integer name="kg_widget_region_weight">45</integer> <integer name="kg_security_flipper_weight">55</integer> -</resources>
\ No newline at end of file + <integer name="kg_glowpad_rotation_offset">-90</integer> +</resources> diff --git a/core/res/res/values-sw600dp-land/integers.xml b/core/res/res/values-sw600dp-land/integers.xml index 5f5d263..b724c90 100644 --- a/core/res/res/values-sw600dp-land/integers.xml +++ b/core/res/res/values-sw600dp-land/integers.xml @@ -19,4 +19,5 @@ <resources> <integer name="kg_widget_region_weight">50</integer> <integer name="kg_security_flipper_weight">50</integer> -</resources>
\ No newline at end of file + <integer name="kg_glowpad_rotation_offset">0</integer> +</resources> diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml index 8744bfe..1e966f7 100644 --- a/core/res/res/values/arrays.xml +++ b/core/res/res/values/arrays.xml @@ -398,6 +398,14 @@ <item>@null</item> </array> + <array name="lockscreen_targets_unlock_only"> + <item>@*android:drawable/ic_lockscreen_unlock</item> + </array> + + <array name="lockscreen_target_descriptions_unlock_only"> + <item>@*android:string/description_target_unlock</item> + </array> + <!-- list of 3- or 4-letter mnemonics for a 10-key numeric keypad --> <string-array translatable="false" name="lockscreen_num_pad_klondike"> <item></item><!-- 0 --> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 48d4745..d186c4a 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5465,6 +5465,12 @@ <!-- Used when the handle shouldn't wait to be hit before following the finger --> <attr name="alwaysTrackFinger"/> + <!-- Location along the circle of the first item, in degrees.--> + <attr name="firstItemOffset" format="float" /> + + <!-- Causes targets to snap to the finger location on activation. --> + <attr name="magneticTargets" format="boolean" /> + <attr name="gravity" /> </declare-styleable> diff --git a/core/res/res/values/integers.xml b/core/res/res/values/integers.xml index 91ad5d8..d1df2a4 100644 --- a/core/res/res/values/integers.xml +++ b/core/res/res/values/integers.xml @@ -20,4 +20,5 @@ <integer name="kg_carousel_angle">75</integer> <integer name="kg_security_flip_duration">75</integer> <integer name="kg_security_fade_duration">75</integer> + <integer name="kg_glowpad_rotation_offset">0</integer> </resources> |
