Remove non-internal SessionManager

PiperOrigin-RevId: 250548600
Change-Id: I57ec0f75416937d0a49fc02ff4bbcbffb3246264
diff --git a/src/main/java/com/google/android/libraries/feed/api/client/scope/BUILD b/src/main/java/com/google/android/libraries/feed/api/client/scope/BUILD
index d68faac..8aa7a36 100644
--- a/src/main/java/com/google/android/libraries/feed/api/client/scope/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/api/client/scope/BUILD
@@ -14,7 +14,6 @@
         "//src/main/java/com/google/android/libraries/feed/api/host/imageloader",
         "//src/main/java/com/google/android/libraries/feed/api/host/offlineindicator",
         "//src/main/java/com/google/android/libraries/feed/api/host/stream",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/basicstream",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent",
         "//src/main/java/com/google/android/libraries/feed/common/logging",
diff --git a/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScope.java b/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScope.java
index 625bb10..48cfef3 100644
--- a/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScope.java
+++ b/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScope.java
@@ -25,7 +25,6 @@
 import com.google.android.libraries.feed.api.host.stream.SnackbarApi;
 import com.google.android.libraries.feed.api.host.stream.StreamConfiguration;
 import com.google.android.libraries.feed.api.host.stream.TooltipApi;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.logging.Dumpable;
 
@@ -35,9 +34,6 @@
   /** Returns the Feed library request manager. */
   RequestManager getRequestManager();
 
-  /** Returns the Feed library session manager. */
-  SessionManager getSessionManager();
-
   /** Returns the Feed library task queue. */
   TaskQueue getTaskQueue();
 
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/scope/BUILD b/src/main/java/com/google/android/libraries/feed/api/internal/scope/BUILD
index e4ed08d..38fdd59 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/scope/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/scope/BUILD
@@ -45,7 +45,6 @@
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
         "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/store",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/basicstream",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent",
         "//src/main/java/com/google/android/libraries/feed/common/logging",
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java b/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
index b8d9758..842a9d5 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
@@ -39,7 +39,6 @@
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
 import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.api.internal.store.Store;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.concurrent.MainThreadRunner;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.logging.Dumpable;
@@ -160,10 +159,6 @@
     return requestManager;
   }
 
