1ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell/*
2ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * Copyright (C) 2012 The Android Open Source Project
3ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell *
4ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * you may not use this file except in compliance with the License.
6ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * You may obtain a copy of the License at
7ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell *
8ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell *
10ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * Unless required by applicable law or agreed to in writing, software
11ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * See the License for the specific language governing permissions and
14ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell * limitations under the License.
15ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell */
16ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
17ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powellpackage android.support.v4.view;
18ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
19ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powellimport android.animation.ValueAnimator;
204510b5c24adad2b94df9b84c6b73f5534ffe9b57Yigit Boyarimport android.graphics.Matrix;
218a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powellimport android.graphics.Paint;
228a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powellimport android.view.View;
2334656d7f78f35591ad1f629b936c939406d6270eYuichi Arakiimport android.view.ViewParent;
24ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell
25ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powellclass ViewCompatHC {
26ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    static long getFrameTime() {
27ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell        return ValueAnimator.getFrameDelay();
28ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell    }
298a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell
306eb3cdf42d5382aef6b6a6afd7c305dbc27885b9Alan Viverette    public static float getAlpha(View view) {
316eb3cdf42d5382aef6b6a6afd7c305dbc27885b9Alan Viverette        return view.getAlpha();
326eb3cdf42d5382aef6b6a6afd7c305dbc27885b9Alan Viverette    }
336eb3cdf42d5382aef6b6a6afd7c305dbc27885b9Alan Viverette
348a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    public static void setLayerType(View view, int layerType, Paint paint) {
358a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell        view.setLayerType(layerType, paint);
368a0c51a3d438802df28612e02fdf0cc8fab06ddbAdam Powell    }
3797341bdc5bea1d7bf777de65228039142d249f38Adam Powell
3897341bdc5bea1d7bf777de65228039142d249f38Adam Powell    public static int getLayerType(View view) {
3997341bdc5bea1d7bf777de65228039142d249f38Adam Powell        return view.getLayerType();
4097341bdc5bea1d7bf777de65228039142d249f38Adam Powell    }
41b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
42b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
43b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return View.resolveSizeAndState(size, measureSpec, childMeasuredState);
44b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
45b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
46b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredWidthAndState(View view) {
47b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return view.getMeasuredWidthAndState();
48b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
49b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
50b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredHeightAndState(View view) {
51b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return view.getMeasuredHeightAndState();
52b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
53b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell
54b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    public static int getMeasuredState(View view) {
55b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell        return view.getMeasuredState();
56b12ba0547b2fad1c4dfc12dec36c5e7893974e67Adam Powell    }
57c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
58c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    public static float getTranslationX(View view) {
59c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        return view.getTranslationX();
60c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    }
61c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell
62c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    public static float getTranslationY(View view) {
63c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell        return view.getTranslationY();
64c096ad1894f1a4543e703ddc9d279fbd3b596c53Adam Powell    }
65d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
66d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getX(View view) {
67d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getX();
68d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
69d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
70d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getY(View view) {
71d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getY();
72d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
73d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
74d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getRotation(View view) {
75d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getRotation();
76d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
77d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
78d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getRotationX(View view) {
79d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getRotationX();
80d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
81d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
82d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getRotationY(View view) {
83d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getRotationY();
84d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
85d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
86d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getScaleX(View view) {
87d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getScaleX();
88d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
89d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
90d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getScaleY(View view) {
91d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getScaleY();
92d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
93d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
94d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setTranslationX(View view, float value) {
95d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setTranslationX(value);
96d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
97d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
98d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setTranslationY(View view, float value) {
99d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setTranslationY(value);
100d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
101d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
1024510b5c24adad2b94df9b84c6b73f5534ffe9b57Yigit Boyar    public static Matrix getMatrix(View view) {
1034510b5c24adad2b94df9b84c6b73f5534ffe9b57Yigit Boyar        return view.getMatrix();
1044510b5c24adad2b94df9b84c6b73f5534ffe9b57Yigit Boyar    }
1054510b5c24adad2b94df9b84c6b73f5534ffe9b57Yigit Boyar
106d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setAlpha(View view, float value) {
107d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setAlpha(value);
108d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
109d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
110d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setX(View view, float value) {
111d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setX(value);
112d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
113d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
114d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setY(View view, float value) {
115d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setY(value);
116d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
117d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
118d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotation(View view, float value) {
119d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setRotation(value);
120d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
121d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
122d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotationX(View view, float value) {
123d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setRotationX(value);
124d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
125d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
126d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setRotationY(View view, float value) {
127d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setRotationY(value);
128d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
129d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
130d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setScaleX(View view, float value) {
131d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setScaleX(value);
132d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
133d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
134d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setScaleY(View view, float value) {
135d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setScaleY(value);
136d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
137d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
138d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setPivotX(View view, float value) {
139d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setPivotX(value);
140d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
141d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
142d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static void setPivotY(View view, float value) {
143d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        view.setPivotY(value);
144d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
145d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
146d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getPivotX(View view) {
147d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getPivotX();
148d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
149d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase
150d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    public static float getPivotY(View view) {
151d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase        return view.getPivotY();
152d7d27e9ebe5c7325e67e1a8af265378bd2056cadChet Haase    }
153bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell
154bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell    public static void jumpDrawablesToCurrentState(View view) {
155bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell        view.jumpDrawablesToCurrentState();
156bc7c32772fbc966091181ce7fa933ca4083679acAdam Powell    }
1575e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes
1585e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes    public static void setSaveFromParentEnabled(View view, boolean enabled) {
1595e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes        view.setSaveFromParentEnabled(enabled);
1605e63ab9505a3a4d11374cbbec418c1aba921409dChris Banes    }
161b645de790756e27bbe92d133216b7ac79cca7679Chris Banes
162b645de790756e27bbe92d133216b7ac79cca7679Chris Banes    public static void setActivated(View view, boolean activated) {
163b645de790756e27bbe92d133216b7ac79cca7679Chris Banes        view.setActivated(activated);
164b645de790756e27bbe92d133216b7ac79cca7679Chris Banes    }
165a966c6cda6a3aa562fcfdb842b6c6b35bdd6a3dcAdam Powell
166a966c6cda6a3aa562fcfdb842b6c6b35bdd6a3dcAdam Powell    public static int combineMeasuredStates(int curState, int newState) {
167a966c6cda6a3aa562fcfdb842b6c6b35bdd6a3dcAdam Powell        return View.combineMeasuredStates(curState, newState);
168a966c6cda6a3aa562fcfdb842b6c6b35bdd6a3dcAdam Powell    }
169a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes
170a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes    static void offsetTopAndBottom(View view, int offset) {
171a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes        view.offsetTopAndBottom(offset);
1724a5aaa6852108a8e5fd9e849209803c8f6fcd6cfChris Banes        tickleInvalidationFlag(view);
1734a5aaa6852108a8e5fd9e849209803c8f6fcd6cfChris Banes
17434656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        ViewParent parent = view.getParent();
17534656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        if (parent instanceof View) {
17634656d7f78f35591ad1f629b936c939406d6270eYuichi Araki            tickleInvalidationFlag((View) parent);
17734656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        }
178a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes    }
179a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes
180a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes    static void offsetLeftAndRight(View view, int offset) {
181a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes        view.offsetLeftAndRight(offset);
1824a5aaa6852108a8e5fd9e849209803c8f6fcd6cfChris Banes        tickleInvalidationFlag(view);
1834a5aaa6852108a8e5fd9e849209803c8f6fcd6cfChris Banes
18434656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        ViewParent parent = view.getParent();
18534656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        if (parent instanceof View) {
18634656d7f78f35591ad1f629b936c939406d6270eYuichi Araki            tickleInvalidationFlag((View) parent);
18734656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        }
18834656d7f78f35591ad1f629b936c939406d6270eYuichi Araki    }
18934656d7f78f35591ad1f629b936c939406d6270eYuichi Araki
19034656d7f78f35591ad1f629b936c939406d6270eYuichi Araki    private static void tickleInvalidationFlag(View view) {
19134656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        final float y = view.getTranslationY();
19234656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        view.setTranslationY(y + 1);
19334656d7f78f35591ad1f629b936c939406d6270eYuichi Araki        view.setTranslationY(y);
194a89b7a8e4840e52dfda1442bcb885686680556f6Chris Banes    }
195ec03704fbb4f0217d4c274d1c6cf56e6ea4dcfbdAdam Powell}
196