Issue Description:
When do monkey test on some applications, there is big probability get ANR issue. one example is as following:
adb shell monkey -p com.google.android.street -v 500000
Root Cause:
situation 1. InputDispatcher Thread calls findTouchedWindowTargetsLocked routine, there is a AMOTION_EVENT_ACTION_DOWN event
and it can find a splittable touched window for this event , then mTouchState.split set to true.
situation 2. WMS Thread calls setInputWindows routine and all TouchedWindows associated with mTouchState are removed ,
mTouchState.split status still keep true.
situation 3. InputDispatcher Thread calls findTouchedWindowTargetsLocked routine, there is a AMOTION_EVENT_ACTION_POINTER_DOWN event
and it can find found touched window, exit window loop in following code :
if (windowInfo->visible) {
if (! (flags & InputWindowInfo::FLAG_NOT_TOUCHABLE)) {
isTouchModal = (flags & (InputWindowInfo::FLAG_NOT_FOCUSABLE
| InputWindowInfo::FLAG_NOT_TOUCH_MODAL)) == 0;
if (isTouchModal || windowInfo->touchableRegionContainsPoint(x, y)) {
if (! screenWasOff
|| (flags & InputWindowInfo::FLAG_TOUCHABLE_WHEN_WAKING)) {
newTouchedWindowHandle = windowHandle;
}
break; // found touched window, exit window loop
}
}
situation 4. The following code will have problem after situation 3 in below conditions:
newTouchedWindowHandle doesn't support split , isSplit is true ( last time touched window is splittable )
mTempTouchState.getFirstForegroundWindowHandle will always return NULL due to situation 2
// Figure out whether splitting will be allowed for this window.
if (newTouchedWindowHandle != NULL
&& newTouchedWindowHandle->getInfo()->supportsSplitTouch()) {
// New window supports splitting.
isSplit = true;
} else if (isSplit) {
// New window does not support splitting but we have already split events.
// Assign the pointer to the first foreground window we find.
// (May be NULL which is why we put this code block before the next check.)
newTouchedWindowHandle = mTempTouchState.getFirstForegroundWindowHandle();
}
The window says it does not want to support splitting, so the touches should go to one of the previously split windows except
that there are none, which result to "goto Unresponsive" in findtouchedWindowTargetsLocked routine.
This is not the correct behavior because the user did actually touch something.
situation 5. InputDispatcher Thread will call dispatchOnce repeated to try to dispatch this AMOTION_EVENT_ACTION_POINTER_DOWN event,
then ANR timeout ( 5000ms ) will be exceeded after several times "goto Unresponsive"in findtouchedWindowTargetsLocked routine.
Solution:
In situation 4 we should drop the touch. If the newly touched window was splittable then we wouldn't drop the touch.
It's only when the newly touched window was not splittable where we will drop the touch.
Change-Id: Iab2c06ce0597ac77eb886ccd9d84646c86723bdb
Author: Jeffrey Brown <jeffbrown@android.com>
Author: Erjun Ding <erjunx.ding@intel.com>
Author: Zhenghua Wang <zhenghua.wang@intel.com>
Author: Jack Ren <jack.ren@intel.com>
Author: Bruce Beare <bruce.j.beare@intel.com>
This fixes cases where x was a large number, causing fPart to
exceed the 32 bit signed integer range (while fitting in an
unsigned 32 bit integer), making the table index a negative
number.
Change-Id: I674047db65f89148a93d218c138b42cd8305f80e
After skipping * with "token++", the length should decrease by 1 as
well.
(merged from 996b073e813ba1a22a13282ccdebb664f14ba898)
Change-Id: Ie6232ef603bb31e25e03b926e6c1bb92ac34902d
If length of the string being showed on Toast is short (less than 8 chars),
it is aligned to left rather than to center.
Added attribute android:layout_gravity="center_horizontal" on the TextView where Toast's message are shown to fix issue.
Change-Id: I77669fd8a11d1ec8f6b082348eb818671ce158bb
Signed-off-by: Taeho Kim <jyte82@gmail.com>
AAPT has a fixed built-in list of files and directories
to ignore when parsing resource files. Over the years we
always had developers requiring specific patterns.
If the env var ANDROID_AAPT_IGNORE is set, it is parsed
to find which file/directory patterns to ignore.
Otherwise a default is used that matches the current behavior.
Added a command-line option for it:
aapt di --ignore-assets "foo*:*.blah"
SDK Bug: 5343 24067
Change-Id: Ia4caa2a8188c8c1df143f884e459b8182645995f
InputManager#getSwitchState() returns AKEY_STATE_UP(0=OPEN)
and AKEY_STATE_DOWN(1=CLOSE).
mLidOpen is opposite from a real lid status.
Change-Id: I40aa4e0defb95d82b6144ff6b7514f721bf9030f
When used in a `ViewPager`, fragments that are present on the adjacent,
cached pages will receive context selection dispatches which, depending
on your fragment contents, can be difficult to determine whether or not
the event truly originated from your view.
By using the visible hint we restrict dispatching to only those fragments
which are marked as being visible. Since the fragment pager adapter
updates this setting properly most implementations will be afforded this
fix without any change required. If the user is implementing their own
adapter they likely already understand the implications of these cached
fragments and the reponsibility for updating the boolean falls to them.
Mirrors support library change Ie6a72c1c82c2784774373670007b6f5948fe16da
Change-Id: I1bc6f74e26660ef4a3c20419c077e37992412e94
If a fragment's saved view state is null and the user
visible hint is true then the `result` bundle will have
never been initialized to a value resulting in a
`NullPointerException`.
Mirrors support library change I8ba585bc6b9298841490d64bc22a8219cd261adb.
Change-Id: Iabd5ac293d2ece3771da9ef257479eca0dcd523c
The distance max used in the MotionRange is calculated
incorrectly.
Looks like a copy-and-paste error.
Change-Id: I2b6daab088df0fb69e05682b67ca33524ff35987