-  public SessionManager getSessionManager() {
-    return feedSessionManager;
-  }
-
   @Deprecated
   public TimingUtils getTimingUtils() {
     return timingUtils;
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/BUILD b/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/BUILD
index 274d618..7d2e645 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/BUILD
@@ -7,11 +7,11 @@
     srcs = glob(["*.java"]),
     deps = [
         "//src/main/java/com/google/android/libraries/feed/api/client/knowncontent",
+        "//src/main/java/com/google/android/libraries/feed/api/common",
         "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common",
         "//src/main/java/com/google/android/libraries/feed/api/internal/lifecycle",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/FeedSessionManager.java b/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/FeedSessionManager.java
index 8ecb6da..8bbc7ad 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/FeedSessionManager.java
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager/FeedSessionManager.java
@@ -15,15 +15,16 @@
 package com.google.android.libraries.feed.api.internal.sessionmanager;
 
 import com.google.android.libraries.feed.api.client.knowncontent.KnownContent;
+import com.google.android.libraries.feed.api.common.MutationContext;
 import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.lifecycle.Resettable;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.ViewDepthProvider;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.android.libraries.feed.common.functional.Function;
+import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
 import com.google.search.now.feed.client.StreamDataProto.StreamPayload;
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
@@ -39,7 +40,7 @@
  * relationship with a ModelProvider. The FeedSessionManager implements the session functionality
  * and management.
  */
-public interface FeedSessionManager extends Resettable, SessionManager {
+public interface FeedSessionManager extends Resettable {
 
   /**
    * This is called by the UI to get a new session. The life of the session is controlled by the
@@ -130,4 +131,11 @@
    * resulting {@link ConsistencyToken}.
    */
   void fetchActionsAndUpload(Consumer<Result<ConsistencyToken>> consumer);
+
+  /**
+   * Return a {@link Consumer} which is able to handle an update to the SessionManager. An update
+   * consists of a List of {@link StreamDataOperation} objects. The {@link MutationContext} captures
+   * the context which is initiating the update operation.
+   */
+  Consumer<Result<List<StreamDataOperation>>> getUpdateConsumer(MutationContext mutationContext);
 }
diff --git a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/BUILD b/src/main/java/com/google/android/libraries/feed/api/sessionmanager/BUILD
deleted file mode 100644
index 91baf44..0000000
--- a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/BUILD
+++ /dev/null
@@ -1,14 +0,0 @@
-package(default_visibility = ["//visibility:public"])
-
-licenses(["notice"])  # Apache 2
-
-java_library(
-    name = "sessionmanager",
-    srcs = glob(["*.java"]),
-    deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/common",
-        "//src/main/java/com/google/android/libraries/feed/common/functional",
-        "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
-    ],
-)
diff --git a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java b/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java
deleted file mode 100644
index a435993..0000000
--- a/src/main/java/com/google/android/libraries/feed/api/sessionmanager/SessionManager.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2018 The Feed Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.android.libraries.feed.api.sessionmanager;
-
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.common.Result;
-import com.google.android.libraries.feed.common.functional.Consumer;
-import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
-import java.util.List;
-
-/**
- * The SessionManager is responsible for creating and updating. A session has a one-to-one
- * relationship with a ModelProvider. The SessionManager implements the session functionality and
- * management.
- *
- * <p>TODO: this will not be needed long-term as hosts will use RequestManager without
- * this
- */
-public interface SessionManager {
-
-  /**
-   * Return a {@link Consumer} which is able to handle an update to the SessionManager. An update
-   * consists of a List of {@link StreamDataOperation} objects. The {@link MutationContext} captures
-   * the context which is initiating the update operation.
-   */
-  Consumer<Result<List<StreamDataOperation>>> getUpdateConsumer(MutationContext mutationContext);
-}
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
index a1da658..6604319 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
@@ -18,8 +18,8 @@
         "//src/main/java/com/google/android/libraries/feed/api/internal/common",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
         "//src/main/java/com/google/android/libraries/feed/api/internal/requestmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/store",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//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",
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
index aab8045..0359852 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
@@ -18,24 +18,25 @@
 import com.google.android.libraries.feed.api.common.MutationContext;
 import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.requestmanager.FeedRequestManager;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 
 /** Implementation of Client-visible RequestManagerApi. */
 public final class RequestManagerImpl implements RequestManager {
   private static final String TAG = "RequestManagerImpl";
 
   private final FeedRequestManager feedRequestManager;
-  private final SessionManager sessionManager;
+  private final FeedSessionManager feedSessionManager;
 
-  public RequestManagerImpl(FeedRequestManager feedRequestManager, SessionManager sessionManager) {
+  public RequestManagerImpl(
+      FeedRequestManager feedRequestManager, FeedSessionManager feedSessionManager) {
     this.feedRequestManager = feedRequestManager;
-    this.sessionManager = sessionManager;
+    this.feedSessionManager = feedSessionManager;
   }
 
   @Override
   public void triggerScheduledRefresh() {
     feedRequestManager.triggerRefresh(
         RequestReason.HOST_REQUESTED,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
   }
 }
diff --git a/src/test/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilderTest.java b/src/test/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilderTest.java
index a41df28..ea46ea2 100644
--- a/src/test/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilderTest.java
+++ b/src/test/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilderTest.java
@@ -86,7 +86,6 @@
             .build();
 
     assertThat(processScope.getRequestManager()).isNotNull();
-    assertThat(processScope.getSessionManager()).isNotNull();
     assertThat(processScope.getAppLifecycleListener()).isNotNull();
     assertThat(processScope.getKnownContent()).isNotNull();
     assertThat(processScope.getAppLifecycleListener()).isNotNull();
@@ -110,7 +109,6 @@
             .build();
 
     assertThat(processScope.getRequestManager()).isNotNull();
-    assertThat(processScope.getSessionManager()).isNotNull();
     assertThat(processScope.getAppLifecycleListener()).isNotNull();
     assertThat(processScope.getAppLifecycleListener()).isNotNull();
   }
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
index 9c08843..9fbe087 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
@@ -44,7 +44,7 @@
         "//src/main/java/com/google/android/libraries/feed/api/common",
         "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/requestmanager",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
         "//src/main/java/com/google/android/libraries/feed/feedrequestmanager",
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java
index d01bd8e..62dc018 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImplTest.java
@@ -21,7 +21,7 @@
 import com.google.android.libraries.feed.api.common.MutationContext;
 import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.requestmanager.FeedRequestManager;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.search.now.feed.client.StreamDataProto.StreamDataOperation;
@@ -37,7 +37,7 @@
 public final class RequestManagerImplTest {
 
   @Mock private FeedRequestManager feedRequestManager;
-  @Mock private SessionManager sessionManager;
+  @Mock private FeedSessionManager feedSessionManager;
   @Mock private Consumer<Result<List<StreamDataOperation>>> updateConsumer;
 
   private RequestManagerImpl requestManager;
@@ -45,8 +45,8 @@
   @Before
   public void createRequestManager() {
     initMocks(this);
-    requestManager = new RequestManagerImpl(feedRequestManager, sessionManager);
-    when(sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT))
+    requestManager = new RequestManagerImpl(feedRequestManager, feedSessionManager);
+    when(feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT))
         .thenReturn(updateConsumer);
   }
 
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/BUILD b/src/test/java/com/google/android/libraries/feed/infraintegration/BUILD
index b03d473..74ad893 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/BUILD
@@ -11,11 +11,9 @@
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
         "//src/main/java/com/google/android/libraries/feed/api/client/lifecycle",
-        "//src/main/java/com/google/android/libraries/feed/api/common",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/host/config",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -55,10 +53,10 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -80,11 +78,11 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -106,12 +104,10 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/host/config",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common/testing",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -131,10 +127,8 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/common/time/testing",
@@ -178,10 +172,8 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -227,11 +219,9 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common/testing",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -251,11 +241,12 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
         "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common/testing",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -384,11 +375,11 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/functional",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
@@ -412,10 +403,11 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
         "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -437,12 +429,10 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common/testing",
         "//src/main/java/com/google/android/libraries/feed/api/internal/store",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -462,11 +452,9 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -486,11 +474,9 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -511,11 +497,9 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
-        "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common/testing",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
@@ -536,11 +520,11 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/requestmanager",
@@ -595,7 +579,7 @@
     deps = [
         "//src/main/java/com/google/android/libraries/feed/api/host/scheduler",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/common/time/testing",
@@ -646,12 +630,12 @@
     aapt_version = "aapt2",
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
+        "//src/main/java/com/google/android/libraries/feed/api/client/requestmanager",
         "//src/main/java/com/google/android/libraries/feed/api/common",
-        "//src/main/java/com/google/android/libraries/feed/api/host/logging",
         "//src/main/java/com/google/android/libraries/feed/api/host/scheduler",
         "//src/main/java/com/google/android/libraries/feed/api/internal/modelprovider",
         "//src/main/java/com/google/android/libraries/feed/api/internal/protocoladapter",
-        "//src/main/java/com/google/android/libraries/feed/api/sessionmanager",
+        "//src/main/java/com/google/android/libraries/feed/api/internal/sessionmanager",
         "//src/main/java/com/google/android/libraries/feed/common/concurrent/testing",
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/testing/modelprovider",
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
index ba88980..6c172e1 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ClearAllTest.java
@@ -18,14 +18,12 @@
 import static org.mockito.MockitoAnnotations.initMocks;
 
 import com.google.android.libraries.feed.api.client.lifecycle.AppLifecycleListener;
-import com.google.android.libraries.feed.api.common.MutationContext;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.host.config.Configuration;
 import com.google.android.libraries.feed.api.host.config.Configuration.ConfigKey;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
@@ -41,10 +39,10 @@
 @RunWith(RobolectricTestRunner.class)
 public class ClearAllTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
   private AppLifecycleListener appLifecycleListener;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
@@ -54,7 +52,7 @@
     InfraIntegrationScope scope =
         new InfraIntegrationScope.Builder().setConfiguration(configuration).build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
+    requestManager = scope.getRequestManager();
     modelProviderFactory = scope.getModelProviderFactory();
     appLifecycleListener = scope.getAppLifecycleListener();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
@@ -73,9 +71,7 @@
           ResponseBuilder.createFeatureContentId(3)
         };
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider1 =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertCursorContents(modelProvider1, cards);
@@ -102,9 +98,7 @@
           ResponseBuilder.createFeatureContentId(3)
         };
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertCursorContents(modelProvider, cards);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
index 60006fe..a912238 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentRemoveTest.java
@@ -19,15 +19,15 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChange;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChangeObserver;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelCursor;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelFeature;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -49,10 +49,11 @@
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
   private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
   private final FakeThreadUtils fakeThreadUtils = scope.getFakeThreadUtils();
-  private final SessionManager sessionManager = scope.getFeedSessionManager();
+  private final FeedSessionManager feedSessionManager = scope.getFeedSessionManager();
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
   private final ModelProviderValidator modelValidator =
       new ModelProviderValidator(scope.getProtocolAdapter());
+  private final RequestManager requestManager = scope.getRequestManager();
 
   @Test
   public void removeContent() {
@@ -65,9 +66,7 @@
           ResponseBuilder.createFeatureContentId(4)
         };
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
@@ -91,7 +90,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
     ArgumentCaptor<FeatureChange> capture = ArgumentCaptor.forClass(FeatureChange.class);
     verify(observer).onChange(capture.capture());
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
index ea14747..f056a8c 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ContentUpdateTest.java
@@ -18,8 +18,8 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChange;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChangeObserver;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
@@ -28,7 +28,7 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -55,7 +55,8 @@
   private final ModelProviderValidator modelValidator =
       new ModelProviderValidator(scope.getProtocolAdapter());
   private final ProtocolAdapter protocolAdapter = scope.getProtocolAdapter();
-  private final SessionManager sessionManager = scope.getFeedSessionManager();
+  private final FeedSessionManager feedSessionManager = scope.getFeedSessionManager();
+  private final RequestManager requestManager = scope.getRequestManager();
 
   @Test
   public void updateContent_observers() {
@@ -65,9 +66,7 @@
           ResponseBuilder.createFeatureContentId(1), ResponseBuilder.createFeatureContentId(2)
         };
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
 
@@ -105,7 +104,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
     int id = 0;
     for (FeatureChangeObserver observer : observers) {
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
index 5fc4625..e93f4c9 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/DetachSessionTest.java
@@ -16,15 +16,13 @@
 
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.host.config.Configuration;
 import com.google.android.libraries.feed.api.host.config.Configuration.ConfigKey;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.PagingState;
@@ -55,9 +53,9 @@
       };
 
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
+  private RequestManager requestManager;
 
   private final ContentIdGenerators contentIdGenerators = new ContentIdGenerators();
 
@@ -69,7 +67,7 @@
     InfraIntegrationScope scope =
         new InfraIntegrationScope.Builder().setConfiguration(configuration).build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
+    requestManager = scope.getRequestManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
   }
