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

Unverified Commit f3a430df authored by Roman Birg's avatar Roman Birg Committed by Michael Bestas
Browse files

SystemUI: add quick settings pull down with one finger



Logic is currently set to use 1/3 of right hand side of the statusbar to
trigger a quick settings quick pull down, quickly.

Change-Id: I3f536496f724f07d2419a5b2db5fa8f8261609e7
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>

SystemUI: fix right hand side gestures on lockscreen

two finger quick pulldown was not accounting for being in the keyguard
adn was eating touch events when it shouldn't be.

Change-Id: I625d48a4002aaaf2d55d7efaed65d892ab7aa13c
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>

SystemUI: add Settings.System toggle for quick-quick settings pulldown

Change-Id: I3c5dcfc23f39bf8be6c402e25f61e6f57a8add2c
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 74db293b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2829,6 +2829,12 @@ public final class Settings {
         */
        public static final String BUTTON_BACKLIGHT_TIMEOUT = "button_backlight_timeout";

        /** Whether to allow one finger quick settings expansion on the right side of the statusbar.
         *
         * @hide
         */
        public static final String STATUS_BAR_QUICK_QS_PULLDOWN = "status_bar_quick_qs_pulldown";

        /**
         * Whether to control brightness from status bar
         *
+77 −3
Original line number Diff line number Diff line
@@ -22,13 +22,18 @@ import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.app.StatusBarManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.MathUtils;
import android.view.MotionEvent;
@@ -206,6 +211,10 @@ public class NotificationPanelView extends PanelView implements
    };
    private NotificationGroupManager mGroupManager;

    private Handler mHandler = new Handler();
    private SettingsObserver mSettingsObserver;
    private boolean mOneFingerQuickSettingsIntercept;

    public NotificationPanelView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setWillNotDraw(!DEBUG);
@@ -261,6 +270,7 @@ public class NotificationPanelView extends PanelView implements
                mNotificationStackScroller.setQsContainer(mQsContainer);
            }
        });
        mSettingsObserver = new SettingsObserver(mHandler);
    }

    @Override
@@ -343,6 +353,17 @@ public class NotificationPanelView extends PanelView implements
        updateMaxHeadsUpTranslation();
    }

    @Override
    public void onAttachedToWindow() {
        mSettingsObserver.observe();

    }

    @Override
    public void onDetachedFromWindow() {
        mSettingsObserver.unobserve();
    }

    private void startQsSizeChangeAnimation(int oldHeight, final int newHeight) {
        if (mQsSizeChangeAnimator != null) {
            oldHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
@@ -790,7 +811,13 @@ public class NotificationPanelView extends PanelView implements
                && mQsExpansionEnabled) {
            mTwoFingerQsExpandPossible = true;
        }
        if (mTwoFingerQsExpandPossible && isOpenQsEvent(event)
        boolean twoFingerQsEvent = mTwoFingerQsExpandPossible
                && (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN
                && event.getPointerCount() == 2);
        boolean oneFingerQsOverride = mOneFingerQuickSettingsIntercept
                && event.getActionMasked() == MotionEvent.ACTION_DOWN
                && shouldQuickSettingsIntercept(event.getX(), event.getY(), -1, false);
        if ((twoFingerQsEvent || oneFingerQsOverride) && isOpenQsEvent(event)
                && event.getY(event.getActionIndex()) < mStatusBarMinHeight) {
            MetricsLogger.count(mContext, COUNTER_PANEL_OPEN_QS, 1);
            mQsExpandImmediate = true;
@@ -1351,17 +1378,30 @@ public class NotificationPanelView extends PanelView implements
     * @return Whether we should intercept a gesture to open Quick Settings.
     */
    private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
        return shouldQuickSettingsIntercept(x, y, yDiff, true);
    }

    /**
     * @return Whether we should intercept a gesture to open Quick Settings.
     */
    private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff, boolean useHeader) {
        if (!mQsExpansionEnabled || mCollapsedOnDown) {
            return false;
        }
        View header = mKeyguardShowing ? mKeyguardStatusBar : mQsContainer.getHeader();
        boolean onHeader = x >= mQsAutoReinflateContainer.getX()
        boolean onHeader = useHeader && x >= mQsAutoReinflateContainer.getX()
                && x <= mQsAutoReinflateContainer.getX() + mQsAutoReinflateContainer.getWidth()
                && y >= header.getTop() && y <= header.getBottom();

        final float w = getMeasuredWidth();
        float region = (w * (1.f/3.f)); // TODO overlay region fraction?
        final boolean showQsOverride = isLayoutRtl() ? (x < region) : (w - region < x)
                        && mStatusBarState == StatusBarState.SHADE;

        if (mQsExpanded) {
            return onHeader || (yDiff < 0 && isInQsArea(x, y));
        } else {
            return onHeader;
            return onHeader || showQsOverride;
        }
    }

@@ -2351,4 +2391,38 @@ public class NotificationPanelView extends PanelView implements
    public void setGroupManager(NotificationGroupManager groupManager) {
        mGroupManager = groupManager;
    }

    class SettingsObserver extends ContentObserver {
        SettingsObserver(Handler handler) {
            super(handler);
        }

        void observe() {
            ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(Settings.System.getUriFor(
                    Settings.System.STATUS_BAR_QUICK_QS_PULLDOWN), false, this);
            update();
        }

        void unobserve() {
            ContentResolver resolver = mContext.getContentResolver();
            resolver.unregisterContentObserver(this);
        }

        @Override
        public void onChange(boolean selfChange) {
            update();
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            update();
        }

        public void update() {
            ContentResolver resolver = mContext.getContentResolver();
            mOneFingerQuickSettingsIntercept = Settings.System.getInt(
                    resolver, Settings.System.STATUS_BAR_QUICK_QS_PULLDOWN, 1) == 1;
        }
    }
}