diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java index 5096be687418d..837b7b8d181ed 100644 --- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java +++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java @@ -115,7 +115,6 @@ public class GlowPadView extends View { private int mMaxTargetWidth; private float mOuterRadius = 0.0f; - private float mHitRadius = 0.0f; private float mSnapMargin = 0.0f; private boolean mDragging; private int mNewTargetResources; @@ -211,7 +210,6 @@ public class GlowPadView extends View { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.GlowPadView); mInnerRadius = a.getDimension(R.styleable.GlowPadView_innerRadius, mInnerRadius); mOuterRadius = a.getDimension(R.styleable.GlowPadView_outerRadius, mOuterRadius); - mHitRadius = a.getDimension(R.styleable.GlowPadView_hitRadius, mHitRadius); mSnapMargin = a.getDimension(R.styleable.GlowPadView_snapMargin, mSnapMargin); mVibrationDuration = a.getInt(R.styleable.GlowPadView_vibrationDuration, mVibrationDuration); @@ -280,7 +278,6 @@ public class GlowPadView extends View { private void dump() { Log.v(TAG, "Outer Radius = " + mOuterRadius); - Log.v(TAG, "HitRadius = " + mHitRadius); Log.v(TAG, "SnapMargin = " + mSnapMargin); Log.v(TAG, "FeedbackCount = " + mFeedbackCount); Log.v(TAG, "VibrationDuration = " + mVibrationDuration); @@ -799,7 +796,6 @@ public class GlowPadView extends View { final int historySize = event.getHistorySize(); ArrayList targets = mTargetDrawables; int ntargets = targets.size(); - final boolean singleTarget = ntargets == 1; float x = 0.0f; float y = 0.0f; for (int k = 0; k < historySize + 1; k++) { @@ -812,31 +808,29 @@ public class GlowPadView extends View { final float scale = touchRadius > mOuterRadius ? mOuterRadius / touchRadius : 1.0f; float limitX = tx * scale; float limitY = ty * scale; + double angleRad = Math.atan2(-ty, tx); if (!mDragging) { trySwitchToFirstTouchState(eventX, eventY); } if (mDragging) { - if (singleTarget) { - // Snap to outer ring if there's only one target - float snapRadius = mOuterRadius - mSnapMargin; - if (touchRadius > snapRadius) { - activeTarget = 0; - } - } else { - // For more than one target, snap to the closest one less than hitRadius away. - float best = Float.MAX_VALUE; - final float hitRadius2 = mHitRadius * mHitRadius; - // Find first target in range - for (int i = 0; i < ntargets; i++) { - TargetDrawable target = targets.get(i); - float dx = limitX - target.getX(); - float dy = limitY - target.getY(); - float dist2 = dx*dx + dy*dy; - if (target.isEnabled() && dist2 < hitRadius2 && dist2 < best) { + // For multiple targets, snap to the one that matches + final float snapRadius = mOuterRadius - mSnapMargin; + final float snapDistance2 = snapRadius * snapRadius; + // Find first target in range + 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; + if (target.isEnabled()) { + boolean angleMatches = + (angleRad > targetMinRad && angleRad <= targetMaxRad) || + (angleRad + 2 * Math.PI > targetMinRad && + angleRad + 2 * Math.PI <= targetMaxRad); + if (angleMatches && (dist2(tx, ty) > snapDistance2)) { activeTarget = i; - best = dist2; } } } @@ -851,10 +845,7 @@ public class GlowPadView extends View { if (activeTarget != -1) { switchToState(STATE_SNAP, x,y); - TargetDrawable target = targets.get(activeTarget); - final float newX = singleTarget ? x : target.getX(); - final float newY = singleTarget ? y : target.getY(); - updateGlowPosition(newX, newY); + updateGlowPosition(x, y); } else { switchToState(STATE_TRACKING, x, y); updateGlowPosition(x, y); @@ -942,10 +933,6 @@ public class GlowPadView extends View { if (mOuterRadius == 0.0f) { mOuterRadius = Math.max(mOuterRing.getWidth(), mOuterRing.getHeight())/2.0f; } - if (mHitRadius == 0.0f) { - // Use the radius of inscribed circle of the first target. - mHitRadius = mTargetDrawables.get(0).getWidth() / 2.0f; - } if (mSnapMargin == 0.0f) { mSnapMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SNAP_MARGIN_DEFAULT, getContext().getResources().getDisplayMetrics()); diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java index afeac008c52e4..10804c024178e 100644 --- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java +++ b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java @@ -119,7 +119,6 @@ public class MultiWaveView extends View { private int mMaxTargetWidth; private float mOuterRadius = 0.0f; - private float mHitRadius = 0.0f; private float mSnapMargin = 0.0f; private boolean mDragging; private int mNewTargetResources; @@ -213,7 +212,6 @@ public class MultiWaveView extends View { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView); mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius); - mHitRadius = a.getDimension(R.styleable.MultiWaveView_hitRadius, mHitRadius); mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin); mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration, mVibrationDuration); @@ -277,7 +275,6 @@ public class MultiWaveView extends View { private void dump() { Log.v(TAG, "Outer Radius = " + mOuterRadius); - Log.v(TAG, "HitRadius = " + mHitRadius); Log.v(TAG, "SnapMargin = " + mSnapMargin); Log.v(TAG, "FeedbackCount = " + mFeedbackCount); Log.v(TAG, "VibrationDuration = " + mVibrationDuration); @@ -823,7 +820,6 @@ public class MultiWaveView extends View { final int historySize = event.getHistorySize(); ArrayList targets = mTargetDrawables; int ntargets = targets.size(); - final boolean singleTarget = ntargets == 1; float x = 0.0f; float y = 0.0f; for (int k = 0; k < historySize + 1; k++) { @@ -836,31 +832,29 @@ public class MultiWaveView extends View { final float scale = touchRadius > mOuterRadius ? mOuterRadius / touchRadius : 1.0f; float limitX = tx * scale; float limitY = ty * scale; + double angleRad = Math.atan2(-ty, tx); if (!mDragging) { trySwitchToFirstTouchState(eventX, eventY); } if (mDragging) { - if (singleTarget) { - // Snap to outer ring if there's only one target - float snapRadius = mOuterRadius - mSnapMargin; - if (touchRadius > snapRadius) { - activeTarget = 0; - } - } else { - // For more than one target, snap to the closest one less than hitRadius away. - float best = Float.MAX_VALUE; - final float hitRadius2 = mHitRadius * mHitRadius; - // Find first target in range - for (int i = 0; i < ntargets; i++) { - TargetDrawable target = targets.get(i); - float dx = limitX - target.getX(); - float dy = limitY - target.getY(); - float dist2 = dx*dx + dy*dy; - if (target.isEnabled() && dist2 < hitRadius2 && dist2 < best) { + // For multiple targets, snap to the one that matches + final float snapRadius = mOuterRadius - mSnapMargin; + final float snapDistance2 = snapRadius * snapRadius; + // Find first target in range + 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; + if (target.isEnabled()) { + boolean angleMatches = + (angleRad > targetMinRad && angleRad <= targetMaxRad) || + (angleRad + 2 * Math.PI > targetMinRad && + angleRad + 2 * Math.PI <= targetMaxRad); + if (angleMatches && (dist2(tx, ty) > snapDistance2)) { activeTarget = i; - best = dist2; } } } @@ -875,10 +869,7 @@ public class MultiWaveView extends View { if (activeTarget != -1) { switchToState(STATE_SNAP, x,y); - TargetDrawable target = targets.get(activeTarget); - final float newX = singleTarget ? x : target.getX(); - final float newY = singleTarget ? y : target.getY(); - moveHandleTo(newX, newY, false); + moveHandleTo(x, y, false); } else { switchToState(STATE_TRACKING, x, y); moveHandleTo(x, y, false); @@ -972,10 +963,6 @@ public class MultiWaveView extends View { if (mOuterRadius == 0.0f) { mOuterRadius = Math.max(mOuterRing.getWidth(), mOuterRing.getHeight())/2.0f; } - if (mHitRadius == 0.0f) { - // Use the radius of inscribed circle of the first target. - mHitRadius = mTargetDrawables.get(0).getWidth() / 2.0f; - } if (mSnapMargin == 0.0f) { mSnapMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, SNAP_MARGIN_DEFAULT, getContext().getResources().getDisplayMetrics()); diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml index cd9c9138d2047..356e7cf7af6a0 100644 --- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml @@ -98,7 +98,6 @@ android:outerRadius="@dimen/glowpadview_target_placement_radius" android:innerRadius="@dimen/glowpadview_inner_radius" android:snapMargin="@dimen/glowpadview_snap_margin" - android:hitRadius="@dimen/glowpadview_hit_radius" android:feedbackCount="1" android:vibrationDuration="20" android:glowRadius="@dimen/glowpadview_glow_radius" diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml index 32ca602ec5a71..cb1cb2114b3d6 100644 --- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml @@ -98,7 +98,6 @@ android:outerRadius="@dimen/glowpadview_target_placement_radius" android:innerRadius="@dimen/glowpadview_inner_radius" android:snapMargin="@dimen/glowpadview_snap_margin" - android:hitRadius="@dimen/glowpadview_hit_radius" android:feedbackCount="1" android:vibrationDuration="20" android:glowRadius="@dimen/glowpadview_glow_radius" diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml index 4e646a6068bd6..91f65e9cfb1c4 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml @@ -139,7 +139,6 @@ android:outerRadius="@dimen/glowpadview_target_placement_radius" android:innerRadius="@dimen/glowpadview_inner_radius" android:snapMargin="@dimen/glowpadview_snap_margin" - android:hitRadius="@dimen/glowpadview_hit_radius" android:feedbackCount="1" android:vibrationDuration="20" android:glowRadius="@dimen/glowpadview_glow_radius" diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml index 5a357fbd66984..8b9d8e4cb3286 100644 --- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml +++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml @@ -144,7 +144,6 @@ android:outerRadius="@dimen/glowpadview_target_placement_radius" android:innerRadius="@dimen/glowpadview_inner_radius" android:snapMargin="@dimen/glowpadview_snap_margin" - android:hitRadius="@dimen/glowpadview_hit_radius" android:feedbackCount="1" android:vibrationDuration="20" android:glowRadius="@dimen/glowpadview_glow_radius" diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 0007751227a31..3a7253b90d540 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -5405,9 +5405,6 @@ - - - @@ -5450,9 +5447,6 @@ - - - diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index ffbcb957b1875..f30943a39cedb 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -79,11 +79,8 @@ 75dip - - 20dip - - - 60dip + + 40dip 15dip diff --git a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml index e6c00876fa27e..c8a120d40990b 100644 --- a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml @@ -54,7 +54,6 @@ prvandroid:outerRadius="@dimen/navbar_search_outerring_radius" prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" prvandroid:feedbackCount="0" prvandroid:vibrationDuration="@integer/config_vibration_duration" prvandroid:alwaysTrackFinger="true" diff --git a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml b/packages/SystemUI/res/layout-port/status_bar_search_panel.xml index 3828136eb8bd1..1e4bb57e56f0d 100644 --- a/packages/SystemUI/res/layout-port/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-port/status_bar_search_panel.xml @@ -54,7 +54,6 @@ prvandroid:outerRadius="@dimen/navbar_search_outerring_radius" prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" prvandroid:feedbackCount="0" prvandroid:vibrationDuration="@integer/config_vibration_duration" prvandroid:alwaysTrackFinger="true" diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml index c17f8585544d9..3b6c52ea36933 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml @@ -40,7 +40,6 @@ prvandroid:outerRadius="@dimen/navbar_search_outerring_radius" prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" prvandroid:feedbackCount="0" prvandroid:vibrationDuration="@integer/config_vibration_duration" prvandroid:alwaysTrackFinger="true" diff --git a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml index 100f81dd5b1d6..8c2360e943ff0 100644 --- a/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml +++ b/packages/SystemUI/res/layout-sw720dp/status_bar_search_panel.xml @@ -41,7 +41,6 @@ prvandroid:outerRadius="@dimen/navbar_search_outerring_radius" prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius" prvandroid:snapMargin="@dimen/navbar_search_snap_margin" - prvandroid:hitRadius="@dimen/navbar_search_hit_radius" prvandroid:feedbackCount="0" prvandroid:vibrationDuration="@integer/config_vibration_duration" prvandroid:alwaysTrackFinger="true" diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index c88ae2a0e6e53..6a96c6bb95377 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -110,11 +110,8 @@ 40dip - - 20dip - - - 60dip + + 40dip 340dp