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);
349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityEventStubImpl implements AccessibilityEventVersionImpl {
379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
38b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void appendRecord(AccessibilityEvent event, Object record) {
409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
43b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public Object getRecord(AccessibilityEvent event, int index) {
459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
48b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv        @Override
492bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public void setContentChangeTypes(AccessibilityEvent event, int types) {
502bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
512bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
522bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
532bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public int getRecordCount(AccessibilityEvent event) {
559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return 0;
569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
572bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
582bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
592bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public int getContentChangeTypes(AccessibilityEvent event) {
602bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            return 0;
612bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityEventIcsImpl extends AccessibilityEventStubImpl {
659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void appendRecord(AccessibilityEvent event, Object record) {
689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            AccessibilityEventCompatIcs.appendRecord(event, record);
699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public Object getRecord(AccessibilityEvent event, int index) {
739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityEventCompatIcs.getRecord(event, index);
749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public int getRecordCount(AccessibilityEvent event) {
789648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityEventCompatIcs.getRecordCount(event);
799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
819648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
822bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    static class AccessibilityEventKitKatImpl extends AccessibilityEventIcsImpl {
832bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
842bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
852bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public void setContentChangeTypes(AccessibilityEvent event, int types) {
862bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            AccessibilityEventCompatKitKat.setContentChangeTypes(event, types);
872bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
882bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
892bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        @Override
902bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        public int getContentChangeTypes(AccessibilityEvent event) {
912bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            return AccessibilityEventCompatKitKat.getContentChangeTypes(event);
922bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        }
932bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
942bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private final static AccessibilityEventVersionImpl IMPL;
969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static {
982bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        if (Build.VERSION.SDK_INT >= 19) { // KitKat
992bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar            IMPL = new AccessibilityEventKitKatImpl();
1002bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        } else if (Build.VERSION.SDK_INT >= 14) { // ICS
1019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityEventIcsImpl();
1029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        } else {
1039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityEventStubImpl();
1049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1059648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1069648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1079648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1089648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of a hover enter over a {@link android.view.View}.
1099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_HOVER_ENTER = 0x00000080;
1119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of a hover exit over a {@link android.view.View}.
1149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_HOVER_EXIT = 0x00000100;
1169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of starting a touch exploration gesture.
1199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200;
1219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of ending a touch exploration gesture.
1249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400;
1269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of changing the content of a window.
1299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_WINDOW_CONTENT_CHANGED = 0x00000800;
1319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of scrolling a view.
1349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_SCROLLED = 0x00001000;
1369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Represents the event of changing the selection in an {@link android.widget.EditText}.
1399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
1409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000;
1419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
142b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
143b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of an application making an announcement.
144b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
145b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_ANNOUNCEMENT = 0x00004000;
146b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
147b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
148b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of gaining accessibility focus.
149b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
150b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000;
151b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
152b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
153b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of clearing accessibility focus.
154b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
155b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000;
156b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
157b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
158b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Represents the event of traversing the text of a view at a given movement granularity.
159b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
160b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 0x00020000;
161b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
162b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    /**
163b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of beginning gesture detection.
164b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
165b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_GESTURE_DETECTION_START = 0x00040000;
166b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
167b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
168b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of ending gesture detection.
169b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
170b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_GESTURE_DETECTION_END = 0x00080000;
171b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
172b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
173b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of the user starting to touch the screen.
174b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
175b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_TOUCH_INTERACTION_START = 0x00100000;
176b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
177b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
178b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * Represents the event of the user ending to touch the screen.
179b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     */
180b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    public static final int TYPE_TOUCH_INTERACTION_END = 0x00200000;
181b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt
182b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt    /**
1832bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
1842bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The type of change is not defined.
1852bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
1862bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0x00000000;
1872bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
1882bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
1892bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
1902bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * A node in the subtree rooted at the source node was added or removed.
1912bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
1922bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_SUBTREE = 0x00000001;
1932bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
1942bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
1952bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
1962bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The node's text changed.
1972bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
1982bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_TEXT = 0x00000002;
1992bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2002bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
2012bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
2022bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * The node's content description changed.
2032bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2042bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 0x00000004;
2052bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2062bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
207b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * Mask for {@link AccessibilityEvent} all types.
208b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     *
209b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_CLICKED
210b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_LONG_CLICKED
211b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_SELECTED
212b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_FOCUSED
213b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED
214b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED
215b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED
216b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_HOVER_ENTER
217b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_HOVER_EXIT
218b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_TOUCH_EXPLORATION_GESTURE_START
219b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_TOUCH_EXPLORATION_GESTURE_END
220b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_WINDOW_CONTENT_CHANGED
221b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_SCROLLED
222b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_TEXT_SELECTION_CHANGED
223b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_ANNOUNCEMENT
224b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     * @see #TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
225b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_GESTURE_DETECTION_START
226b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_GESTURE_DETECTION_END
227b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_TOUCH_INTERACTION_START
228b047962755c59a9855328ed273bae33a0663e21aCasey Burkhardt     * @see #TYPE_TOUCH_INTERACTION_END
229b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv     */
230b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv    public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
231b1d4cb28db8b08974b651665bf4d1a7926c17b9calanv
2329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /*
2339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Hide constructor from clients.
2349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private AccessibilityEventCompat() {
2369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Gets the number of records contained in the event.
2419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The number of records.
2439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static int getRecordCount(AccessibilityEvent event) {
2459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getRecordCount(event);
2469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Appends an {@link android.view.accessibility.AccessibilityRecord} to the end of
2509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * event records.
2519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param record The record to append.
2539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @throws IllegalStateException If called from an AccessibilityService.
2559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void appendRecord(AccessibilityEvent event, AccessibilityRecordCompat record) {
2579648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.appendRecord(event, record.getImpl());
2589648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Gets the record at a given index.
2629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param index The index.
2649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return The record at the specified index.
2659648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static AccessibilityRecordCompat getRecord(AccessibilityEvent event, int index) {
2679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return new AccessibilityRecordCompat(IMPL.getRecord(event, index));
2689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2694184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav
2704184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    /**
2714184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * Creates an {@link AccessibilityRecordCompat} from an {@link AccessibilityEvent}
2724184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * that can be used to manipulate the event properties defined in
2734184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * {@link android.view.accessibility.AccessibilityRecord}.
2744184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * <p>
2758f590dabd4e7d3fa4abfc74c91640690b63fc45aSvetoslav     * <strong>Note:</strong> Do not call {@link AccessibilityRecordCompat#recycle()} on the
2768f590dabd4e7d3fa4abfc74c91640690b63fc45aSvetoslav     * returned {@link AccessibilityRecordCompat}. Call {@link AccessibilityEvent#recycle()}
2774184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * in case you want to recycle the event.
2784184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * </p>
2794184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     *
2804184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * @param event The from which to create a record.
2814184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     * @return An {@link AccessibilityRecordCompat}.
2824184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav     */
2834184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    public static AccessibilityRecordCompat asRecord(AccessibilityEvent event) {
2844184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav        return new AccessibilityRecordCompat(event);
2854184a5ee0959c0071eb6eb94878de9c5408d4e5eSvetoslav    }
2862bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2872bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
2882bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Sets the bit mask of node tree changes signaled by an
2892bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * {@link #TYPE_WINDOW_CONTENT_CHANGED} event.
2902bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *
2912bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @param changeTypes The bit mask of change types.
2922bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @throws IllegalStateException If called from an AccessibilityService.
2932bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @see #getContentChangeTypes(AccessibilityEvent)
2942bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
2952bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static void setContentChangeTypes(AccessibilityEvent event, int changeTypes) {
2962bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        IMPL.setContentChangeTypes(event, changeTypes);
2972bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
2982bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
2992bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    /**
3002bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * Gets the bit mask of change types signaled by an
3012bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * {@link #TYPE_WINDOW_CONTENT_CHANGED} event. A single event may represent
3022bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * multiple change types.
3032bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *
3042bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     * @return The bit mask of change types. One or more of:
3052bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <ul>
3062bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION}
3072bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_SUBTREE}
3082bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_TEXT}
3092bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_UNDEFINED}
3102bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     *         </ul>
3112bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar     */
3122bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    public static int getContentChangeTypes(AccessibilityEvent event) {
3132bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar        return IMPL.getContentChangeTypes(event);
3142bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar    }
3152bf89a9bae2b6110a77cf0b3754b567bb07d12a5Yigit Boyar
3169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov}
317