| Index: chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
|
| index 5ad87ce0f99839ea0df1fc639bdbe31837356f1a..6d53e9796173b9cc1eb1319c97f8cfefb89bfd40 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryAdapter.java
|
| @@ -5,28 +5,48 @@
|
| package org.chromium.chrome.browser.history;
|
|
|
| import android.support.v7.widget.RecyclerView.ViewHolder;
|
| +import android.text.SpannableString;
|
| +import android.text.method.LinkMovementMethod;
|
| import android.view.LayoutInflater;
|
| import android.view.View;
|
| +import android.view.View.OnClickListener;
|
| import android.view.ViewGroup;
|
| +import android.widget.TextView;
|
|
|
| +import org.chromium.base.ContextUtils;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.history.BrowsingHistoryBridge.BrowsingHistoryObserver;
|
| import org.chromium.chrome.browser.widget.DateDividedAdapter;
|
| import org.chromium.chrome.browser.widget.selection.SelectableItemViewHolder;
|
| import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
|
| +import org.chromium.components.signin.ChromeSigninController;
|
| +import org.chromium.ui.text.NoUnderlineClickableSpan;
|
| +import org.chromium.ui.text.SpanApplier;
|
|
|
| import java.util.List;
|
| +import java.util.Locale;
|
|
|
| /**
|
| * Bridges the user's browsing history and the UI used to display it.
|
| */
|
| public class HistoryAdapter extends DateDividedAdapter implements BrowsingHistoryObserver {
|
| private static final String EMPTY_QUERY = "";
|
| + private static final String LEARN_MORE_LINK =
|
| + "https://support.google.com/chrome/?p=sync_history&hl="
|
| + + Locale.getDefault().toString();
|
| + private static final String GOOGLE_HISTORY_LINK = "history.google.com";
|
|
|
| private final SelectionDelegate<HistoryItem> mSelectionDelegate;
|
| private final BrowsingHistoryBridge mBridge;
|
| private final HistoryManager mManager;
|
|
|
| + private TextView mSignedInNotSyncedTextView;
|
| + private TextView mSignedInSyncedTextView;
|
| + private TextView mOtherFormsOfBrowsingHistoryTextView;
|
| +
|
| + private boolean mHasOtherFormsOfBrowsingData;
|
| + private boolean mHasSyncedData;
|
| + private boolean mHeaderInflated;
|
| private boolean mDestroyed;
|
|
|
| public HistoryAdapter(SelectionDelegate<HistoryItem> delegate, HistoryManager manager) {
|
| @@ -101,7 +121,11 @@ public class HistoryAdapter extends DateDividedAdapter implements BrowsingHistor
|
| // destroyed to avoid unnecessary work.
|
| if (mDestroyed) return;
|
|
|
| - loadItems(items);
|
| + clear(true);
|
| + if (items.size() > 0) {
|
| + addHeader();
|
| + loadItems(items);
|
| + }
|
| }
|
|
|
| @Override
|
| @@ -111,4 +135,69 @@ public class HistoryAdapter extends DateDividedAdapter implements BrowsingHistor
|
| // This currently removes all items and re-issues a query.
|
| initialize();
|
| }
|
| +
|
| + @Override
|
| + public void hasOtherFormsOfBrowsingData(boolean hasOtherForms, boolean hasSyncedResults) {
|
| + mHasOtherFormsOfBrowsingData = hasOtherForms;
|
| + mHasSyncedData = hasSyncedResults;
|
| + setPrivacyDisclaimerVisibility();
|
| + }
|
| +
|
| + @Override
|
| + protected HeaderViewHolder createHeader(ViewGroup parent) {
|
| + ViewGroup v = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate(
|
| + R.layout.history_header, parent, false);
|
| + mHeaderInflated = true;
|
| +
|
| + View cbdButton = v.findViewById(R.id.clear_browsing_data_button);
|
| + cbdButton.setOnClickListener(new OnClickListener() {
|
| + @Override
|
| + public void onClick(View v) {
|
| + mManager.openClearBrowsingDataPreference();
|
| + }
|
| + });
|
| +
|
| + mSignedInNotSyncedTextView = (TextView) v.findViewById(R.id.signed_in_not_synced);
|
| + setPrivacyDisclaimerText(mSignedInNotSyncedTextView,
|
| + R.string.android_history_no_synced_results, LEARN_MORE_LINK);
|
| +
|
| + mSignedInSyncedTextView = (TextView) v.findViewById(R.id.signed_in_synced);
|
| + setPrivacyDisclaimerText(mSignedInSyncedTextView,
|
| + R.string.android_history_has_synced_results, LEARN_MORE_LINK);
|
| +
|
| + mOtherFormsOfBrowsingHistoryTextView = (TextView) v.findViewById(
|
| + R.id.other_forms_of_browsing_history);
|
| + setPrivacyDisclaimerText(mOtherFormsOfBrowsingHistoryTextView,
|
| + R.string.android_history_other_forms_of_history, GOOGLE_HISTORY_LINK);
|
| +
|
| + setPrivacyDisclaimerVisibility();
|
| +
|
| + return new HeaderViewHolder(v);
|
| + }
|
| +
|
| + private void setPrivacyDisclaimerText(TextView view, int stringId, final String url) {
|
| + NoUnderlineClickableSpan link = new NoUnderlineClickableSpan() {
|
| + @Override
|
| + public void onClick(View view) {
|
| + mManager.openUrl(url, null, true);
|
| + }
|
| + };
|
| + SpannableString spannable = SpanApplier.applySpans(
|
| + view.getResources().getString(stringId),
|
| + new SpanApplier.SpanInfo("<link>", "</link>", link));
|
| + view.setText(spannable);
|
| + view.setMovementMethod(LinkMovementMethod.getInstance());
|
| + }
|
| +
|
| + private void setPrivacyDisclaimerVisibility() {
|
| + if (!mHeaderInflated) return;
|
| +
|
| + boolean isSignedIn =
|
| + ChromeSigninController.get(ContextUtils.getApplicationContext()).isSignedIn();
|
| + mSignedInNotSyncedTextView.setVisibility(
|
| + !mHasSyncedData && isSignedIn ? View.VISIBLE : View.GONE);
|
| + mSignedInSyncedTextView.setVisibility(mHasSyncedData ? View.VISIBLE : View.GONE);
|
| + mOtherFormsOfBrowsingHistoryTextView.setVisibility(
|
| + mHasOtherFormsOfBrowsingData ? View.VISIBLE : View.GONE);
|
| + }
|
| }
|
|
|