frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java
/**
* Rule for single power key gesture.
*/
private final class PowerKeyRule extends SingleKeyGestureDetector.SingleKeyRule {
PowerKeyRule() {
super(KEYCODE_POWER);
}
@Override
boolean supportLongPress() {
return hasLongPressOnPowerBehavior();
}
@Override
boolean supportVeryLongPress() {
return hasVeryLongPressOnPowerBehavior();
}
@Override
int getMaxMultiPressCount() {
return getMaxMultiPressPowerCount();
}
@Override
void onPress(long downTime) {
if ("true".equals(SystemProperties.get(Properties.PROPERTY_DISABLE_SHORT_POWER)) &&
mPowerManager.isScreenPowerOn()) {
Slog.d(TAG, "ignore short power key");
return;
}
powerPress(downTime, 1 /*count*/,
mSingleKeyGestureDetector.beganFromNonInteractive());
}
@Override
long getLongPressTimeoutMs() {
if (getResolvedLongPressOnPowerBehavior() == LONG_PRESS_POWER_ASSISTANT) {
return mLongPressOnPowerAssistantTimeoutMs;
} else {
return super.getLongPressTimeoutMs();
}
}
@Override
void onLongPress(long eventTime) {
if (mSingleKeyGestureDetector.beganFromNonInteractive()
&& !mSupportLongPressPowerWhenNonInteractive) {
Slog.v(TAG, "Not support long press power when device is not interactive.");
return;
}
powerLongPress(eventTime);
}
@Override
void onVeryLongPress(long eventTime) {
mActivityManagerInternal.prepareForPossibleShutdown();
powerVeryLongPress();
}
@Override
void onMultiPress(long downTime, int count) {
powerPress(downTime, count, mSingleKeyGestureDetector.beganFromNonInteractive());
}
}
/**
* Rule for single back key gesture.
*/
private final class BackKeyRule extends SingleKeyGestureDetector.SingleKeyRule {
BackKeyRule() {
super(KEYCODE_BACK);
}
@Override
boolean supportLongPress() {
return hasLongPressOnBackBehavior();
}
@Override
int getMaxMultiPressCount() {
return 1;
}
@Override
void onPress(long downTime) {
mBackKeyHandled |= backKeyPress();
}
@Override
void onLongPress(long downTime) {
backLongPress();
}
}
/**
* Rule for single stem primary key gesture.
*/
private final class StemPrimaryKeyRule extends SingleKeyGestureDetector.SingleKeyRule {
StemPrimaryKeyRule() {
super(KeyEvent.KEYCODE_STEM_PRIMARY);
}
@Override
boolean supportLongPress() {
return hasLongPressOnStemPrimaryBehavior();
}
@Override
int getMaxMultiPressCount() {
return getMaxMultiPressStemPrimaryCount();
}
@Override
void onPress(long downTime) {
stemPrimaryPress(1 /*count*/);
}
@Override
void onLongPress(long eventTime) {
stemPrimaryLongPress();
}
@Override
void onMultiPress(long downTime, int count) {
stemPrimaryPress(count);
}
}