@@ -91,9 +89,7 @@
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
 
     fakeFeedRequestManager.queueResponse(s1State.initialResponse);
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     // Create the sessionOne from page1 and a token
     ModelProvider sessionOne = modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
@@ -141,9 +137,7 @@
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
 
     fakeFeedRequestManager.queueResponse(s1State.initialResponse);
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     // Create the sessionOne from page1 and a token
     ModelProvider sessionOne = modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
index 1b19a7e..7b1c52e 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/EmptyStreamTest.java
@@ -20,13 +20,11 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderObserver;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.concurrent.TaskQueue;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
@@ -46,8 +44,8 @@
 
   private FakeClock fakeClock;
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
@@ -55,8 +53,8 @@
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeClock = scope.getFakeClock();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -120,9 +118,7 @@
     // Create an empty stream through a response
     ResponseBuilder responseBuilder = new ResponseBuilder();
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     fakeClock.advance(TaskQueue.STARVATION_TIMEOUT_MS);
     ModelProvider modelProvider =
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
index 255bd2f..5728737 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/FilterHeadTest.java
@@ -17,10 +17,8 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.android.libraries.feed.common.functional.Function;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
@@ -34,12 +32,13 @@
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 
-/** Tests of the {@link SessionManager#getStreamFeaturesFromHead(Function, Consumer)} method. */
+/** Tests of the {@link FeedSessionManager#getStreamFeaturesFromHead(Function, Consumer)} method. */
 @RunWith(RobolectricTestRunner.class)
 public class FilterHeadTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
 
   private FeedSessionManager feedSessionManager;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
