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

Commit 18f18ae0 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Allow camera launch also when device is interactive

Bug: 23967648
Change-Id: If91df75e6325b3969dc2351a70af0c160d3eab04
parent 39e94ebe
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ public class KeyguardViewMediator extends SystemUI {
    private static final int NOTIFY_STARTED_WAKING_UP = 21;
    private static final int NOTIFY_SCREEN_TURNED_ON = 22;
    private static final int NOTIFY_SCREEN_TURNED_OFF = 23;
    private static final int NOTIFY_STARTED_GOING_TO_SLEEP = 24;

    /**
     * The default amount of time we stay awake (used for all key input)
@@ -676,6 +677,7 @@ public class KeyguardViewMediator extends SystemUI {
                playSounds(true);
            }
        }
        notifyStartedGoingToSleep();
    }

    public void onFinishedGoingToSleep(int why) {
@@ -1092,6 +1094,11 @@ public class KeyguardViewMediator extends SystemUI {
        mHandler.sendEmptyMessage(VERIFY_UNLOCK);
    }

    private void notifyStartedGoingToSleep() {
        if (DEBUG) Log.d(TAG, "notifyStartedGoingToSleep");
        mHandler.sendEmptyMessage(NOTIFY_STARTED_GOING_TO_SLEEP);
    }

    private void notifyFinishedGoingToSleep() {
        if (DEBUG) Log.d(TAG, "notifyFinishedGoingToSleep");
        mHandler.sendEmptyMessage(NOTIFY_FINISHED_GOING_TO_SLEEP);
@@ -1203,6 +1210,9 @@ public class KeyguardViewMediator extends SystemUI {
                case VERIFY_UNLOCK:
                    handleVerifyUnlock();
                    break;
                case NOTIFY_STARTED_GOING_TO_SLEEP:
                    handleNotifyStartedGoingToSleep();
                    break;
                case NOTIFY_FINISHED_GOING_TO_SLEEP:
                    handleNotifyFinishedGoingToSleep();
                    break;
@@ -1530,6 +1540,13 @@ public class KeyguardViewMediator extends SystemUI {
        }
    }

    private void handleNotifyStartedGoingToSleep() {
        synchronized (KeyguardViewMediator.this) {
            if (DEBUG) Log.d(TAG, "handleNotifyStartedGoingToSleep");
            mStatusBarKeyguardViewManager.onStartedGoingToSleep();
        }
    }

    /**
     * Handle message sent by {@link #notifyFinishedGoingToSleep()}
     * @see #NOTIFY_FINISHED_GOING_TO_SLEEP
+29 −1
Original line number Diff line number Diff line
@@ -488,12 +488,18 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    private boolean mLaunchTransitionFadingAway;
    private ExpandableNotificationRow mDraggedDownRow;
    private boolean mLaunchCameraOnScreenTurningOn;
    private boolean mLaunchCameraOnFinishedGoingToSleep;
    private PowerManager.WakeLock mGestureWakeLock;
    private Vibrator mVibrator;

    // Fingerprint (as computed by getLoggingFingerprint() of the last logged state.
    private int mLastLoggedStateFingerprint;

    /**
     * If set, the device has started going to sleep but isn't fully non-interactive yet.
     */
    protected boolean mStartedGoingToSleep;

    private static final int VISIBLE_LOCATIONS = StackViewState.LOCATION_FIRST_CARD
            | StackViewState.LOCATION_MAIN_AREA;

@@ -3908,15 +3914,32 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
        disable(mDisabledUnmodified1, mDisabledUnmodified2, true /* animate */);
    }

    public void onStartedGoingToSleep() {
        mStartedGoingToSleep = true;
    }

    public void onFinishedGoingToSleep() {
        mNotificationPanel.onAffordanceLaunchEnded();
        releaseGestureWakeLock();
        mLaunchCameraOnScreenTurningOn = false;
        mStartedGoingToSleep = false;
        mDeviceInteractive = false;
        mWakeUpComingFromTouch = false;
        mWakeUpTouchLocation = null;
        mStackScroller.setAnimationsEnabled(false);
        updateVisibleToUser();
        if (mLaunchCameraOnFinishedGoingToSleep) {
            mLaunchCameraOnFinishedGoingToSleep = false;

            // This gets executed before we will show Keyguard, so post it in order that the state
            // is correct.
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    onCameraLaunchGestureDetected();
                }
            });
        }
    }

    public void onStartedWakingUp() {
@@ -3936,7 +3959,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
    }

    private void vibrateForCameraGesture() {
        mVibrator.vibrate(750L);
        // Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep.
        mVibrator.vibrate(new long[] { 0, 750L }, -1 /* repeat */);
    }

    public void onScreenTurnedOn() {
@@ -4095,6 +4119,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,

    @Override
    public void onCameraLaunchGestureDetected() {
        if (mStartedGoingToSleep) {
            mLaunchCameraOnFinishedGoingToSleep = true;
            return;
        }
        if (!mNotificationPanel.canCameraGestureBeLaunched(
                mStatusBarKeyguardViewManager.isShowing() && mExpandedVisible)) {
            return;
+4 −0
Original line number Diff line number Diff line
@@ -164,6 +164,10 @@ public class StatusBarKeyguardViewManager {
        }
    }

    public void onStartedGoingToSleep() {
        mPhoneStatusBar.onStartedGoingToSleep();
    }

    public void onFinishedGoingToSleep() {
        mDeviceInteractive = false;
        mPhoneStatusBar.onFinishedGoingToSleep();
+10 −3
Original line number Diff line number Diff line
@@ -101,8 +101,8 @@ public class GestureLauncherService extends SystemService {
     * Whether camera double tap power button gesture is currently enabled;
     */
    private boolean mCameraDoubleTapPowerEnabled;
    private long mLastPowerDownWhileNonInteractive = 0;

    private long mLastPowerDownWhileNonInteractive;
    private long mLastPowerDownWhileInteractive;

    public GestureLauncherService(Context context) {
        super(context);
@@ -251,23 +251,30 @@ public class GestureLauncherService extends SystemService {

    public boolean interceptPowerKeyDown(KeyEvent event, boolean interactive) {
        boolean launched = false;
        boolean intercept = false;
        synchronized (this) {
            if (!mCameraDoubleTapPowerEnabled) {
                mLastPowerDownWhileNonInteractive = 0;
                mLastPowerDownWhileInteractive = 0;
                return false;
            }
            if (event.getEventTime() - mLastPowerDownWhileNonInteractive
                    < CAMERA_POWER_DOUBLE_TAP_TIME_MS) {
                launched = true;
                intercept = true;
            } else if (event.getEventTime() - mLastPowerDownWhileInteractive
                    < CAMERA_POWER_DOUBLE_TAP_TIME_MS) {
                launched = true;
            }
            mLastPowerDownWhileNonInteractive = interactive ? 0 : event.getEventTime();
            mLastPowerDownWhileInteractive = interactive ? event.getEventTime() : 0;
        }
        if (launched) {
            Slog.i(TAG, "Power button double tap gesture detected, launching camera.");
            launched = handleCameraLaunchGesture(false /* useWakelock */,
                    MetricsLogger.ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE);
        }
        return launched;
        return intercept && launched;
    }

    /**
+3 −1
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ public class VibratorService extends IVibratorService.Stub
        implements InputManager.InputDeviceListener {
    private static final String TAG = "VibratorService";
    private static final boolean DEBUG = false;
    private static final String SYSTEM_UI_PACKAGE = "com.android.systemui";

    private final LinkedList<Vibration> mVibrations;
    private final LinkedList<VibrationInfo> mPreviousVibrations;
@@ -147,7 +148,8 @@ public class VibratorService extends IVibratorService.Stub
        }

        public boolean isSystemHapticFeedback() {
            return (mUid == Process.SYSTEM_UID || mUid == 0) && mRepeat < 0;
            return (mUid == Process.SYSTEM_UID || mUid == 0 || SYSTEM_UI_PACKAGE.equals(mOpPkg))
                    && mRepeat < 0;
        }
    }