Merge "Import wear power button gestures to master."

This commit is contained in:
TreeHugger Robot
2021-12-01 05:41:40 +00:00
committed by Android (Google) Code Review
4 changed files with 59 additions and 4 deletions

View File

@@ -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

View File

@@ -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" />

View File

@@ -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) {

View File

@@ -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);
}