@@ -47,6 +46,7 @@
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     feedSessionManager = scope.getFeedSessionManager();
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -61,9 +61,7 @@
         };
 
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(cards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     feedSessionManager.getStreamFeaturesFromHead(
         transformer,
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
index fb50f45..7643fd3 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/LimitedPagingTest.java
@@ -16,13 +16,11 @@
 
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.PagingState;
@@ -53,9 +51,9 @@
       };
 
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
+  private RequestManager requestManager;
 
   private final ContentIdGenerators contentIdGenerators = new ContentIdGenerators();
 
@@ -64,18 +62,16 @@
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
+    requestManager = scope.getRequestManager();
   }
 
   @Test
   public void testPagingDetachedSession() {
     PagingState s1State = new PagingState(PAGE_1, PAGE_2, 1, contentIdGenerators);
     fakeFeedRequestManager.queueResponse(s1State.initialResponse);
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     // Create the sessionOne from page1 and a token
     ModelProvider sessionOne = modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
index c66193f..2a9f127 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/MultiSessionPagingTest.java
@@ -17,6 +17,7 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
 import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
@@ -24,7 +25,7 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.PagingState;
@@ -62,19 +63,21 @@
 @RunWith(RobolectricTestRunner.class)
 public class MultiSessionPagingTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
+  private FeedSessionManager feedSessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
   private ContentIdGenerators contentIdGenerators = new ContentIdGenerators();
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
+    feedSessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -105,9 +108,7 @@
 
     // Create an initial S1 $HEAD session
     fakeFeedRequestManager.queueResponse(s1State.initialResponse);
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     ModelProvider mp1 = modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertRoot(mp1);
@@ -125,7 +126,7 @@
     fakeFeedRequestManager.queueResponse(s2State.initialResponse);
     fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(
+        feedSessionManager.getUpdateConsumer(
             new MutationContext.Builder().setRequestingSessionId(mp2.getSessionId()).build()));
     assertThat(mp1.getCurrentState()).isEqualTo(State.READY);
     assertThat(mp2.getCurrentState()).isEqualTo(State.INVALIDATED);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
index f2e9b43..898b622 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/RemoveTrackingBehaviorTest.java
@@ -18,14 +18,14 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.RemoveTrackingFactory;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.modelprovider.RemoveTracking;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.functional.Consumer;
 import com.google.android.libraries.feed.common.functional.Function;
@@ -57,18 +57,20 @@
       };
 
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
+  private FeedSessionManager feedSessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ProtocolAdapter protocolAdapter;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
+    feedSessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -89,7 +91,7 @@
     List<StreamDataOperation> dataOperations = getDataOperations(responseBuilder);
     MutationContext mutationContext = new MutationContext.Builder().setUserInitiated(true).build();
     Consumer<Result<List<StreamDataOperation>>> updateConsumer =
