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

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

Merge "Import wear power button gestures to master."

parents bca336a8 ed271ebb
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1048,9 +1048,16 @@
            0 - Nothing
            1 - Toggle theater mode setting
            2 - Brightness boost
            3 - Launch target activity defined by config_doublePressOnPowerTargetActivity
                if available
    -->
    <integer name="config_doublePressOnPowerBehavior">0</integer>

    <!-- Activity name for the default target activity to be launched. Note that
            config_doublePressOnPowerBehavior must be set to 3 for this to work. [DO NOT TRANSLATE]
    -->
    <string name="config_doublePressOnPowerTargetActivity" translatable="false"></string>

    <!-- Control the behavior when the user triple presses the power button.
            0 - Nothing
            1 - Toggle theater mode setting
+1 −0
Original line number Diff line number Diff line
@@ -463,6 +463,7 @@
  <java-symbol type="integer" name="config_shortPressOnStemPrimaryBehavior" />
  <java-symbol type="integer" name="config_doublePressOnStemPrimaryBehavior" />
  <java-symbol type="integer" name="config_triplePressOnStemPrimaryBehavior" />
  <java-symbol type="string" name="config_doublePressOnPowerTargetActivity" />
  <java-symbol type="integer" name="config_windowOutsetBottom" />
  <java-symbol type="integer" name="db_connection_pool_size" />
  <java-symbol type="integer" name="db_journal_size_limit" />
+11 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.hardware.Sensor;
@@ -150,6 +151,8 @@ public class GestureLauncherService extends SystemService {
    private int mPowerButtonSlowConsecutiveTaps;
    private final UiEventLogger mUiEventLogger;

    private boolean mHasFeatureWatch;

    @VisibleForTesting
    public enum GestureLauncherEvent implements UiEventLogger.UiEventEnum {
        @UiEvent(doc = "The user lifted the device just the right way to launch the camera.")
@@ -214,6 +217,9 @@ public class GestureLauncherService extends SystemService {
            mUserId = ActivityManager.getCurrentUser();
            mContext.registerReceiver(mUserReceiver, new IntentFilter(Intent.ACTION_USER_SWITCHED));
            registerContentObservers();

            mHasFeatureWatch =
                    mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
        }
    }

@@ -390,8 +396,7 @@ public class GestureLauncherService extends SystemService {
    /**
     * Whether to enable emergency gesture.
     */
    @VisibleForTesting
    static boolean isEmergencyGestureSettingEnabled(Context context, int userId) {
    public static boolean isEmergencyGestureSettingEnabled(Context context, int userId) {
        return isEmergencyGestureEnabled(context.getResources())
                && Settings.Secure.getIntForUser(context.getContentResolver(),
                Settings.Secure.EMERGENCY_GESTURE_ENABLED, 1, userId) != 0;
@@ -475,7 +480,10 @@ public class GestureLauncherService extends SystemService {
            if (mEmergencyGestureEnabled) {
                // Commit to intercepting the powerkey event after the second "quick" tap to avoid
                // lockscreen changes between launching camera and the emergency gesture flow.
                if (mPowerButtonConsecutiveTaps > 1) {
                // Since watch doesn't have camera gesture, only intercept power key event after
                // emergency gesture tap count.
                if (mPowerButtonConsecutiveTaps
                        > (mHasFeatureWatch ? EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD : 1)) {
                    intercept = interactive;
                }
                if (mPowerButtonConsecutiveTaps == EMERGENCY_GESTURE_POWER_TAP_COUNT_THRESHOLD) {
+40 −1
Original line number Diff line number Diff line
@@ -280,6 +280,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final int MULTI_PRESS_POWER_NOTHING = 0;
    static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
    static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2;
    static final int MULTI_PRESS_POWER_LAUNCH_TARGET_ACTIVITY = 3;

    // must match: config_longPressOnBackBehavior in config.xml
    static final int LONG_PRESS_BACK_NOTHING = 0;
@@ -497,6 +498,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    long mLongPressOnPowerAssistantTimeoutMs;
    int mVeryLongPressOnPowerBehavior;
    int mDoublePressOnPowerBehavior;
    ComponentName mPowerDoublePressTargetActivity;
    int mTriplePressOnPowerBehavior;
    int mLongPressOnBackBehavior;
    int mShortPressOnSleepBehavior;
@@ -952,6 +954,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            powerMultiPressAction(eventTime, interactive, mDoublePressOnPowerBehavior);
        } else if (count == 3) {
            powerMultiPressAction(eventTime, interactive, mTriplePressOnPowerBehavior);
        } else if (count > 3 && count <= getMaxMultiPressPowerCount()) {
            Slog.d(TAG, "No behavior defined for power press count " + count);
        } else if (count == 1 && interactive && !beganFromNonInteractive) {
            if (mSideFpsEventHandler.onSinglePressDetected(eventTime)) {
                Slog.i(TAG, "Suppressing power key because the user is interacting with the "
@@ -1084,6 +1088,30 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
                mPowerManager.boostScreenBrightness(eventTime);
                break;
            case MULTI_PRESS_POWER_LAUNCH_TARGET_ACTIVITY:
                if (DEBUG_INPUT) {
                    Slog.d(TAG, "Executing the double press power action.");
                }
                final boolean keyguardActive =
                        mKeyguardDelegate != null && mKeyguardDelegate.isShowing();
                if (!keyguardActive) {
                    Intent intent = new Intent();
                    if (mPowerDoublePressTargetActivity != null) {
                        intent.setComponent(mPowerDoublePressTargetActivity);
                        ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(
                                intent, /* flags= */0);
                        if (resolveInfo != null) {
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                            startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
                        } else {
                            Slog.e(TAG, "Could not resolve activity with : "
                                    + mPowerDoublePressTargetActivity.flattenToString()
                                    + " name.");
                        }
                    }
                }
                break;
        }
    }

@@ -1098,7 +1126,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        // GestureLauncherService.
        // To speed up the handling of single-press of power button inside SingleKeyGestureDetector,
        // however, we limit the max count to the number of button presses actually handled by the
        // SingleKeyGestureDetector.
        // SingleKeyGestureDetector except for wearable devices, where we want to de-dup the double
        // press gesture with the emergency gesture.
        if (mHasFeatureWatch
                && GestureLauncherService.isEmergencyGestureSettingEnabled(
                        mContext, ActivityManager.getCurrentUser())) {
            return 5;
        }
        if (mTriplePressOnPowerBehavior != MULTI_PRESS_POWER_NOTHING) {
            return 3;
        }
@@ -1933,6 +1967,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                com.android.internal.R.integer.config_veryLongPressOnPowerBehavior);
        mDoublePressOnPowerBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_doublePressOnPowerBehavior);
        mPowerDoublePressTargetActivity = ComponentName.unflattenFromString(
            mContext.getResources().getString(
                com.android.internal.R.string.config_doublePressOnPowerTargetActivity));
        mTriplePressOnPowerBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_triplePressOnPowerBehavior);
        mShortPressOnSleepBehavior = mContext.getResources().getInteger(
@@ -5686,6 +5723,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                return "MULTI_PRESS_POWER_THEATER_MODE";
            case MULTI_PRESS_POWER_BRIGHTNESS_BOOST:
                return "MULTI_PRESS_POWER_BRIGHTNESS_BOOST";
            case MULTI_PRESS_POWER_LAUNCH_TARGET_ACTIVITY:
                return "MULTI_PRESS_POWER_LAUNCH_TARGET_ACTIVITY";
            default:
                return Integer.toString(behavior);
        }