ViewCompat.java revision 8c9ce11dec24a32f438406286404be7ac294011d
1bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell/*
2bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * Copyright (C) 2011 The Android Open Source Project
3bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell *
4bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * you may not use this file except in compliance with the License.
6bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * You may obtain a copy of the License at
7bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell *
8bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell *
10bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * Unless required by applicable law or agreed to in writing, software
11bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * See the License for the specific language governing permissions and
14bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell * limitations under the License.
15bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell */
16bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
17bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powellpackage android.support.v4.view;
18bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
198a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powellimport android.graphics.Paint;
20c029e15f5a4709214cb433a562256586824a0f33Adam Powellimport android.graphics.PixelFormat;
210574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganovimport android.graphics.Rect;
22c029e15f5a4709214cb433a562256586824a0f33Adam Powellimport android.graphics.drawable.Drawable;
230d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanvimport android.os.Bundle;
24a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbyeimport android.support.annotation.IdRes;
25a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbyeimport android.support.annotation.IntDef;
26d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyarimport android.support.annotation.Nullable;
279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
2825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganovimport android.support.v4.view.accessibility.AccessibilityNodeProviderCompat;
29a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powellimport android.util.Log;
30bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powellimport android.view.View;
310f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereiraimport android.view.ViewGroup;
323cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powellimport android.view.ViewParent;
339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.view.accessibility.AccessibilityEvent;
34bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
35a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbyeimport java.lang.annotation.Retention;
36a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbyeimport java.lang.annotation.RetentionPolicy;
37a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyarimport java.lang.reflect.Field;
38a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powellimport java.lang.reflect.Method;
39d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haaseimport java.util.WeakHashMap;
40a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
41bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell/**
420574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link View} introduced after API
430574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * level 4 in a backwards compatible fashion.
44bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell */
45bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powellpublic class ViewCompat {
46a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    private static final String TAG = "ViewCompat";
47a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
48ea4f700ac38424954c56df5138ff794def50b019Chris Banes
49a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
50a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({OVER_SCROLL_ALWAYS, OVER_SCROLL_IF_CONTENT_SCROLLS, OVER_SCROLL_IF_CONTENT_SCROLLS})
51a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
52a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface OverScroll {}
53a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
54560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    /**
55560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     * Always allow a user to over-scroll this view, provided it is a
56560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     * view that can scroll.
57560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     */
58560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    public static final int OVER_SCROLL_ALWAYS = 0;
59560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
60560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    /**
61560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     * Allow a user to over-scroll this view only if the content is large
62560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     * enough to meaningfully scroll, provided it is a view that can scroll.
63560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     */
64560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1;
65560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
66560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    /**
67560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     * Never allow a user to over-scroll this view.
68560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell     */
69560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    public static final int OVER_SCROLL_NEVER = 2;
70560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
71ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    private static final long FAKE_FRAME_TIME = 10;
72ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
73a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
74a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({
75a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            IMPORTANT_FOR_ACCESSIBILITY_AUTO,
76a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            IMPORTANT_FOR_ACCESSIBILITY_YES,
77a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            IMPORTANT_FOR_ACCESSIBILITY_NO,
78a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
79a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    })
80a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
81a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface ImportantForAccessibility {}
82a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
8325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
8425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * Automatically determine whether a view is important for accessibility.
8525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
8625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0x00000000;
8725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
8825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
8925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * The view is important for accessibility.
9025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
9125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 0x00000001;
9225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
9325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
9425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * The view is not important for accessibility.
9525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
9625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 0x00000002;
9725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
988a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    /**
99b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette     * The view is not important for accessibility, nor are any of its
100b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette     * descendant views.
101b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette     */
102b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette    public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 0x00000004;
103b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette
104a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
105a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({
106a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            ACCESSIBILITY_LIVE_REGION_NONE,
107a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            ACCESSIBILITY_LIVE_REGION_POLITE,
108a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            ACCESSIBILITY_LIVE_REGION_ASSERTIVE
109a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    })
110a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
111a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface AccessibilityLiveRegion {}
112a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
113b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette    /**
114086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Live region mode specifying that accessibility services should not
115086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * automatically announce changes to this view. This is the default live
116086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * region mode for most views.
117086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
118086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Use with {@link ViewCompat#setAccessibilityLiveRegion(View, int)}.
119086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     */
120086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0x00000000;
121086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
122086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    /**
123086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Live region mode specifying that accessibility services should announce
124086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * changes to this view.
125086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
126086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Use with {@link ViewCompat#setAccessibilityLiveRegion(View, int)}.
127086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     */
128086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 0x00000001;
129086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
130086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    /**
131086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Live region mode specifying that accessibility services should interrupt
132086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * ongoing speech to immediately announce changes to this view.
133086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
134086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Use with {@link ViewCompat#setAccessibilityLiveRegion(View, int)}.
135086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     */
136086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 0x00000002;
137086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
138a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
139a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({LAYER_TYPE_NONE, LAYER_TYPE_SOFTWARE, LAYER_TYPE_HARDWARE})
140a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
141a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface LayerType {}
142a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
143086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    /**
1448a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * Indicates that the view does not have a layer.
1458a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     */
1468a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    public static final int LAYER_TYPE_NONE = 0;
1478a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell
1488a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    /**
1498a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Indicates that the view has a software layer. A software layer is backed
1508a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * by a bitmap and causes the view to be rendered using Android's software
1518a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * rendering pipeline, even if hardware acceleration is enabled.</p>
1528a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
1538a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Software layers have various usages:</p>
1548a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>When the application is not using hardware acceleration, a software layer
1558a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * is useful to apply a specific color filter and/or blending mode and/or
1568a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * translucency to a view and all its children.</p>
1578a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>When the application is using hardware acceleration, a software layer
1588a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * is useful to render drawing primitives not supported by the hardware
1598a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * accelerated pipeline. It can also be used to cache a complex view tree
1608a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * into a texture and reduce the complexity of drawing operations. For instance,
1618a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * when animating a complex view tree with a translation, a software layer can
1628a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * be used to render the view tree only once.</p>
1638a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Software layers should be avoided when the affected view tree updates
1648a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * often. Every update will require to re-render the software layer, which can
1658a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * potentially be slow (particularly when hardware acceleration is turned on
1668a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * since the layer will have to be uploaded into a hardware texture after every
1678a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * update.)</p>
1688a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     */
1698a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    public static final int LAYER_TYPE_SOFTWARE = 1;
1708a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell
1718a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    /**
1728a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Indicates that the view has a hardware layer. A hardware layer is backed
1738a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * by a hardware specific texture (generally Frame Buffer Objects or FBO on
1748a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * OpenGL hardware) and causes the view to be rendered using Android's hardware
1758a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * rendering pipeline, but only if hardware acceleration is turned on for the
1768a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * view hierarchy. When hardware acceleration is turned off, hardware layers
1778a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * behave exactly as {@link #LAYER_TYPE_SOFTWARE software layers}.</p>
1788a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
1798a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>A hardware layer is useful to apply a specific color filter and/or
1808a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * blending mode and/or translucency to a view and all its children.</p>
1818a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>A hardware layer can be used to cache a complex view tree into a
1828a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * texture and reduce the complexity of drawing operations. For instance,
1838a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * when animating a complex view tree with a translation, a hardware layer can
1848a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * be used to render the view tree only once.</p>
1858a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>A hardware layer can also be used to increase the rendering quality when
1868a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * rotation transformations are applied on a view. It can also be used to
1878a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * prevent potential clipping issues when applying 3D transforms on a view.</p>
1888a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     */
1898a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    public static final int LAYER_TYPE_HARDWARE = 2;
1908a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell
191a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
192a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({
193a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_LTR,
194a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_RTL,
195a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_INHERIT,
196a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_LOCALE})
197a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
198a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface LayoutDirectionMode {}
199a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
200a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    /** @hide */
201a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @IntDef({
202a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_LTR,
203a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            LAYOUT_DIRECTION_RTL
204a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    })
205a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @Retention(RetentionPolicy.SOURCE)
206a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    private @interface ResolvedLayoutDirectionMode {}
207a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye
2081d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
2091d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Horizontal layout direction of this view is from Left to Right.
2101d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
2111d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    public static final int LAYOUT_DIRECTION_LTR = 0;
2121d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
2131d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
2141d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Horizontal layout direction of this view is from Right to Left.
2151d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
2161d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    public static final int LAYOUT_DIRECTION_RTL = 1;
2171d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
2181d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
2191d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Horizontal layout direction of this view is inherited from its parent.
2201d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Use with {@link #setLayoutDirection}.
2211d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
2221d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    public static final int LAYOUT_DIRECTION_INHERIT = 2;
2231d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
2241d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
2251d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Horizontal layout direction of this view is from deduced from the default language
2261d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * script for the locale. Use with {@link #setLayoutDirection}.
2271d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
2281d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    public static final int LAYOUT_DIRECTION_LOCALE = 3;
2291d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
230b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
231b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Bits of {@link #getMeasuredWidthAndState} and
232b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #getMeasuredWidthAndState} that provide the actual measured size.
233b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
234b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static final int MEASURED_SIZE_MASK = 0x00ffffff;
235b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
236b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
237b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Bits of {@link #getMeasuredWidthAndState} and
238b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #getMeasuredWidthAndState} that provide the additional state bits.
239b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
240b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static final int MEASURED_STATE_MASK = 0xff000000;
241b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
242b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
243b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Bit shift of {@link #MEASURED_STATE_MASK} to get to the height bits
244b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * for functions that combine both width and height into a single int,
245b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * such as {@link #getMeasuredState} and the childState argument of
246b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #resolveSizeAndState(int, int, int)}.
247b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
248b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static final int MEASURED_HEIGHT_STATE_SHIFT = 16;
249b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
250b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
251b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Bit of {@link #getMeasuredWidthAndState} and
252b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #getMeasuredWidthAndState} that indicates the measured size
253b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * is smaller that the space the view would like to have.
254b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
255b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static final int MEASURED_STATE_TOO_SMALL = 0x01000000;
256b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
257bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    interface ViewCompatImpl {
258bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollHorizontally(View v, int direction);
259bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollVertically(View v, int direction);
260560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public int getOverScrollMode(View v);
261560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public void setOverScrollMode(View v, int mode);
2629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event);
2639648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event);
2649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info);
265d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyar        public void setAccessibilityDelegate(View v, @Nullable AccessibilityDelegateCompat delegate);
266a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        public boolean hasAccessibilityDelegate(View v);
267c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public boolean hasTransientState(View view);
268c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public void setHasTransientState(View view, boolean hasTransientState);
269ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view);
270ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view, int left, int top, int right, int bottom);
271ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimation(View view, Runnable action);
272ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimationDelayed(View view, Runnable action, long delayMillis);
27325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public int getImportantForAccessibility(View view);
27425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public void setImportantForAccessibility(View view, int mode);
2750d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        public boolean performAccessibilityAction(View view, int action, Bundle arguments);
27625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View view);
27714631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        public float getAlpha(View view);
2788a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        public void setLayerType(View view, int layerType, Paint paint);
27997341bdc5bea1d7bf777de65228039142d249f38Adam Powell        public int getLayerType(View view);
2800af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        public int getLabelFor(View view);
2816debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        public void setLabelFor(View view, int id);
2826debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        public void setLayerPaint(View view, Paint paint);
2831d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public int getLayoutDirection(View view);
2841d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public void setLayoutDirection(View view, int layoutDirection);
2853cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        public ViewParent getParentForAccessibility(View view);
286c029e15f5a4709214cb433a562256586824a0f33Adam Powell        public boolean isOpaque(View view);
287b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int resolveSizeAndState(int size, int measureSpec, int childMeasuredState);
288b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredWidthAndState(View view);
289b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredHeightAndState(View view);
290b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredState(View view);
291086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public int getAccessibilityLiveRegion(View view);
292086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public void setAccessibilityLiveRegion(View view, int mode);
293e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingStart(View view);
294e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingEnd(View view);
295e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public void setPaddingRelative(View view, int start, int top, int end, int bottom);
296a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        public void dispatchStartTemporaryDetach(View view);
297a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        public void dispatchFinishTemporaryDetach(View view);
298d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getX(View view);
299d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getY(View view);
300d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotation(View view);
301d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationX(View view);
302d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationY(View view);
303d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleX(View view);
304d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleY(View view);
305c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationX(View view);
306c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationY(View view);
307f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumWidth(View view);
308f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumHeight(View view);
309d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public ViewPropertyAnimatorCompat animate(View view);
310d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotation(View view, float value);
311d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationX(View view, float value);
312d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationY(View view, float value);
313d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleX(View view, float value);
314d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleY(View view, float value);
315d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationX(View view, float value);
316d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationY(View view, float value);
317d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setX(View view, float value);
318d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setY(View view, float value);
319d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setAlpha(View view, float value);
320d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotX(View view, float value);
321d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotY(View view, float value);
322d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotX(View view);
323d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotY(View view);
32449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setElevation(View view, float elevation);
32549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getElevation(View view);
32649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setTranslationZ(View view, float translationZ);
32749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getTranslationZ(View view);
3280bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public void setTransitionName(View view, String transitionName);
3290bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public String getTransitionName(View view);
33049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public int getWindowSystemUiVisibility(View view);
33149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void requestApplyInsets(View view);
3320f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        public void setChildrenDrawingOrderEnabled(ViewGroup viewGroup, boolean enabled);
333f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        public boolean getFitsSystemWindows(View view);
3348c9ce11dec24a32f438406286404be7ac294011dChris Banes        void setFitsSystemWindows(View view, boolean fitSystemWindows);
335bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        void jumpDrawablesToCurrentState(View v);
336ea4f700ac38424954c56df5138ff794def50b019Chris Banes        void setOnApplyWindowInsetsListener(View view, OnApplyWindowInsetsListener listener);
3375e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        void setSaveFromParentEnabled(View view, boolean enabled);
338bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
339bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
340bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    static class BaseViewCompatImpl implements ViewCompatImpl {
341a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        private Method mDispatchStartTemporaryDetach;
342a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        private Method mDispatchFinishTemporaryDetach;
343a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        private boolean mTempDetachBound;
344d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        WeakHashMap<View, ViewPropertyAnimatorCompat> mViewPropertyAnimatorCompatMap = null;
345d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
346a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
347bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollHorizontally(View v, int direction) {
348bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            return false;
349bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        }
350bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollVertically(View v, int direction) {
351bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            return false;
352bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        }
353560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public int getOverScrollMode(View v) {
354560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell            return OVER_SCROLL_NEVER;
355560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        }
356560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public void setOverScrollMode(View v, int mode) {
357560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell            // Do nothing; API doesn't exist
358560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        }
3599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate) {
3609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            // Do nothing; API doesn't exist
3619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
362a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar
363a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        @Override
364a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        public boolean hasAccessibilityDelegate(View v) {
365a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            return false;
366a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        }
367a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar
3689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) {
3699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            // Do nothing; API doesn't exist
3709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
3719648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) {
3729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov         // Do nothing; API doesn't exist
3739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
3749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) {
3759648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            // Do nothing; API doesn't exist
3769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
377c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public boolean hasTransientState(View view) {
378c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            // A view can't have transient state if transient state wasn't supported.
379c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            return false;
380c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        }
381c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public void setHasTransientState(View view, boolean hasTransientState) {
382c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            // Do nothing; API doesn't exist
383c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        }
384ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view) {
385009b4ef9d97e1cc237477e3284fc305bb1438cc9Adam Powell            view.invalidate();
386ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
387ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view, int left, int top, int right, int bottom) {
388009b4ef9d97e1cc237477e3284fc305bb1438cc9Adam Powell            view.invalidate(left, top, right, bottom);
389ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
390ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimation(View view, Runnable action) {
391ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            view.postDelayed(action, getFrameTime());
392ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
393ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimationDelayed(View view, Runnable action, long delayMillis) {
394ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            view.postDelayed(action, getFrameTime() + delayMillis);
395ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
396ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        long getFrameTime() {
397ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            return FAKE_FRAME_TIME;
398ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
39925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public int getImportantForAccessibility(View view) {
40025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            return 0;
40125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
40225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public void setImportantForAccessibility(View view, int mode) {
40325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
40425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
4050d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        public boolean performAccessibilityAction(View view, int action, Bundle arguments) {
4060d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv            return false;
4070d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        }
40825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View view) {
40925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            return null;
41025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
41114631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        public float getAlpha(View view) {
41214631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette            return 1.0f;
41314631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        }
4148a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        public void setLayerType(View view, int layerType, Paint paint) {
4156debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            // No-op until layers became available (HC)
4168a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        }
41797341bdc5bea1d7bf777de65228039142d249f38Adam Powell        public int getLayerType(View view) {
41897341bdc5bea1d7bf777de65228039142d249f38Adam Powell            return LAYER_TYPE_NONE;
41997341bdc5bea1d7bf777de65228039142d249f38Adam Powell        }
4200af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        public int getLabelFor(View view) {
4210af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov            return 0;
4220af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        }
4230af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        public void setLabelFor(View view, int id) {
4240af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
4250af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        }
4266debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        public void setLayerPaint(View view, Paint p) {
4276debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            // No-op until layers became available (HC)
4286debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        }
4291d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
4301d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        @Override
4311d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public int getLayoutDirection(View view) {
4321d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell            return LAYOUT_DIRECTION_LTR;
4331d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        }
4341d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
4351d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        @Override
4361d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public void setLayoutDirection(View view, int layoutDirection) {
4371d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell            // No-op
4381d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        }
4393cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell
4403cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        @Override
4413cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        public ViewParent getParentForAccessibility(View view) {
4423cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell            return view.getParent();
4433cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        }
444c029e15f5a4709214cb433a562256586824a0f33Adam Powell
445c029e15f5a4709214cb433a562256586824a0f33Adam Powell        @Override
446c029e15f5a4709214cb433a562256586824a0f33Adam Powell        public boolean isOpaque(View view) {
447c029e15f5a4709214cb433a562256586824a0f33Adam Powell            final Drawable bg = view.getBackground();
448c029e15f5a4709214cb433a562256586824a0f33Adam Powell            if (bg != null) {
449c029e15f5a4709214cb433a562256586824a0f33Adam Powell                return bg.getOpacity() == PixelFormat.OPAQUE;
450c029e15f5a4709214cb433a562256586824a0f33Adam Powell            }
451c029e15f5a4709214cb433a562256586824a0f33Adam Powell            return false;
452c029e15f5a4709214cb433a562256586824a0f33Adam Powell        }
453b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
454b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
455b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return View.resolveSize(size, measureSpec);
456b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
457b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
458b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
459b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredWidthAndState(View view) {
460b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return view.getMeasuredWidth();
461b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
462b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
463b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
464b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredHeightAndState(View view) {
465b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return view.getMeasuredHeight();
466b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
467b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
468b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
469b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredState(View view) {
470b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return 0;
471b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
472086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
473086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        @Override
474086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public int getAccessibilityLiveRegion(View view) {
475086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette            return ACCESSIBILITY_LIVE_REGION_NONE;
476086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        }
477086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
478086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        @Override
479086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public void setAccessibilityLiveRegion(View view, int mode) {
480086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette            // No-op
481086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        }
482e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
483e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
484e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingStart(View view) {
485e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            return view.getPaddingLeft();
486e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
487e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
488e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
489e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingEnd(View view) {
490e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            return view.getPaddingRight();
491e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
492e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
493e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
494e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public void setPaddingRelative(View view, int start, int top, int end, int bottom) {
495e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            view.setPadding(start, top, end, bottom);
496e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
497a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
498a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        @Override
499a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        public void dispatchStartTemporaryDetach(View view) {
500a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            if (!mTempDetachBound) {
501a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                bindTempDetach();
502a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            }
503a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            if (mDispatchStartTemporaryDetach != null) {
504a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                try {
505a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                    mDispatchStartTemporaryDetach.invoke(view);
506a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                } catch (Exception e) {
507a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                    Log.d(TAG, "Error calling dispatchStartTemporaryDetach", e);
508a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                }
509a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            } else {
510a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                // Try this instead
511a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                view.onStartTemporaryDetach();
512a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            }
513a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        }
514a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
515a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        @Override
516a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        public void dispatchFinishTemporaryDetach(View view) {
517a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            if (!mTempDetachBound) {
518a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                bindTempDetach();
519a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            }
520a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            if (mDispatchFinishTemporaryDetach != null) {
521a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                try {
522a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                    mDispatchFinishTemporaryDetach.invoke(view);
523a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                } catch (Exception e) {
524a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                    Log.d(TAG, "Error calling dispatchFinishTemporaryDetach", e);
525a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                }
526a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            } else {
527a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                // Try this instead
528a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                view.onFinishTemporaryDetach();
529a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            }
530a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        }
531a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
532a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        private void bindTempDetach() {
533a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            try {
534a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                mDispatchStartTemporaryDetach = View.class.getDeclaredMethod(
535a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                        "dispatchStartTemporaryDetach");
536a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                mDispatchFinishTemporaryDetach = View.class.getDeclaredMethod(
537a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                        "dispatchFinishTemporaryDetach");
538a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            } catch (NoSuchMethodException e) {
539a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell                Log.e(TAG, "Couldn't find method", e);
540a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            }
541a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell            mTempDetachBound = true;
542a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        }
543c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
544c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        @Override
545c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationX(View view) {
546c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell            return 0;
547c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        }
548c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
549c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        @Override
550c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationY(View view) {
551c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell            return 0;
552c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        }
553f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
554f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        @Override
555d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getX(View view) {
556d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
557d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
558d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
559d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
560d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getY(View view) {
561d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
562d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
563d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
564d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
565d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotation(View view) {
566d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
567d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
568d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
569d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
570d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationX(View view) {
571d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
572d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
573d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
574d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
575d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationY(View view) {
576d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
577d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
578d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
579d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
580d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleX(View view) {
581d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
582d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
583d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
584d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
585d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleY(View view) {
586d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
587d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
588d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
589d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
590f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumWidth(View view) {
591f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell            return 0;
592f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        }
593f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
594f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        @Override
595f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumHeight(View view) {
596f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell            return 0;
597f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        }
598d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
599d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
600d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public ViewPropertyAnimatorCompat animate(View view) {
601d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return new ViewPropertyAnimatorCompat(view);
602d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
603d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
604d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
605d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotation(View view, float value) {
606d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
607d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
608d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
609d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
610d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationX(View view, float value) {
611d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
612d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
613d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
614d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
615d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationY(View view, float value) {
616d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
617d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
618d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
619d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
620d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setAlpha(View view, float value) {
621d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
622d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
623d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
624d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
625d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationX(View view, float value) {
626d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
627d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
628d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
629d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
630d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationY(View view, float value) {
631d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
632d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
633d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
634d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
635d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleX(View view, float value) {
636d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
637d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
638d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
639d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
640d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleY(View view, float value) {
641d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
642d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
643d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
644d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
645d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setX(View view, float value) {
646d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
647d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
648d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
649d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
650d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setY(View view, float value) {
651d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
652d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
653d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
654d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
655d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotX(View view, float value) {
656d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
657d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
658d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
659d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
660d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotY(View view, float value) {
661d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            // noop
662d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
663d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
664d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
665d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotX(View view) {
666d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
667d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
668d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
669d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
670d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotY(View view) {
671d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return 0;
672d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
6730bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
6740bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        @Override
6750bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public void setTransitionName(View view, String transitionName) {
6760bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        }
6770bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
6780bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        @Override
6790bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public String getTransitionName(View view) {
6800bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu            return null;
6810bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        }
68249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
68349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
68449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public int getWindowSystemUiVisibility(View view) {
68549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return 0;
68649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
68749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
68849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
68949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void requestApplyInsets(View view) {
69049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
69149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
69249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
69349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setElevation(View view, float elevation) {
69449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
69549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
69649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
69749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getElevation(View view) {
69849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return 0f;
69949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
70049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
70149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
70249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setTranslationZ(View view, float translationZ) {
70349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
70449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
70549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
70649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getTranslationZ(View view) {
70749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return 0f;
70849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
7090f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira
7100f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        @Override
7110f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        public void setChildrenDrawingOrderEnabled(ViewGroup viewGroup, boolean enabled) {
7120f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira            // noop
7130f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        }
714f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell
715f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        @Override
716f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        public boolean getFitsSystemWindows(View view) {
717f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell            return false;
718f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        }
719bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell
720bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        @Override
7218c9ce11dec24a32f438406286404be7ac294011dChris Banes        public void setFitsSystemWindows(View view, boolean fitSystemWindows) {
7228c9ce11dec24a32f438406286404be7ac294011dChris Banes            // noop
7238c9ce11dec24a32f438406286404be7ac294011dChris Banes        }
7248c9ce11dec24a32f438406286404be7ac294011dChris Banes
7258c9ce11dec24a32f438406286404be7ac294011dChris Banes        @Override
726bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        public void jumpDrawablesToCurrentState(View view) {
727bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell            // Do nothing; API didn't exist.
728bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        }
729ea4f700ac38424954c56df5138ff794def50b019Chris Banes
730ea4f700ac38424954c56df5138ff794def50b019Chris Banes        @Override
731ea4f700ac38424954c56df5138ff794def50b019Chris Banes        public void setOnApplyWindowInsetsListener(View view,
732ea4f700ac38424954c56df5138ff794def50b019Chris Banes                OnApplyWindowInsetsListener listener) {
733ea4f700ac38424954c56df5138ff794def50b019Chris Banes            // noop
734ea4f700ac38424954c56df5138ff794def50b019Chris Banes        }
7355e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes
7365e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        @Override
7375e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        public void setSaveFromParentEnabled(View v, boolean enabled) {
7385e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes            // noop
7395e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        }
740bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
741bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
742c029e15f5a4709214cb433a562256586824a0f33Adam Powell    static class EclairMr1ViewCompatImpl extends BaseViewCompatImpl {
743c029e15f5a4709214cb433a562256586824a0f33Adam Powell        @Override
744c029e15f5a4709214cb433a562256586824a0f33Adam Powell        public boolean isOpaque(View view) {
745c029e15f5a4709214cb433a562256586824a0f33Adam Powell            return ViewCompatEclairMr1.isOpaque(view);
746c029e15f5a4709214cb433a562256586824a0f33Adam Powell        }
7470f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira
7480f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        @Override
7490f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        public void setChildrenDrawingOrderEnabled(ViewGroup viewGroup, boolean enabled) {
7500f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira            ViewCompatEclairMr1.setChildrenDrawingOrderEnabled(viewGroup, enabled);
7510f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        }
752c029e15f5a4709214cb433a562256586824a0f33Adam Powell    }
753c029e15f5a4709214cb433a562256586824a0f33Adam Powell
754c029e15f5a4709214cb433a562256586824a0f33Adam Powell    static class GBViewCompatImpl extends EclairMr1ViewCompatImpl {
7559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
756560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public int getOverScrollMode(View v) {
757560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell            return ViewCompatGingerbread.getOverScrollMode(v);
758560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        }
7599648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
760560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        public void setOverScrollMode(View v, int mode) {
761560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell            ViewCompatGingerbread.setOverScrollMode(v, mode);
762560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        }
763560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    }
764560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
765ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    static class HCViewCompatImpl extends GBViewCompatImpl {
76614631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        @Override
767ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        long getFrameTime() {
768ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            return ViewCompatHC.getFrameTime();
769ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
77014631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        @Override
77114631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        public float getAlpha(View view) {
77214631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette            return ViewCompatHC.getAlpha(view);
77314631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        }
77414631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        @Override
77514631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        public void setLayerType(View view, int layerType, Paint paint) {
7768a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell            ViewCompatHC.setLayerType(view, layerType, paint);
7778a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        }
77814631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        @Override
77914631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        public int getLayerType(View view)  {
78097341bdc5bea1d7bf777de65228039142d249f38Adam Powell            return ViewCompatHC.getLayerType(view);
78197341bdc5bea1d7bf777de65228039142d249f38Adam Powell        }
7826debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        @Override
7836debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        public void setLayerPaint(View view, Paint paint) {
7846debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            // Make sure the paint is correct; this will be cheap if it's the same
7856debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            // instance as was used to call setLayerType earlier.
7866debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            setLayerType(view, getLayerType(view), paint);
7876debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            // This is expensive, but the only way to accomplish this before JB-MR1.
7886debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            view.invalidate();
7896debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        }
790b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
791b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
792b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return ViewCompatHC.resolveSizeAndState(size, measureSpec, childMeasuredState);
793b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
794b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
795b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredWidthAndState(View view) {
796b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return ViewCompatHC.getMeasuredWidthAndState(view);
797b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
798b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
799b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredHeightAndState(View view) {
800b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return ViewCompatHC.getMeasuredHeightAndState(view);
801b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
802b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        @Override
803b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        public int getMeasuredState(View view) {
804b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell            return ViewCompatHC.getMeasuredState(view);
805b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        }
806c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        @Override
807c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationX(View view) {
808c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell            return ViewCompatHC.getTranslationX(view);
809c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        }
810c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        @Override
811c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        public float getTranslationY(View view) {
812c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell            return ViewCompatHC.getTranslationY(view);
813c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        }
814d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
815d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationX(View view, float value) {
816d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setTranslationX(view, value);
817d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
818d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
819d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setTranslationY(View view, float value) {
820d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setTranslationY(view, value);
821d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
822d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
823d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setAlpha(View view, float value) {
824d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setAlpha(view, value);
825d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
826d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
827d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setX(View view, float value) {
828d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setX(view, value);
829d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
830d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
831d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setY(View view, float value) {
832d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setY(view, value);
833d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
834d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
835d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotation(View view, float value) {
836d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setRotation(view, value);
837d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
838d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
839d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationX(View view, float value) {
840d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setRotationX(view, value);
841d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
842d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
843d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setRotationY(View view, float value) {
844d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setRotationY(view, value);
845d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
846d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
847d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleX(View view, float value) {
848d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setScaleX(view, value);
849d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
850d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
851d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setScaleY(View view, float value) {
852d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setScaleY(view, value);
853d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
854d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
855d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotX(View view, float value) {
856d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setPivotX(view, value);
857d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
858d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
859d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public void setPivotY(View view, float value) {
860d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewCompatHC.setPivotY(view, value);
861d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
862d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
863d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getX(View view) {
864d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getX(view);
865d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
866d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
867d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
868d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getY(View view) {
869d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getY(view);
870d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
871d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
872d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
873d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotation(View view) {
874d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getRotation(view);
875d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
876d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
877d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
878d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationX(View view) {
879d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getRotationX(view);
880d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
881d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
882d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
883d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getRotationY(View view) {
884d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getRotationY(view);
885d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
886d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
887d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
888d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleX(View view) {
889d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getScaleX(view);
890d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
891d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
892d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
893d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getScaleY(View view) {
894d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getScaleY(view);
895d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
896d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
897d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
898d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotX(View view) {
899d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getPivotX(view);
900d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
901d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
902d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public float getPivotY(View view) {
903d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return ViewCompatHC.getPivotY(view);
904d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
905bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        @Override
906bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        public void jumpDrawablesToCurrentState(View view) {
907bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell            ViewCompatHC.jumpDrawablesToCurrentState(view);
908bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        }
9095e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes
9105e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        @Override
9115e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        public void setSaveFromParentEnabled(View view, boolean enabled) {
9125e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes            ViewCompatHC.setSaveFromParentEnabled(view, enabled);
9135e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        }
914ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
915ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
916ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    static class ICSViewCompatImpl extends HCViewCompatImpl {
917a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        static Field mAccessibilityDelegateField;
918a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        static boolean accessibilityDelegateCheckFailed = false;
9199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
920bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollHorizontally(View v, int direction) {
921bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            return ViewCompatICS.canScrollHorizontally(v, direction);
922bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        }
9239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
924bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        public boolean canScrollVertically(View v, int direction) {
925bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            return ViewCompatICS.canScrollVertically(v, direction);
926bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        }
9279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
9289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) {
9299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            ViewCompatICS.onPopulateAccessibilityEvent(v, event);
9309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
9319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
9329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) {
9339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            ViewCompatICS.onInitializeAccessibilityEvent(v, event);
9349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
9359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
9369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) {
937956b013dfda37760b0232ed6d448900a546d2903Svetoslav Ganov            ViewCompatICS.onInitializeAccessibilityNodeInfo(v, info.getInfo());
9389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
9399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
940d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyar        public void setAccessibilityDelegate(View v,
941d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyar                @Nullable AccessibilityDelegateCompat delegate) {
942d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyar            ViewCompatICS.setAccessibilityDelegate(v,
943d392c8cae159a3a9a416200f4e117634bdbf064eYigit Boyar                    delegate == null ? null : delegate.getBridge());
9449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
945a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar
946a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        @Override
947a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        public boolean hasAccessibilityDelegate(View v) {
948a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            if (accessibilityDelegateCheckFailed) {
949a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                return false; // View implementation might have changed.
950a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            }
951a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            if (mAccessibilityDelegateField == null) {
952a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                try {
953a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                    mAccessibilityDelegateField = View.class
954a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                            .getDeclaredField("mAccessibilityDelegate");
955a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                    mAccessibilityDelegateField.setAccessible(true);
956a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                } catch (Throwable t) {
957a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                    accessibilityDelegateCheckFailed = true;
958a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                    return false;
959a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                }
960a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            }
961a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            try {
962a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                return mAccessibilityDelegateField.get(v) != null;
963a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            } catch (Throwable t) {
964a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                accessibilityDelegateCheckFailed = true;
965a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar                return false;
966a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar            }
967a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        }
968a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar
969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        @Override
970d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        public ViewPropertyAnimatorCompat animate(View view) {
971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            if (mViewPropertyAnimatorCompatMap == null) {
972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase                mViewPropertyAnimatorCompatMap =
973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase                        new WeakHashMap<View, ViewPropertyAnimatorCompat>();
974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            }
975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            ViewPropertyAnimatorCompat vpa = mViewPropertyAnimatorCompatMap.get(view);
976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            if (vpa == null) {
977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase                vpa = new ViewPropertyAnimatorCompat(view);
978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase                mViewPropertyAnimatorCompatMap.put(view, vpa);
979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            }
980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase            return vpa;
981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        }
9828c9ce11dec24a32f438406286404be7ac294011dChris Banes
9838c9ce11dec24a32f438406286404be7ac294011dChris Banes        @Override
9848c9ce11dec24a32f438406286404be7ac294011dChris Banes        public void setFitsSystemWindows(View view, boolean fitSystemWindows) {
9858c9ce11dec24a32f438406286404be7ac294011dChris Banes            ViewCompatICS.setFitsSystemWindows(view, fitSystemWindows);
9868c9ce11dec24a32f438406286404be7ac294011dChris Banes        }
987bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
988bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
989c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    static class JBViewCompatImpl extends ICSViewCompatImpl {
990c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        @Override
991c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public boolean hasTransientState(View view) {
992c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            return ViewCompatJB.hasTransientState(view);
993c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        }
994c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        @Override
995c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        public void setHasTransientState(View view, boolean hasTransientState) {
996c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            ViewCompatJB.setHasTransientState(view, hasTransientState);
997c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        }
998ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        @Override
999ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view) {
1000ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            ViewCompatJB.postInvalidateOnAnimation(view);
1001ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
1002ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        @Override
1003ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postInvalidateOnAnimation(View view, int left, int top, int right, int bottom) {
1004ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            ViewCompatJB.postInvalidateOnAnimation(view, left, top, right, bottom);
1005ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
1006ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        @Override
1007ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimation(View view, Runnable action) {
1008ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            ViewCompatJB.postOnAnimation(view, action);
1009ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
1010ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        @Override
1011ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        public void postOnAnimationDelayed(View view, Runnable action, long delayMillis) {
1012ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            ViewCompatJB.postOnAnimationDelayed(view, action, delayMillis);
1013ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        }
101425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        @Override
101525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public int getImportantForAccessibility(View view) {
101625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            return ViewCompatJB.getImportantForAccessibility(view);
101725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
101825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        @Override
101925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public void setImportantForAccessibility(View view, int mode) {
102012ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            // IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS is not available
102112ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            // on this platform so replace with IMPORTANT_FOR_ACCESSIBILITY_NO
102212ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            // which is closer semantically.
102312ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            if (mode == IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS) {
102412ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette                mode = IMPORTANT_FOR_ACCESSIBILITY_NO;
102512ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            }
102625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            ViewCompatJB.setImportantForAccessibility(view, mode);
102725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
102825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        @Override
10290d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        public boolean performAccessibilityAction(View view, int action, Bundle arguments) {
10300d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv            return ViewCompatJB.performAccessibilityAction(view, action, arguments);
10310d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        }
10320d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        @Override
103325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        public AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View view) {
103425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            Object compat = ViewCompatJB.getAccessibilityNodeProvider(view);
103525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            if (compat != null) {
103625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov                return new AccessibilityNodeProviderCompat(compat);
103725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            }
103825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov            return null;
103925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        }
10403cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell
10413cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        @Override
10423cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        public ViewParent getParentForAccessibility(View view) {
10433cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell            return ViewCompatJB.getParentForAccessibility(view);
10443cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        }
1045f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
1046f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        @Override
1047f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumWidth(View view) {
1048f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell            return ViewCompatJB.getMinimumWidth(view);
1049f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        }
1050f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
1051f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        @Override
1052f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        public int getMinimumHeight(View view) {
1053f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell            return ViewCompatJB.getMinimumHeight(view);
1054f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        }
105549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
105649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
105749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void requestApplyInsets(View view) {
105849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            ViewCompatJB.requestApplyInsets(view);
105949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
1060f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell
1061f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        @Override
1062f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        public boolean getFitsSystemWindows(View view) {
1063f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell            return ViewCompatJB.getFitsSystemWindows(view);
1064f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        }
1065c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    }
1066c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell
10670af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    static class JbMr1ViewCompatImpl extends JBViewCompatImpl {
10680af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
10690af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        @Override
10700af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        public int getLabelFor(View view) {
10710af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov            return ViewCompatJellybeanMr1.getLabelFor(view);
10720af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        }
10730af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
10740af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        @Override
10750af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        public void setLabelFor(View view, int id) {
10760af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov            ViewCompatJellybeanMr1.setLabelFor(view, id);
10770af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        }
10786debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell
10796debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        @Override
10806debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        public void setLayerPaint(View view, Paint paint) {
10816debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell            ViewCompatJellybeanMr1.setLayerPaint(view, paint);
10826debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        }
10831d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
10841d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        @Override
10851d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public int getLayoutDirection(View view) {
10861d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell            return ViewCompatJellybeanMr1.getLayoutDirection(view);
10871d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        }
10881d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
10891d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        @Override
10901d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        public void setLayoutDirection(View view, int layoutDirection) {
10911d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell            ViewCompatJellybeanMr1.setLayoutDirection(view, layoutDirection);
10921d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        }
1093e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1094e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
1095e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingStart(View view) {
1096e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            return ViewCompatJellybeanMr1.getPaddingStart(view);
1097e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
1098e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1099e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
1100e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public int getPaddingEnd(View view) {
1101e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            return ViewCompatJellybeanMr1.getPaddingEnd(view);
1102e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
1103e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1104e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        @Override
1105e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        public void setPaddingRelative(View view, int start, int top, int end, int bottom) {
1106e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell            ViewCompatJellybeanMr1.setPaddingRelative(view, start, top, end, bottom);
1107e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        }
110849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
110949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
111049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public int getWindowSystemUiVisibility(View view) {
111149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return ViewCompatJellybeanMr1.getWindowSystemUiVisibility(view);
111249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
11130af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    }
11140af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
1115086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    static class KitKatViewCompatImpl extends JbMr1ViewCompatImpl {
1116086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        @Override
1117086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public int getAccessibilityLiveRegion(View view) {
1118086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette            return ViewCompatKitKat.getAccessibilityLiveRegion(view);
1119086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        }
1120086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
1121086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        @Override
1122086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        public void setAccessibilityLiveRegion(View view, int mode) {
1123086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette            ViewCompatKitKat.setAccessibilityLiveRegion(view, mode);
1124086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        }
112512ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette
112612ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette        @Override
112712ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette        public void setImportantForAccessibility(View view, int mode) {
112812ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette            ViewCompatJB.setImportantForAccessibility(view, mode);
112912ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette        }
1130086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    }
1131086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
11320bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    static class Api21ViewCompatImpl extends KitKatViewCompatImpl {
11330bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        @Override
11340bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public void setTransitionName(View view, String transitionName) {
11350bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu            ViewCompatApi21.setTransitionName(view, transitionName);
11360bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        }
11370bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
11380bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        @Override
11390bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        public String getTransitionName(View view) {
11400bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu            return ViewCompatApi21.getTransitionName(view);
11410bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        }
114249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
114349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
114449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void requestApplyInsets(View view) {
114549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            ViewCompatApi21.requestApplyInsets(view);
114649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
114749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
114849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
114949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setElevation(View view, float elevation) {
115049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            ViewCompatApi21.setElevation(view, elevation);
115149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
115249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
115349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
115449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getElevation(View view) {
115549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return ViewCompatApi21.getElevation(view);
115649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
115749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
115849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
115949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public void setTranslationZ(View view, float translationZ) {
116049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            ViewCompatApi21.setTranslationZ(view, translationZ);
116149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
116249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
116349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        @Override
116449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        public float getTranslationZ(View view) {
116549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return ViewCompatApi21.getTranslationZ(view);
116649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
1167ea4f700ac38424954c56df5138ff794def50b019Chris Banes
1168ea4f700ac38424954c56df5138ff794def50b019Chris Banes        @Override
1169ea4f700ac38424954c56df5138ff794def50b019Chris Banes        public void setOnApplyWindowInsetsListener(View view, OnApplyWindowInsetsListener listener) {
1170ea4f700ac38424954c56df5138ff794def50b019Chris Banes            ViewCompatApi21.setOnApplyWindowInsetsListener(view, listener);
1171ea4f700ac38424954c56df5138ff794def50b019Chris Banes        }
11720bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    }
11730bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
1174bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    static final ViewCompatImpl IMPL;
1175bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    static {
1176560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        final int version = android.os.Build.VERSION.SDK_INT;
1177a52784195525cdb1f2bb4d8dde1b8b314f480957Chet Haase        if (version >= 21) {
11780bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu            IMPL = new Api21ViewCompatImpl();
11790bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        } else if (version >= 19) {
1180086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette            IMPL = new KitKatViewCompatImpl();
1181086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        } else if (version >= 17) {
11820af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov            IMPL = new JbMr1ViewCompatImpl();
11830af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        } else if (version >= 16) {
1184c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell            IMPL = new JBViewCompatImpl();
1185c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        } else if (version >= 14) {
1186bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            IMPL = new ICSViewCompatImpl();
1187ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        } else if (version >= 11) {
1188ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            IMPL = new HCViewCompatImpl();
1189560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        } else if (version >= 9) {
1190560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell            IMPL = new GBViewCompatImpl();
11910f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira        } else if (version >= 7) {
11920f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira            IMPL = new EclairMr1ViewCompatImpl();
1193bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        } else {
1194bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell            IMPL = new BaseViewCompatImpl();
1195bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        }
1196bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
1197bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
11980574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
11990574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Check if this view can be scrolled horizontally in a certain direction.
12000574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12010574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
12020574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param direction Negative to check scrolling left, positive to check scrolling right.
12030574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @return true if this view can be scrolled in the specified direction, false otherwise.
12040574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
1205bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    public static boolean canScrollHorizontally(View v, int direction) {
1206bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        return IMPL.canScrollHorizontally(v, direction);
1207bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
1208bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell
12090574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
12100574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Check if this view can be scrolled vertically in a certain direction.
12110574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12120574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
12130574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param direction Negative to check scrolling up, positive to check scrolling down.
12140574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @return true if this view can be scrolled in the specified direction, false otherwise.
12150574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
1216bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    public static boolean canScrollVertically(View v, int direction) {
1217bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell        return IMPL.canScrollVertically(v, direction);
1218bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell    }
1219560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
12200574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
12210574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Returns the over-scroll mode for this view. The result will be
12220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * one of {@link #OVER_SCROLL_ALWAYS} (default), {@link #OVER_SCROLL_IF_CONTENT_SCROLLS}
12230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * (allow over-scrolling only if the view content is larger than the container),
12240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * or {@link #OVER_SCROLL_NEVER}.
12250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12260574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
12270574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @return This view's over-scroll mode.
12280574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
1229a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @OverScroll
1230560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    public static int getOverScrollMode(View v) {
1231560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell        return IMPL.getOverScrollMode(v);
1232560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    }
1233560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell
12340574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
12350574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Set the over-scroll mode for this view. Valid over-scroll modes are
12360574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link #OVER_SCROLL_ALWAYS} (default), {@link #OVER_SCROLL_IF_CONTENT_SCROLLS}
12370574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * (allow over-scrolling only if the view content is larger than the container),
12380574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * or {@link #OVER_SCROLL_NEVER}.
12390574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12400574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Setting the over-scroll mode of a view will have an effect only if the
12410574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * view is capable of scrolling.
12420574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12430574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
12440574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param overScrollMode The new over-scroll mode for this view.
12450574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
1246a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    public static void setOverScrollMode(View v, @OverScroll int overScrollMode) {
12470574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov        IMPL.setOverScrollMode(v, overScrollMode);
1248560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell    }
12499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
12500574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
12510574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Called from {@link View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)}
12520574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * giving a chance to this View to populate the accessibility event with its
12530574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * text content. While this method is free to modify event
12540574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * attributes other than text content, doing so should normally be performed in
12550574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link View#onInitializeAccessibilityEvent(AccessibilityEvent)}.
12560574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
12570574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Example: Adding formatted date string to an accessibility event in addition
12580574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *          to the text added by the super implementation:
12590574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <pre> public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
12600574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     super.onPopulateAccessibilityEvent(event);
12610574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY;
12620574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     String selectedDateUtterance = DateUtils.formatDateTime(mContext,
12630574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *         mCurrentDate.getTimeInMillis(), flags);
12640574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     event.getText().add(selectedDateUtterance);
12650574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * }</pre>
12660574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
12670574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If an {@link android.view.View.AccessibilityDelegate} has been specified via calling
12680574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)} its
12690574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link android.view.View.AccessibilityDelegate#onPopulateAccessibilityEvent(View,
12700574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *  AccessibilityEvent)}
12710574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * is responsible for handling this call.
12720574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
12730574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p class="note"><strong>Note:</strong> Always call the super implementation before adding
12740574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * information to the event, in case the default implementation has basic information to add.
12750574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
12760574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12770574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
12780574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param event The accessibility event which to populate.
12790574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
12800574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @see View#sendAccessibilityEvent(int)
12810574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @see View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
12820574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
12839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void onPopulateAccessibilityEvent(View v, AccessibilityEvent event) {
12849648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.onPopulateAccessibilityEvent(v, event);
12859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
12869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
12870574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
12880574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Initializes an {@link AccessibilityEvent} with information about
12890574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * this View which is the event source. In other words, the source of
12900574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * an accessibility event is the view whose state change triggered firing
12910574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * the event.
12920574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
12930574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Example: Setting the password property of an event in addition
12940574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *          to properties set by the super implementation:
12950574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <pre> public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
12960574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     super.onInitializeAccessibilityEvent(event);
12970574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *     event.setPassword(true);
12980574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * }</pre>
12990574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
13000574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If an {@link android.view.View.AccessibilityDelegate} has been specified via calling
13010574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)} its
13020574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link android.view.View.AccessibilityDelegate#onInitializeAccessibilityEvent(View,
13030574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *  AccessibilityEvent)}
13040574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * is responsible for handling this call.
13050574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
13060574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p class="note"><strong>Note:</strong> Always call the super implementation before adding
13070574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * information to the event, in case the default implementation has basic information to add.
13080574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
13090574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
13100574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
13110574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param event The event to initialize.
13120574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
13130574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @see View#sendAccessibilityEvent(int)
13140574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @see View#dispatchPopulateAccessibilityEvent(AccessibilityEvent)
13150574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
13169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void onInitializeAccessibilityEvent(View v, AccessibilityEvent event) {
13179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.onInitializeAccessibilityEvent(v, event);
13189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
13199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
13200574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
13210574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Initializes an {@link android.view.accessibility.AccessibilityNodeInfo} with information
13220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * about this view. The base implementation sets:
13230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <ul>
13240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setParent(View)},</li>
13250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setBoundsInParent(Rect)},</li>
13260574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setBoundsInScreen(Rect)},</li>
13270574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setPackageName(CharSequence)},</li>
13280574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setClassName(CharSequence)},</li>
13290574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setContentDescription(CharSequence)},</li>
13300574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setEnabled(boolean)},</li>
13310574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setClickable(boolean)},</li>
13320574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setFocusable(boolean)},</li>
13330574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setFocused(boolean)},</li>
13340574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setLongClickable(boolean)},</li>
13350574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <li>{@link android.view.accessibility.AccessibilityNodeInfo#setSelected(boolean)},</li>
13360574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </ul>
13370574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
13380574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Subclasses should override this method, call the super implementation,
13390574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * and set additional attributes.
13400574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
13410574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * <p>
13420574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * If an {@link android.view.View.AccessibilityDelegate} has been specified via calling
13430574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link View#setAccessibilityDelegate(android.view.View.AccessibilityDelegate)} its
13440574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link android.view.View.AccessibilityDelegate#onInitializeAccessibilityNodeInfo(View,
13450574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *  android.view.accessibility.AccessibilityNodeInfo)}
13460574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * is responsible for handling this call.
13470574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * </p>
13480574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
13490574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
13500574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param info The instance to initialize.
13510574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
13529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void onInitializeAccessibilityNodeInfo(View v, AccessibilityNodeInfoCompat info) {
13539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.onInitializeAccessibilityNodeInfo(v, info);
13549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
13559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
13560574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
13570574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Sets a delegate for implementing accessibility support via compositon as
13580574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * opposed to inheritance. The delegate's primary use is for implementing
13590574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * backwards compatible widgets. For more details see
13600574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * {@link android.view.View.AccessibilityDelegate}.
13610574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
13620574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param v The View against which to invoke the method.
13630574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param delegate The delegate instance.
13640574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
13650574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @see android.view.View.AccessibilityDelegate
13660574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
13679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static void setAccessibilityDelegate(View v, AccessibilityDelegateCompat delegate) {
13689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        IMPL.setAccessibilityDelegate(v, delegate);
13699648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1370c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell
1371c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    /**
1372a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar     * Checks whether provided View has an accessibility delegate attached to it.
1373a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar     *
1374a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar     * @param v The View instance to check
1375a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar     * @return True if the View has an accessibility delegate
1376a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar     */
1377a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar    public static boolean hasAccessibilityDelegate(View v) {
1378a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar        return IMPL.hasAccessibilityDelegate(v);
1379a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar    }
1380a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar
1381a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar    /**
1382c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * Indicates whether the view is currently tracking transient state that the
1383c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * app should not need to concern itself with saving and restoring, but that
1384c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * the framework should take special note to preserve when possible.
1385c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     *
1386c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * @param view View to check for transient state
1387c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * @return true if the view has transient state
1388c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     */
1389c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    public static boolean hasTransientState(View view) {
1390c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        return IMPL.hasTransientState(view);
1391c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    }
1392c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell
1393c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    /**
1394c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * Set whether this view is currently tracking transient state that the
1395c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * framework should attempt to preserve when possible.
1396c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     *
1397c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * @param view View tracking transient state
1398c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     * @param hasTransientState true if this view has transient state
1399c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell     */
1400c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    public static void setHasTransientState(View view, boolean hasTransientState) {
1401c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell        IMPL.setHasTransientState(view, hasTransientState);
1402c95beb648f59c89c6bd7b0eed0a8b266a1b287e2Adam Powell    }
1403ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
1404ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    /**
1405ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>Cause an invalidate to happen on the next animation time step, typically the
1406ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * next display frame.</p>
1407ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1408ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>This method can be invoked from outside of the UI thread
1409ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * only when this View is attached to a window.</p>
1410ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1411ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param view View to invalidate
1412ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     */
1413ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    public static void postInvalidateOnAnimation(View view) {
1414ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        IMPL.postInvalidateOnAnimation(view);
1415ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
1416ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
1417ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    /**
1418ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>Cause an invalidate of the specified area to happen on the next animation
1419ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * time step, typically the next display frame.</p>
1420ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1421ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>This method can be invoked from outside of the UI thread
1422ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * only when this View is attached to a window.</p>
1423ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1424ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param view View to invalidate
1425ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param left The left coordinate of the rectangle to invalidate.
1426ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param top The top coordinate of the rectangle to invalidate.
1427ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param right The right coordinate of the rectangle to invalidate.
1428ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param bottom The bottom coordinate of the rectangle to invalidate.
1429ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     */
1430ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    public static void postInvalidateOnAnimation(View view, int left, int top,
1431ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell            int right, int bottom) {
1432ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        IMPL.postInvalidateOnAnimation(view, left, top, right, bottom);
1433ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
1434ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
1435ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    /**
1436ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>Causes the Runnable to execute on the next animation time step.
1437ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * The runnable will be run on the user interface thread.</p>
1438ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1439ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>This method can be invoked from outside of the UI thread
1440ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * only when this View is attached to a window.</p>
1441ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1442ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param view View to post this Runnable to
1443ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param action The Runnable that will be executed.
1444ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     */
1445ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    public static void postOnAnimation(View view, Runnable action) {
1446ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        IMPL.postOnAnimation(view, action);
1447ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
1448ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
1449ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    /**
1450ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>Causes the Runnable to execute on the next animation time step,
1451ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * after the specified amount of time elapses.
1452ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * The runnable will be run on the user interface thread.</p>
1453ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1454ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * <p>This method can be invoked from outside of the UI thread
1455ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * only when this View is attached to a window.</p>
1456ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *
1457ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param view The view to post this Runnable to
1458ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param action The Runnable that will be executed.
1459ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     * @param delayMillis The delay (in milliseconds) until the Runnable
1460ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     *        will be executed.
1461ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell     */
1462ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    public static void postOnAnimationDelayed(View view, Runnable action, long delayMillis) {
1463ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        IMPL.postOnAnimationDelayed(view, action, delayMillis);
1464ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
146525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
146625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
146725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * Gets the mode for determining whether this View is important for accessibility
146825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * which is if it fires accessibility events and if it is reported to
146925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * accessibility services that query the screen.
147025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
147125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @param view The view whose property to get.
147225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @return The mode for determining whether a View is important for accessibility.
147325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
147425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_YES
147525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_NO
1476b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette     * @see #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
147725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
147825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
1479a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @ImportantForAccessibility
148025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    public static int getImportantForAccessibility(View view) {
148125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        return IMPL.getImportantForAccessibility(view);
148225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    }
148325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
148425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
148525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * Sets how to determine whether this view is important for accessibility
148625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * which is if it fires accessibility events and if it is reported to
148725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * accessibility services that query the screen.
148812ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     * <p>
148912ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     * <em>Note:</em> If the current paltform version does not support the
149012ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     *  {@link #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS} mode, then
149112ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     *  {@link #IMPORTANT_FOR_ACCESSIBILITY_NO} will be used as it is the
149212ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     *  closest terms of semantics.
149312ba769d9e9b121829c69daf0f6350e808028a6aAlan Viverette     * </p>
149425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
149525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @param view The view whose property to set.
149625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @param mode How to determine whether this view is important for accessibility.
149725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
149825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_YES
149925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_NO
1500b5b909e4544fd4d1d0bdf445b8588a7233d5c71fAlan Viverette     * @see #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
150125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see #IMPORTANT_FOR_ACCESSIBILITY_AUTO
150225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
1503a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    public static void setImportantForAccessibility(View view,
1504a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye            @ImportantForAccessibility int mode) {
150525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        IMPL.setImportantForAccessibility(view, mode);
150625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    }
150725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov
150825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    /**
15090d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * Performs the specified accessibility action on the view. For
15100d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * possible accessibility actions look at {@link AccessibilityNodeInfoCompat}.
15110d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * <p>
15120d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * If an {@link AccessibilityDelegateCompat} has been specified via calling
15130d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * {@link #setAccessibilityDelegate(View, AccessibilityDelegateCompat)} its
15140d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * {@link AccessibilityDelegateCompat#performAccessibilityAction(View, int, Bundle)}
15150d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * is responsible for handling this call.
15160d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * </p>
15170d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     *
15180d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * @param action The action to perform.
15190d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * @param arguments Optional action arguments.
15200d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     * @return Whether the action was performed.
15210d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv     */
15220d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv    public static boolean performAccessibilityAction(View view, int action, Bundle arguments) {
15230d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv        return IMPL.performAccessibilityAction(view, action, arguments);
15240d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv    }
15250d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv
15260d4ffdf13a16b1ce2f3bc458002374cdd25663c3alanv    /**
152725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * Gets the provider for managing a virtual view hierarchy rooted at this View
1528e13cf48dc33e3865794d145ae8f4daed0bb2274bSvetoslav Ganov     * and reported to {@link android.accessibilityservice.AccessibilityService}s
152925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * that explore the window content.
153025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * <p>
153125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * If this method returns an instance, this instance is responsible for managing
1532e13cf48dc33e3865794d145ae8f4daed0bb2274bSvetoslav Ganov     * {@link AccessibilityNodeInfoCompat}s describing the virtual sub-tree rooted at
153325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * this View including the one representing the View itself. Similarly the returned
153425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * instance is responsible for performing accessibility actions on any virtual
153525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * view or the root view itself.
153625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * </p>
153725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * <p>
153825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * If an {@link AccessibilityDelegateCompat} has been specified via calling
153914631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     * {@link #setAccessibilityDelegate(View, AccessibilityDelegateCompat)} its
154025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * {@link AccessibilityDelegateCompat#getAccessibilityNodeProvider(View)}
154125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * is responsible for handling this call.
154225121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * </p>
154325121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
154425121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @param view The view whose property to get.
154525121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @return The provider.
154625121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     *
154725121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     * @see AccessibilityNodeProviderCompat
154825121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov     */
154925121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    public static AccessibilityNodeProviderCompat getAccessibilityNodeProvider(View view) {
155025121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov        return IMPL.getAccessibilityNodeProvider(view);
155125121559b53b9f6c7ef7159203d42e11b9aee281Svetoslav Ganov    }
15528a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell
15538a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    /**
155414631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     * The opacity of the view. This is a value from 0 to 1, where 0 means the view is
155514631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     * completely transparent and 1 means the view is completely opaque.
155614631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     *
155714631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     * <p>By default this is 1.0f. Prior to API 11, the returned value is always 1.0f.
155814631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     * @return The opacity of the view.
155914631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette     */
156014631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette    public static float getAlpha(View view) {
156114631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette        return IMPL.getAlpha(view);
156214631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette    }
156314631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette
156414631dece1ee9ddd5f430aa4b8eb048e27065d71Alan Viverette    /**
15658a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Specifies the type of layer backing this view. The layer can be
15668a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * {@link #LAYER_TYPE_NONE disabled}, {@link #LAYER_TYPE_SOFTWARE software} or
15678a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * {@link #LAYER_TYPE_HARDWARE hardware}.</p>
15688a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
15698a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>A layer is associated with an optional {@link android.graphics.Paint}
15708a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * instance that controls how the layer is composed on screen. The following
15718a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * properties of the paint are taken into account when composing the layer:</p>
15728a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <ul>
15738a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <li>{@link android.graphics.Paint#getAlpha() Translucency (alpha)}</li>
15748a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <li>{@link android.graphics.Paint#getXfermode() Blending mode}</li>
15758a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <li>{@link android.graphics.Paint#getColorFilter() Color filter}</li>
15768a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * </ul>
15778a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
15788a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>If this view has an alpha value set to < 1.0 by calling
15798a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * setAlpha(float), the alpha value of the layer's paint is replaced by
15808a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * this view's alpha value. Calling setAlpha(float) is therefore
15818a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * equivalent to setting a hardware layer on this view and providing a paint with
15828a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * the desired alpha value.<p>
15838a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
15848a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * <p>Refer to the documentation of {@link #LAYER_TYPE_NONE disabled},
15858a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * {@link #LAYER_TYPE_SOFTWARE software} and {@link #LAYER_TYPE_HARDWARE hardware}
15868a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * for more information on when and how to use layers.</p>
15878a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
15888a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * @param layerType The ype of layer to use with this view, must be one of
15898a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_NONE}, {@link #LAYER_TYPE_SOFTWARE} or
15908a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_HARDWARE}
15918a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * @param paint The paint used to compose the layer. This argument is optional
15928a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        and can be null. It is ignored when the layer type is
15938a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_NONE}
15948a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *
15958a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * @param view View to set the layer type for
15968a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * @param layerType The type of layer to use with this view, must be one of
15978a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_NONE}, {@link #LAYER_TYPE_SOFTWARE} or
15988a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_HARDWARE}
15998a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     * @param paint The paint used to compose the layer. This argument is optional
16008a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        and can be null. It is ignored when the layer type is
16018a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     *        {@link #LAYER_TYPE_NONE}
16028a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell     */
1603a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    public static void setLayerType(View view, @LayerType int layerType, Paint paint) {
16048a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        IMPL.setLayerType(view, layerType, paint);
16058a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    }
160697341bdc5bea1d7bf777de65228039142d249f38Adam Powell
160797341bdc5bea1d7bf777de65228039142d249f38Adam Powell    /**
160897341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * Indicates what type of layer is currently associated with this view. By default
160997341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * a view does not have a layer, and the layer type is {@link #LAYER_TYPE_NONE}.
161097341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * Refer to the documentation of
161197341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * {@link #setLayerType(android.view.View, int, android.graphics.Paint)}
161297341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * for more information on the different types of layers.
161397341bdc5bea1d7bf777de65228039142d249f38Adam Powell     *
161497341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @param view The view to fetch the layer type from
161597341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @return {@link #LAYER_TYPE_NONE}, {@link #LAYER_TYPE_SOFTWARE} or
161697341bdc5bea1d7bf777de65228039142d249f38Adam Powell     *         {@link #LAYER_TYPE_HARDWARE}
161797341bdc5bea1d7bf777de65228039142d249f38Adam Powell     *
161897341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @see #setLayerType(android.view.View, int, android.graphics.Paint)
161997341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @see #LAYER_TYPE_NONE
162097341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @see #LAYER_TYPE_SOFTWARE
162197341bdc5bea1d7bf777de65228039142d249f38Adam Powell     * @see #LAYER_TYPE_HARDWARE
162297341bdc5bea1d7bf777de65228039142d249f38Adam Powell     */
1623a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @LayerType
162497341bdc5bea1d7bf777de65228039142d249f38Adam Powell    public static int getLayerType(View view) {
162597341bdc5bea1d7bf777de65228039142d249f38Adam Powell        return IMPL.getLayerType(view);
162697341bdc5bea1d7bf777de65228039142d249f38Adam Powell    }
16270af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
16280af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    /**
16290af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * Gets the id of a view for which a given view serves as a label for
16300af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * accessibility purposes.
16310af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     *
16320af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * @param view The view on which to invoke the corresponding method.
16330af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * @return The labeled view id.
16340af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     */
16350af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    public static int getLabelFor(View view) {
16360af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        return IMPL.getLabelFor(view);
16370af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    }
16380af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov
16390af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    /**
16400af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * Sets the id of a view for which a given view serves as a label for
16410af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * accessibility purposes.
16420af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     *
16430af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * @param view The view on which to invoke the corresponding method.
16440af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     * @param labeledId The labeled view id.
16450af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov     */
1646a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    public static void setLabelFor(View view, @IdRes int labeledId) {
16470af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov        IMPL.setLabelFor(view, labeledId);
16480af001b9e0d173f6b9836e66539bf764b897c36fSvetoslav Ganov    }
16496debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell
16506debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell    /**
16516debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * Updates the {@link Paint} object used with the current layer (used only if the current
16526debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * layer type is not set to {@link #LAYER_TYPE_NONE}). Changed properties of the Paint
16536debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * provided to {@link #setLayerType(android.view.View, int, android.graphics.Paint)}
16546debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * will be used the next time the View is redrawn, but
16556debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * {@link #setLayerPaint(android.view.View, android.graphics.Paint)}
16566debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * must be called to ensure that the view gets redrawn immediately.
16576debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *
16586debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <p>A layer is associated with an optional {@link android.graphics.Paint}
16596debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * instance that controls how the layer is composed on screen. The following
16606debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * properties of the paint are taken into account when composing the layer:</p>
16616debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <ul>
16626debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <li>{@link android.graphics.Paint#getAlpha() Translucency (alpha)}</li>
16636debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <li>{@link android.graphics.Paint#getXfermode() Blending mode}</li>
16646debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <li>{@link android.graphics.Paint#getColorFilter() Color filter}</li>
16656debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * </ul>
16666debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *
16676debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * <p>If this view has an alpha value set to < 1.0 by calling
16686debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * View#setAlpha(float), the alpha value of the layer's paint is replaced by
16696debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * this view's alpha value. Calling View#setAlpha(float) is therefore
16706debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * equivalent to setting a hardware layer on this view and providing a paint with
16716debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * the desired alpha value.</p>
16726debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *
16731d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @param view View to set a layer paint for
16746debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     * @param paint The paint used to compose the layer. This argument is optional
16756debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *        and can be null. It is ignored when the layer type is
16766debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *        {@link #LAYER_TYPE_NONE}
16776debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     *
16781d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @see #setLayerType(View, int, android.graphics.Paint)
16796debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell     */
16806debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell    public static void setLayerPaint(View view, Paint paint) {
16816debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell        IMPL.setLayerPaint(view, paint);
16826debd2bbcae1cd285d2e21db633998b7801f9f40Adam Powell    }
16831d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
16841d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
16851d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Returns the resolved layout direction for this view.
16861d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     *
16871d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @param view View to get layout direction for
16881d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @return {@link #LAYOUT_DIRECTION_RTL} if the layout direction is RTL or returns
16891d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * {@link #LAYOUT_DIRECTION_LTR} if the layout direction is not RTL.
16901d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     *
16911d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * For compatibility, this will return {@link #LAYOUT_DIRECTION_LTR} if API version
16921d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * is lower than Jellybean MR1 (API 17)
16931d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
1694a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @ResolvedLayoutDirectionMode
16951d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    public static int getLayoutDirection(View view) {
16961d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        return IMPL.getLayoutDirection(view);
16971d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    }
16981d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell
16991d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    /**
17001d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Set the layout direction for this view. This will propagate a reset of layout direction
17011d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * resolution to the view's children and resolve layout direction for this view.
17021d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     *
17031d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @param view View to set layout direction for
17041d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * @param layoutDirection the layout direction to set. Should be one of:
17051d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     *
17061d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * {@link #LAYOUT_DIRECTION_LTR},
17071d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * {@link #LAYOUT_DIRECTION_RTL},
17081d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * {@link #LAYOUT_DIRECTION_INHERIT},
17091d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * {@link #LAYOUT_DIRECTION_LOCALE}.
17101d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     *
17111d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * Resolution will be done if the value is set to LAYOUT_DIRECTION_INHERIT. The resolution
17121d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * proceeds up the parent chain of the view to get the value. If there is no parent, then it
17131d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     * will return the default {@link #LAYOUT_DIRECTION_LTR}.
17141d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell     */
1715a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    public static void setLayoutDirection(View view, @LayoutDirectionMode int layoutDirection) {
17161d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell        IMPL.setLayoutDirection(view, layoutDirection);
17171d26501f0c8e9f3577f651938a03f6b3a1a672c7Adam Powell    }
17183cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell
17193cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell    /**
17203cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     * Gets the parent for accessibility purposes. Note that the parent for
17213cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     * accessibility is not necessary the immediate parent. It is the first
17223cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     * predecessor that is important for accessibility.
17233cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     *
17243cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     * @param view View to retrieve parent for
17253cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     * @return The parent for use in accessibility inspection
17263cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell     */
17273cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell    public static ViewParent getParentForAccessibility(View view) {
17283cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell        return IMPL.getParentForAccessibility(view);
17293cf6141d516a0a6170823b1bda5c0b6d7500e76cAdam Powell    }
1730c029e15f5a4709214cb433a562256586824a0f33Adam Powell
1731c029e15f5a4709214cb433a562256586824a0f33Adam Powell    /**
1732c029e15f5a4709214cb433a562256586824a0f33Adam Powell     * Indicates whether this View is opaque. An opaque View guarantees that it will
1733c029e15f5a4709214cb433a562256586824a0f33Adam Powell     * draw all the pixels overlapping its bounds using a fully opaque color.
1734c029e15f5a4709214cb433a562256586824a0f33Adam Powell     *
1735c029e15f5a4709214cb433a562256586824a0f33Adam Powell     * On API 7 and above this will call View's true isOpaque method. On previous platform
1736c029e15f5a4709214cb433a562256586824a0f33Adam Powell     * versions it will check the opacity of the view's background drawable if present.
1737c029e15f5a4709214cb433a562256586824a0f33Adam Powell     *
1738c029e15f5a4709214cb433a562256586824a0f33Adam Powell     * @return True if this View is guaranteed to be fully opaque, false otherwise.
1739c029e15f5a4709214cb433a562256586824a0f33Adam Powell     */
1740c029e15f5a4709214cb433a562256586824a0f33Adam Powell    public static boolean isOpaque(View view) {
1741c029e15f5a4709214cb433a562256586824a0f33Adam Powell        return IMPL.isOpaque(view);
1742c029e15f5a4709214cb433a562256586824a0f33Adam Powell    }
1743b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
1744b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
1745b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Utility to reconcile a desired size and state, with constraints imposed
1746b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * by a MeasureSpec.  Will take the desired size, unless a different size
1747b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * is imposed by the constraints.  The returned value is a compound integer,
1748b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * with the resolved size in the {@link #MEASURED_SIZE_MASK} bits and
1749b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * optionally the bit {@link #MEASURED_STATE_TOO_SMALL} set if the resulting
1750b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * size is smaller than the size the view wants to be.
1751b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     *
1752b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * @param size How big the view wants to be
1753b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * @param measureSpec Constraints imposed by the parent
1754b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * @return Size information bit mask as defined by
1755b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #MEASURED_SIZE_MASK} and {@link #MEASURED_STATE_TOO_SMALL}.
1756b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
1757b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
1758b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return IMPL.resolveSizeAndState(size, measureSpec, childMeasuredState);
1759b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
1760b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
1761b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
1762b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Return the full width measurement information for this view as computed
1763b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * by the most recent call to {@link android.view.View#measure(int, int)}.
1764b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * This result is a bit mask as defined by {@link #MEASURED_SIZE_MASK} and
1765b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #MEASURED_STATE_TOO_SMALL}.
1766b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * This should be used during measurement and layout calculations only. Use
1767b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link android.view.View#getWidth()} to see how wide a view is after layout.
1768b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     *
1769b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * @return The measured width of this view as a bit mask.
1770b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
1771b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredWidthAndState(View view) {
1772b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return IMPL.getMeasuredWidthAndState(view);
1773b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
1774b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
1775b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
1776b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Return the full height measurement information for this view as computed
1777b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * by the most recent call to {@link android.view.View#measure(int, int)}.
1778b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * This result is a bit mask as defined by {@link #MEASURED_SIZE_MASK} and
1779b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #MEASURED_STATE_TOO_SMALL}.
1780b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * This should be used during measurement and layout calculations only. Use
1781b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link android.view.View#getHeight()} to see how wide a view is after layout.
1782b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     *
1783b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * @return The measured width of this view as a bit mask.
1784b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
1785b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredHeightAndState(View view) {
1786b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return IMPL.getMeasuredHeightAndState(view);
1787b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
1788b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
1789b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    /**
1790b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * Return only the state bits of {@link #getMeasuredWidthAndState}
1791b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * and {@link #getMeasuredHeightAndState}, combined into one integer.
1792b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * The width component is in the regular bits {@link #MEASURED_STATE_MASK}
1793b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * and the height component is at the shifted bits
1794b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     * {@link #MEASURED_HEIGHT_STATE_SHIFT}>>{@link #MEASURED_STATE_MASK}.
1795b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell     */
1796b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredState(View view) {
1797b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return IMPL.getMeasuredState(view);
1798b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
1799086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
1800086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    /**
1801086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Gets the live region mode for the specified View.
1802086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *
1803086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * @param view The view from which to obtain the live region mode
1804086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * @return The live region mode for the view.
1805086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *
1806086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * @see ViewCompat#setAccessibilityLiveRegion(View, int)
1807086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     */
1808a3ff3273e976adf19770651dcf473fa67b38eb22Tor Norbye    @AccessibilityLiveRegion
1809e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    public static int getAccessibilityLiveRegion(View view) {
1810086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        return IMPL.getAccessibilityLiveRegion(view);
1811086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    }
1812086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette
1813086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    /**
1814086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * Sets the live region mode for the specified view. This indicates to
1815086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * accessibility services whether they should automatically notify the user
1816086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * about changes to the view's content description or text, or to the
1817086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * content descriptions or text of the view's children (where applicable).
1818086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
1819086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * For example, in a login screen with a TextView that displays an "incorrect
1820086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * password" notification, that view should be marked as a live region with
1821086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * mode {@link #ACCESSIBILITY_LIVE_REGION_POLITE}.
1822086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
1823086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * To disable change notifications for this view, use
1824086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * {@link #ACCESSIBILITY_LIVE_REGION_NONE}. This is the default live region
1825086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * mode for most views.
1826086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
1827086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * To indicate that the user should be notified of changes, use
1828086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * {@link #ACCESSIBILITY_LIVE_REGION_POLITE}.
1829086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * <p>
1830086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * If the view's changes should interrupt ongoing speech and notify the user
1831086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * immediately, use {@link #ACCESSIBILITY_LIVE_REGION_ASSERTIVE}.
1832086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *
1833086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * @param view The view on which to set the live region mode
1834086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     * @param mode The live region mode for this view, one of:
1835086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *        <ul>
1836086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *        <li>{@link #ACCESSIBILITY_LIVE_REGION_NONE}
1837086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *        <li>{@link #ACCESSIBILITY_LIVE_REGION_POLITE}
1838086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *        <li>{@link #ACCESSIBILITY_LIVE_REGION_ASSERTIVE}
1839086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     *        </ul>
1840086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette     */
18415e8ef0460dfca1e3806b491fa886995baf0cfe9cTor Norbye    public static void setAccessibilityLiveRegion(View view, @AccessibilityLiveRegion int mode) {
1842086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette        IMPL.setAccessibilityLiveRegion(view, mode);
1843086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette    }
1844e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1845e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    /**
1846e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * Returns the start padding of the specified view depending on its resolved layout direction.
1847e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * If there are inset and enabled scrollbars, this value may include the space
1848e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * required to display the scrollbars as well.
1849e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     *
1850e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param view The view to get padding for
1851e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @return the start padding in pixels
1852e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     */
1853e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    public static int getPaddingStart(View view) {
1854e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        return IMPL.getPaddingStart(view);
1855e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    }
1856e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1857e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    /**
1858e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * Returns the end padding of the specified view depending on its resolved layout direction.
1859e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * If there are inset and enabled scrollbars, this value may include the space
1860e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * required to display the scrollbars as well.
1861e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     *
1862e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param view The view to get padding for
1863e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @return the end padding in pixels
1864e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     */
1865e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    public static int getPaddingEnd(View view) {
1866e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        return IMPL.getPaddingEnd(view);
1867e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    }
1868e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell
1869e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    /**
1870e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * Sets the relative padding. The view may add on the space required to display
1871e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * the scrollbars, depending on the style and visibility of the scrollbars.
1872e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * So the values returned from {@link #getPaddingStart}, {@link View#getPaddingTop},
1873e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * {@link #getPaddingEnd} and {@link View#getPaddingBottom} may be different
1874e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * from the values set in this call.
1875e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     *
1876e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param view The view on which to set relative padding
1877e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param start the start padding in pixels
1878e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param top the top padding in pixels
1879e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param end the end padding in pixels
1880e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     * @param bottom the bottom padding in pixels
1881e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell     */
1882e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    public static void setPaddingRelative(View view, int start, int top, int end, int bottom) {
1883e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell        IMPL.setPaddingRelative(view, start, top, end, bottom);
1884e096e4c526feeb64833b5a75649ec36d75d7cbbfAdam Powell    }
1885a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
1886a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    /**
1887a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell     * Notify a view that it is being temporarily detached.
1888a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell     */
1889a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    public static void dispatchStartTemporaryDetach(View view) {
1890a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        IMPL.dispatchStartTemporaryDetach(view);
1891a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    }
1892a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell
1893a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    /**
1894a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell     * Notify a view that its temporary detach has ended; the view is now reattached.
1895a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell     */
1896a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    public static void dispatchFinishTemporaryDetach(View view) {
1897a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell        IMPL.dispatchFinishTemporaryDetach(view);
1898a6613ed42e0dee0cac3da01f5450e2d61c270b52Adam Powell    }
1899c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
1900c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    /**
1901c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * The horizontal location of this view relative to its {@link View#getLeft() left} position.
1902c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * This position is post-layout, in addition to wherever the object's
1903c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * layout placed it.
1904c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     *
1905d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will return 0.</p>
1906d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1907c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * @return The horizontal position of this view relative to its left position, in pixels.
1908c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     */
1909f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    public static float getTranslationX(View view) {
1910f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        return IMPL.getTranslationX(view);
1911c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    }
1912c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
1913c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    /**
1914c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * The vertical location of this view relative to its {@link View#getTop() left} position.
1915c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * This position is post-layout, in addition to wherever the object's
1916c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * layout placed it.
1917c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     *
1918d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will return 0.</p>
1919d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1920c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     * @return The vertical position of this view relative to its top position, in pixels.
1921c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell     */
1922f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    public static float getTranslationY(View view) {
1923f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        return IMPL.getTranslationY(view);
1924f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    }
1925f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
1926f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    /**
1927f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * Returns the minimum width of the view.
1928f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     *
1929f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * <p>Prior to API 16 this will return 0.</p>
1930f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     *
1931f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * @return the minimum width the view will try to be.
1932f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     */
1933f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    public static int getMinimumWidth(View view) {
1934f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        return IMPL.getMinimumWidth(view);
1935f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    }
1936f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell
1937f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    /**
1938f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * Returns the minimum height of the view.
1939f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     *
1940f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * <p>Prior to API 16 this will return 0.</p>
1941f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     *
1942f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     * @return the minimum height the view will try to be.
1943f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell     */
1944f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell    public static int getMinimumHeight(View view) {
1945f2b93981846ce21a06b6a92a5a6ba70a29c345edAdam Powell        return IMPL.getMinimumHeight(view);
1946c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    }
1947d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
1948d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
1949d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * This method returns a ViewPropertyAnimator object, which can be used to animate
1950d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * specific properties on this View.
1951d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1952d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 14, this method will do nothing.</p>
1953d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1954d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @return ViewPropertyAnimator The ViewPropertyAnimator associated with this View.
1955d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
1956d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static ViewPropertyAnimatorCompat animate(View view) {
1957d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.animate(view);
1958d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
1959d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
1960d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
1961d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the horizontal location of this view relative to its left position.
1962d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * This effectively positions the object post-layout, in addition to wherever the object's
1963d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * layout placed it.
1964d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1965d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
1966d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1967d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The horizontal position of this view relative to its left position,
1968d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * in pixels.
1969d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
1970d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setTranslationX(View view, float value) {
1971d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setTranslationX(view, value);
1972d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
1973d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
1974d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
1975d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the vertical location of this view relative to its top position.
1976d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * This effectively positions the object post-layout, in addition to wherever the object's
1977d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * layout placed it.
1978d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1979d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
1980d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1981d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The vertical position of this view relative to its top position,
1982d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * in pixels.
1983d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1984d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @attr ref android.R.styleable#View_translationY
1985d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
1986d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setTranslationY(View view, float value) {
1987d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setTranslationY(view, value);
1988d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
1989d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
1990d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
1991d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Sets the opacity of the view. This is a value from 0 to 1, where 0 means the view is
1992d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * completely transparent and 1 means the view is completely opaque.</p>
1993d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1994d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p> Note that setting alpha to a translucent value (0 < alpha < 1) can have significant
1995d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * performance implications, especially for large views. It is best to use the alpha property
1996d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * sparingly and transiently, as in the case of fading animations.</p>
1997d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
1998d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
1999d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2000d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The opacity of the view.
2001d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2002d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setAlpha(View view, float value) {
2003d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setAlpha(view, value);
2004d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2005d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2006d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2007d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the visual x position of this view, in pixels. This is equivalent to setting the
2008d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * {@link #setTranslationX(View, float) translationX} property to be the difference between
2009d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * the x value passed in and the current left property of the view as determined
2010d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * by the layout bounds.
2011d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2012d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2013d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2014d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The visual x position of this view, in pixels.
2015d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2016d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setX(View view, float value) {
2017d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setX(view, value);
2018d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2019d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2020d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2021d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the visual y position of this view, in pixels. This is equivalent to setting the
2022d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * {@link #setTranslationY(View, float) translationY} property to be the difference between
2023d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * the y value passed in and the current top property of the view as determined by the
2024d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * layout bounds.
2025d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2026d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2027d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2028d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The visual y position of this view, in pixels.
2029d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2030d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setY(View view, float value) {
2031d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setY(view, value);
2032d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2033d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2034d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2035d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the degrees that the view is rotated around the pivot point. Increasing values
2036d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * result in clockwise rotation.
2037d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2038d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2039d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2040d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The degrees of rotation.
2041d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2042d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotation(View view, float value) {
2043d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setRotation(view, value);
2044d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2045d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2046d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2047d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the degrees that the view is rotated around the horizontal axis through the pivot point.
2048d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Increasing values result in clockwise rotation from the viewpoint of looking down the
2049d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * x axis.
2050d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2051d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2052d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2053d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The degrees of X rotation.
2054d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2055d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotationX(View view, float value) {
2056d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setRotationX(view, value);
2057d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2058d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2059d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2060d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the degrees that the view is rotated around the vertical axis through the pivot point.
2061d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Increasing values result in counter-clockwise rotation from the viewpoint of looking
2062d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * down the y axis.
2063d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2064d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2065d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2066d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The degrees of Y rotation.
2067d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2068d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotationY(View view, float value) {
2069d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setRotationY(view, value);
2070d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2071d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2072d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2073d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the amount that the view is scaled in x around the pivot point, as a proportion of
2074d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * the view's unscaled width. A value of 1 means that no scaling is applied.
2075d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2076d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2077d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2078d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The scaling factor.
2079d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2080d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setScaleX(View view, float value) {
2081d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setScaleX(view, value);
2082d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2083d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2084d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2085d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the amount that the view is scaled in Y around the pivot point, as a proportion of
2086d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * the view's unscaled width. A value of 1 means that no scaling is applied.
2087d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2088d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2089d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2090d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The scaling factor.
2091d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2092d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setScaleY(View view, float value) {
2093d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setScaleY(view, value);
2094d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2095d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2096d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2097d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * The x location of the point around which the view is
2098d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * {@link #setRotation(View, float) rotated} and {@link #setScaleX(View, float) scaled}.
2099d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2102d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2103f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getPivotX(View view) {
2104d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getPivotX(view);
2105d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the x location of the point around which the view is
2109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * {@link #setRotation(View, float) rotated} and {@link #setScaleX(View, float) scaled}.
2110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * By default, the pivot point is centered on the object.
2111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Setting this property disables this behavior and causes the view to use only the
2112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * explicitly set pivotX and pivotY values.
2113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The x location of the pivot point.
2117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2118f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static void setPivotX(View view, float value) {
2119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setPivotX(view, value);
2120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * The y location of the point around which the view is {@link #setRotation(View,
2124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * float) rotated} and {@link #setScaleY(View, float) scaled}.
2125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will return 0.</p>
2127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @return The y location of the pivot point.
2129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2130f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getPivotY(View view) {
2131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getPivotY(view);
2132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    /**
2135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Sets the y location of the point around which the view is
2136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * {@link #setRotation(View, float) rotated} and {@link #setScaleY(View, float) scaled}.
2137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * By default, the pivot point is centered on the object.
2138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * Setting this property disables this behavior and causes the view to use only the
2139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * explicitly set pivotX and pivotY values.
2140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * <p>Prior to API 11 this will have no effect.</p>
2142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     *
2143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     * @param value The y location of the pivot point.
2144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase     */
2145f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static void setPivotY(View view, float value) {
2146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        IMPL.setPivotX(view, value);
2147d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2149f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getRotation(View view) {
2150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getRotation(view);
2151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2153f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getRotationX(View view) {
2154d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getRotationX(view);
2155d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2156d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2157f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getRotationY(View view) {
2158d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getRotationY(view);
2159d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2160d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2161f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getScaleX(View view) {
2162d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getScaleX(view);
2163d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2164d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2165f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getScaleY(View view) {
2166d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getScaleY(view);
2167d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2168d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2169f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getX(View view) {
2170d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getX(view);
2171d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2172d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
2173f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static float getY(View view) {
2174d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return IMPL.getY(view);
2175d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
2176d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
21770bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    /**
217849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * Sets the base elevation of this view, in pixels.
217949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
218049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static void setElevation(View view, float elevation) {
218149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        IMPL.setElevation(view, elevation);
218249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
218349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
218449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
218549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * The base elevation of this view relative to its parent, in pixels.
218649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     *
218749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * @return The base depth position of the view, in pixels.
218849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
218949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static float getElevation(View view) {
219049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return IMPL.getElevation(view);
219149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
219249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
219349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
219449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * Sets the depth location of this view relative to its {@link #getElevation(View) elevation}.
219549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
219649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static void setTranslationZ(View view, float translationZ) {
219749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        IMPL.setTranslationZ(view, translationZ);
219849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
219949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
220049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
220149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * The depth location of this view relative to its {@link #getElevation(View) elevation}.
220249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     *
220349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * @return The depth of this view relative to its elevation.
220449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
220549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static float getTranslationZ(View view) {
220649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return IMPL.getTranslationZ(view);
220749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
220849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
220949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
22100bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * Sets the name of the View to be used to identify Views in Transitions.
22110bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * Names should be unique in the View hierarchy.
22120bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     *
22130bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * @param view The View against which to invoke the method.
22140bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * @param transitionName The name of the View to uniquely identify it for Transitions.
22150bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     */
2216f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static void setTransitionName(View view, String transitionName) {
22170bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        IMPL.setTransitionName(view, transitionName);
22180bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    }
22190bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
22200bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    /**
22210bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * Returns the name of the View to be used to identify Views in Transitions.
22220bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * Names should be unique in the View hierarchy.
22230bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     *
22240bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * <p>This returns null if the View has not been given a name.</p>
22250bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     *
22260bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * @param view The View against which to invoke the method.
22270bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * @return The name used of the View to be used to identify Views in Transitions or null
22280bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     * if no name has been given.
22290bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu     */
2230f633e9521802aeadfea1aec5724348b8eafd1b1dDake Gu    public static String getTransitionName(View view) {
22310bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu        return IMPL.getTransitionName(view);
22320bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu    }
22330bf2af5f2d3034e7c8e4aadb076d258122906e1dDake Gu
223449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
223549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * Returns the current system UI visibility that is currently set for the entire window.
223649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
223749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static int getWindowSystemUiVisibility(View view) {
223849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return IMPL.getWindowSystemUiVisibility(view);
223949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
224049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
224149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    /**
224249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * Ask that a new dispatch of {@code View.onApplyWindowInsets(WindowInsets)} be performed. This
224349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     * falls back to {@code View.requestFitSystemWindows()} where available.
224449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes     */
224549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static void requestApplyInsets(View view) {
224649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        IMPL.requestApplyInsets(view);
224749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
224849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
22490f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira    /**
22500f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     * Tells the ViewGroup whether to draw its children in the order defined by the method
2251bb3bde43f526bd40bed541da6c8256d0dde328a4Mindy Pereira     * {@code ViewGroup.getChildDrawingOrder(int, int)}.
22520f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     *
22530f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     * @param enabled true if the order of the children when drawing is determined by
2254bb3bde43f526bd40bed541da6c8256d0dde328a4Mindy Pereira     *        {@link ViewGroup#getChildDrawingOrder(int, int)}, false otherwise
22550f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     *
22560f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     * <p>Prior to API 7 this will have no effect.</p>
22570f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira     */
22580f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira    public static void setChildrenDrawingOrderEnabled(ViewGroup viewGroup, boolean enabled) {
22590f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira       IMPL.setChildrenDrawingOrderEnabled(viewGroup, enabled);
22600f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira    }
22610f3c6c1be783cfb67a2d11a1a027de0847949064Mindy Pereira
2262f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell    /**
2263f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell     * Returns true if this view should adapt to fit system window insets. This method will always
2264f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell     * return false before API 16 (Jellybean).
2265f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell     */
2266f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell    public static boolean getFitsSystemWindows(View v) {
2267f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell        return IMPL.getFitsSystemWindows(v);
2268f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell    }
2269f9c35128decbd812ff2497852ccacbd1ffbbd811Adam Powell
2270bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell    /**
22718c9ce11dec24a32f438406286404be7ac294011dChris Banes     * Sets whether or not this view should account for system screen decorations
22728c9ce11dec24a32f438406286404be7ac294011dChris Banes     * such as the status bar and inset its content; that is, controlling whether
22738c9ce11dec24a32f438406286404be7ac294011dChris Banes     * the default implementation of {@link View#fitSystemWindows(Rect)} will be
22748c9ce11dec24a32f438406286404be7ac294011dChris Banes     * executed. See that method for more details.
22758c9ce11dec24a32f438406286404be7ac294011dChris Banes     */
22768c9ce11dec24a32f438406286404be7ac294011dChris Banes    public static void setFitsSystemWindows(View view, boolean fitSystemWindows) {
22778c9ce11dec24a32f438406286404be7ac294011dChris Banes        IMPL.setFitsSystemWindows(view, fitSystemWindows);
22788c9ce11dec24a32f438406286404be7ac294011dChris Banes    }
22798c9ce11dec24a32f438406286404be7ac294011dChris Banes
22808c9ce11dec24a32f438406286404be7ac294011dChris Banes    /**
2281bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     * On API 11 devices and above, call <code>Drawable.jumpToCurrentState()</code>
2282bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     * on all Drawable objects associated with this view.
2283bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     * <p>
2284bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     * On API 21 and above, also calls <code>StateListAnimator#jumpToCurrentState()</code>
2285bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     * if there is a StateListAnimator attached to this view.
2286bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell     */
2287bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell    public static void jumpDrawablesToCurrentState(View v) {
2288bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        IMPL.jumpDrawablesToCurrentState(v);
2289bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell    }
2290bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell
2291ea4f700ac38424954c56df5138ff794def50b019Chris Banes    /**
2292ea4f700ac38424954c56df5138ff794def50b019Chris Banes     * Set an {@link OnApplyWindowInsetsListener} to take over the policy for applying
2293ea4f700ac38424954c56df5138ff794def50b019Chris Banes     * window insets to this view. This will only take effect on devices with API 21 or above.
2294ea4f700ac38424954c56df5138ff794def50b019Chris Banes     */
2295ea4f700ac38424954c56df5138ff794def50b019Chris Banes    public static void setOnApplyWindowInsetsListener(View v,
2296ea4f700ac38424954c56df5138ff794def50b019Chris Banes            OnApplyWindowInsetsListener listener) {
2297ea4f700ac38424954c56df5138ff794def50b019Chris Banes        IMPL.setOnApplyWindowInsetsListener(v, listener);
2298ea4f700ac38424954c56df5138ff794def50b019Chris Banes    }
2299ea4f700ac38424954c56df5138ff794def50b019Chris Banes
23005e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes    /**
23015e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     * Controls whether the entire hierarchy under this view will save its
23025e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     * state when a state saving traversal occurs from its parent.
23035e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     *
23045e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     * @param enabled Set to false to <em>disable</em> state saving, or true
23055e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     * (the default) to allow it.
23065e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes     */
23075e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes    public static void setSaveFromParentEnabled(View v, boolean enabled) {
23085e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        IMPL.setSaveFromParentEnabled(v, enabled);
23095e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes    }
23105e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes
2311d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    // TODO: getters for various view properties (rotation, etc)
2312bc889e39e279fcf8c3d35fc11d8052c002eddf38Adam Powell}
2313