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

Commit 38203cfd authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Rename panic gesture in GestureLauncherService"

parents 8cc563eb 87177efd
Loading
Loading
Loading
Loading
+29 −31
Original line number Diff line number Diff line
@@ -75,9 +75,9 @@ public class GestureLauncherService extends SystemService {
    @VisibleForTesting static final long POWER_SHORT_TAP_SEQUENCE_MAX_INTERVAL_MS = 500;

    /**
     * Number of taps required to launch panic ui.
     * Number of taps required to launch emergency gesture ui.
     */
    private static final int PANIC_POWER_TAP_COUNT_THRESHOLD = 5;
    private static final int EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD = 5;

    /**
     * Number of taps required to launch camera shortcut.
@@ -138,9 +138,9 @@ public class GestureLauncherService extends SystemService {
    private boolean mCameraDoubleTapPowerEnabled;

    /**
     * Whether panic button gesture is currently enabled
     * Whether emergency gesture is currently enabled
     */
    private boolean mPanicButtonGestureEnabled;
    private boolean mEmergencyGestureEnabled;

    private long mLastPowerDown;
    private int mPowerButtonConsecutiveTaps;
@@ -178,7 +178,7 @@ public class GestureLauncherService extends SystemService {
                    "GestureLauncherService");
            updateCameraRegistered();
            updateCameraDoubleTapPowerEnabled();
            updatePanicButtonGestureEnabled();
            updateEmergencyGestureEnabled();

            mUserId = ActivityManager.getCurrentUser();
            mContext.registerReceiver(mUserReceiver, new IntentFilter(Intent.ACTION_USER_SWITCHED));
@@ -225,10 +225,10 @@ public class GestureLauncherService extends SystemService {
    }

    @VisibleForTesting
    void updatePanicButtonGestureEnabled() {
        boolean enabled = isPanicButtonGestureEnabled(mContext, mUserId);
    void updateEmergencyGestureEnabled() {
        boolean enabled = isEmergencyGestureEnabled(mContext, mUserId);
        synchronized (this) {
            mPanicButtonGestureEnabled = enabled;
            mEmergencyGestureEnabled = enabled;
        }
    }

@@ -357,9 +357,9 @@ public class GestureLauncherService extends SystemService {
    }

    /**
     * Whether to enable panic button gesture.
     * Whether to enable emergency gesture.
     */
    public static boolean isPanicButtonGestureEnabled(Context context, int userId) {
    public static boolean isEmergencyGestureEnabled(Context context, int userId) {
        return Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.PANIC_GESTURE_ENABLED, 0, userId) != 0;
    }
@@ -409,7 +409,7 @@ public class GestureLauncherService extends SystemService {
            return false;
        }
        boolean launchCamera = false;
        boolean launchPanic = false;
        boolean launchEmergencyGesture = false;
        boolean intercept = false;
        long powerTapInterval;
        synchronized (this) {
@@ -428,15 +428,15 @@ public class GestureLauncherService extends SystemService {
                mPowerButtonConsecutiveTaps++;
                mPowerButtonSlowConsecutiveTaps++;
            }
            // Check if we need to launch camera or panic flows
            if (mPanicButtonGestureEnabled) {
            // Check if we need to launch camera or emergency gesture flows
            if (mEmergencyGestureEnabled) {
                // Commit to intercepting the powerkey event after the second "quick" tap to avoid
                // lockscreen changes between launching camera and the panic flow.
                // lockscreen changes between launching camera and the emergency gesture flow.
                if (mPowerButtonConsecutiveTaps > 1) {
                    intercept = interactive;
                }
                if (mPowerButtonConsecutiveTaps == PANIC_POWER_TAP_COUNT_THRESHOLD) {
                    launchPanic = true;
                if (mPowerButtonConsecutiveTaps == EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD) {
                    launchEmergencyGesture = true;
                }
            }
            if (mCameraDoubleTapPowerEnabled
@@ -461,18 +461,18 @@ public class GestureLauncherService extends SystemService {
                mMetricsLogger.action(MetricsEvent.ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE,
                        (int) powerTapInterval);
            }
        } else if (launchPanic) {
            Slog.i(TAG, "Panic gesture detected, launching panic.");
            launchPanic = handlePanicButtonGesture();
        } else if (launchEmergencyGesture) {
            Slog.i(TAG, "Emergency gesture detected, launching.");
            launchEmergencyGesture = handleEmergencyGesture();
            // TODO(b/160006048): Add logging
        }
        mMetricsLogger.histogram("power_consecutive_short_tap_count",
                mPowerButtonSlowConsecutiveTaps);
        mMetricsLogger.histogram("power_double_tap_interval", (int) powerTapInterval);

        outLaunched.value = launchCamera || launchPanic;
        // Intercept power key event if the press is part of a gesture (camera, panic) and the user
        // has completed setup.
        outLaunched.value = launchCamera || launchEmergencyGesture;
        // Intercept power key event if the press is part of a gesture (camera, eGesture) and the
        // user has completed setup.
        return intercept && isUserSetupComplete();
    }

@@ -512,27 +512,25 @@ public class GestureLauncherService extends SystemService {
    }

    /**
     * @return true if panic ui was launched, false otherwise.
     * @return true if emergency gesture UI was launched, false otherwise.
     */
    @VisibleForTesting
    boolean handlePanicButtonGesture() {
        // TODO(b/160006048): This is the wrong way to launch panic ui. Rewrite this to go
        //  through SysUI
    boolean handleEmergencyGesture() {
        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
                "GestureLauncher:handlePanicButtonGesture");
                "GestureLauncher:handleEmergencyGesture");
        try {
            boolean userSetupComplete = isUserSetupComplete();
            if (!userSetupComplete) {
                if (DBG) {
                    Slog.d(TAG, String.format(
                            "userSetupComplete = %s, ignoring panic gesture.",
                            "userSetupComplete = %s, ignoring emergency gesture.",
                            userSetupComplete));
                }
                return false;
            }
            if (DBG) {
                Slog.d(TAG, String.format(
                        "userSetupComplete = %s, performing panic gesture.",
                        "userSetupComplete = %s, performing emergency gesture.",
                        userSetupComplete));
            }
            StatusBarManagerInternal service = LocalServices.getService(
@@ -558,7 +556,7 @@ public class GestureLauncherService extends SystemService {
                registerContentObservers();
                updateCameraRegistered();
                updateCameraDoubleTapPowerEnabled();
                updatePanicButtonGestureEnabled();
                updateEmergencyGestureEnabled();
            }
        }
    };
@@ -568,7 +566,7 @@ public class GestureLauncherService extends SystemService {
            if (userId == mUserId) {
                updateCameraRegistered();
                updateCameraDoubleTapPowerEnabled();
                updatePanicButtonGestureEnabled();
                updateEmergencyGestureEnabled();
            }
        }
    };
+27 −28
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.server.LocalServices;
import com.android.server.statusbar.StatusBarManagerInternal;

import org.junit.Before;
@@ -158,16 +157,16 @@ public class GestureLauncherServiceTest {
    }

    @Test
    public void testIsPanicButtonGestureEnabled_settingDisabled() {
        withPanicGestureEnabledSettingValue(false);
        assertFalse(mGestureLauncherService.isPanicButtonGestureEnabled(
    public void testIsEmergencyGestureEnabled_settingDisabled() {
        withEmergencyGestureEnabledSettingValue(false);
        assertFalse(mGestureLauncherService.isEmergencyGestureEnabled(
                mContext, FAKE_USER_ID));
    }

    @Test
    public void testIsPanicButtonGestureEnabled_settingEnabled() {
        withPanicGestureEnabledSettingValue(true);
        assertTrue(mGestureLauncherService.isPanicButtonGestureEnabled(
    public void testIsEmergencyGestureEnabled_settingEnabled() {
        withEmergencyGestureEnabledSettingValue(true);
        assertTrue(mGestureLauncherService.isEmergencyGestureEnabled(
                mContext, FAKE_USER_ID));
    }

@@ -181,10 +180,10 @@ public class GestureLauncherServiceTest {
    }

    @Test
    public void testHandlePanicGesture_userSetupComplete() {
    public void testHandleEmergencyGesture_userSetupComplete() {
        withUserSetupCompleteValue(true);

        assertTrue(mGestureLauncherService.handlePanicButtonGesture());
        assertTrue(mGestureLauncherService.handleEmergencyGesture());
    }

    @Test
@@ -196,10 +195,10 @@ public class GestureLauncherServiceTest {
    }

    @Test
    public void testHandlePanicGesture_userSetupNotComplete() {
    public void testHandleEmergencyGesture_userSetupNotComplete() {
        withUserSetupCompleteValue(false);

        assertFalse(mGestureLauncherService.handlePanicButtonGesture());
        assertFalse(mGestureLauncherService.handleEmergencyGesture());
    }

    @Test
@@ -223,9 +222,9 @@ public class GestureLauncherServiceTest {
    }

    @Test
    public void testInterceptPowerKeyDown_firstPowerDown_panicGestureNotLaunched() {
        withPanicGestureEnabledSettingValue(true);
        mGestureLauncherService.updatePanicButtonGestureEnabled();
    public void testInterceptPowerKeyDown_firstPowerDown_emergencyGestureNotLaunched() {
        withEmergencyGestureEnabledSettingValue(true);
        mGestureLauncherService.updateEmergencyGestureEnabled();

        long eventTime = INITIAL_EVENT_TIME_MILLIS
                + GestureLauncherService.POWER_SHORT_TAP_SEQUENCE_MAX_INTERVAL_MS - 1;
@@ -425,12 +424,12 @@ public class GestureLauncherServiceTest {

    @Test
    public void
            testInterceptPowerKeyDown_fiveInboundPresses_cameraAndPanicEnabled_bothLaunch() {
            testInterceptPowerKeyDown_fiveInboundPresses_cameraAndEmergencyEnabled_bothLaunch() {
        withCameraDoubleTapPowerEnableConfigValue(true);
        withCameraDoubleTapPowerDisableSettingValue(0);
        withPanicGestureEnabledSettingValue(true);
        withEmergencyGestureEnabledSettingValue(true);
        mGestureLauncherService.updateCameraDoubleTapPowerEnabled();
        mGestureLauncherService.updatePanicButtonGestureEnabled();
        mGestureLauncherService.updateEmergencyGestureEnabled();
        withUserSetupCompleteValue(true);

        // First button press does nothing
@@ -476,7 +475,7 @@ public class GestureLauncherServiceTest {
        assertEquals(1, tapCounts.get(0).intValue());
        assertEquals(2, tapCounts.get(1).intValue());

        // Continue the button presses for the panic gesture.
        // Continue the button presses for the emergency gesture.

        // Presses 3 and 4 should not trigger any gesture
        for (int i = 0; i < 2; i++) {
@@ -490,7 +489,7 @@ public class GestureLauncherServiceTest {
            assertFalse(outLaunched.value);
        }

        // Fifth button press should trigger the panic flow
        // Fifth button press should trigger the emergency flow
        eventTime += interval;
        keyEvent = new KeyEvent(IGNORED_DOWN_TIME, eventTime, IGNORED_ACTION, IGNORED_CODE,
                IGNORED_REPEAT);
@@ -513,9 +512,9 @@ public class GestureLauncherServiceTest {

    @Test
    public void
            testInterceptPowerKeyDown_fiveInboundPresses_panicGestureEnabled_launchesPanicFlow() {
        withPanicGestureEnabledSettingValue(true);
        mGestureLauncherService.updatePanicButtonGestureEnabled();
            testInterceptPowerKeyDown_fiveInboundPresses_emergencyGestureEnabled_launchesFlow() {
        withEmergencyGestureEnabledSettingValue(true);
        mGestureLauncherService.updateEmergencyGestureEnabled();
        withUserSetupCompleteValue(true);

        // First button press does nothing
@@ -542,7 +541,7 @@ public class GestureLauncherServiceTest {
            assertFalse(outLaunched.value);
        }

        // Fifth button press should trigger the panic flow
        // Fifth button press should trigger the emergency flow
        eventTime += interval;
        keyEvent = new KeyEvent(IGNORED_DOWN_TIME, eventTime, IGNORED_ACTION, IGNORED_CODE,
                IGNORED_REPEAT);
@@ -565,9 +564,9 @@ public class GestureLauncherServiceTest {

    @Test
    public void
            testInterceptPowerKeyDown_tenInboundPresses_panicGestureEnabled_pressesIntercepted() {
        withPanicGestureEnabledSettingValue(true);
        mGestureLauncherService.updatePanicButtonGestureEnabled();
            testInterceptPowerKeyDown_tenInboundPresses_emergencyGestureEnabled_keyIntercepted() {
        withEmergencyGestureEnabledSettingValue(true);
        mGestureLauncherService.updateEmergencyGestureEnabled();
        withUserSetupCompleteValue(true);

        // First button press does nothing
@@ -594,7 +593,7 @@ public class GestureLauncherServiceTest {
            assertFalse(outLaunched.value);
        }

        // Fifth button press should trigger the panic flow
        // Fifth button press should trigger the emergency flow
        eventTime += interval;
        keyEvent = new KeyEvent(IGNORED_DOWN_TIME, eventTime, IGNORED_ACTION, IGNORED_CODE,
                IGNORED_REPEAT);
@@ -1128,7 +1127,7 @@ public class GestureLauncherServiceTest {
                UserHandle.USER_CURRENT);
    }

    private void withPanicGestureEnabledSettingValue(boolean enable) {
    private void withEmergencyGestureEnabledSettingValue(boolean enable) {
        Settings.Secure.putIntForUser(
                mContentResolver,
                Settings.Secure.PANIC_GESTURE_ENABLED,