Merge "Properly synchronize interactivity state." into mnc-dev
This commit is contained in:
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#include "JNIHelp.h"
|
#include "JNIHelp.h"
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
|
#include <atomic>
|
||||||
|
#include <cinttypes>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <android_runtime/AndroidRuntime.h>
|
#include <android_runtime/AndroidRuntime.h>
|
||||||
#include <android_runtime/Log.h>
|
#include <android_runtime/Log.h>
|
||||||
@ -56,6 +58,8 @@
|
|||||||
#include "com_android_server_input_InputApplicationHandle.h"
|
#include "com_android_server_input_InputApplicationHandle.h"
|
||||||
#include "com_android_server_input_InputWindowHandle.h"
|
#include "com_android_server_input_InputWindowHandle.h"
|
||||||
|
|
||||||
|
#define INDENT " "
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
|
|
||||||
// The exponent used to calculate the pointer speed scaling factor.
|
// The exponent used to calculate the pointer speed scaling factor.
|
||||||
@ -126,6 +130,10 @@ inline static T max(const T& a, const T& b) {
|
|||||||
return a > b ? a : b;
|
return a > b ? a : b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char* toString(bool value) {
|
||||||
|
return value ? "true" : "false";
|
||||||
|
}
|
||||||
|
|
||||||
static jobject getInputApplicationHandleObjLocalRef(JNIEnv* env,
|
static jobject getInputApplicationHandleObjLocalRef(JNIEnv* env,
|
||||||
const sp<InputApplicationHandle>& inputApplicationHandle) {
|
const sp<InputApplicationHandle>& inputApplicationHandle) {
|
||||||
if (inputApplicationHandle == NULL) {
|
if (inputApplicationHandle == NULL) {
|
||||||
@ -262,7 +270,7 @@ private:
|
|||||||
wp<PointerController> pointerController;
|
wp<PointerController> pointerController;
|
||||||
} mLocked;
|
} mLocked;
|
||||||
|
|
||||||
volatile bool mInteractive;
|
std::atomic<bool> mInteractive;
|
||||||
|
|
||||||
void updateInactivityTimeoutLocked(const sp<PointerController>& controller);
|
void updateInactivityTimeoutLocked(const sp<PointerController>& controller);
|
||||||
void handleInterceptActions(jint wmActions, nsecs_t when, uint32_t& policyFlags);
|
void handleInterceptActions(jint wmActions, nsecs_t when, uint32_t& policyFlags);
|
||||||
@ -292,6 +300,7 @@ NativeInputManager::NativeInputManager(jobject contextObj,
|
|||||||
mLocked.pointerGesturesEnabled = true;
|
mLocked.pointerGesturesEnabled = true;
|
||||||
mLocked.showTouches = false;
|
mLocked.showTouches = false;
|
||||||
}
|
}
|
||||||
|
mInteractive = true;
|
||||||
|
|
||||||
sp<EventHub> eventHub = new EventHub();
|
sp<EventHub> eventHub = new EventHub();
|
||||||
mInputManager = new InputManager(eventHub, this, this);
|
mInputManager = new InputManager(eventHub, this, this);
|
||||||
@ -305,6 +314,21 @@ NativeInputManager::~NativeInputManager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NativeInputManager::dump(String8& dump) {
|
void NativeInputManager::dump(String8& dump) {
|
||||||
|
dump.append("Input Manager State:\n");
|
||||||
|
{
|
||||||
|
dump.appendFormat(INDENT "Interactive: %s\n", toString(mInteractive.load()));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
AutoMutex _l(mLock);
|
||||||
|
dump.appendFormat(INDENT "System UI Visibility: 0x%0" PRIx32 "\n",
|
||||||
|
mLocked.systemUiVisibility);
|
||||||
|
dump.appendFormat(INDENT "Pointer Speed: %" PRId32 "\n", mLocked.pointerSpeed);
|
||||||
|
dump.appendFormat(INDENT "Pointer Gestures Enabled: %s\n",
|
||||||
|
toString(mLocked.pointerGesturesEnabled));
|
||||||
|
dump.appendFormat(INDENT "Show Touches: %s\n", toString(mLocked.showTouches));
|
||||||
|
}
|
||||||
|
dump.append("\n");
|
||||||
|
|
||||||
mInputManager->getReader()->dump(dump);
|
mInputManager->getReader()->dump(dump);
|
||||||
dump.append("\n");
|
dump.append("\n");
|
||||||
|
|
||||||
@ -830,7 +854,8 @@ void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
|
|||||||
// - Ignore untrusted events and pass them along.
|
// - Ignore untrusted events and pass them along.
|
||||||
// - Ask the window manager what to do with normal events and trusted injected events.
|
// - Ask the window manager what to do with normal events and trusted injected events.
|
||||||
// - For normal events wake and brighten the screen if currently off or dim.
|
// - For normal events wake and brighten the screen if currently off or dim.
|
||||||
if (mInteractive) {
|
bool interactive = mInteractive.load();
|
||||||
|
if (interactive) {
|
||||||
policyFlags |= POLICY_FLAG_INTERACTIVE;
|
policyFlags |= POLICY_FLAG_INTERACTIVE;
|
||||||
}
|
}
|
||||||
if ((policyFlags & POLICY_FLAG_TRUSTED)) {
|
if ((policyFlags & POLICY_FLAG_TRUSTED)) {
|
||||||
@ -854,7 +879,7 @@ void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
|
|||||||
|
|
||||||
handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
|
handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
|
||||||
} else {
|
} else {
|
||||||
if (mInteractive) {
|
if (interactive) {
|
||||||
policyFlags |= POLICY_FLAG_PASS_TO_USER;
|
policyFlags |= POLICY_FLAG_PASS_TO_USER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -866,7 +891,8 @@ void NativeInputManager::interceptMotionBeforeQueueing(nsecs_t when, uint32_t& p
|
|||||||
// - No special filtering for injected events required at this time.
|
// - No special filtering for injected events required at this time.
|
||||||
// - Filter normal events based on screen state.
|
// - Filter normal events based on screen state.
|
||||||
// - For normal events brighten (but do not wake) the screen if currently dim.
|
// - For normal events brighten (but do not wake) the screen if currently dim.
|
||||||
if (mInteractive) {
|
bool interactive = mInteractive.load();
|
||||||
|
if (interactive) {
|
||||||
policyFlags |= POLICY_FLAG_INTERACTIVE;
|
policyFlags |= POLICY_FLAG_INTERACTIVE;
|
||||||
}
|
}
|
||||||
if ((policyFlags & POLICY_FLAG_TRUSTED) && !(policyFlags & POLICY_FLAG_INJECTED)) {
|
if ((policyFlags & POLICY_FLAG_TRUSTED) && !(policyFlags & POLICY_FLAG_INJECTED)) {
|
||||||
@ -885,7 +911,7 @@ void NativeInputManager::interceptMotionBeforeQueueing(nsecs_t when, uint32_t& p
|
|||||||
handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
|
handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (mInteractive) {
|
if (interactive) {
|
||||||
policyFlags |= POLICY_FLAG_PASS_TO_USER;
|
policyFlags |= POLICY_FLAG_PASS_TO_USER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user