Import wear power button gestures to master.
Features imported in this change: 1. Double press on power button to launch target activity. 2. De-dup the power button gestures handled by PhoneWindowManager from GestureLauncherService. Bug: 200218055 Test: manual test Change-Id: I573a2910f0a564a5990de9c6b9d75360c6211fd5
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user