-        sessionManager.getUpdateConsumer(mutationContext);
+        feedSessionManager.getUpdateConsumer(mutationContext);
     updateConsumer.accept(Result.success(dataOperations));
     assertThat(called.get()).isTrue();
   }
@@ -114,7 +116,7 @@
     List<StreamDataOperation> dataOperations = getDataOperations(responseBuilder);
     MutationContext mutationContext = new MutationContext.Builder().setUserInitiated(true).build();
     Consumer<Result<List<StreamDataOperation>>> updateConsumer =
-        sessionManager.getUpdateConsumer(mutationContext);
+        feedSessionManager.getUpdateConsumer(mutationContext);
     updateConsumer.accept(Result.success(dataOperations));
     assertThat(called.get()).isTrue();
   }
@@ -142,7 +144,7 @@
     List<StreamDataOperation> dataOperations = getDataOperations(responseBuilder);
     MutationContext mutationContext = new MutationContext.Builder().setUserInitiated(false).build();
     Consumer<Result<List<StreamDataOperation>>> updateConsumer =
-        sessionManager.getUpdateConsumer(mutationContext);
+        feedSessionManager.getUpdateConsumer(mutationContext);
     updateConsumer.accept(Result.success(dataOperations));
     assertThat(called.get()).isFalse();
   }
