Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d269e8e authored by Chris Wren's avatar Chris Wren Committed by Android (Google) Code Review
Browse files

Merge "single unlock target with honycomb semantics" into jb-mr1-lockscreen-dev

parents fdbbbba4 f0ee5b81
Loading
Loading
Loading
Loading
+50 −10
Original line number Diff line number Diff line
@@ -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.
    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));
@@ -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);
    }
+4 −2
Original line number Diff line number Diff line
@@ -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"
+2 −1
Original line number Diff line number Diff line
@@ -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>
+2 −1
Original line number Diff line number Diff line
@@ -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>
+8 −0
Original line number Diff line number Diff line
@@ -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