| Index: chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/FeedbackReporter.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/FeedbackReporter.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/FeedbackReporter.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..072d6a47c75c0283a4a0bbc853a777c0ac55eb47
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/FeedbackReporter.java
|
| @@ -0,0 +1,150 @@
|
| +// Copyright 2014 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.dom_distiller;
|
| +
|
| +import org.chromium.base.CalledByNative;
|
| +import org.chromium.base.JNINamespace;
|
| +import org.chromium.chrome.browser.EmptyTabObserver;
|
| +import org.chromium.chrome.browser.Tab;
|
| +import org.chromium.chrome.browser.TabObserver;
|
| +import org.chromium.content.browser.ContentView;
|
| +import org.chromium.content_public.browser.WebContents;
|
| +
|
| +/**
|
| + * Java implementation of FeedbackReporterAndroid.
|
| + */
|
| +@JNINamespace("dom_distiller::android")
|
| +public final class FeedbackReporter implements FeedbackReportingView.FeedbackObserver {
|
| +
|
| + private final long mNativePointer;
|
| + private final Tab mTab;
|
| + private ContentView mContentView;
|
| + private FeedbackReportingView mFeedbackReportingView;
|
| + private String mOverlayUrl;
|
| +
|
| + /**
|
| + * @return whether the DOM Distiller feature is enabled.
|
| + */
|
| + public static boolean isEnabled() {
|
| + return nativeIsEnabled();
|
| + }
|
| +
|
| + /**
|
| + * Records feedback for the distilled content.
|
| + *
|
| + * @param good whether the perceived quality of the distillation of a web page was good.
|
| + */
|
| + private static void recordQuality(boolean good) {
|
| + nativeReportQuality(good);
|
| + }
|
| +
|
| + /**
|
| + * Creates the FeedbackReporter, adds itself as a TabObserver, and ensures
|
| + * references to ContentView and WebContents are up to date.
|
| + *
|
| + * @param tab the tab where the overlay should be displayed.
|
| + */
|
| + public FeedbackReporter(Tab tab) {
|
| + mNativePointer = nativeInit();
|
| + mTab = tab;
|
| + mTab.addObserver(createTabObserver());
|
| + updatePointers();
|
| + }
|
| +
|
| + @Override
|
| + public void onYesPressed(FeedbackReportingView view) {
|
| + if (view != mFeedbackReportingView) return;
|
| + recordQuality(true);
|
| + dismissOverlay();
|
| + }
|
| +
|
| + @Override
|
| + public void onNoPressed(FeedbackReportingView view) {
|
| + if (view != mFeedbackReportingView) return;
|
| + recordQuality(false);
|
| + dismissOverlay();
|
| + }
|
| +
|
| + /**
|
| + * Start showing the overlay.
|
| + */
|
| + private void showOverlay() {
|
| + mFeedbackReportingView = FeedbackReportingView.create(mContentView, this);
|
| + }
|
| +
|
| + @CalledByNative
|
| + private void dismissOverlay() {
|
| + if (mFeedbackReportingView != null) mFeedbackReportingView.dismiss();
|
| + mOverlayUrl = null;
|
| + mFeedbackReportingView = null;
|
| + }
|
| +
|
| + /**
|
| + * Dismiss the overlay which is currently being displayed.
|
| + */
|
| + @CalledByNative
|
| + private String getCurrentOverlayUrl() {
|
| + return mOverlayUrl;
|
| + }
|
| +
|
| + /**
|
| + * Updates which ContentView and WebContents the FeedbackReporter is monitoring.
|
| + */
|
| + private void updatePointers() {
|
| + mContentView = mTab.getContentView();
|
| + nativeReplaceWebContents(mNativePointer, mTab.getWebContents());
|
| + }
|
| +
|
| + /**
|
| + * Creates a TabObserver for monitoring a Tab, used to react to changes in the ContentView
|
| + * or to trigger its own destruction.
|
| + *
|
| + * @return TabObserver that can be used to monitor a Tab.
|
| + */
|
| + private TabObserver createTabObserver() {
|
| + return new EmptyTabObserver() {
|
| + @Override
|
| + public void onWebContentsSwapped(Tab tab, boolean didStartLoad,
|
| + boolean didFinishLoad) {
|
| + updatePointers();
|
| + }
|
| +
|
| + @Override
|
| + public void onContentChanged(Tab tab) {
|
| + updatePointers();
|
| + }
|
| +
|
| + @Override
|
| + public void onUpdateUrl(Tab tab, String url) {
|
| + boolean reportable = nativeIsReportableUrl(url);
|
| + if (reportable) {
|
| + mOverlayUrl = url;
|
| + showOverlay();
|
| + } else {
|
| + dismissOverlay();
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public void onDestroyed(Tab tab) {
|
| + nativeDestroy(mNativePointer);
|
| + mContentView = null;
|
| + }
|
| + };
|
| + }
|
| +
|
| + private static native boolean nativeIsEnabled();
|
| +
|
| + private static native boolean nativeIsReportableUrl(String url);
|
| +
|
| + private static native void nativeReportQuality(boolean good);
|
| +
|
| + private native long nativeInit();
|
| +
|
| + private native void nativeDestroy(long nativeFeedbackReporterAndroid);
|
| +
|
| + private native void nativeReplaceWebContents(
|
| + long nativeFeedbackReporterAndroid, WebContents webContents);
|
| +}
|
|
|