| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarLayout.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarLayout.java
|
| index c3075764b47565dc154e9374871d15117b3de06c..bb6548e8196afc3a4a868e4957869cf3643aeb95 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarLayout.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/InfoBarLayout.java
|
| @@ -11,7 +11,10 @@ import android.graphics.Bitmap;
|
| import android.graphics.Color;
|
| import android.graphics.Typeface;
|
| import android.graphics.drawable.Drawable;
|
| +import android.text.SpannableStringBuilder;
|
| +import android.text.Spanned;
|
| import android.text.TextUtils;
|
| +import android.text.style.ClickableSpan;
|
| import android.util.TypedValue;
|
| import android.view.Gravity;
|
| import android.view.View;
|
| @@ -134,13 +137,14 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| private ImageView mIconView;
|
| private ButtonCompat mPrimaryButton;
|
| private Button mSecondaryButton;
|
| - private Button mTertiaryButton;
|
| private View mCustomButton;
|
|
|
| private Group mMainGroup;
|
| private Group mButtonGroup;
|
|
|
| private boolean mIsUsingBigIcon;
|
| + private CharSequence mMessageMainText;
|
| + private String mMessageLinkText;
|
|
|
| /**
|
| * These values are used during onMeasure() to track where the next view will be placed.
|
| @@ -219,8 +223,9 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| }
|
|
|
| // Set up the message view.
|
| + mMessageMainText = message;
|
| mMessageLayout = new InfoBarControlLayout(context);
|
| - mMessageTextView = mMessageLayout.addMainMessage(message);
|
| + mMessageTextView = mMessageLayout.addMainMessage(prepareMainMessageString());
|
| }
|
|
|
| /**
|
| @@ -245,7 +250,17 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| * KK and L: https://crbug.com/543205
|
| */
|
| public void setMessage(CharSequence message) {
|
| - mMessageTextView.setText(message, TextView.BufferType.SPANNABLE);
|
| + mMessageMainText = message;
|
| + mMessageTextView.setText(prepareMainMessageString());
|
| + }
|
| +
|
| + /**
|
| + * Sets the message to show for a link in the message, if an InfoBar requires a link
|
| + * (e.g. "Learn more").
|
| + */
|
| + public void setMessageLinkText(String linkText) {
|
| + mMessageLinkText = linkText;
|
| + mMessageTextView.setText(prepareMainMessageString());
|
| }
|
|
|
| /**
|
| @@ -259,20 +274,12 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| }
|
|
|
| /**
|
| - * Calls setButtons(primaryText, secondaryText, null).
|
| - */
|
| - public void setButtons(String primaryText, String secondaryText) {
|
| - setButtons(primaryText, secondaryText, null);
|
| - }
|
| -
|
| - /**
|
| - * Adds one, two, or three buttons to the layout.
|
| + * Adds one or two buttons to the layout.
|
| *
|
| * @param primaryText Text for the primary button.
|
| * @param secondaryText Text for the secondary button, or null if there isn't a second button.
|
| - * @param tertiaryText Text for the tertiary button, or null if there isn't a third button.
|
| */
|
| - public void setButtons(String primaryText, String secondaryText, String tertiaryText) {
|
| + public void setButtons(String primaryText, String secondaryText) {
|
| if (TextUtils.isEmpty(primaryText)) return;
|
|
|
| mPrimaryButton = new ButtonCompat(getContext(), mAccentColor);
|
| @@ -288,22 +295,9 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| mSecondaryButton.setOnClickListener(this);
|
| mSecondaryButton.setText(secondaryText);
|
| mSecondaryButton.setTextColor(mAccentColor);
|
| -
|
| - if (TextUtils.isEmpty(tertiaryText)) return;
|
| -
|
| - mTertiaryButton = ButtonCompat.createBorderlessButton(getContext());
|
| - mTertiaryButton.setId(R.id.button_tertiary);
|
| - mTertiaryButton.setOnClickListener(this);
|
| - mTertiaryButton.setText(tertiaryText);
|
| - mTertiaryButton.setPadding(mMargin / 2, mTertiaryButton.getPaddingTop(), mMargin / 2,
|
| - mTertiaryButton.getPaddingBottom());
|
| - mTertiaryButton.setTextColor(ApiCompatibilityUtils.getColor(getContext().getResources(),
|
| - R.color.infobar_tertiary_button_text));
|
| }
|
|
|
| - /**
|
| - * Adds a custom view to show in the button row in place of the tertiary button.
|
| - */
|
| + /** Adds a custom view to show in the button row. */
|
| public void setCustomViewInButtonRow(View view) {
|
| mCustomButton = view;
|
| }
|
| @@ -349,8 +343,7 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| void onContentCreated() {
|
| mMainGroup = new Group(mMessageLayout);
|
|
|
| - View[] buttons = Group.filterNullViews(mCustomButton, mTertiaryButton,
|
| - mSecondaryButton, mPrimaryButton);
|
| + View[] buttons = Group.filterNullViews(mCustomButton, mSecondaryButton, mPrimaryButton);
|
| if (buttons.length != 0) mButtonGroup = new Group(buttons);
|
|
|
| // Add the child views in the desired focus order.
|
| @@ -597,9 +590,6 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| // Group is too wide to fit on a single row, so stack the group items vertically.
|
| mButtonGroup.setVerticalMode(mMargin / 2, 0);
|
| mButtonGroup.gravity = Gravity.FILL_HORIZONTAL;
|
| - } else if (mTertiaryButton != null) {
|
| - // Align tertiary or custom button at the start and the other buttons at the end.
|
| - ((LayoutParams) mTertiaryButton.getLayoutParams()).endMargin += extraWidth;
|
| }
|
| }
|
| }
|
| @@ -611,11 +601,7 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| */
|
| @Override
|
| public void onClick(View view) {
|
| - // Disable the infobar controls unless the user clicked the tertiary button, which by
|
| - // convention is the "learn more" link.
|
| - if (view.getId() != R.id.button_tertiary) {
|
| - mInfoBarView.setControlsEnabled(false);
|
| - }
|
| + mInfoBarView.setControlsEnabled(false);
|
|
|
| if (view.getId() == R.id.infobar_close_button) {
|
| mInfoBarView.onCloseButtonClicked();
|
| @@ -623,8 +609,32 @@ public final class InfoBarLayout extends ViewGroup implements View.OnClickListen
|
| mInfoBarView.onButtonClicked(true);
|
| } else if (view.getId() == R.id.button_secondary) {
|
| mInfoBarView.onButtonClicked(false);
|
| - } else if (view.getId() == R.id.button_tertiary) {
|
| - mInfoBarView.onLinkClicked();
|
| }
|
| }
|
| +
|
| + /**
|
| + * Prepares text to be displayed as the InfoBar's main message, including setting up a
|
| + * clickable link if the InfoBar requires it.
|
| + */
|
| + private CharSequence prepareMainMessageString() {
|
| + SpannableStringBuilder fullString = new SpannableStringBuilder();
|
| +
|
| + if (mMessageMainText != null) fullString.append(mMessageMainText);
|
| +
|
| + // Concatenate the text to display for the link and make it clickable.
|
| + if (mMessageLinkText != null) {
|
| + if (fullString.length() > 0) fullString.append(" ");
|
| + int spanStart = fullString.length();
|
| +
|
| + fullString.append(mMessageLinkText);
|
| + fullString.setSpan(new ClickableSpan() {
|
| + @Override
|
| + public void onClick(View view) {
|
| + mInfoBarView.onLinkClicked();
|
| + }
|
| + }, spanStart, fullString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
| + }
|
| +
|
| + return fullString;
|
| + }
|
| }
|
|
|