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

Commit 2b273831 authored by Andrew Sutherland's avatar Andrew Sutherland Committed by Steve Kondik
Browse files

ring unlock: (1/2) enable unlock on middle ring

Allows the user to change the layout of the ring lockscreen through
two new toggles in cmparts lockscreen style menu.

One toggle switches the unlock and custom app rings putting the unlock in the middle
and the custom app on the left. This option is available when custom app is checked in
cmparts.

The second toggle provides a minimal ring lockscreen with one ring in the middle to
unlock and hides the left and right rings. This option is only available if custom app is
unchecked in cmparts.

http://review.cyanogenmod.com/8480 and http://review.cyanogenmod.com/8479

Change-Id: Ief978a06f8ebc59271f33425738a5458e078200f
parent f9007940
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -2554,6 +2554,19 @@ public final class Settings {
         */
        public static final String LOCKSCREEN_ROTARY_HIDE_ARROWS = "lockscreen_rotary_hide_arrows";

        /**
         * When enabled, ring style lockscreen switches app started and unlock, so the unlock ring
         * is in the middle
         * @hide
         */
        public static final String LOCKSCREEN_RING_UNLOCK_MIDDLE = "lockscreen_ring_unlock_middle";

        /**
         * When enabled, ring style lockscreen has only one ring in the middle for unlock
         * @hide
         */
        public static final String LOCKSCREEN_RING_MINIMAL = "lockscreen_ring_minimal";

        /**
         * Sets the lockscreen style
         * @hide
+49 −7
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ public class RingSelector extends ViewGroup {
    private final int mSecRingCenterOffset;

    private boolean mUseMiddleRing = true;
    private boolean mMiddlePrimary = false;

    /**
     * Either {@link #HORIZONTAL} or {@link #VERTICAL}.
@@ -770,6 +771,7 @@ public class RingSelector extends ViewGroup {

        boolean leftHit = mLeftRing.contains((int) x, (int) y);
        boolean rightHit = mRightRing.contains((int) x, (int) y);
        //DREW
        boolean middleHit = mUseMiddleRing ? mMiddleRing.contains((int) x, (int) y) : false;

        if (!mTracking && !(leftHit || rightHit || middleHit)) {
@@ -785,6 +787,11 @@ public class RingSelector extends ViewGroup {
                    mCurrentRing = mLeftRing;
                    mOtherRing1 = mRightRing;
                    mOtherRing2 = mMiddleRing;
                    if (mMiddlePrimary) {
                        for (SecRing secRing : mSecRings) {
                            secRing.show();
                        }
                    }
                    setGrabbedState(OnRingTriggerListener.LEFT_RING);
                } else if (rightHit) {
                    mCurrentRing = mRightRing;
@@ -795,11 +802,11 @@ public class RingSelector extends ViewGroup {
                    mCurrentRing = mMiddleRing;
                    mOtherRing1 = mLeftRing;
                    mOtherRing2 = mRightRing;

                    if (!mMiddlePrimary) {
                        for (SecRing secRing : mSecRings) {
                            secRing.show();
                        }

                    }
                    setGrabbedState(OnRingTriggerListener.MIDDLE_RING);
                }
                mCurrentRing.setState(Ring.STATE_PRESSED);
@@ -853,7 +860,15 @@ public class RingSelector extends ViewGroup {
            switch (action) {
                case MotionEvent.ACTION_MOVE:
                    moveRing(x, y);
                    if (mUseMiddleRing && mCurrentRing == mMiddleRing) {
                    if (!mMiddlePrimary && mUseMiddleRing && mCurrentRing == mMiddleRing) {
                        for (int q = 0; q < 4; q++) {
                            if (!mSecRings[q].isHidden() && mSecRings[q].contains((int) x, (int) y)) {
                                mSecRings[q].activate();
                            } else {
                                mSecRings[q].deactivate();
                            }
                        }
                    } else if (mMiddlePrimary && mUseMiddleRing && mCurrentRing == mLeftRing) {
                        for (int q = 0; q < 4; q++) {
                            if (!mSecRings[q].isHidden() && mSecRings[q].contains((int) x, (int) y)) {
                                mSecRings[q].activate();
@@ -867,7 +882,21 @@ public class RingSelector extends ViewGroup {
                    mSelectedRingId = -1;
                    boolean thresholdReached = false;

                    if (mCurrentRing != mMiddleRing) {
                    if (mMiddlePrimary) {
                        if (mCurrentRing != mLeftRing) {
                            int dx = (int) x - mCurrentRing.alignCenterX;
                            int dy = (int) y - mCurrentRing.alignCenterY;
                            thresholdReached = (dx * dx + dy * dy) > mThresholdRadiusSq;
                        } else if (mUseMiddleRing) {
                            for (int q = 0; q < 4; q++) {
                                if (!mSecRings[q].isHidden() && mSecRings[q].contains((int) x, (int) y)) {
                                    thresholdReached = true;
                                    mSelectedRingId = q;
                                    break;
                                }
                            }
                        }
                    } else if (mCurrentRing != mMiddleRing) {
                        int dx = (int) x - mCurrentRing.alignCenterX;
                        int dy = (int) y - mCurrentRing.alignCenterY;
                        thresholdReached = (dx * dx + dy * dy) > mThresholdRadiusSq;
@@ -997,7 +1026,9 @@ public class RingSelector extends ViewGroup {
    }

    private void setHoverBackLight(float x, float y) {
        if (mCurrentRing != mMiddleRing) {
        if (mMiddlePrimary && mCurrentRing != mLeftRing) {
            return;
        } else if (!mMiddlePrimary && mCurrentRing != mMiddleRing) {
            return;
        }
        boolean ringsTouched = false;
@@ -1139,6 +1170,17 @@ public class RingSelector extends ViewGroup {
        mMiddleRing.setHiddenState(!enable);
    }

    public void enableMiddlePrimary(boolean enable) {
        mMiddlePrimary = enable;
        enableMiddleRing(enable);
    }

    public void enableRingMinimal(boolean enable) {
        enableMiddlePrimary(enable);
        mRightRing.setHiddenState(enable);
        mLeftRing.setHiddenState(enable);
    }

    /**
     * Triggers haptic feedback.
     */
+76 −17
Original line number Diff line number Diff line
@@ -228,6 +228,12 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM

    private boolean mUseRingLockscreen = (mLockscreenStyle == 5);

    private boolean mRingUnlockMiddle = (Settings.System.getInt(mContext.getContentResolver(),
            Settings.System.LOCKSCREEN_RING_UNLOCK_MIDDLE, 0) == 1);

    private boolean mRingMinimal = (Settings.System.getInt(mContext.getContentResolver(),
            Settings.System.LOCKSCREEN_RING_MINIMAL, 0) == 1);

    private double mGestureSensitivity;
    private boolean mGestureTrail;
    private boolean mGestureActive;
@@ -540,14 +546,29 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM
        if (mLensePortrait || mWidgetLayout == 1 )
            setLenseWidgetsVisibility(View.INVISIBLE);

        //Ring setup
        if (mRingMinimal) {
            mRingSelector.enableRingMinimal(mRingMinimal);
            //unlock with middle - left and right are hidden
            mRingSelector.setMiddleRingResources(
                R.drawable.ic_jog_dial_unlock,
                R.drawable.jog_tab_target_green,
                R.drawable.jog_ring_ring_green);
        }else if(mCustomAppToggle) {
            mRingSelector.enableMiddleRing(mCustomAppToggle);

        mTabSelector.setLeftTabResources(
            if(mRingUnlockMiddle) {
                mRingSelector.enableMiddlePrimary(mRingUnlockMiddle);
                mRingSelector.setLeftRingResources(
                    R.drawable.ic_jog_dial_custom,
                    R.drawable.jog_tab_target_green,
                    R.drawable.jog_ring_ring_green);
                //unlock with middle
                mRingSelector.setMiddleRingResources(
                    R.drawable.ic_jog_dial_unlock,
                    R.drawable.jog_tab_target_green,
                R.drawable.jog_tab_bar_left_unlock,
                R.drawable.jog_tab_left_unlock);

                    R.drawable.jog_ring_ring_green);
                }else{
                //unlock on left
                mRingSelector.setLeftRingResources(
                    R.drawable.ic_jog_dial_unlock,
                    R.drawable.jog_tab_target_green,
@@ -556,6 +577,21 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM
                    R.drawable.ic_jog_dial_custom,
                    R.drawable.jog_tab_target_green,
                    R.drawable.jog_ring_ring_green);
                }
        }else{
            //no middle ring
            mRingSelector.setLeftRingResources(
                R.drawable.ic_jog_dial_unlock,
                R.drawable.jog_tab_target_green,
                R.drawable.jog_ring_ring_green);
            mRingSelector.enableRingMinimal(false);
        }

        mTabSelector.setLeftTabResources(
                R.drawable.ic_jog_dial_unlock,
                R.drawable.jog_tab_target_green,
                R.drawable.jog_tab_bar_left_unlock,
                R.drawable.jog_tab_left_unlock);

        updateRightTabResources();

@@ -785,16 +821,32 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM

    /** {@inheritDoc} */
    public void onRingTrigger(View v, int whichRing, int whichApp) {
        boolean mUnlockTrigger=false;
        boolean mCustomAppTrigger=false;

        if (whichRing == RingSelector.OnRingTriggerListener.LEFT_RING) {
            if(mRingUnlockMiddle)
                mCustomAppTrigger=true;
            else
                mUnlockTrigger=true;
        }
        if (whichRing == RingSelector.OnRingTriggerListener.MIDDLE_RING) {
            if(mRingUnlockMiddle || mRingMinimal)
                mUnlockTrigger=true;
            else
                mCustomAppTrigger=true;
        }

        if (mUnlockTrigger) {
            mCallback.goToUnlockScreen();
        }else if (mCustomAppTrigger) {
            if (mCustomRingAppActivities[whichApp] != null) {
                runActivity(mCustomRingAppActivities[whichApp]);
            }
        }else if (whichRing == RingSelector.OnRingTriggerListener.RIGHT_RING) {
            toggleSilentMode();
            updateRightTabResources();
            mCallback.pokeWakelock();
        } else if (whichRing == RingSelector.OnRingTriggerListener.MIDDLE_RING) {
            if (mCustomRingAppActivities[whichApp] != null) {
                runActivity(mCustomRingAppActivities[whichApp]);
            }
        }
    }

@@ -1063,8 +1115,15 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM

        mCustomAppToggle = (Settings.System.getInt(mContext.getContentResolver(),
                                Settings.System.LOCKSCREEN_CUSTOM_APP_TOGGLE, 0) == 1);
        mRotarySelector.enableCustomAppDimple(mCustomAppToggle);
        mRingMinimal = (Settings.System.getInt(mContext.getContentResolver(),
                                Settings.System.LOCKSCREEN_RING_MINIMAL, 0) == 1);
        if (mCustomAppToggle) {
            mRingSelector.enableMiddleRing(mCustomAppToggle);
            mRotarySelector.enableCustomAppDimple(mCustomAppToggle);
        }
        if (mRingMinimal) {
            mRingSelector.enableRingMinimal(mRingMinimal);
        }

        mEmergencyCallButton.setVisibility(View.GONE); // in almost all cases