Commit 402ea42d authored by Vincent Boisselle's avatar Vincent Boisselle Committed by Commit Bot

Fill the acknowledgement bit in Feed V1

Bug: 1146458
Change-Id: I8289fe25d2b9b52687ae03e9308474f4ce9d2943
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2534399Reviewed-by: default avatarDan H <harringtond@chromium.org>
Commit-Queue: Vincent Boisselle <vincb@google.com>
Cr-Commit-Position: refs/heads/master@{#827523}
parent e6f430c8
......@@ -8,8 +8,6 @@ import android.content.Context;
import android.os.Build;
import android.util.DisplayMetrics;
import androidx.annotation.VisibleForTesting;
import com.google.protobuf.ByteString;
import org.chromium.base.Consumer;
......@@ -52,6 +50,7 @@ import org.chromium.chrome.browser.signin.IdentityServicesProvider;
import org.chromium.components.feed.core.proto.libraries.api.internal.StreamDataProto.StreamToken;
import org.chromium.components.feed.core.proto.wire.ActionTypeProto;
import org.chromium.components.feed.core.proto.wire.CapabilityProto.Capability;
import org.chromium.components.feed.core.proto.wire.ChromeFulfillmentInfoProto.ChromeFulfillmentInfo;
import org.chromium.components.feed.core.proto.wire.ClientInfoProto.ClientInfo;
import org.chromium.components.feed.core.proto.wire.ClientInfoProto.ClientInfo.PlatformType;
import org.chromium.components.feed.core.proto.wire.ConsistencyTokenProto.ConsistencyToken;
......@@ -153,8 +152,8 @@ public class FeedRequestManagerImpl implements FeedRequestManager {
Logger.i(TAG, "trigger refresh %s", reason);
RequestBuilder request = newDefaultRequest(reason).setConsistencyToken(token);
if (shouldDismissNoticeCard()) {
request.dismissNoticeCard();
if (shouldAcknowledgeNoticeCard()) {
request.acknowledgeNoticeCard();
}
if (mThreadUtils.isMainThread()) {
......@@ -167,8 +166,7 @@ public class FeedRequestManagerImpl implements FeedRequestManager {
}
}
@VisibleForTesting
boolean shouldDismissNoticeCard() {
boolean shouldAcknowledgeNoticeCard() {
if (!ChromeFeatureList.isEnabled(
ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS)) {
return false;
......@@ -377,6 +375,7 @@ public class FeedRequestManagerImpl implements FeedRequestManager {
@RequestReason
private final int mClientLoggingRequestReason;
private boolean mCardMenuTooltipWouldTrigger;
private boolean mIsNoticeCardAcknowledged;
RequestBuilder(Context context, ApplicationInfo applicationInfo,
Configuration configuration, @RequestReason int requestReason) {
......@@ -429,6 +428,10 @@ public class FeedRequestManagerImpl implements FeedRequestManager {
if (mToken != null) {
feedQuery.setPageToken(mToken);
}
if (mIsNoticeCardAcknowledged) {
feedQuery.setChromeFulfillmentInfo(
ChromeFulfillmentInfo.newBuilder().setNoticeCardAcknowledged(true));
}
FeedRequest.Builder feedRequestBuilder =
FeedRequest.newBuilder().setFeedQuery(feedQuery);
if (mConsistencyToken != null) {
......@@ -446,9 +449,9 @@ public class FeedRequestManagerImpl implements FeedRequestManager {
return requestBuilder.build();
}
// TODO(b/1146458): Implement this function once we are decided on the right wire protocol
// to dismiss the notice card from the client.
public void dismissNoticeCard() {}
public void acknowledgeNoticeCard() {
mIsNoticeCardAcknowledged = true;
}
private void addCapabilities(FeedRequest.Builder feedRequestBuilder) {
addCapabilityIfConfigEnabled(
......
......@@ -467,28 +467,66 @@ public class FeedRequestManagerImplTest {
@Test
@Features.EnableFeatures({ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS})
public void testTriggerRefresh_dismissNoticeCard() throws Exception {
// Simulate enough views and clicks.
public void testTriggerRefresh_acknowledgeNoticeCard_whenClicksThresholdReached()
throws Exception {
// Simulate enough clicks.
when(mPrefService.getInteger(Pref.NOTICE_CARD_CLICKS_COUNT)).thenReturn(1);
when(mPrefService.getInteger(Pref.NOTICE_CARD_VIEWS_COUNT)).thenReturn(0);
mRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED, input -> {});
HttpRequest httpRequest = mFakeNetworkClient.getLatestRequest();
assertHttpRequestFormattedCorrectly(httpRequest, mContext);
assertTrue(getRequestFromHttpRequest(httpRequest)
.getExtension(FeedRequest.feedRequest)
.getFeedQuery()
.getChromeFulfillmentInfo()
.getNoticeCardAcknowledged());
}
@Test
@Features.EnableFeatures({ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS})
public void testTriggerRefresh_acknowledgeNoticeCard_whenViewsThresholdReached()
throws Exception {
// Simulate enough views.
when(mPrefService.getInteger(Pref.NOTICE_CARD_CLICKS_COUNT)).thenReturn(0);
when(mPrefService.getInteger(Pref.NOTICE_CARD_VIEWS_COUNT)).thenReturn(3);
assertTrue(mRequestManager.shouldDismissNoticeCard());
mRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED, input -> {});
HttpRequest httpRequest = mFakeNetworkClient.getLatestRequest();
assertHttpRequestFormattedCorrectly(httpRequest, mContext);
assertTrue(getRequestFromHttpRequest(httpRequest)
.getExtension(FeedRequest.feedRequest)
.getFeedQuery()
.getChromeFulfillmentInfo()
.getNoticeCardAcknowledged());
}
@Test
public void testTriggerRefresh_dontDismissNoticeCard_whenFeatureDisabled() throws Exception {
public void testTriggerRefresh_dontAcknowledgeNoticeCard_whenFeatureDisabled()
throws Exception {
// Simulate enough views and clicks.
when(mPrefService.getInteger(Pref.NOTICE_CARD_CLICKS_COUNT)).thenReturn(1);
when(mPrefService.getInteger(Pref.NOTICE_CARD_VIEWS_COUNT)).thenReturn(3);
mRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED, input -> {});
assertFalse(mRequestManager.shouldDismissNoticeCard());
HttpRequest httpRequest = mFakeNetworkClient.getLatestRequest();
assertHttpRequestFormattedCorrectly(httpRequest, mContext);
assertFalse(getRequestFromHttpRequest(httpRequest)
.getExtension(FeedRequest.feedRequest)
.getFeedQuery()
.getChromeFulfillmentInfo()
.getNoticeCardAcknowledged());
}
@Test
@Features.EnableFeatures({ChromeFeatureList.INTEREST_FEED_NOTICE_CARD_AUTO_DISMISS})
public void testTriggerRefresh_dontDismissNoticeCard_whenCountThresholdsNotReached()
public void testTriggerRefresh_dontAcknowledgeNoticeCard_whenCountThresholdsNotReached()
throws Exception {
// Simulate not enough views nor clicks.
when(mPrefService.getInteger(Pref.NOTICE_CARD_CLICKS_COUNT)).thenReturn(0);
......@@ -496,7 +534,14 @@ public class FeedRequestManagerImplTest {
mRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED, input -> {});
assertFalse(mRequestManager.shouldDismissNoticeCard());
HttpRequest httpRequest = mFakeNetworkClient.getLatestRequest();
assertHttpRequestFormattedCorrectly(httpRequest, mContext);
assertFalse(getRequestFromHttpRequest(httpRequest)
.getExtension(FeedRequest.feedRequest)
.getFeedQuery()
.getChromeFulfillmentInfo()
.getNoticeCardAcknowledged());
}
@Test
......
......@@ -94,6 +94,7 @@ if (is_android) {
"wire/action_request.proto",
"wire/action_type.proto",
"wire/capability.proto",
"wire/chrome_fulfillment_info.proto",
"wire/client_info.proto",
"wire/consistency_token.proto",
"wire/content_id.proto",
......
// Copyright 2020 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.
syntax = "proto2";
package feedwire;
......
// Copyright 2020 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.
syntax = "proto2";
package feedwire1;
option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.components.feed.core.proto.wire";
option java_outer_classname = "ChromeFulfillmentInfoProto";
// Information on how to do content fulfillment for Chrome.
message ChromeFulfillmentInfo {
// Whether the notice card has already been acknowledged by the user based on
// their views and clicks on the card. This is different from when the user
// explicitly dismiss the notice card by touching the button.
optional bool notice_card_acknowledged = 1;
}
......@@ -11,6 +11,8 @@ option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.components.feed.core.proto.wire";
option java_outer_classname = "FeedQueryProto";
import "components/feed/core/proto/wire/chrome_fulfillment_info.proto";
message FeedQuery {
enum RequestReason {
// Bucket for any not listed. Should not be used (prefer adding a new
......@@ -49,4 +51,7 @@ message FeedQuery {
// Used to fetch the next page when scrolling copied from
// Token.next_page_token
optional bytes page_token = 2;
// Information on how to do content fulfillment for Chrome.
optional ChromeFulfillmentInfo chrome_fulfillment_info = 3;
}
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