diff --git a/services/inputflinger/InputReader.cpp b/services/inputflinger/InputReader.cpp index f89953c97..7b85f0732 100644 --- a/services/inputflinger/InputReader.cpp +++ b/services/inputflinger/InputReader.cpp @@ -16,7 +16,7 @@ #define LOG_TAG "InputReader" -//#define LOG_NDEBUG 0 +#define LOG_NDEBUG 0 // Log debug messages for each raw event received from the EventHub. #define DEBUG_RAW_EVENTS 0 @@ -2940,7 +2940,8 @@ void TouchInputMapper::configure(nsecs_t when, if (!changes || (changes & (InputReaderConfiguration::CHANGE_DISPLAY_INFO | InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT | InputReaderConfiguration::CHANGE_SHOW_TOUCHES - | InputReaderConfiguration::CHANGE_EXTERNAL_STYLUS_PRESENCE))) { + | InputReaderConfiguration::CHANGE_EXTERNAL_STYLUS_PRESENCE + | InputReaderConfiguration::CHANGE_STYLUS_ICON_ENABLED))) { // Configure device sources, surface dimensions, orientation and // scaling factors. configureSurface(when, &resetNeeded); @@ -4870,7 +4871,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag && (mPointerGesture.lastGestureMode == PointerGesture::SWIPE || mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)) { // Remind the user of where the pointer is after finishing a gesture with spots. - mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL); + unfadePointer(PointerControllerInterface::TRANSITION_GRADUAL); } break; case PointerGesture::TAP: @@ -5936,7 +5937,7 @@ void TouchInputMapper::dispatchPointerSimple(nsecs_t when, uint32_t policyFlags, mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER); mPointerController->clearSpots(); mPointerController->setButtonState(mCurrentRawState.buttonState); - mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE); + unfadePointer(PointerControllerInterface::TRANSITION_IMMEDIATE); } else if (!down && !hovering && (mPointerSimple.down || mPointerSimple.hovering)) { mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL); } @@ -6143,6 +6144,13 @@ void TouchInputMapper::fadePointer() { } } +void TouchInputMapper::unfadePointer(PointerControllerInterface::Transition transition) { + if (mPointerController != NULL && + !(mPointerUsage == POINTER_USAGE_STYLUS && !mConfig.stylusIconEnabled)) { + mPointerController->unfade(transition); + } +} + nsecs_t TouchInputMapper::mLastStylusTime = 0; bool TouchInputMapper::rejectPalm(nsecs_t when) { diff --git a/services/inputflinger/InputReader.h b/services/inputflinger/InputReader.h index 22a5dc8be..9a46fb8ee 100644 --- a/services/inputflinger/InputReader.h +++ b/services/inputflinger/InputReader.h @@ -145,7 +145,10 @@ struct InputReaderConfiguration { CHANGE_EXTERNAL_STYLUS_PRESENCE = 1 << 7, // Volume keys rotation option changed. - CHANGE_VOLUME_KEYS_ROTATION = 1 << 7, + CHANGE_VOLUME_KEYS_ROTATION = 1 << 8, + + // Stylus icon option changed. + CHANGE_STYLUS_ICON_ENABLED = 1 << 9, // All devices must be reopened. CHANGE_MUST_REOPEN = 1 << 31, @@ -234,13 +237,16 @@ struct InputReaderConfiguration { // True to show the location of touches on the touch screen as spots. bool showTouches; - // Remap volume keys according to display rotation - // 0 - disabled, 1 - phone or hybrid rotation mode, 2 - tablet rotation mode - int volumeKeysRotationMode; + // True to show the pointer icon when a stylus is used. + bool stylusIconEnabled; // Ignore finger touches this long after the stylus has been used (including hover) nsecs_t stylusPalmRejectionTime; + // Remap volume keys according to display rotation + // 0 - disabled, 1 - phone or hybrid rotation mode, 2 - tablet rotation mode + int volumeKeysRotationMode; + InputReaderConfiguration() : virtualKeyQuietTime(0), pointerVelocityControlParameters(1.0f, 500.0f, 3000.0f, 3.0f), @@ -257,9 +263,11 @@ struct InputReaderConfiguration { pointerGestureSwipeMaxWidthRatio(0.25f), pointerGestureMovementSpeedRatio(0.8f), pointerGestureZoomSpeedRatio(0.3f), - stylusPalmRejectionTime(50 * 10000000LL), // 50 ms showTouches(false), - volumeKeysRotationMode(0) { } + stylusIconEnabled(false), + stylusPalmRejectionTime(50 * 10000000LL), // 50 ms + volumeKeysRotationMode(0) + { } bool getDisplayInfo(bool external, DisplayViewport* outViewport) const; void setDisplayInfo(bool external, const DisplayViewport& viewport); @@ -1870,6 +1878,8 @@ private: static void assignPointerIds(const RawState* last, RawState* current); + void unfadePointer(PointerControllerInterface::Transition transition); + bool rejectPalm(nsecs_t when); };