Loading core/res/res/values/config.xml +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading services/core/java/com/android/server/GestureLauncherService.java +11 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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.") Loading Loading @@ -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); } } Loading Loading @@ -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; Loading Loading @@ -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) { Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +40 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -497,6 +498,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { long mLongPressOnPowerAssistantTimeoutMs; int mVeryLongPressOnPowerBehavior; int mDoublePressOnPowerBehavior; ComponentName mPowerDoublePressTargetActivity; int mTriplePressOnPowerBehavior; int mLongPressOnBackBehavior; int mShortPressOnSleepBehavior; Loading Loading @@ -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 " Loading Loading @@ -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; } } Loading @@ -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; } Loading Loading @@ -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( Loading Loading @@ -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); } Loading Loading
core/res/res/values/config.xml +7 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" /> Loading
services/core/java/com/android/server/GestureLauncherService.java +11 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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.") Loading Loading @@ -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); } } Loading Loading @@ -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; Loading Loading @@ -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) { Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +40 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -497,6 +498,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { long mLongPressOnPowerAssistantTimeoutMs; int mVeryLongPressOnPowerBehavior; int mDoublePressOnPowerBehavior; ComponentName mPowerDoublePressTargetActivity; int mTriplePressOnPowerBehavior; int mLongPressOnBackBehavior; int mShortPressOnSleepBehavior; Loading Loading @@ -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 " Loading Loading @@ -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; } } Loading @@ -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; } Loading Loading @@ -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( Loading Loading @@ -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); } Loading