Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java |
index ec46847867ac756befc965867f74238d2040e8c7..73a291b5ebabd81bfc5acbad4feb8bf6c4352e42 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SearchGeolocationDisclosureInfoBar.java |
@@ -4,26 +4,82 @@ |
package org.chromium.chrome.browser.infobar; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.os.Bundle; |
+import android.text.SpannableString; |
+import android.text.Spanned; |
+import android.text.TextPaint; |
+import android.text.style.ClickableSpan; |
+import android.view.View; |
+ |
+import org.chromium.base.ContextUtils; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.chrome.browser.ResourceId; |
+import org.chromium.chrome.browser.preferences.Preferences; |
+import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
+import org.chromium.chrome.browser.preferences.website.SingleWebsitePreferences; |
+import org.chromium.chrome.browser.util.IntentUtils; |
/** |
* An infobar to disclose to the user that the default search engine has geolocation access by |
* default. |
*/ |
public class SearchGeolocationDisclosureInfoBar extends InfoBar { |
+ private final String mMessageText; |
+ private final int mInlineLinkRangeStart; |
+ private final int mInlineLinkRangeEnd; |
+ |
@CalledByNative |
- private static InfoBar show(int enumeratedIconId, String message) { |
+ private static InfoBar show(int enumeratedIconId, String messageText, int inlineLinkRangeStart, |
+ int inlineLinkRangeEnd) { |
int drawableId = ResourceId.mapToDrawableId(enumeratedIconId); |
- return new SearchGeolocationDisclosureInfoBar(drawableId, message); |
+ return new SearchGeolocationDisclosureInfoBar( |
+ drawableId, messageText, inlineLinkRangeStart, inlineLinkRangeEnd); |
} |
/** |
* Creates the infobar. |
* @param iconDrawableId Drawable ID corresponding to the icon that the infobar will show. |
* @param messageText Message to display in the infobar. |
+ * @param inlineLinkRangeStartBeginning Beginning of the link in the message. |
+ * @param inlineLinkRangeStartEnd End of the link in the message. |
*/ |
- private SearchGeolocationDisclosureInfoBar(int iconDrawableId, String messageText) { |
- super(iconDrawableId, null, messageText); |
+ private SearchGeolocationDisclosureInfoBar(int iconDrawableId, String messageText, |
+ int inlineLinkRangeStart, int inlineLinkRangeEnd) { |
+ super(iconDrawableId, null, null); |
+ mMessageText = messageText; |
+ mInlineLinkRangeStart = inlineLinkRangeStart; |
+ mInlineLinkRangeEnd = inlineLinkRangeEnd; |
+ } |
+ |
+ @Override |
+ public void createContent(InfoBarLayout layout) { |
+ super.createContent(layout); |
+ SpannableString message = new SpannableString(mMessageText); |
+ message.setSpan( |
+ new ClickableSpan() { |
+ @Override |
+ public void onClick(View view) { |
+ onLinkClicked(); |
+ } |
+ |
+ @Override |
+ public void updateDrawState(TextPaint ds) { |
+ super.updateDrawState(ds); |
+ ds.setUnderlineText(false); |
+ } |
+ }, mInlineLinkRangeStart, mInlineLinkRangeEnd, Spanned.SPAN_INCLUSIVE_INCLUSIVE); |
+ layout.setMessage(message); |
+ } |
+ |
+ @CalledByNative |
+ private static void showSettingsPage(String searchUrl) { |
+ Context context = ContextUtils.getApplicationContext(); |
+ Intent settingsIntent = PreferencesLauncher.createIntentForSettingsPage( |
+ context, SingleWebsitePreferences.class.getName()); |
+ Bundle fragmentArgs = SingleWebsitePreferences.createFragmentArgsForSite(searchUrl); |
+ settingsIntent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); |
+ IntentUtils.safeStartActivity(context, settingsIntent); |
} |
} |