19648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/*
29648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Copyright (C) 2011 The Android Open Source Project
39648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
49648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
59648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * you may not use this file except in compliance with the License.
69648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * You may obtain a copy of the License at
79648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
89648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
99648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * See the License for the specific language governing permissions and
149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * limitations under the License.
159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovpackage android.support.v4.view.accessibility;
189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.os.Build;
209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.view.accessibility.AccessibilityEvent;
219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/**
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link AccessibilityEvent}
240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
2617f0ca51e84eb8d9f70a64e97de1151739a04406Chris Banespublic final class AccessibilityEventCompat {
279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static interface AccessibilityEventVersionImpl {
292bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        int getRecordCount(AccessibilityEvent event);
302bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        void appendRecord(AccessibilityEvent event, Object record);
312bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        Object getRecord(AccessibilityEvent event, int index);
322bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        void setContentChangeTypes(AccessibilityEvent event, int types);
332bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        int getContentChangeTypes(AccessibilityEvent event);
341ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setMovementGranularity(AccessibilityEvent event, int granularity);
351ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getMovementGranularity(AccessibilityEvent event);
361ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setAction(AccessibilityEvent event, int action);
371ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getAction(AccessibilityEvent event);
389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityEventStubImpl implements AccessibilityEventVersionImpl {
419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
42b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void appendRecord(AccessibilityEvent event, Object record) {
449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
47b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public Object getRecord(AccessibilityEvent event, int index) {
499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
52b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
532bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public void setContentChangeTypes(AccessibilityEvent event, int types) {
542bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
552bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
562bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
572bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public int getRecordCount(AccessibilityEvent event) {
599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return 0;
609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
612bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
622bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
632bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public int getContentChangeTypes(AccessibilityEvent event) {
642bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            return 0;
652bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
661ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
671ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
681ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setMovementGranularity(AccessibilityEvent event, int granularity) {
691ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
701ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
711ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
721ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getMovementGranularity(AccessibilityEvent event) {
731ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return 0;
741ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
751ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
761ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
771ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setAction(AccessibilityEvent event, int action) {
781ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
791ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
801ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
811ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getAction(AccessibilityEvent event) {
821ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return 0;
831ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityEventIcsImpl extends AccessibilityEventStubImpl {
879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
899648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void appendRecord(AccessibilityEvent event, Object record) {
909648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            AccessibilityEventCompatIcs.appendRecord(event, record);
919648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
929648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
949648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public Object getRecord(AccessibilityEvent event, int index) {
959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityEventCompatIcs.getRecord(event, index);
969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public int getRecordCount(AccessibilityEvent event) {
1009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityEventCompatIcs.getRecordCount(event);
1019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1041ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    static class AccessibilityEventJellyBeanImpl extends AccessibilityEventIcsImpl {
1051ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1061ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setMovementGranularity(AccessibilityEvent event, int granularity) {
1071ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            AccessibilityEventCompatJellyBean.setMovementGranularity(event, granularity);
1081ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1091ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1101ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1111ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getMovementGranularity(AccessibilityEvent event) {
1121ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return AccessibilityEventCompatJellyBean.getMovementGranularity(event);
1131ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1141ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1151ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1161ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public void setAction(AccessibilityEvent event, int action) {
1171ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            AccessibilityEventCompatJellyBean.setAction(event, action);
1181ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1191ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1201ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1211ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public int getAction(AccessibilityEvent event) {
1221ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return AccessibilityEventCompatJellyBean.getAction(event);
1231ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1241ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
1251ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1261ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    static class AccessibilityEventKitKatImpl extends AccessibilityEventJellyBeanImpl {
1272bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
1282bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
1292bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public void setContentChangeTypes(AccessibilityEvent event, int types) {
1302bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            AccessibilityEventCompatKitKat.setContentChangeTypes(event, types);
1312bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
1322bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
1332bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
1342bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public int getContentChangeTypes(AccessibilityEvent event) {
1352bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            return AccessibilityEventCompatKitKat.getContentChangeTypes(event);
1362bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
1372bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
1382bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
1399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private final static AccessibilityEventVersionImpl IMPL;
1409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static {
1422bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        if (Build.VERSION.SDK_INT >= 19) { // KitKat
1432bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            IMPL = new AccessibilityEventKitKatImpl();
1441ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        } else if (Build.VERSION.SDK_INT >= 16) { // Jellybean
1451ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            IMPL = new AccessibilityEventJellyBeanImpl();
1462bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        } else if (Build.VERSION.SDK_INT >= 14) { // ICS
1479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityEventIcsImpl();
1489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        } else {
1499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityEventStubImpl();
1509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of a hover enter over a {@link android.view.View}.
1559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_HOVER_ENTER = 0x00000080;
1579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of a hover exit over a {@link android.view.View}.
1609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_HOVER_EXIT = 0x00000100;
1629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of starting a touch exploration gesture.
1659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200;
1679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of ending a touch exploration gesture.
1709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400;
1729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of changing the content of a window.
1759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;
1779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of scrolling a view.
1809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_SCROLLED = 0x00001000;
1829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of changing the selection in an {@link android.widget.EditText}.
1859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000;
1879648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
188b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
189b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of an application making an announcement.
190b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
191b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_ANNOUNCEMENT = 0x00004000;
192b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
193b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
194b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of gaining accessibility focus.
195b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
196b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000;
197b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
198b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
199b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of clearing accessibility focus.
200b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
201b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000;
202b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
203b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
204b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of traversing the text of a view at a given movement granularity.
205b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
206b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x00020000;
207b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
208b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
209b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of beginning gesture detection.
210b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
211b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_GESTURE_DETECTION_START = 0x00040000;
212b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
213b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
214b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of ending gesture detection.
215b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
216b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_GESTURE_DETECTION_END = 0x00080000;
217b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
218b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
219b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of the user starting to touch the screen.
220b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
221b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_TOUCH_INTERACTION_START = 0x00100000;
222b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
223b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
224b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of the user ending to touch the screen.
225b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
226b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_TOUCH_INTERACTION_END = 0x00200000;
227b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
228b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
2291ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Represents the event change in the windows shown on the screen.
2301ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
2311ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public static final int TYPE_WINDOWS_CHANGED = 0x00400000;
2321ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
2331ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
2341ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Represents the event of a context click on a {@link android.view.View}.
2351ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
2361ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public static final int TYPE_VIEW_CONTEXT_CLICKED = 0x00800000;
2371ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
2381ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
2391ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Represents the event of the assistant currently reading the users screen context.
2401ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
2411ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public static final int TYPE_ASSIST_READING_CONTEXT = 0x01000000;
2421ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
2431ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
2442bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
2452bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The type of change is not defined.
2462bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2472bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0x00000000;
2482bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2492bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
2502bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
2512bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * A node in the subtree rooted at the source node was added or removed.
2522bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2532bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_SUBTREE = 0x00000001;
2542bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2552bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
2562bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
2572bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The node's text changed.
2582bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2592bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_TEXT = 0x00000002;
2602bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2612bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
2622bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
2632bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The node's content description changed.
2642bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2652bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 0x00000004;
2662bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2672bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
268b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Mask for {@link AccessibilityEvent} all types.
269b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     *
270b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_CLICKED
271b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_LONG_CLICKED
272b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_SELECTED
273b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_FOCUSED
274b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED
275b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED
276b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED
277b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_HOVER_ENTER
278b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_HOVER_EXIT
279b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_TOUCH_EXPLORATION_GESTURE_START
280b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_TOUCH_EXPLORATION_GESTURE_END
281b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_WINDOW_CONTENT_CHANGED
282b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_SCROLLED
283b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_TEXT_SELECTION_CHANGED
284b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_ANNOUNCEMENT
285b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
286b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_GESTURE_DETECTION_START
287b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_GESTURE_DETECTION_END
288b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_TOUCH_INTERACTION_START
289b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_TOUCH_INTERACTION_END
290b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
291b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
292b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
2939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /*
2949648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Hide constructor from clients.
2959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private AccessibilityEventCompat() {
2979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
3009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
3019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Gets the number of records contained in the event.
3029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
3039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The number of records.
3049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
3059648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static int getRecordCount(AccessibilityEvent event) {
3069648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getRecordCount(event);
3079648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
3089648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
3099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
3109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Appends an {@link android.view.accessibility.AccessibilityRecord} to the end of
3119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * event records.
3129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
3139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param record The record to append.
3149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
3159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @throws IllegalStateException If called from an AccessibilityService.
3169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
3179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void appendRecord(AccessibilityEvent event, AccessibilityRecordCompat record) {
3189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.appendRecord(event, record.getImpl());
3199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
3209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
3219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
3229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Gets the record at a given index.
3239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
3249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param index The index.
3259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The record at the specified index.
3269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
3279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static AccessibilityRecordCompat getRecord(AccessibilityEvent event, int index) {
3289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return new AccessibilityRecordCompat(IMPL.getRecord(event, index));
3299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
3304184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav
3314184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    /**
3324184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * Creates an {@link AccessibilityRecordCompat} from an {@link AccessibilityEvent}
3334184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * that can be used to manipulate the event properties defined in
3344184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * {@link android.view.accessibility.AccessibilityRecord}.
3354184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * <p>
3368f590dabd4e7d3fa4abfc74c91640690b63fc45aSvetoslav     * <strong>Note:</strong> Do not call {@link AccessibilityRecordCompat#recycle()} on the
3378f590dabd4e7d3fa4abfc74c91640690b63fc45aSvetoslav     * returned {@link AccessibilityRecordCompat}. Call {@link AccessibilityEvent#recycle()}
3384184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * in case you want to recycle the event.
3394184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * </p>
3404184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     *
3414184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * @param event The from which to create a record.
3424184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * @return An {@link AccessibilityRecordCompat}.
3434184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     */
3444184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    public static AccessibilityRecordCompat asRecord(AccessibilityEvent event) {
3454184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav        return new AccessibilityRecordCompat(event);
3464184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    }
3472bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
3482bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
3492bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Sets the bit mask of node tree changes signaled by an
3502bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * {@link #TYPE_WINDOW_CONTENT_CHANGED} event.
3512bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *
3522bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @param changeTypes The bit mask of change types.
3532bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @throws IllegalStateException If called from an AccessibilityService.
3542bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @see #getContentChangeTypes(AccessibilityEvent)
3552bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
3562bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static void setContentChangeTypes(AccessibilityEvent event, int changeTypes) {
3572bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        IMPL.setContentChangeTypes(event, changeTypes);
3582bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
3592bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
3602bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
3612bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Gets the bit mask of change types signaled by an
3622bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * {@link #TYPE_WINDOW_CONTENT_CHANGED} event. A single event may represent
3632bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * multiple change types.
3642bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *
3652bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @return The bit mask of change types. One or more of:
3662bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <ul>
3672bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION}
3682bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_SUBTREE}
3692bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_TEXT}
3702bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_UNDEFINED}
3712bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         </ul>
3722bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
3732bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static int getContentChangeTypes(AccessibilityEvent event) {
3742bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        return IMPL.getContentChangeTypes(event);
3752bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
3762bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
3771ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
3781ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Sets the movement granularity that was traversed.
3791ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
3801ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @param granularity The granularity.
3811ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
3821ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @throws IllegalStateException If called from an AccessibilityService.
3831ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
3841ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public void setMovementGranularity(AccessibilityEvent event, int granularity) {
3851ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        IMPL.setMovementGranularity(event, granularity);
3861ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
3871ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
3881ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
3891ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Gets the movement granularity that was traversed.
3901ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
3911ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @return The granularity.
3921ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
3931ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public int getMovementGranularity(AccessibilityEvent event) {
3941ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        return IMPL.getMovementGranularity(event);
3951ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
3961ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
3971ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
3981ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Sets the performed action that triggered this event.
3991ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <p>
4001ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Valid actions are defined in {@link AccessibilityNodeInfoCompat}:
4011ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <ul>
4021ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>{@link AccessibilityNodeInfoCompat#ACTION_ACCESSIBILITY_FOCUS}
4031ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>{@link AccessibilityNodeInfoCompat#ACTION_CLEAR_ACCESSIBILITY_FOCUS}
4041ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>{@link AccessibilityNodeInfoCompat#ACTION_CLEAR_FOCUS}
4051ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>{@link AccessibilityNodeInfoCompat#ACTION_CLEAR_SELECTION}
4061ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>{@link AccessibilityNodeInfoCompat#ACTION_CLICK}
4071ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * <li>etc.
4081ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * </ul>
4091ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
4101ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @param action The action.
4111ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @throws IllegalStateException If called from an AccessibilityService.
4121ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @see AccessibilityNodeInfoCompat#performAction(int)
4131ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
4141ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public void setAction(AccessibilityEvent event, int action) {
4151ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        IMPL.setAction(event, action);
4161ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
4171ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
4181ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
4191ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Gets the performed action that triggered this event.
4201ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
4211ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @return The action.
4221ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
4231ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public int getAction(AccessibilityEvent event) {
4241ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        return IMPL.getAction(event);
4251ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
4269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov}
427