set timestamp on actions

PiperOrigin-RevId: 246030782
Change-Id: Idf86e345c51dc7c373ae7188ea7e38c021980dbf
diff --git a/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java b/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
index 159ed5c..c3f39db 100644
--- a/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
+++ b/src/main/java/com/google/android/libraries/feed/api/scope/FeedProcessScope.java
@@ -533,7 +533,7 @@
           new RequestManagerImpl(feedRequestManager, sessionManager);
       ActionManager actionManager =
           new FeedActionManagerImpl(
-              sessionManager, store, threadUtils, taskQueue, getOrCreateMainThreadRunner());
+              sessionManager, store, threadUtils, taskQueue, getOrCreateMainThreadRunner(), clock);
 
       if (knownContentApi == null) {
         knownContentApi =
diff --git a/src/main/java/com/google/android/libraries/feed/feedactionmanager/BUILD b/src/main/java/com/google/android/libraries/feed/feedactionmanager/BUILD
index b2315fd..197fea5 100644
--- a/src/main/java/com/google/android/libraries/feed/feedactionmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedactionmanager/BUILD
@@ -11,6 +11,7 @@
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
+        "//src/main/java/com/google/android/libraries/feed/common/time",
         "//src/main/java/com/google/android/libraries/feed/host/logging",
         "//src/main/java/com/google/android/libraries/feed/internalapi/actionmanager",
         "//src/main/java/com/google/android/libraries/feed/internalapi/store",
diff --git a/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java b/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
index e9b38f3..8767af0 100644
--- a/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
+++ b/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
@@ -24,6 +24,7 @@
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue.TaskType;
 import com.google.android.libraries.feed.common.functional.Consumer;
+import com.google.android.libraries.feed.common.time.Clock;
 import com.google.android.libraries.feed.host.logging.Task;
 import com.google.android.libraries.feed.internalapi.actionmanager.ActionManager;
 import com.google.android.libraries.feed.internalapi.store.LocalActionMutation;
@@ -34,6 +35,7 @@
 import com.google.search.now.wire.feed.ActionPayloadProto.ActionPayload;
 import java.util.HashSet;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /** Default implementation of {@link ActionManager} */
 public class FeedActionManagerImpl implements ActionManager {
@@ -43,18 +45,21 @@
   private final ThreadUtils threadUtils;
   private final TaskQueue taskQueue;
   private final MainThreadRunner mainThreadRunner;
+  private final Clock clock;
 
   public FeedActionManagerImpl(
       SessionManager sessionManager,
       Store store,
       ThreadUtils threadUtils,
       TaskQueue taskQueue,
-      MainThreadRunner mainThreadRunner) {
+      MainThreadRunner mainThreadRunner,
+      Clock clock) {
     this.sessionManager = sessionManager;
     this.store = store;
     this.threadUtils = threadUtils;
     this.taskQueue = taskQueue;
     this.mainThreadRunner = mainThreadRunner;
+    this.clock = clock;
   }
 
   @Override
@@ -88,10 +93,12 @@
         TaskType.BACKGROUND,
         () -> {
           HashSet<StreamUploadableAction> actionSet = new HashSet<>();
+          long currentTime = TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis());
           actionSet.add(
               StreamUploadableAction.newBuilder()
                   .setFeatureContentId(contentId)
                   .setPayload(payload)
+                  .setTimestampSeconds(currentTime)
                   .build());
           sessionManager.triggerUploadActions(actionSet);
         });
diff --git a/src/test/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImplTest.java b/src/test/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImplTest.java
index eca1f6e..535d376 100644
--- a/src/test/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImplTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImplTest.java
@@ -40,6 +40,7 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
 import com.google.search.now.wire.feed.ActionPayloadProto.ActionPayload;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
+import java.time.Duration;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -57,6 +58,8 @@
 
   private static final String CONTENT_ID_STRING = "contentIdString";
   private static final String SESSION_ID = "session";
+  private static final long DEFAULT_TIME = Duration.ofDays(42).toMillis();
+  private static final long DEFAULT_TIME_SECONDS = Duration.ofDays(42).getSeconds();
 
   private final FakeClock fakeClock = new FakeClock();
   private final FakeMainThreadRunner fakeMainThreadRunner =
@@ -81,7 +84,12 @@
     initMocks(this);
     actionManager =
         new FeedActionManagerImpl(
-            sessionManager, store, fakeThreadUtils, getTaskQueue(), fakeMainThreadRunner);
+            sessionManager,
+            store,
+            fakeThreadUtils,
+            getTaskQueue(),
+            fakeMainThreadRunner,
+            fakeClock);
   }
 
   @Test
@@ -175,10 +183,12 @@
   @Test
   public void triggerCreateAndUploadAction() throws Exception {
     ActionPayload payload = ActionPayload.getDefaultInstance();
+    fakeClock.set(DEFAULT_TIME);
     actionManager.createAndUploadAction(CONTENT_ID_STRING, payload);
     verify(sessionManager).triggerUploadActions(actionCaptor.capture());
     StreamUploadableAction action = (StreamUploadableAction) actionCaptor.getValue().toArray()[0];
     assertThat(action.getFeatureContentId()).isEqualTo(CONTENT_ID_STRING);
+    assertThat(action.getTimestampSeconds()).isEqualTo(DEFAULT_TIME_SECONDS);
     assertThat(action.getPayload()).isEqualTo(payload);
   }