163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/* 263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Copyright 2017 The Android Open Source Project 363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * you may not use this file except in compliance with the License. 663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * You may obtain a copy of the License at 763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * http://www.apache.org/licenses/LICENSE-2.0 963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 1063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Unless required by applicable law or agreed to in writing, software 1163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * See the License for the specific language governing permissions and 1463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * limitations under the License. 1563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 1663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 172a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikaspackage androidx.recyclerview.selection.testing; 1863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 1963d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.graphics.Point; 2063d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.view.KeyEvent; 2163d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.view.MotionEvent; 2263d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.view.MotionEvent.PointerCoords; 2363d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.view.MotionEvent.PointerProperties; 2463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 2560dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport androidx.annotation.IntDef; 2660dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikas 2763d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.lang.annotation.Retention; 2863d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.lang.annotation.RetentionPolicy; 2963d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.util.HashSet; 3063d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport java.util.Set; 3163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 3263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/** 3363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Handy-dandy wrapper class to facilitate the creation of MotionEvents. 3463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 3563d2846409d84487d4856d3b8d18cc4684352e29Steve McKaypublic final class TestEvents { 3663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 3763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 3863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Common mouse event types...for your convenience. 3963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 4063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final class Mouse { 4163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent CLICK = 4263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().primary().build(); 4363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent CTRL_CLICK = 4463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().primary().ctrl().build(); 4563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent ALT_CLICK = 4663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().primary().alt().build(); 4763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent SHIFT_CLICK = 4863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().primary().shift().build(); 4963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent SECONDARY_CLICK = 5063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().secondary().build(); 5163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent TERTIARY_CLICK = 5263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().mouse().tertiary().build(); 5363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 5463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 5563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 5663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Common touch event types...for your convenience. 5763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 5863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final class Touch { 5963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final MotionEvent TAP = 6063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestEvents.builder().touch().build(); 6163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 6263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 6363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay static final int ACTION_UNSET = -1; 6463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 6563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay // Add other actions from MotionEvent.ACTION_ as needed. 6663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @IntDef(flag = true, value = { 6763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.ACTION_DOWN, 6863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.ACTION_MOVE, 6963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.ACTION_UP 7063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay }) 7163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Retention(RetentionPolicy.SOURCE) 7263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public @interface Action {} 7363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 7463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay // Add other types from MotionEvent.TOOL_TYPE_ as needed. 7563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @IntDef(flag = true, value = { 7663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.TOOL_TYPE_FINGER, 7763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.TOOL_TYPE_MOUSE, 7863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.TOOL_TYPE_STYLUS, 7963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.TOOL_TYPE_UNKNOWN 8063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay }) 8163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Retention(RetentionPolicy.SOURCE) 8263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public @interface ToolType {} 8363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 8463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @IntDef(flag = true, value = { 8563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.BUTTON_PRIMARY, 8663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay MotionEvent.BUTTON_SECONDARY 8763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay }) 8863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Retention(RetentionPolicy.SOURCE) 8963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public @interface Button {} 9063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 9163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @IntDef(flag = true, value = { 9263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay KeyEvent.META_SHIFT_ON, 9363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay KeyEvent.META_CTRL_ON 9463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay }) 9563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Retention(RetentionPolicy.SOURCE) 9663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public @interface Key {} 9763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 9863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private static final class State { 9963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private @Action int mAction = ACTION_UNSET; 10063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private @ToolType int mToolType = MotionEvent.TOOL_TYPE_UNKNOWN; 10163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private int mPointerCount = 1; 10263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private Set<Integer> mButtons = new HashSet<>(); 10363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private Set<Integer> mKeys = new HashSet<>(); 10463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private Point mLocation = new Point(0, 0); 10563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private Point mRawLocation = new Point(0, 0); 10663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 10763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 10863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static Builder builder() { 10963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return new Builder(); 11063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 11163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 11363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Test event builder with convenience methods for common event attrs. 11463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 11563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public static final class Builder { 11663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private State mState = new State(); 11863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 12063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * @param action Any action specified in {@link MotionEvent}. 12163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * @return 12263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 12363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder action(int action) { 12463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mAction = action; 12563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 12663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 12763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 12863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder type(@ToolType int type) { 12963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mToolType = type; 13063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 13163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 13263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 13363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder location(int x, int y) { 13463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mLocation = new Point(x, y); 13563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 13663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 13763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 13863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder rawLocation(int x, int y) { 13963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mRawLocation = new Point(x, y); 14063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 14163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 14263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 14363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder pointerCount(int count) { 14463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mPointerCount = count; 14563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 14663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 14763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 14863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 14963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Adds one or more button press attributes. 15063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 15163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder pressButton(@Button int... buttons) { 15263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (int button : buttons) { 15363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mButtons.add(button); 15463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 15563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 15663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 15763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 15863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 15963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Removes one or more button press attributes. 16063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 16163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder releaseButton(@Button int... buttons) { 16263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (int button : buttons) { 16363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mButtons.remove(button); 16463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 16563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 16663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 16763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 16863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 16963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Adds one or more key press attributes. 17063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 17163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder pressKey(@Key int... keys) { 17263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (int key : keys) { 17363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mKeys.add(key); 17463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 17563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 17663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 17763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 17863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay /** 17963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Removes one or more key press attributes. 18063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 18163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder releaseKey(@Button int... keys) { 18263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (int key : keys) { 18363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mKeys.remove(key); 18463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 18563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 18663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 18763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 18863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder touch() { 18963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay type(MotionEvent.TOOL_TYPE_FINGER); 19063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 19163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 19263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 19363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder mouse() { 19463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay type(MotionEvent.TOOL_TYPE_MOUSE); 19563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 19663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 19763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 19863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder shift() { 19963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressKey(KeyEvent.META_SHIFT_ON); 20063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 20163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 20263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 20363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder unshift() { 20463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseKey(KeyEvent.META_SHIFT_ON); 20563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 20663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 20763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 20863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder ctrl() { 20963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressKey(KeyEvent.META_CTRL_ON); 21063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 21163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 21263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 21363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder alt() { 21463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressKey(KeyEvent.META_ALT_ON); 21563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 21663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 21763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 21863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder primary() { 21963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressButton(MotionEvent.BUTTON_PRIMARY); 22063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_SECONDARY); 22163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_TERTIARY); 22263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 22363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 22463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 22563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder secondary() { 22663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressButton(MotionEvent.BUTTON_SECONDARY); 22763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_PRIMARY); 22863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_TERTIARY); 22963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 23063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 23163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 23263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public Builder tertiary() { 23363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pressButton(MotionEvent.BUTTON_TERTIARY); 23463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_PRIMARY); 23563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay releaseButton(MotionEvent.BUTTON_SECONDARY); 23663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return this; 23763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 23863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 23963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public MotionEvent build() { 24063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 24163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay PointerProperties[] pointers = new PointerProperties[1]; 24263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pointers[0] = new PointerProperties(); 24363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pointers[0].id = 0; 24463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pointers[0].toolType = mState.mToolType; 24563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 24663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay PointerCoords[] coords = new PointerCoords[1]; 24763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay coords[0] = new PointerCoords(); 24863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay coords[0].x = mState.mLocation.x; 24963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay coords[0].y = mState.mLocation.y; 25063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 25163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay int buttons = 0; 25263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (Integer button : mState.mButtons) { 25363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay buttons |= button; 25463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 25563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 25663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay int keys = 0; 25763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay for (Integer key : mState.mKeys) { 25863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay keys |= key; 25963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 26063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 26163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay return MotionEvent.obtain( 26263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 0, // down time 26363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 1, // event time 26463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mState.mAction, 26563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 1, // pointerCount, 26663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay pointers, 26763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay coords, 26863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay keys, 26963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay buttons, 27063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 1.0f, // x precision 27163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 1.0f, // y precision 27263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 0, // device id 27363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 0, // edge flags 27463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 0, // int source, 27563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 0 // int flags 27663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay ); 27763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 27863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 27963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay} 280