am 1d269e8e: Merge "single unlock target with honycomb semantics" into jb-mr1-lockscreen-dev
* commit '1d269e8e8fc508f59e4010777f4da6a2feafb0a4': single unlock target with honycomb semantics
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
<integer name="kg_glowpad_rotation_offset">-90</integer>
|
||||
</resources>
|
||||
|
||||
@@ -19,4 +19,5 @@
|
||||
<resources>
|
||||
<integer name="kg_widget_region_weight">50</integer>
|
||||
<integer name="kg_security_flipper_weight">50</integer>
|
||||
</resources>
|
||||
<integer name="kg_glowpad_rotation_offset">0</integer>
|
||||
</resources>
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user