Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/ClearBrowsingDataTabCheckBoxPreference.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ClearBrowsingDataTabCheckBoxPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ClearBrowsingDataTabCheckBoxPreference.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4fc71e0091c8e9f2b0092f08fa51a286fd816f4d |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ClearBrowsingDataTabCheckBoxPreference.java |
| @@ -0,0 +1,108 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.chrome.browser.preferences; |
| + |
| +import android.annotation.SuppressLint; |
| +import android.content.Context; |
| +import android.text.SpannableString; |
| +import android.text.Spanned; |
| +import android.text.style.ClickableSpan; |
| +import android.util.AttributeSet; |
| +import android.view.MotionEvent; |
| +import android.view.View; |
| +import android.view.ViewGroup; |
| +import android.widget.LinearLayout; |
| +import android.widget.TextView; |
| + |
| +import org.chromium.ui.text.NoUnderlineClickableSpan; |
| +import org.chromium.ui.text.SpanApplier; |
| + |
| +/** |
| + * A preference representing one browsing data type in ClearBrowsingDataPreferencesTab. |
| + * This class allows clickable links inside the checkbox summary. |
| + */ |
| +public class ClearBrowsingDataTabCheckBoxPreference extends ClearBrowsingDataCheckBoxPreference { |
| + private Runnable mLinkClickDelegate; |
| + private boolean mHasClickableSpans; |
| + |
| + /** |
| + * Constructor for inflating from XML. |
| + */ |
| + public ClearBrowsingDataTabCheckBoxPreference(Context context, AttributeSet attrs) { |
| + super(context, attrs); |
| + } |
| + |
| + /** |
| + * @param linkClickDelegate A Runnable that is executed when a link inside the summary is |
| + * clicked. |
| + */ |
| + public void setLinkClickDelegate(Runnable linkClickDelegate) { |
| + mLinkClickDelegate = linkClickDelegate; |
| + } |
| + |
| + @Override |
| + public View onCreateView(ViewGroup parent) { |
| + View view = super.onCreateView(parent); |
| + |
| + final TextView textView = (TextView) view.findViewById(android.R.id.summary); |
| + |
| + // TODO(dullweber): Rething how the link can be made accessible to TalkBack before launch. |
|
Theresa
2017/03/31 15:29:06
s/Rething/Rethink
dullweber
2017/04/03 08:25:02
Done.
|
| + // Create custom onTouch listener to be able to respond to click events inside the summary. |
| + textView.setOnTouchListener(new View.OnTouchListener() { |
| + @Override |
| + @SuppressLint("ClickableViewAccessibility") |
| + public boolean onTouch(View v, MotionEvent event) { |
| + if (!mHasClickableSpans) { |
| + return false; |
| + } |
| + // Find out which character was touched. |
| + int offset = textView.getOffsetForPosition(event.getX(), event.getY()); |
| + // Check if this character contains a span. |
| + Spanned text = (Spanned) textView.getText(); |
| + ClickableSpan[] types = text.getSpans(offset, offset, ClickableSpan.class); |
| + |
| + if (types.length > 0) { |
| + if (event.getAction() == MotionEvent.ACTION_UP) { |
| + for (ClickableSpan type : types) { |
| + type.onClick(textView); |
| + } |
| + } |
| + return true; |
| + } else { |
| + return false; |
| + } |
| + } |
| + }); |
| + |
| + return view; |
| + } |
| + |
| + @Override |
| + protected void setupLayout(LinearLayout view) { |
| + // Override to remove layout customizations from super class. |
| + } |
| + |
| + @Override |
| + public void setSummary(CharSequence summary) { |
| + // If there is no link in the summary, invoke the default behavior. |
| + String summaryString = summary.toString(); |
| + if (!summaryString.contains("<link>") || !summaryString.contains("</link>")) { |
| + super.setSummary(summary); |
| + return; |
| + } |
| + |
| + // Linkify <link></link> span. |
| + final SpannableString summaryWithLink = SpanApplier.applySpans(summaryString, |
| + new SpanApplier.SpanInfo("<link>", "</link>", new NoUnderlineClickableSpan() { |
| + @Override |
| + public void onClick(View widget) { |
| + if (mLinkClickDelegate != null) mLinkClickDelegate.run(); |
| + } |
| + })); |
| + |
| + mHasClickableSpans = true; |
| + super.setSummary(summaryWithLink); |
| + } |
| +} |