@@ -186,8 +188,6 @@
 
   private void loadInitialData() {
     fakeFeedRequestManager.queueResponse(ResponseBuilder.forClearAllWithCards(CARDS).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
   }
 }
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
index ef86036..2148da0 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/RootOnlyTest.java
@@ -20,13 +20,14 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
 import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.State;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderObserver;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -50,16 +51,15 @@
   private final ModelProviderFactory modelProviderFactory = scope.getModelProviderFactory();
   private final ModelProviderValidator modelValidator =
       new ModelProviderValidator(scope.getProtocolAdapter());
-  private final SessionManager sessionManager = scope.getFeedSessionManager();
+  private final FeedSessionManager feedSessionManager = scope.getFeedSessionManager();
+  private final RequestManager requestManager = scope.getRequestManager();
 
   @Test
   public void rootOnlyResponse_beforeSessionWithLifecycle() {
     // ModelProvider is created from $HEAD containing content
     ResponseBuilder responseBuilder = new ResponseBuilder().addClearOperation().addRootFeature();
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
 
@@ -99,7 +99,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     verify(changeObserver, never()).onSessionFinished(any(UiContext.class));
 
     assertThat(modelProvider).isNotNull();
@@ -124,7 +124,7 @@
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
     fakeFeedRequestManager.triggerRefresh(
         RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelProvider.registerObserver(changeObserver);
@@ -143,7 +143,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     verify(changeObserver).onSessionFinished(any(UiContext.class));
   }
 }
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
index a00c42d..f80475c 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SemanticPropertiesTest.java
@@ -16,12 +16,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
 import com.google.android.libraries.feed.api.internal.store.Store;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.Result;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
