Loading core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +50 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; } } } Loading Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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. 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 int size = targets.size(); final float alpha = (float) (-2.0f * Math.PI / size); for (int i = 0; i < size; i++) { final TargetDrawable targetIcon = targets.get(i); final float angle = alpha * i; targetIcon.setPositionX(centerX); targetIcon.setPositionY(centerY); targetIcon.setX(mOuterRadius * (float) Math.cos(angle)); Loading @@ -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); } Loading core/res/res/layout/keyguard_glow_pad_view.xml +4 −2 Original line number Diff line number Diff line Loading @@ -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" Loading core/res/res/values-land/integers.xml +2 −1 Original line number Diff line number Diff line Loading @@ -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> <integer name="kg_glowpad_rotation_offset">-90</integer> </resources> core/res/res/values-sw600dp-land/integers.xml +2 −1 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ <resources> <integer name="kg_widget_region_weight">50</integer> <integer name="kg_security_flipper_weight">50</integer> <integer name="kg_glowpad_rotation_offset">0</integer> </resources> core/res/res/values/arrays.xml +8 −0 Original line number Diff line number Diff line Loading @@ -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 --> Loading Loading
core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +50 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; } } } Loading Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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. 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 int size = targets.size(); final float alpha = (float) (-2.0f * Math.PI / size); for (int i = 0; i < size; i++) { final TargetDrawable targetIcon = targets.get(i); final float angle = alpha * i; targetIcon.setPositionX(centerX); targetIcon.setPositionY(centerY); targetIcon.setX(mOuterRadius * (float) Math.cos(angle)); Loading @@ -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); } Loading
core/res/res/layout/keyguard_glow_pad_view.xml +4 −2 Original line number Diff line number Diff line Loading @@ -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" Loading
core/res/res/values-land/integers.xml +2 −1 Original line number Diff line number Diff line Loading @@ -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> <integer name="kg_glowpad_rotation_offset">-90</integer> </resources>
core/res/res/values-sw600dp-land/integers.xml +2 −1 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ <resources> <integer name="kg_widget_region_weight">50</integer> <integer name="kg_security_flipper_weight">50</integer> <integer name="kg_glowpad_rotation_offset">0</integer> </resources>
core/res/res/values/arrays.xml +8 −0 Original line number Diff line number Diff line Loading @@ -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 --> Loading