1/**
2 * Copyright (c) 2013, Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.mail.utils;
18
19import android.annotation.SuppressLint;
20import android.app.Activity;
21import android.content.Context;
22import android.support.annotation.ColorRes;
23import android.support.v4.view.ViewCompat;
24import android.view.View;
25import android.view.ViewParent;
26import android.view.Window;
27import android.view.accessibility.AccessibilityEvent;
28import android.view.accessibility.AccessibilityManager;
29
30/**
31 * Utility class to perform some common operations on views.
32 */
33public class ViewUtils {
34
35    /**
36     * Determines whether the given view has RTL layout. NOTE: do not call this
37     * on a view until it has been measured. This value is not guaranteed to be
38     * accurate until then.
39     */
40    public static boolean isViewRtl(View view) {
41        return ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL;
42    }
43
44    /**
45     * @return the start padding of the view. Prior to API 17, will return the left padding.
46     */
47    @SuppressLint("NewApi")
48    public static int getPaddingStart(View view) {
49        return Utils.isRunningJBMR1OrLater() ? view.getPaddingStart() : view.getPaddingLeft();
50    }
51
52    /**
53     * @return the end padding of the view. Prior to API 17, will return the right padding.
54     */
55    @SuppressLint("NewApi")
56    public static int getPaddingEnd(View view) {
57        return Utils.isRunningJBMR1OrLater() ? view.getPaddingEnd() : view.getPaddingRight();
58    }
59
60    /**
61     * Sets the text alignment of the view. Prior to API 17, will no-op.
62     */
63    @SuppressLint("NewApi")
64    public static void setTextAlignment(View view, int textAlignment) {
65        if (Utils.isRunningJBMR1OrLater()) {
66            view.setTextAlignment(textAlignment);
67        }
68    }
69
70    /**
71     * Convenience method for sending a {@link android.view.accessibility.AccessibilityEvent#TYPE_ANNOUNCEMENT}
72     * {@link android.view.accessibility.AccessibilityEvent} to make an announcement which is related to some
73     * sort of a context change for which none of the events representing UI transitions
74     * is a good fit. For example, announcing a new page in a book. If accessibility
75     * is not enabled this method does nothing.
76     *
77     * @param view view to perform the accessibility announcement
78     * @param text The announcement text.
79     */
80    public static void announceForAccessibility(View view, CharSequence text) {
81        final AccessibilityManager accessibilityManager = (AccessibilityManager)
82                view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
83        final ViewParent parent = view.getParent();
84        if (accessibilityManager.isEnabled() && parent != null) {
85            AccessibilityEvent event = AccessibilityEvent.obtain(
86                    AccessibilityEvent.TYPE_ANNOUNCEMENT);
87            view.onInitializeAccessibilityEvent(event);
88            event.getText().add(text);
89            event.setContentDescription(null);
90            parent.requestSendAccessibilityEvent(view, event);
91        }
92    }
93
94    /**
95     * Sets the status bar color of the provided activity.
96     */
97    @SuppressLint("NewApi")
98    public static void setStatusBarColor(Activity activity, @ColorRes int colorId) {
99        if (Utils.isRunningLOrLater() && activity != null) {
100            final Window window = activity.getWindow();
101            if (window != null) {
102                window.setStatusBarColor(activity.getResources().getColor(colorId));
103            }
104        }
105    }
106}
107