1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)package org.chromium.chrome.browser.infobar;
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import android.content.Context;
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import android.view.View;
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import org.chromium.base.CalledByNative;
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting;
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.chrome.R;
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/**
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * The base class for all InfoBar classes.
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Note that infobars expire by default when a new navigation occurs.
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Make sure to use setExpireOnNavigation(false) if you want an infobar to be sticky.
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)public abstract class InfoBar implements InfoBarView {
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private static final String TAG = "InfoBar";
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Possible labels of all the infobar buttons.
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     *
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Make sure this set of values is aligned with the C++ correspondent in
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * infobar_android.h
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int ACTION_TYPE_NONE = 0;
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Confirm infobar
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int ACTION_TYPE_OK = 1;
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int ACTION_TYPE_CANCEL = 2;
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Translate infobar
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int ACTION_TYPE_TRANSLATE = 3;
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public static final int ACTION_TYPE_TRANSLATE_SHOW_ORIGINAL = 4;
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private final int mIconDrawableId;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private final CharSequence mMessage;
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private InfoBarListeners.Dismiss mListener;
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private ContentWrapperView mContentView;
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private InfoBarContainer mContainer;
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private Context mContext;
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private boolean mExpireOnNavigation;
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private boolean mIsDismissed;
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private boolean mControlsEnabled;
49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // This cannot be private until the swap in place infrastructure is
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // improved since subclasses need to access a possibly replaced native
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // pointer.
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    protected long mNativeInfoBarPtr;
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Used by tests to reference infobars.
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private final int mId;
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private static int sIdCounter = 0;
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    private static int generateId() {
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return sIdCounter++;
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @param listener Listens to when buttons have been clicked on the InfoBar.
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @param iconDrawableId ID of the resource to use for the Icon.  If 0, no icon will be shown.
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * @param message The message to show in the infobar.
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public InfoBar(InfoBarListeners.Dismiss listener, int iconDrawableId, CharSequence message) {
68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mListener = listener;
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mId = generateId();
70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mIconDrawableId = iconDrawableId;
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        mMessage = message;
72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mExpireOnNavigation = true;
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * @return The message shown in the infobar, useful for accessibility.
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     */
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public CharSequence getMessage() {
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return mMessage;
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    /**
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Stores a pointer to the native-side counterpart of this InfoBar.
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @param nativeInfoBarPtr Pointer to the NativeInfoBar.
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    protected void setNativeInfoBar(long nativeInfoBarPtr) {
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        if (nativeInfoBarPtr != 0) {
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            // The native code takes care of expiring infobars on navigations.
89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            mExpireOnNavigation = false;
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            mNativeInfoBarPtr = nativeInfoBarPtr;
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        }
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Change the pointer to the native-side counterpart of this InfoBar.  Native-side code is
96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * responsible for managing the cleanup of the pointer.
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * @param newInfoBarPtr Pointer to the NativeInfoBar.
98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    protected void replaceNativePointer(long newInfoBarPtr) {
100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mNativeInfoBarPtr = newInfoBarPtr;
101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    /**
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * Determine if the infobar should be dismissed when a new page starts loading. Calling
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * setExpireOnNavigation(true/false) causes this method always to return true/false.
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * This only applies to java-only infobars. C++ infobars will use the same logic
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * as other platforms so they are not attempted to be dismissed twice.
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     * It should really be removed once all infobars have a C++ counterpart.
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch     */
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public final boolean shouldExpire() {
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        return mExpireOnNavigation && mNativeInfoBarPtr == 0;
112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // Sets whether the bar should be dismissed when a navigation occurs.
115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void setExpireOnNavigation(boolean expireOnNavigation) {
116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mExpireOnNavigation = expireOnNavigation;
117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return true if this java infobar owns this {@code nativePointer}
121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    boolean ownsNativeInfoBar(long nativePointer) {
123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mNativeInfoBarPtr == nativePointer;
124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return whether or not the InfoBar has been dismissed.
128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected boolean isDismissed() {
130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mIsDismissed;
131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
132d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Sets the Context used when creating the InfoBar.
135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
136d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected void setContext(Context context) {
137d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mContext = context;
138d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return The Context used to create the InfoBar.  This will be null until the InfoBar is added
142d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     *         to the InfoBarContainer, and should never be null afterward.
143d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
144d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected Context getContext() {
145d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mContext;
146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
149d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Creates the View that represents the InfoBar.
150d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return The View representing the InfoBar.
151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
152d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected final View createView() {
153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        assert mContext != null;
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        InfoBarLayout layout = new InfoBarLayout(mContext, this, mIconDrawableId, mMessage);
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        createContent(layout);
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        return layout;
158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)     * Used to close a java only infobar.
162d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
1638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    public void dismissJavaOnlyInfoBar() {
1648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        assert mNativeInfoBarPtr == 0;
1658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        if (closeInfoBar() && mListener != null) {
1668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)            mListener.onInfoBarDismissed(this);
167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        }
168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return whether the infobar actually needed closing.
172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @CalledByNative
174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public boolean closeInfoBar() {
175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        if (!mIsDismissed) {
176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            mIsDismissed = true;
177d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            if (!mContainer.hasBeenDestroyed()) {
178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                // If the container was destroyed, it's already been emptied of all its infobars.
179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                mContainer.removeInfoBar(this);
180d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            }
181d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            return true;
182d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        }
183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return false;
184d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
185d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
186d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected ContentWrapperView getContentWrapper(boolean createIfNotFound) {
187d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        if (mContentView == null && createIfNotFound) {
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            mContentView = new ContentWrapperView(getContext(), this, createView());
189d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            mContentView.setFocusable(false);
190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        }
191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mContentView;
192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
193d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected InfoBarContainer getInfoBarContainer() {
195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mContainer;
196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
198d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * @return The content view for the info bar.
200d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @VisibleForTesting
202d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public ContentWrapperView getContentWrapper() {
203d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return getContentWrapper(true);
204d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
205d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
206d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    void setInfoBarContainer(InfoBarContainer container) {
207d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mContainer = container;
208d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
210d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public boolean areControlsEnabled() {
211d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mControlsEnabled;
212d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
213d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
214d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @Override
215d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void setControlsEnabled(boolean state) {
216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mControlsEnabled = state;
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        // Disable all buttons on the infobar.
219d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        if (mContentView != null) {
220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            View closeButton = mContentView.findViewById(R.id.infobar_close_button);
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            View primaryButton = mContentView.findViewById(R.id.button_primary);
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            View secondaryButton = mContentView.findViewById(R.id.button_secondary);
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            View tertiaryButton = mContentView.findViewById(R.id.button_tertiary);
224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            if (closeButton != null) closeButton.setEnabled(state);
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            if (primaryButton != null) primaryButton.setEnabled(state);
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            if (secondaryButton != null) secondaryButton.setEnabled(state);
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            if (tertiaryButton != null) tertiaryButton.setEnabled(state);
228d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        }
229d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @Override
232d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void onButtonClicked(boolean isPrimaryButton) {
233d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
234d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @Override
2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    public void onLinkClicked() {
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeInfoBarPtr != 0) {
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeOnLinkClicked(mNativeInfoBarPtr);
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    @Override
243d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void createContent(InfoBarLayout layout) {
244d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
245d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
246d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    /**
247d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     * Returns the id of the tab this infobar is showing into.
248d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)     */
249d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public int getTabId() {
250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mContainer.getTabId();
251d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
252d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @VisibleForTesting
254d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public int getId() {
255d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return mId;
256d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
257d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
258d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    @VisibleForTesting
259d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public void setDismissedListener(InfoBarListeners.Dismiss listener) {
260d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        mListener = listener;
261d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
262d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    protected native void nativeOnLinkClicked(long nativeInfoBarAndroid);
264d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    protected native void nativeOnButtonClicked(
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)            long nativeInfoBarAndroid, int action, String actionValue);
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    protected native void nativeOnCloseButtonClicked(long nativeInfoBarAndroid);
267d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
268