Commit 6c164d69 authored by Sky Malice's avatar Sky Malice Committed by Commit Bot

[Feed] Notify Feed when Android foregrounds.

To facilitate notifying feed of foregrounds, added FeedEventReporter
to act as the entry point. This class has a dummy clone because it is
called outside of Feed code.

Bug: 831648
Change-Id: Id25205e33b03d20cd63c6b97920d2cb90ac3d4c2
Reviewed-on: https://chromium-review.googlesource.com/1095774Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Sky Malice <skym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568225}
parent 1ba5867c
// Copyright 2018 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.feed;
/**
* Provides static entry points to send notifications to Feed.
*/
public final class FeedEventReporter {
// Not meant to be instantiated.
private FeedEventReporter() {}
/*
* Should be called when the browser is foregrounded.
*/
public static void onBrowserForegrounded() {
FeedProcessScopeFactory.getFeedSchedulerBridge().onForegrounded();
}
}
......@@ -15,31 +15,48 @@ import org.chromium.chrome.browser.profiles.Profile;
import java.util.concurrent.Executors;
/**
* Holds singleton {@link FeedProcessScope}.
* Holds singleton {@link FeedProcessScope} and some of the scope's host implementations.
*/
public class FeedProcessScopeFactory {
private static FeedProcessScope sFeedProcessScope;
private static FeedSchedulerBridge sFeedSchedulerBridge;
/**
* @return The shared {@link FeedProcessScope} instance.
*/
public static FeedProcessScope getFeedProcessScope() {
if (sFeedProcessScope == null) {
Profile profile = Profile.getLastUsedProfile().getOriginalProfile();
Configuration configHostApi =
new Configuration.Builder()
.put(ConfigKey.FEED_SERVER_HOST, "https://www.google.com")
.put(ConfigKey.FEED_SERVER_PATH_AND_PARAMS,
"/httpservice/noretry/NowStreamService/FeedQuery")
.put(ConfigKey.SESSION_LIFETIME_MS, 300000L)
.build();
sFeedProcessScope =
new FeedProcessScope
.Builder(configHostApi, Executors.newSingleThreadExecutor(),
new LoggingApiImpl(), new FeedNetworkBridge(profile),
new FeedSchedulerBridge(profile), DebugBehavior.SILENT)
.build();
initialize();
}
return sFeedProcessScope;
}
/*
* @return The {@link FeedSchedulerBridge} that was given to the {@link FeedProcessScope}.
*/
public static FeedSchedulerBridge getFeedSchedulerBridge() {
if (sFeedSchedulerBridge == null) {
initialize();
}
return sFeedSchedulerBridge;
}
private static void initialize() {
assert sFeedSchedulerBridge == null && sFeedProcessScope == null;
Profile profile = Profile.getLastUsedProfile().getOriginalProfile();
Configuration configHostApi =
new Configuration.Builder()
.put(ConfigKey.FEED_SERVER_HOST, "https://www.google.com")
.put(ConfigKey.FEED_SERVER_PATH_AND_PARAMS,
"/httpservice/noretry/NowStreamService/FeedQuery")
.put(ConfigKey.SESSION_LIFETIME_MS, 300000L)
.build();
sFeedSchedulerBridge = new FeedSchedulerBridge(profile);
sFeedProcessScope = new FeedProcessScope
.Builder(configHostApi, Executors.newSingleThreadExecutor(),
new LoggingApiImpl(), new FeedNetworkBridge(profile),
sFeedSchedulerBridge, DebugBehavior.SILENT)
.build();
sFeedSchedulerBridge.setRequestManager(sFeedProcessScope.getRequestManager());
}
}
// Copyright 2018 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.feed;
/**
* Provides static entry points to send notifications to Feed.
*/
public final class FeedEventReporter {
// Not meant to be instantiated.
private FeedEventReporter() {}
/*
* Should be called when the browser is foregrounded.
*/
public static void onBrowserForegrounded() {}
}
......@@ -23,4 +23,4 @@ public class FeedNewTabPage extends NewTabPage {
TabModelSelector tabModelSelector) {
super(activity, nativePageHost, tabModelSelector);
}
}
\ No newline at end of file
}
......@@ -9,6 +9,7 @@ if (enable_feed_in_chrome) {
feed_deps = [ "//third_party/feed:feed_lib_java" ]
feed_java_sources = [
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedEventReporter.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoaderBridge.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNetworkBridge.java",
......@@ -32,6 +33,9 @@ if (enable_feed_in_chrome) {
]
} else {
feed_deps = []
feed_java_sources = [ "//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java" ]
feed_java_sources = [
"//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java",
"//chrome/android/feed/dummy/java/src/org/chromium/chrome/browser/feed/FeedEventReporter.java",
]
feed_srcjar_deps = []
}
......@@ -75,6 +75,7 @@ import org.chromium.chrome.browser.download.DownloadUtils;
import org.chromium.chrome.browser.feature_engagement.ScreenshotMonitor;
import org.chromium.chrome.browser.feature_engagement.ScreenshotMonitorDelegate;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.feed.FeedEventReporter;
import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor;
import org.chromium.chrome.browser.firstrun.FirstRunStatus;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
......@@ -679,10 +680,16 @@ public class ChromeTabbedActivity
mLocaleManager.setSnackbarManager(getSnackbarManager());
mLocaleManager.startObservingPhoneChanges();
if (isWarmOnResume()) {
SuggestionsEventReporterBridge.onActivityWarmResumed();
if (ChromeFeatureList.isEnabled(ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS)) {
FeedEventReporter.onBrowserForegrounded();
} else {
SuggestionsEventReporterBridge.onColdStart();
if (isWarmOnResume()) {
SuggestionsEventReporterBridge.onActivityWarmResumed();
} else {
SuggestionsEventReporterBridge.onColdStart();
}
}
if (!isWarmOnResume()) {
SuggestionsMetrics.recordArticlesListVisible();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment