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