1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.base;
7 import android.app.Notification;
8 import android.graphics.drawable.Drawable;
9 import android.os.Build;
10 import android.view.View;
11 import android.view.ViewGroup.MarginLayoutParams;
12 import android.view.ViewTreeObserver;
15 * Utility class to use new APIs that were added after ICS (API level 14).
17 public class ApiCompatibilityUtils {
19 private ApiCompatibilityUtils() {
23 * Returns true if view's layout direction is right-to-left.
25 * @param view the View whose layout is being considered
27 public static boolean isLayoutRtl(View view) {
28 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
29 return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
31 // All layouts are LTR before JB MR1.
37 * @see android.view.View#setLayoutDirection(int)
39 public static void setLayoutDirection(View view, int layoutDirection) {
40 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
41 view.setLayoutDirection(layoutDirection);
43 // Do nothing. RTL layouts aren't supported before JB MR1.
48 * @see android.view.ViewGroup.MarginLayoutParams#setMarginEnd(int)
50 public static void setMarginEnd(MarginLayoutParams layoutParams, int end) {
51 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
52 layoutParams.setMarginEnd(end);
54 layoutParams.rightMargin = end;
59 * @see android.view.ViewGroup.MarginLayoutParams#getMarginEnd()
61 public static int getMarginEnd(MarginLayoutParams layoutParams) {
62 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
63 return layoutParams.getMarginEnd();
65 return layoutParams.rightMargin;
70 * @see android.view.ViewGroup.MarginLayoutParams#setMarginStart(int)
72 public static void setMarginStart(MarginLayoutParams layoutParams, int start) {
73 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
74 layoutParams.setMarginStart(start);
76 layoutParams.leftMargin = start;
81 * @see android.view.ViewGroup.MarginLayoutParams#getMarginStart()
83 public static int getMarginStart(MarginLayoutParams layoutParams) {
84 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
85 return layoutParams.getMarginStart();
87 return layoutParams.leftMargin;
92 * @see android.view.View#postInvalidateOnAnimation()
94 public static void postInvalidateOnAnimation(View view) {
95 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
96 view.postInvalidateOnAnimation();
98 view.postInvalidate();
102 // These methods have a new name, and the old name is deprecated.
105 * @see android.view.View#setBackground(Drawable)
107 @SuppressWarnings("deprecation")
108 public static void setBackgroundForView(View view, Drawable drawable) {
109 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
110 view.setBackground(drawable);
112 view.setBackgroundDrawable(drawable);
117 * @see android.view.ViewTreeObserver#removeOnGlobalLayoutListener()
119 @SuppressWarnings("deprecation")
120 public static void removeOnGlobalLayoutListener(
121 View view, ViewTreeObserver.OnGlobalLayoutListener listener) {
122 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
123 view.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
125 view.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
130 * @see android.app.Notification.Builder#build()
132 @SuppressWarnings("deprecation")
133 public static Notification buildNotification(Notification.Builder builder) {
134 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
135 return builder.build();
137 return builder.getNotification();