blob: 2b6d385fed48b861f8adabfee6f0cf78b2d97f5b [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.accessibility.utils;
import android.util.Log;
import android.view.MotionEvent;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
/**
* This class compares two motion events using a subset of their attributes: actionMasked, downTime,
* eventTime, and location. If two events match they are considered to be effectively equal.
*/
public class MotionEventMatcher extends TypeSafeMatcher<MotionEvent> {
private static final String LOG_TAG = "MotionEventMatcher";
long mDownTime;
long mEventTime;
long mActionMasked;
int mX;
int mY;
MotionEventMatcher(long downTime, long eventTime, int actionMasked, int x, int y) {
mDownTime = downTime;
mEventTime = eventTime;
mActionMasked = actionMasked;
mX = x;
mY = y;
}
public MotionEventMatcher(MotionEvent event) {
this(
event.getDownTime(),
event.getEventTime(),
event.getActionMasked(),
(int) event.getX(),
(int) event.getY());
}
void offsetTimesBy(long timeOffset) {
mDownTime += timeOffset;
mEventTime += timeOffset;
}
@Override
public boolean matchesSafely(MotionEvent event) {
if ((event.getDownTime() == mDownTime)
&& (event.getEventTime() == mEventTime)
&& (event.getActionMasked() == mActionMasked)
&& ((int) event.getX() == mX)
&& ((int) event.getY() == mY)) {
return true;
}
Log.e(LOG_TAG, "MotionEvent match failed");
Log.e(LOG_TAG, "event.getDownTime() = " + event.getDownTime() + ", expected " + mDownTime);
Log.e(
LOG_TAG,
"event.getEventTime() = " + event.getEventTime() + ", expected " + mEventTime);
Log.e(
LOG_TAG,
"event.getActionMasked() = "
+ event.getActionMasked()
+ ", expected "
+ mActionMasked);
Log.e(LOG_TAG, "event.getX() = " + event.getX() + ", expected " + mX);
Log.e(LOG_TAG, "event.getY() = " + event.getY() + ", expected " + mY);
return false;
}
@Override
public void describeTo(Description description) {
description.appendText("Motion event matcher");
}
}