@@ -40,7 +38,7 @@
 public class SemanticPropertiesTest {
   private final InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
   private final FakeFeedRequestManager fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-  private final SessionManager sessionManager = scope.getFeedSessionManager();
+  private final RequestManager requestManager = scope.getRequestManager();
   private final Store store = scope.getStore();
 
   @Test
@@ -54,9 +52,7 @@
             .addCardWithSemanticData(contentId, semanticData)
             .build();
     fakeFeedRequestManager.queueResponse(response);
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     scope.getFakeThreadUtils().enforceMainThread(false);
     ContentIdGenerators idGenerators = new ContentIdGenerators();
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
index 95e9de7..d6dd281 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SharedStateTest.java
@@ -17,12 +17,10 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
@@ -38,20 +36,20 @@
 @RunWith(RobolectricTestRunner.class)
 public class SharedStateTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ProtocolAdapter protocolAdapter;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
     modelValidator = new ModelProviderValidator(protocolAdapter);
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -60,9 +58,7 @@
     ResponseBuilder responseBuilder =
         new ResponseBuilder().addClearOperation().addPietSharedState().addRootFeature();
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
@@ -84,9 +80,7 @@
     ResponseBuilder responseBuilder =
         new ResponseBuilder().addClearOperation().addPietSharedState().addRootFeature();
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     sharedState = modelProvider.getSharedState(ResponseBuilder.PIET_SHARED_STATE);
     assertThat(sharedState).isNotNull();
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
index 210d910..33a04d4 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/SimpleStreamTest.java
@@ -17,15 +17,13 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelCursor;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelFeature;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.ResponseBuilder;
@@ -42,20 +40,20 @@
 @RunWith(RobolectricTestRunner.class)
 public class SimpleStreamTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
   private ProtocolAdapter protocolAdapter;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     protocolAdapter = scope.getProtocolAdapter();
     modelValidator = new ModelProviderValidator(protocolAdapter);
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -66,9 +64,7 @@
         ResponseBuilder.forClearAllWithCards(
             new ContentId[] {ResponseBuilder.createFeatureContentId(1)});
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertRoot(modelProvider);
@@ -104,9 +100,7 @@
         };
     ResponseBuilder responseBuilder = ResponseBuilder.forClearAllWithCards(cards);
     fakeFeedRequestManager.queueResponse(responseBuilder.build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertRoot(modelProvider);
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
index 2c15319..2030c93 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/StreamPagingTest.java
@@ -19,8 +19,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelCursor;
@@ -30,7 +29,6 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelToken;
 import com.google.android.libraries.feed.api.internal.modelprovider.TokenCompleted;
 import com.google.android.libraries.feed.api.internal.modelprovider.TokenCompletedObserver;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
 import com.google.android.libraries.feed.common.testing.PagingState;
@@ -48,19 +46,19 @@
 @RunWith(RobolectricTestRunner.class)
 public class StreamPagingTest {
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
   private ContentIdGenerators contentIdGenerators = new ContentIdGenerators();
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
     initMocks(this);
     InfraIntegrationScope scope = new InfraIntegrationScope.Builder().build();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
+    requestManager = scope.getRequestManager();
   }
 
   /**
@@ -92,9 +90,7 @@
     fakeFeedRequestManager.queueResponse(state.pageResponse);
 
     // Create an initial model
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     modelValidator.assertRoot(modelProvider);
@@ -157,9 +153,7 @@
     fakeFeedRequestManager.queueResponse(state.pageResponse);
 
     // Create an initial model
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
     ModelFeature rootFeature = modelProvider.getRootFeature();
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
index b494871..c87e94a 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/StructureUpdateTest.java
@@ -18,8 +18,8 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChange;
 import com.google.android.libraries.feed.api.internal.modelprovider.FeatureChangeObserver;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelChild;
@@ -28,7 +28,7 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -54,7 +54,8 @@
   private final ModelProviderValidator modelValidator =
       new ModelProviderValidator(scope.getProtocolAdapter());
   private final ProtocolAdapter protocolAdapter = scope.getProtocolAdapter();
-  private final SessionManager sessionManager = scope.getFeedSessionManager();
+  private final FeedSessionManager feedSessionManager = scope.getFeedSessionManager();
+  private final RequestManager requestManager = scope.getRequestManager();
 
   @Test
   public void appendChildren() {
@@ -71,9 +72,7 @@
 
     fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(startingCards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
 
@@ -91,7 +90,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
     // assert the new state of the stream
     modelValidator.assertCursorSize(root.getCursor(), startingCards.length + appendedCards.length);
@@ -126,9 +125,7 @@
 
     fakeFeedRequestManager.queueResponse(
         ResponseBuilder.forClearAllWithCards(startingCards).build());
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
     ModelProvider modelProvider =
         modelProviderFactory.createNew(null, UiContext.getDefaultInstance());
 
@@ -147,7 +144,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     modelValidator.assertCursorSize(cursor, 3);
   }
 }
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
index 8a774f7..565ad9e 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/TimeoutSessionBaseTest.java
@@ -22,7 +22,7 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderObserver;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -57,7 +57,7 @@
 
   private FakeClock fakeClock;
   private FakeFeedRequestManager fakeFeedRequestManager;
-  private SessionManager sessionManager;
+  private FeedSessionManager feedSessionManager;
   private ModelProviderFactory modelProviderFactory;
   private ModelProviderValidator modelValidator;
   private long timeoutDeadline;
@@ -72,7 +72,7 @@
             .build();
     fakeClock = scope.getFakeClock();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
-    sessionManager = scope.getFeedSessionManager();
+    feedSessionManager = scope.getFeedSessionManager();
     modelProviderFactory = scope.getModelProviderFactory();
     modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
   }
@@ -147,7 +147,7 @@
             System.out.println("onSessionStart");
             finished.set(true);
             modelValidator.assertCursorContents(modelProvider, cards);
-            assertThat(((FeedSessionManagerImpl) sessionManager).isDelayed()).isFalse();
+            assertThat(((FeedSessionManagerImpl) feedSessionManager).isDelayed()).isFalse();
           }
 
           @Override
diff --git a/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java b/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
index 27586ab..db01d5a 100644
--- a/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
+++ b/src/test/java/com/google/android/libraries/feed/infraintegration/ViewDepthProviderTests.java
@@ -18,8 +18,8 @@
 import static org.mockito.Mockito.when;
 import static org.mockito.MockitoAnnotations.initMocks;
 
+import com.google.android.libraries.feed.api.client.requestmanager.RequestManager;
 import com.google.android.libraries.feed.api.common.MutationContext;
-import com.google.android.libraries.feed.api.host.logging.RequestReason;
 import com.google.android.libraries.feed.api.host.scheduler.SchedulerApi;
 import com.google.android.libraries.feed.api.host.scheduler.SchedulerApi.RequestBehavior;
 import com.google.android.libraries.feed.api.host.scheduler.SchedulerApi.SessionState;
@@ -27,7 +27,7 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProvider.ViewDepthProvider;
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelProviderFactory;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
-import com.google.android.libraries.feed.api.sessionmanager.SessionManager;
+import com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager;
 import com.google.android.libraries.feed.common.concurrent.testing.FakeThreadUtils;
 import com.google.android.libraries.feed.common.testing.InfraIntegrationScope;
 import com.google.android.libraries.feed.common.testing.ModelProviderValidator;
@@ -82,10 +82,10 @@
   private FakeFeedRequestManager fakeFeedRequestManager;
   private FakeThreadUtils fakeThreadUtils;
   private ModelProviderFactory modelProviderFactory;
-  private ProtocolAdapter protocolAdapter;
   private ModelProviderValidator modelValidator;
-  private SessionManager sessionManager;
+  private FeedSessionManager feedSessionManager;
   private ViewDepthProvider viewDepthProvider;
+  private RequestManager requestManager;
 
   @Before
   public void setUp() {
@@ -98,12 +98,13 @@
     fakeThreadUtils = scope.getFakeThreadUtils();
     fakeFeedRequestManager = scope.getFakeFeedRequestManager();
     modelProviderFactory = scope.getModelProviderFactory();
-    protocolAdapter = scope.getProtocolAdapter();
-    modelValidator = new ModelProviderValidator(scope.getProtocolAdapter());
-    sessionManager = scope.getFeedSessionManager();
+    ProtocolAdapter protocolAdapter = scope.getProtocolAdapter();
+    modelValidator = new ModelProviderValidator(protocolAdapter);
+    feedSessionManager = scope.getFeedSessionManager();
     viewDepthProvider =
         new FakeViewDepthProvider()
             .setChildViewDepth(protocolAdapter.getStreamContentId(REQUEST_ONE[1]));
+    requestManager = scope.getRequestManager();
   }
 
   @Test
@@ -114,9 +115,7 @@
 
     // The REQUEST_ONE content will be added to head, this is then used to create the initial
     // session.
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     // The REQUEST_TWO content acts as a second request on the server, it is triggered by
     // REQUEST_WITH_CONTENT
@@ -144,9 +143,7 @@
 
     // The REQUEST_ONE content will be added to head, this is then used to create the initial
     // session.
-    fakeFeedRequestManager.triggerRefresh(
-        RequestReason.OPEN_WITHOUT_CONTENT,
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+    requestManager.triggerScheduledRefresh();
 
     // The REQUEST_TWO content acts as a second request on the server, it is triggered by
     // REQUEST_WITH_CONTENT
@@ -175,7 +172,7 @@
     fakeFeedRequestManager.loadMore(
         StreamToken.getDefaultInstance(),
         ConsistencyToken.getDefaultInstance(),
-        sessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
 
     modelValidator.assertCursorContents(
         modelProvider,