Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/FeedbackReporter.java

Issue 197473006: Add FeedbackReporter for reporting distillation quality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated implementation with UI Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.dom_distiller;
6
7 import org.chromium.base.CalledByNative;
8 import org.chromium.base.JNINamespace;
9 import org.chromium.chrome.browser.EmptyTabObserver;
10 import org.chromium.chrome.browser.Tab;
11 import org.chromium.chrome.browser.TabObserver;
12 import org.chromium.content.browser.ContentView;
13 import org.chromium.content_public.browser.WebContents;
14
15 /**
16 * Java implementation of FeedbackReporterAndroid.
17 */
18 @JNINamespace("dom_distiller::android")
19 public final class FeedbackReporter implements FeedbackReportingView.Observer {
20
21 private final long mNativePointer;
22 private final Tab mTab;
23 private ContentView mContentView;
24 private FeedbackReportingView mFeedbackReportingView;
25 private String mOverlayUrl;
26
27 /**
28 * @return whether the DOM Distiller feature is enabled.
29 */
30 public static boolean isEnabled() {
31 return nativeIsEnabled();
32 }
33
34 /**
35 * Records feedback for the distilled content.
36 *
37 * @param good whether the perceived quality of the distillation of a web pa ge was good.
38 */
39 private static void recordQuality(boolean good) {
40 nativeReportQuality(good);
41 }
42
43 /**
44 * Created the FeedbackReporter, adds itself as a TabObserver, and ensures
newt (away) 2014/03/17 18:19:19 Created -> Creates
nyquist 2014/03/17 20:13:42 Done.
45 * references to ContentView and WebContents are up to date.
46 *
47 * @param tab the tab where the overlay should be displayed.
48 */
49 public FeedbackReporter(Tab tab) {
50 mNativePointer = nativeInit();
51 mTab = tab;
52 mTab.addObserver(createTabObserver());
53 updatePointers();
54 }
55
56 @Override
57 public void onYesPressed(FeedbackReportingView view) {
58 if (view != mFeedbackReportingView) return;
59 recordQuality(true);
60 dismissOverlay();
61 }
62
63 @Override
64 public void onNoPressed(FeedbackReportingView view) {
65 if (view != mFeedbackReportingView) return;
66 recordQuality(false);
67 dismissOverlay();
68 }
69
70 /**
71 * Start showing the overlay.
72 */
73 private void showOverlay() {
74 mFeedbackReportingView = FeedbackReportingView.create(mContentView, this );
75 }
76
77 /**
78 * Dismiss the overlay which is currently being displayed, if any.
79 */
80 @CalledByNative
81 private void dismissOverlay() {
82 if (mFeedbackReportingView != null) mFeedbackReportingView.dismiss();
83 mOverlayUrl = null;
84 mFeedbackReportingView = null;
85 }
86
87 /**
88 * Dismiss the overlay which is currently being displayed.
shashi 2014/03/14 20:33:24 remove this javadoc.
nyquist 2014/03/17 20:13:42 Done.
89 */
90 @CalledByNative
91 private String getCurrentOverlayUrl() {
92 return mOverlayUrl;
93 }
94
95 /**
96 * Updates which ContentView and WebContents the FeedbackReporter is monitor ing.
97 */
98 private void updatePointers() {
99 if (mContentView != mTab.getContentView()) mContentView = mTab.getConten tView();
newt (away) 2014/03/17 18:19:19 What's the point of this if statement? Do you mean
nyquist 2014/03/17 20:13:42 Done.
100 nativeReplaceWebContents(mNativePointer, mTab.getWebContents());
101 }
102
103 /**
104 * Creates a TabObserver for monitoring a Tab, used to react to changes in t he ContentView
105 * or to trigger its own destruction.
106 *
107 * @return TabObserver that can be used to monitor a Tab.
108 */
109 private TabObserver createTabObserver() {
110 return new EmptyTabObserver() {
111 @Override
112 public void onWebContentsSwapped(Tab tab, boolean didStartLoad,
113 boolean didFinishLoad) {
114 updatePointers();
115 }
116
117 @Override
118 public void onContentChanged(Tab tab) {
119 updatePointers();
120 }
121
122 @Override
123 public void onUpdateUrl(Tab tab, String url) {
124 boolean reportable = nativeIsReportableUrl(url);
125 if (reportable) {
126 mOverlayUrl = url;
127 showOverlay();
128 } else {
129 dismissOverlay();
130 }
131 }
132
133 @Override
134 public void onDestroyed(Tab tab) {
135 nativeDestroy(mNativePointer);
136 mContentView = null;
137 }
138 };
139 }
140
141 private static native boolean nativeIsEnabled();
142 private static native boolean nativeIsReportableUrl(String url);
143 private static native void nativeReportQuality(boolean good);
144 private native long nativeInit();
145 private native void nativeDestroy(long nativeFeedbackReporterAndroid);
146 private native void nativeReplaceWebContents(
147 long nativeFeedbackReporterAndroid, WebContents webContents);
148 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698