remove Action Properties

PiperOrigin-RevId: 251648468
Change-Id: I05c6499f3c15d3cfa91209061ccda1c8bd252e35
diff --git a/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java b/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
index 1a7604f..caaf868 100644
--- a/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
+++ b/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
@@ -250,7 +250,6 @@
             extensionRegistry,
             taskQueue,
             threadUtils,
-            actionReader,
             store,
             clock);
     FeedSessionManagerFactory fsmFactory =
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/actionmanager/ActionReader.java b/src/main/java/com/google/android/libraries/feed/api/internal/actionmanager/ActionReader.java
index 9a6776b..7e1be1d 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/actionmanager/ActionReader.java
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/actionmanager/ActionReader.java
@@ -14,7 +14,6 @@
 
 package com.google.android.libraries.feed.api.internal.actionmanager;
 
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.DismissActionWithSemanticProperties;
 import com.google.android.libraries.feed.common.Result;
 import java.util.List;
@@ -24,6 +23,4 @@
 
   /** Retrieves list of {@link DismissActionWithSemanticProperties} for all valid dismiss actions */
   Result<List<DismissActionWithSemanticProperties>> getDismissActionsWithSemanticProperties();
-  /** Retrieves list of {@link ActionProperties} for the corresponding contentId */
-  Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds);
 }
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/common/ActionPropertiesWithId.java b/src/main/java/com/google/android/libraries/feed/api/internal/common/ActionPropertiesWithId.java
deleted file mode 100644
index 39b0370..0000000
--- a/src/main/java/com/google/android/libraries/feed/api/internal/common/ActionPropertiesWithId.java
+++ /dev/null
@@ -1,55 +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.internal.common;
-
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
-import java.util.Arrays;
-
-/**
- * Structure style class which binds a String contentId with the action properties data for that
- * contentId. The class is immutable and provides access to the fields directly.
- */
-public final class ActionPropertiesWithId {
-
-  public final String contentId;
-  public final OpaqueActionData actionData;
-
-  public ActionPropertiesWithId(String contentId, OpaqueActionData actionData) {
-    this.contentId = contentId;
-    this.actionData = actionData;
-  }
-
-  @Override
-  public boolean equals(/*@Nullable*/ Object o) {
-    if (this == o) {
-      return true;
-    }
-    if (o == null || getClass() != o.getClass()) {
-      return false;
-    }
-
-    ActionPropertiesWithId that = (ActionPropertiesWithId) o;
-
-    return contentId.equals(that.contentId)
-        && Arrays.equals(actionData.toByteArray(), that.actionData.toByteArray());
-  }
-
-  @Override
-  public int hashCode() {
-    int result = contentId.hashCode();
-    result = 31 * result + actionData.hashCode();
-    return result;
-  }
-}
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/store/ActionPropertiesMutation.java b/src/main/java/com/google/android/libraries/feed/api/internal/store/ActionPropertiesMutation.java
deleted file mode 100644
index 97eb72b..0000000
--- a/src/main/java/com/google/android/libraries/feed/api/internal/store/ActionPropertiesMutation.java
+++ /dev/null
@@ -1,27 +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.internal.store;
-
-import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
-
-/** Used to commit mutations to Action properties data within the {@link Store} */
-public interface ActionPropertiesMutation {
-  /** Add a new Action properties mutation */
-  ActionPropertiesMutation add(String contentId, OpaqueActionData actionData);
-
-  /** Commit the current mutations */
-  CommitResult commit();
-}
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/store/BUILD b/src/main/java/com/google/android/libraries/feed/api/internal/store/BUILD
index 857456b..0aa97de 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/store/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/store/BUILD
@@ -12,7 +12,6 @@
         "//src/main/java/com/google/android/libraries/feed/common/feedobservable",
         "//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",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_android_support_support_annotations",
     ],
diff --git a/src/main/java/com/google/android/libraries/feed/api/internal/store/Store.java b/src/main/java/com/google/android/libraries/feed/api/internal/store/Store.java
index 240a733..3bb0b70 100644
--- a/src/main/java/com/google/android/libraries/feed/api/internal/store/Store.java
+++ b/src/main/java/com/google/android/libraries/feed/api/internal/store/Store.java
@@ -14,7 +14,6 @@
 
 package com.google.android.libraries.feed.api.internal.store;
 
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.common.Result;
@@ -64,9 +63,6 @@
   /** Gets all semantic properties objects associated with a given list of contentIds */
   Result<List<SemanticPropertiesWithId>> getSemanticProperties(List<String> contentIds);
 
-  /** Gets all action properties objects associated with a given list of contentIds */
-  Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds);
-
   /** Gets an set of ALL {@link UploadableStreamAction}. Note that this includes expired actions. */
   Result<Set<StreamUploadableAction>> getAllUploadableActions();
 
@@ -101,9 +97,6 @@
   /** Returns a semantic properties mutation used to modify the properties in the store */
   SemanticPropertiesMutation editSemanticProperties();
 
-  /** Returns a action properties mutation used to modify the properties in the store */
-  ActionPropertiesMutation editActionProperties();
-
   /** Returns an action mutation used to modify actions in the store */
   LocalActionMutation editLocalActions();
 
diff --git a/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java b/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
index fb28e5d..e800d5a 100644
--- a/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
+++ b/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
@@ -18,14 +18,12 @@
 import com.google.search.now.ui.piet.PietProto.PietSharedState;
 import com.google.search.now.ui.stream.StreamStructureProto.Content;
 import com.google.search.now.ui.stream.StreamStructureProto.PietContent;
-import com.google.search.now.wire.feed.ActionPropertiesProto.ActionProperties;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import com.google.search.now.wire.feed.DataOperationProto.DataOperation;
 import com.google.search.now.wire.feed.DataOperationProto.DataOperation.Operation;
 import com.google.search.now.wire.feed.FeatureProto.Feature;
 import com.google.search.now.wire.feed.FeatureProto.Feature.RenderableUnit;
 import com.google.search.now.wire.feed.FeedResponseProto.FeedResponse;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import com.google.search.now.wire.feed.PayloadMetadataProto.PayloadMetadata;
 import com.google.search.now.wire.feed.ResponseProto.Response;
 import com.google.search.now.wire.feed.SemanticPropertiesProto.SemanticProperties;
@@ -191,19 +189,6 @@
     return this;
   }
 
-  public ResponseBuilder addCardWithActionData(ContentId contentId, OpaqueActionData actionData) {
-    feedResponseBuilder.addDataOperation(
-        DataOperation.newBuilder()
-            .setOperation(Operation.UPDATE_OR_APPEND)
-            .setFeature(Feature.newBuilder().setRenderableUnit(RenderableUnit.CARD))
-            .setMetadata(
-                PayloadMetadata.newBuilder()
-                    .setContentId(contentId)
-                    .setActionProperties(ActionProperties.newBuilder().setActionData(actionData))));
-    wireProtocolInfo.featuresAdded.add(contentId);
-    return this;
-  }
-
   public ResponseBuilder removeFeature(ContentId contentId, ContentId parentId) {
     PayloadMetadata payloadMetadata = PayloadMetadata.newBuilder().setContentId(contentId).build();
     Feature feature =
diff --git a/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java b/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
index 902cd9c..f1a51a1 100644
--- a/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
+++ b/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
@@ -18,7 +18,6 @@
 import com.google.android.libraries.feed.api.host.config.Configuration.ConfigKey;
 import com.google.android.libraries.feed.api.host.logging.Task;
 import com.google.android.libraries.feed.api.internal.actionmanager.ActionReader;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.DismissActionWithSemanticProperties;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
@@ -65,11 +64,6 @@
   }
 
   @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    return store.getActionProperties(contentIds);
-  }
-
-  @Override
   public Result<List<DismissActionWithSemanticProperties>>
       getDismissActionsWithSemanticProperties() {
     Result<List<StreamLocalAction>> dismissActionsResult = store.getAllDismissLocalActions();
diff --git a/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java b/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
index 5f45e79..2cd21f7 100644
--- a/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
@@ -42,7 +42,6 @@
 import com.google.search.now.wire.feed.FeatureProto.Feature.RenderableUnit;
 import com.google.search.now.wire.feed.FeedResponseProto.FeedResponse;
 import com.google.search.now.wire.feed.FeedResponseProto.FeedResponseMetadata;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import com.google.search.now.wire.feed.PietSharedStateItemProto.PietSharedStateItem;
 import com.google.search.now.wire.feed.ResponseProto.Response;
 import com.google.search.now.wire.feed.TokenProto.Token;
@@ -188,12 +187,6 @@
                     operation.getMetadata().getSemanticProperties().getSemanticPropertiesData())
                 .build());
       }
-      if (operation.getMetadata().getActionProperties().hasActionData()) {
-        streamDataOperations.add(
-            createActionDataOperation(
-                    contentId, operation.getMetadata().getActionProperties().getActionData())
-                .build());
-      }
     }
 
     for (ContentId requiredContentId : requiredContentIds) {
@@ -330,16 +323,6 @@
                 .setOperation(Operation.UPDATE_OR_APPEND));
   }
 
-  private StreamDataOperation.Builder createActionDataOperation(
-      String contentId, OpaqueActionData actionData) {
-    return StreamDataOperation.newBuilder()
-        .setStreamPayload(StreamPayload.newBuilder().setActionData(actionData))
-        .setStreamStructure(
-            StreamStructure.newBuilder()
-                .setContentId(contentId)
-                .setOperation(Operation.UPDATE_OR_APPEND));
-  }
-
   private String createContentId(ContentId contentId) {
     // Using String concat for performance reasons.  This is called a lot for large feed responses.
     return contentId.getTable()
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
index 8a17b90..0a035fe 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
@@ -21,7 +21,6 @@
 import com.google.android.libraries.feed.api.host.network.HttpRequest.HttpMethod;
 import com.google.android.libraries.feed.api.host.network.NetworkClient;
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.android.libraries.feed.api.internal.actionmanager.ActionReader;
 import com.google.android.libraries.feed.api.internal.common.ThreadUtils;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
 import com.google.android.libraries.feed.api.internal.requestmanager.ActionUploadRequestManager;
@@ -54,7 +53,6 @@
   private final FeedExtensionRegistry extensionRegistry;
   private final TaskQueue taskQueue;
   private final ThreadUtils threadUtils;
-  private final ActionReader actionReader;
   private final Store store;
   private final Clock clock;
   private final long maxActionUploadAttempts;
@@ -71,7 +69,6 @@
       FeedExtensionRegistry extensionRegistry,
       TaskQueue taskQueue,
       ThreadUtils threadUtils,
-      ActionReader actionReader,
       Store store,
       Clock clock) {
     this.configuration = configuration;
@@ -80,7 +77,6 @@
     this.extensionRegistry = extensionRegistry;
     this.taskQueue = taskQueue;
     this.threadUtils = threadUtils;
-    this.actionReader = actionReader;
     this.store = store;
     this.clock = clock;
     maxBytesPerRequest =
@@ -118,7 +114,7 @@
       return;
     }
     UploadableActionsRequestBuilder requestBuilder =
-        new UploadableActionsRequestBuilder(actionReader, protocolAdapter);
+        new UploadableActionsRequestBuilder(protocolAdapter);
     int actionPayloadBytes = 0;
     Set<StreamUploadableAction> actionsToUpload = new HashSet<>();
     for (StreamUploadableAction action : actions) {
diff --git a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
index eae7f88..cb46e29 100644
--- a/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
+++ b/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
@@ -14,33 +14,24 @@
 
 package com.google.android.libraries.feed.feedrequestmanager;
 
-import com.google.android.libraries.feed.api.internal.actionmanager.ActionReader;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.protocoladapter.ProtocolAdapter;
 import com.google.android.libraries.feed.common.Result;
 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.ActionPropertiesProto.ActionProperties;
 import com.google.search.now.wire.feed.ActionRequestProto.ActionRequest;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import com.google.search.now.wire.feed.FeedActionProto.FeedAction;
 import com.google.search.now.wire.feed.FeedActionRequestProto.FeedActionRequest;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 // A class that creates an ActionsRequest for uploading actions
 final class UploadableActionsRequestBuilder {
   private Set<StreamUploadableAction> uploadableActions;
   private ConsistencyToken token;
-  private final ActionReader actionReader;
   private final ProtocolAdapter protocolAdapter;
 
-  UploadableActionsRequestBuilder(ActionReader actionReader, ProtocolAdapter protocolAdapter) {
-    this.actionReader = actionReader;
+  UploadableActionsRequestBuilder(ProtocolAdapter protocolAdapter) {
     this.protocolAdapter = protocolAdapter;
   }
 
@@ -64,17 +55,6 @@
             .setRequestVersion(ActionRequest.RequestVersion.FEED_UPLOAD_ACTION);
     FeedActionRequest.Builder feedActionRequestBuilder = FeedActionRequest.newBuilder();
     if (uploadableActions != null) {
-      Map<String, ActionProperties> actionPropertyMap = new HashMap<>();
-      List<String> contentIds = new ArrayList<>(uploadableActions.size());
-      for (StreamUploadableAction action : uploadableActions) {
-        contentIds.add(action.getFeatureContentId());
-      }
-      List<ActionPropertiesWithId> actionProperties = getActionPropertiesForIds(contentIds);
-      for (ActionPropertiesWithId property : actionProperties) {
-        actionPropertyMap.put(
-            property.contentId,
-            ActionProperties.newBuilder().setActionData(property.actionData).build());
-      }
       for (StreamUploadableAction action : uploadableActions) {
         String contentId = action.getFeatureContentId();
         ActionPayload payload = action.getPayload();
@@ -85,10 +65,6 @@
                     FeedAction.ClientData.newBuilder()
                         .setTimestampSeconds(action.getTimestampSeconds())
                         .build());
-        ActionProperties properties = actionPropertyMap.get(contentId);
-        if (properties != null) {
-          feedAction.setActionProperties(properties);
-        }
         Result<ContentId> contentIdResult = protocolAdapter.getWireContentId(contentId);
         if (contentIdResult.isSuccessful()) {
           feedAction.setContentId(contentIdResult.getValue());
@@ -104,12 +80,4 @@
 
     return requestBuilder.build();
   }
-
-  private List<ActionPropertiesWithId> getActionPropertiesForIds(List<String> ids) {
-    Result<List<ActionPropertiesWithId>> actionResult = actionReader.getActionProperties(ids);
-    if (actionResult.isSuccessful()) {
-      return actionResult.getValue();
-    }
-    return new ArrayList<>();
-  }
 }
diff --git a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
index 905c696..d6777be 100644
--- a/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
+++ b/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
@@ -27,7 +27,6 @@
 import com.google.android.libraries.feed.api.internal.modelprovider.ModelError.ErrorType;
 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.store.ActionPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.ContentMutation;
 import com.google.android.libraries.feed.api.internal.store.SemanticPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.Store;
@@ -76,7 +75,6 @@
   private int errorCount = 0;
   private int contentCommitErrorCount = 0;
   private int semanticPropertiesCommitErrorCount = 0;
-  private int actionPropertiesCommitErrorCount = 0;
 
   /** Listens for errors which need to be reported to a ModelProvider. */
   public interface ModelErrorObserver {
@@ -137,10 +135,6 @@
         .forKey("semanticPropertiesCommitErrorCount")
         .value(semanticPropertiesCommitErrorCount)
         .compactPrevious();
-    dumper
-        .forKey("actionPropertiesCommitErrorCount")
-        .value(actionPropertiesCommitErrorCount)
-        .compactPrevious();
   }
 
   public static boolean validDataOperation(StreamDataOperation dataOperation) {
@@ -301,7 +295,6 @@
       contentCache.startMutation();
       ContentMutation contentMutation = store.editContent();
       SemanticPropertiesMutation semanticPropertiesMutation = store.editSemanticProperties();
-      ActionPropertiesMutation actionPropertiesMutation = store.editActionProperties();
       for (StreamDataOperation dataOperation : model.streamDataOperations) {
         Operation operation = dataOperation.getStreamStructure().getOperation();
         if (operation == Operation.CLEAR_ALL) {
@@ -327,8 +320,6 @@
           } else if (dataOperation.getStreamPayload().hasSemanticData()) {
             semanticPropertiesMutation.add(
                 contentId, dataOperation.getStreamPayload().getSemanticData());
-          } else if (payload.hasActionData()) {
-            actionPropertiesMutation.add(contentId, payload.getActionData());
           } else {
             Logger.e(TAG, "Unsupported UPDATE_OR_APPEND payload");
           }
@@ -362,10 +353,6 @@
               semanticPropertiesCommitErrorCount++;
               Logger.e(TAG, "semanticPropertiesMutation failed");
             }
-            if (actionPropertiesMutation.commit().getResult() == CommitResult.Result.FAILURE) {
-              actionPropertiesCommitErrorCount++;
-              Logger.e(TAG, "actionPropertiesMutation failed");
-            }
             contentCache.finishMutation();
           });
       timeTracker.stop("", "contentUpdate", "items", model.streamDataOperations.size());
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java b/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
index aa5b444..9574229 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
@@ -20,12 +20,10 @@
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
 import com.google.android.libraries.feed.api.host.storage.ContentStorageDirect;
 import com.google.android.libraries.feed.api.host.storage.JournalStorageDirect;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.ThreadUtils;
 import com.google.android.libraries.feed.api.internal.lifecycle.Resettable;
-import com.google.android.libraries.feed.api.internal.store.ActionPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.ContentMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation;
 import com.google.android.libraries.feed.api.internal.store.SemanticPropertiesMutation;
@@ -144,11 +142,6 @@
   }
 
   @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    return delegate.getActionProperties(contentIds);
-  }
-
-  @Override
   public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
     return delegate.getAllDismissLocalActions();
   }
@@ -189,11 +182,6 @@
   }
 
   @Override
-  public ActionPropertiesMutation editActionProperties() {
-    return delegate.editActionProperties();
-  }
-
-  @Override
   public LocalActionMutation editLocalActions() {
     return delegate.editLocalActions();
   }
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/BUILD b/src/main/java/com/google/android/libraries/feed/feedstore/internal/BUILD
index 139db66..c3d4749 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/internal/BUILD
@@ -16,7 +16,6 @@
         "//src/main/java/com/google/android/libraries/feed/common/protoextensions",
         "//src/main/java/com/google/android/libraries/feed/common/time",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
         "@com_google_code_findbugs_jsr305//jar",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
     ],
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java b/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
index 75ab2c4..425e9d1 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
@@ -14,9 +14,9 @@
 
 package com.google.android.libraries.feed.feedstore.internal;
 
-import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.ACTION_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SEMANTIC_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SHARED_STATE_PREFIX;
+import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.UPLOADABLE_ACTION_PREFIX;
 
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
 import com.google.android.libraries.feed.api.host.storage.ContentMutation;
@@ -27,7 +27,6 @@
 import com.google.android.libraries.feed.common.time.TimingUtils;
 import com.google.android.libraries.feed.common.time.TimingUtils.ElapsedTimeTracker;
 import com.google.search.now.feed.client.StreamDataProto.StreamLocalAction;
-import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -40,7 +39,6 @@
   private final Supplier<Set<String>> accessibleContentSupplier;
   private final Set<String> reservedContentIds;
   private final Supplier<Set<StreamLocalAction>> actionsSupplier;
-  private final Supplier<Set<StreamUploadableAction>> uploadableActionsSupplier;
   private final ContentStorageDirect contentStorageDirect;
   private final TimingUtils timingUtils;
   private final boolean keepSharedStates;
@@ -49,14 +47,12 @@
       Supplier<Set<String>> accessibleContentSupplier,
       Set<String> reservedContentIds,
       Supplier<Set<StreamLocalAction>> actionsSupplier,
-      Supplier<Set<StreamUploadableAction>> uploadableActionsSupplier,
       ContentStorageDirect contentStorageDirect,
       TimingUtils timingUtils,
       boolean keepSharedStates) {
     this.accessibleContentSupplier = accessibleContentSupplier;
     this.reservedContentIds = reservedContentIds;
     this.actionsSupplier = actionsSupplier;
-    this.uploadableActionsSupplier = uploadableActionsSupplier;
     this.contentStorageDirect = contentStorageDirect;
     this.timingUtils = timingUtils;
     this.keepSharedStates = keepSharedStates;
@@ -72,8 +68,7 @@
     population.removeAll(reservedContentIds);
     population.removeAll(getAccessibleSemanticProperties(accessibleContent));
     population.removeAll(getLocalActionSemanticProperties(getLocalActions()));
-    population.removeAll(getAccessibleActionProperties(accessibleContent));
-    population.removeAll(getUploadableActionProperties(getUploadableActions()));
+    filterUploadableActions(population);
     if (keepSharedStates) {
       filterSharedStates(population);
     } else {
@@ -100,16 +95,24 @@
   }
 
   private void filterSharedStates(Set<String> population) {
+    filterPrefix(population, SHARED_STATE_PREFIX);
+  }
+
+  private void filterUploadableActions(Set<String> population) {
+    filterPrefix(population, UPLOADABLE_ACTION_PREFIX);
+  }
+
+  private void filterPrefix(Set<String> population, String prefix) {
     int size = population.size();
     ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
     Iterator<String> i = population.iterator();
     while (i.hasNext()) {
       String key = i.next();
-      if (key.startsWith(SHARED_STATE_PREFIX)) {
+      if (key.startsWith(prefix)) {
         i.remove();
       }
     }
-    tracker.stop("", "filterSharedStates", population.size() - size);
+    tracker.stop("", "filterPrefix " + prefix, population.size() - size);
   }
 
   private Set<String> getAccessible() {
@@ -126,13 +129,6 @@
     return actions;
   }
 
-  private Set<StreamUploadableAction> getUploadableActions() {
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    Set<StreamUploadableAction> actions = uploadableActionsSupplier.get();
-    tracker.stop("", "geUploadableActions", "actionCount", actions.size());
-    return actions;
-  }
-
   private Set<String> getPopulation() {
     ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
     Set<String> population = new HashSet<>();
@@ -146,21 +142,6 @@
     return population;
   }
 
-  private Set<String> getAccessibleActionProperties(Set<String> accessibleContent) {
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    Set<String> actionPropertiesKeys = new HashSet<>();
-    for (String accessibleContentId : accessibleContent) {
-      String actionPropertyKey = ACTION_PROPERTIES_PREFIX + accessibleContentId;
-      actionPropertiesKeys.add(actionPropertyKey);
-    }
-    tracker.stop(
-        "",
-        "getAccessibleActionProperties",
-        "accessibleActionPropertiesSize",
-        actionPropertiesKeys.size());
-    return actionPropertiesKeys;
-  }
-
   private Set<String> getAccessibleSemanticProperties(Set<String> accessibleContent) {
     ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
     Set<String> semanticPropertiesKeys = new HashSet<>();
@@ -202,19 +183,4 @@
         semanticPropertiesKeys.size());
     return semanticPropertiesKeys;
   }
-
-  private Set<String> getUploadableActionProperties(Set<StreamUploadableAction> actions) {
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    Set<String> actionPropertiesKeys = new HashSet<>();
-    for (StreamUploadableAction action : actions) {
-      String actionPropertyKey = ACTION_PROPERTIES_PREFIX + action.getFeatureContentId();
-      actionPropertiesKeys.add(actionPropertyKey);
-    }
-    tracker.stop(
-        "",
-        "getLocalActionActionProperties",
-        "actionActopmPropertiesSize",
-        actionPropertiesKeys.size());
-    return actionPropertiesKeys;
-  }
 }
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java b/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
index 80b70e4..2771e20 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
@@ -15,10 +15,8 @@
 package com.google.android.libraries.feed.feedstore.internal;
 
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
-import com.google.android.libraries.feed.api.internal.store.ActionPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.ContentMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation.ActionType;
@@ -36,7 +34,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -59,7 +56,6 @@
   private final Map<String, PayloadWithId> payloadWithIdMap = new HashMap<>();
   private final Map<String, StreamSharedState> sharedStateMap = new HashMap<>();
   private final Map<String, ByteString> semanticPropertiesMap = new HashMap<>();
-  private final Map<String, OpaqueActionData> actionPropertiesMap = new HashMap<>();
   private final Map<Integer, List<StreamLocalAction>> actionsMap = new HashMap<>();
   private final Map<String, Set<StreamUploadableAction>> uploadableActionsMap = new HashMap<>();
   private final Map<String, List<StreamStructure>> sessionsMap = new HashMap<>();
@@ -109,18 +105,6 @@
   }
 
   @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    List<ActionPropertiesWithId> actionPropertiesWithIds = new ArrayList<>(contentIds.size());
-    for (String contentId : contentIds) {
-      OpaqueActionData actionProperties = actionPropertiesMap.get(contentId);
-      if (actionProperties != null) {
-        actionPropertiesWithIds.add(new ActionPropertiesWithId(contentId, actionProperties));
-      }
-    }
-    return Result.success(actionPropertiesWithIds);
-  }
-
-  @Override
   public Result<List<SemanticPropertiesWithId>> getSemanticProperties(List<String> contentIds) {
     List<SemanticPropertiesWithId> semanticPropertiesWithIds = new ArrayList<>(contentIds.size());
     for (String contentId : contentIds) {
@@ -232,19 +216,6 @@
   }
 
   @Override
-  public ActionPropertiesMutation editActionProperties() {
-    return new FeedActionPropertiesMutation(this::commitActionPropertiesMutation);
-  }
-
-  private CommitResult commitActionPropertiesMutation(
-      Map<String, OpaqueActionData> actionPropertiesMap) {
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    this.actionPropertiesMap.putAll(actionPropertiesMap);
-    tracker.stop("", "commitActionPropertiesMutation", "mutations", actionPropertiesMap.size());
-    return CommitResult.SUCCESS;
-  }
-
-  @Override
   public UploadableActionMutation editUploadableActions() {
     return new FeedUploadableActionMutation(this::commitUploadableActionMutation);
   }
@@ -342,7 +313,6 @@
     payloadWithIdMap.clear();
     actionsMap.clear();
     semanticPropertiesMap.clear();
-    actionPropertiesMap.clear();
     sessionsMap.clear();
     sharedStateMap.clear();
     return true;
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedActionPropertiesMutation.java b/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedActionPropertiesMutation.java
deleted file mode 100644
index 6bcd772..0000000
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedActionPropertiesMutation.java
+++ /dev/null
@@ -1,43 +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.feedstore.internal;
-
-import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.android.libraries.feed.api.internal.store.ActionPropertiesMutation;
-import com.google.android.libraries.feed.common.functional.Committer;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
-import java.util.HashMap;
-import java.util.Map;
-
-/** Implementation of the {@link ActionPropertiesMutation}. */
-public final class FeedActionPropertiesMutation implements ActionPropertiesMutation {
-  private final Map<String, OpaqueActionData> actionPropertiesMap = new HashMap<>();
-  private final Committer<CommitResult, Map<String, OpaqueActionData>> committer;
-
-  FeedActionPropertiesMutation(Committer<CommitResult, Map<String, OpaqueActionData>> committer) {
-    this.committer = committer;
-  }
-
-  @Override
-  public ActionPropertiesMutation add(String contentId, OpaqueActionData actionData) {
-    actionPropertiesMap.put(contentId, actionData);
-    return this;
-  }
-
-  @Override
-  public CommitResult commit() {
-    return committer.commit(actionPropertiesMap);
-  }
-}
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedStoreConstants.java b/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedStoreConstants.java
index b4962fa..d5b37d3 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedStoreConstants.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedStoreConstants.java
@@ -34,7 +34,4 @@
 
   /** The name of the journal used to store dismiss actions */
   public static final String DISMISS_ACTION_JOURNAL = "action-dismiss";
-
-  /** Key used to prefix Feed action properties keys in {@link ContentStorage} */
-  public static final String ACTION_PROPERTIES_PREFIX = "ap::";
 }
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java b/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
index 5faa658..b167147 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
@@ -14,7 +14,6 @@
 
 package com.google.android.libraries.feed.feedstore.internal;
 
-import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.ACTION_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.DISMISS_ACTION_JOURNAL;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SEMANTIC_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SHARED_STATE_PREFIX;
@@ -28,11 +27,9 @@
 import com.google.android.libraries.feed.api.host.storage.JournalMutation;
 import com.google.android.libraries.feed.api.host.storage.JournalStorage;
 import com.google.android.libraries.feed.api.host.storage.JournalStorageDirect;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.ThreadUtils;
-import com.google.android.libraries.feed.api.internal.store.ActionPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.ContentMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation.ActionType;
@@ -59,7 +56,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -249,43 +245,6 @@
   }
 
   @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    threadUtils.checkNotMainThread();
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    List<ActionPropertiesWithId> actionPropertiesWithIds = new ArrayList<>(contentIds.size());
-    List<String> contentIdKeys = new ArrayList<>(contentIds.size());
-    for (String contentId : contentIds) {
-      contentIdKeys.add(ACTION_PROPERTIES_PREFIX + contentId);
-    }
-    Result<Map<String, byte[]>> mapResult = contentStorageDirect.get(contentIdKeys);
-
-    if (mapResult.isSuccessful()) {
-      for (Map.Entry<String, byte[]> entry : mapResult.getValue().entrySet()) {
-        String contentId = entry.getKey().replace(ACTION_PROPERTIES_PREFIX, "");
-        if (contentIds.contains(contentId)) {
-          try {
-            actionPropertiesWithIds.add(
-                new ActionPropertiesWithId(
-                    contentId, OpaqueActionData.parseFrom(entry.getValue())));
-          } catch (InvalidProtocolBufferException e) {
-            Logger.e(
-                TAG,
-                e,
-                "Error parsing OpaqueActionData for bytes: %s",
-                Base64.encodeToString(entry.getValue(), Base64.DEFAULT));
-          }
-        }
-      }
-    } else {
-      Logger.e(TAG, "Error fetching action properties for content ids %s", contentIds);
-      tracker.stop("getActionProperties failed", contentIds);
-    }
-
-    tracker.stop("task", "getActionProperties", "size", actionPropertiesWithIds.size());
-    return Result.success(actionPropertiesWithIds);
-  }
-
-  @Override
   public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
     threadUtils.checkNotMainThread();
     ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
@@ -394,12 +353,6 @@
   }
 
   @Override
-  public ActionPropertiesMutation editActionProperties() {
-    threadUtils.checkNotMainThread();
-    return new FeedActionPropertiesMutation(this::commitActionPropertiesMutation);
-  }
-
-  @Override
   public LocalActionMutation editLocalActions() {
     threadUtils.checkNotMainThread();
     return new FeedLocalActionMutation(this::commitLocalActionMutation);
@@ -427,24 +380,11 @@
             return new HashSet<>(dismissActionsResult.getValue());
           }
         };
-    Supplier<Set<StreamUploadableAction>> uploadableActionSupplier =
-        () -> {
-          Result<Set<StreamUploadableAction>> uploadableActionsResult = getAllUploadableActions();
-
-          if (!uploadableActionsResult.isSuccessful()) {
-            // TODO: clean up error condition
-            Logger.e(TAG, "Error retrieving uploadable actions for content garbage collection");
-            return Collections.emptySet();
-          } else {
-            return uploadableActionsResult.getValue();
-          }
-        };
 
     return new ContentGc(
             accessibleContent,
             reservedContentIds,
             dismissActionSupplier,
-            uploadableActionSupplier,
             contentStorageDirect,
             timingUtils,
             keepSharedStates)
@@ -496,20 +436,6 @@
     return commitResult;
   }
 
-  private CommitResult commitActionPropertiesMutation(
-      Map<String, OpaqueActionData> actionPropertiesMap) {
-    threadUtils.checkNotMainThread();
-    ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-    Builder mutationBuilder = new Builder();
-    for (Map.Entry<String, OpaqueActionData> entry : actionPropertiesMap.entrySet()) {
-      mutationBuilder.upsert(
-          ACTION_PROPERTIES_PREFIX + entry.getKey(), entry.getValue().toByteArray());
-    }
-    CommitResult commitResult = contentStorageDirect.commit(mutationBuilder.build());
-    tracker.stop("task", "commitActionPropertiesMutation", "mutations", actionPropertiesMap.size());
-    return commitResult;
-  }
-
   private Boolean commitSessionMutation(String sessionId, List<StreamStructure> streamStructures) {
     threadUtils.checkNotMainThread();
     ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractClearableFeedStoreTest.java b/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractClearableFeedStoreTest.java
index a95abe2..a027cd1 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractClearableFeedStoreTest.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractClearableFeedStoreTest.java
@@ -17,7 +17,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation.ActionType;
@@ -30,8 +29,6 @@
 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.StreamStructure;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -62,18 +59,6 @@
           .build();
   protected static final byte[] SEMANTIC_PROPERTIES = new byte[] {14, 23, 54, 7};
   protected static final byte[] SEMANTIC_PROPERTIES_2 = new byte[] {12, 24, 18, 9};
-  protected static final OpaqueActionData ACTION_PROPERTIES =
-      OpaqueActionData.newBuilder()
-          .setExtension(
-              OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-              OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID).build())
-          .build();
-  protected static final OpaqueActionData ACTION_PROPERTIES_2 =
-      OpaqueActionData.newBuilder()
-          .setExtension(
-              OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-              OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID_2).build())
-          .build();
 
   @Test
   public void clearAll() {
@@ -97,20 +82,6 @@
     assertThat(payloadsResult.isSuccessful()).isTrue();
     assertThat(payloadsResult.getValue()).hasSize(2);
 
-    // Action properties
-    commitResult =
-        store
-            .editActionProperties()
-            .add(CONTENT_ID, ACTION_PROPERTIES)
-            .add(CONTENT_ID_2, ACTION_PROPERTIES_2)
-            .commit();
-    assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
-
-    Result<List<ActionPropertiesWithId>> actionPropertiesResult =
-        store.getActionProperties(Arrays.asList(CONTENT_ID, CONTENT_ID_2));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    assertThat(actionPropertiesResult.getValue()).hasSize(2);
-
     // Semantic properties
     commitResult =
         store
@@ -189,11 +160,6 @@
     assertThat(semanticPropertiesResult.isSuccessful()).isTrue();
     assertThat(semanticPropertiesResult.getValue()).hasSize(0);
 
-    // Action properties (should not be cleared)
-    actionPropertiesResult = store.getActionProperties(Arrays.asList(CONTENT_ID, CONTENT_ID_2));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    assertThat(actionPropertiesResult.getValue()).isEmpty();
-
     // Shared state
     sharedStatesResult = store.getSharedStates();
     assertThat(sharedStatesResult.isSuccessful()).isTrue();
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java b/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
index 51db734..330c226 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
@@ -17,7 +17,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.android.libraries.feed.api.host.storage.CommitResult;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
@@ -40,8 +39,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure.Operation;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -278,57 +275,6 @@
   }
 
   @Test
-  public void editActionProperties() {
-    Store store = getStore(mainThreadRunner);
-    assertThat(store.editSemanticProperties()).isNotNull();
-  }
-
-  @Test
-  public void getActionProperties() {
-    OpaqueActionData actionData =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId("").build())
-            .build();
-    Store store = getStore(mainThreadRunner);
-    store.editActionProperties().add(PAYLOAD_CONTENT_ID, actionData).commit();
-    Result<List<ActionPropertiesWithId>> actionPropertiesResult =
-        store.getActionProperties(Collections.singletonList(PAYLOAD_CONTENT_ID));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    List<ActionPropertiesWithId> actionProperties = actionPropertiesResult.getValue();
-    assertThat(actionProperties).hasSize(1);
-    assertThat(actionProperties.get(0).contentId).isEqualTo(PAYLOAD_CONTENT_ID);
-  }
-
-  @Test
-  public void getActionProperties_requestDifferentKey() {
-    OpaqueActionData actionData =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId(PAYLOAD_CONTENT_ID).build())
-            .build();
-    Store store = getStore(mainThreadRunner);
-    store.editActionProperties().add(PAYLOAD_CONTENT_ID, actionData).commit();
-    Result<List<ActionPropertiesWithId>> actionPropertiesResult =
-        store.getActionProperties(Collections.singletonList(OPERATION_CONTENT_ID));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    List<ActionPropertiesWithId> actionProperties = actionPropertiesResult.getValue();
-    assertThat(actionProperties).isEmpty();
-  }
-
-  @Test
-  public void getActionProperties_doesNotExist() {
-    Store store = getStore(mainThreadRunner);
-    Result<List<ActionPropertiesWithId>> actionPropertiesResult =
-        store.getActionProperties(Collections.singletonList(PAYLOAD_CONTENT_ID));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    List<ActionPropertiesWithId> actionProperties = actionPropertiesResult.getValue();
-    assertThat(actionProperties).isEmpty();
-  }
-
-  @Test
   public void editSemanticProperties() {
     Store store = getStore(mainThreadRunner);
     assertThat(store.editSemanticProperties()).isNotNull();
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/testing/BUILD b/src/main/java/com/google/android/libraries/feed/feedstore/testing/BUILD
index 9014403..c20a3c3 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/testing/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/testing/BUILD
@@ -20,8 +20,6 @@
         "//src/main/java/com/google/android/libraries/feed/common/time/testing",
         "//src/main/java/com/google/android/libraries/feed/feedstore/internal",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
-        "//src/test/proto/search/now/wire/feed:feed_test_java_proto_lite",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_google_truth_truth",
         "@maven//:junit_junit",
diff --git a/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java b/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
index fbcd3df..906ec62 100644
--- a/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
+++ b/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
@@ -14,10 +14,8 @@
 
 package com.google.android.libraries.feed.feedstore.testing;
 
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
-import com.google.android.libraries.feed.api.internal.store.ActionPropertiesMutation;
 import com.google.android.libraries.feed.api.internal.store.ContentMutation;
 import com.google.android.libraries.feed.api.internal.store.LocalActionMutation;
 import com.google.android.libraries.feed.api.internal.store.SemanticPropertiesMutation;
@@ -68,11 +66,6 @@
   }
 
   @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    return store.getActionProperties(contentIds);
-  }
-
-  @Override
   public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
     return store.getAllDismissLocalActions();
   }
@@ -113,11 +106,6 @@
   }
 
   @Override
-  public ActionPropertiesMutation editActionProperties() {
-    return store.editActionProperties();
-  }
-
-  @Override
   public LocalActionMutation editLocalActions() {
     return store.editLocalActions();
   }
diff --git a/src/main/java/com/google/android/libraries/feed/testing/actionmanager/BUILD b/src/main/java/com/google/android/libraries/feed/testing/actionmanager/BUILD
index 1a5ebee..f1a32e1 100644
--- a/src/main/java/com/google/android/libraries/feed/testing/actionmanager/BUILD
+++ b/src/main/java/com/google/android/libraries/feed/testing/actionmanager/BUILD
@@ -10,6 +10,5 @@
         "//src/main/java/com/google/android/libraries/feed/api/internal/actionmanager",
         "//src/main/java/com/google/android/libraries/feed/api/internal/common",
         "//src/main/java/com/google/android/libraries/feed/common",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
     ],
 )
diff --git a/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java b/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
index 29c03e2..248b277 100644
--- a/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
+++ b/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
@@ -15,20 +15,15 @@
 package com.google.android.libraries.feed.testing.actionmanager;
 
 import com.google.android.libraries.feed.api.internal.actionmanager.ActionReader;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.DismissActionWithSemanticProperties;
 import com.google.android.libraries.feed.common.Result;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /** Fake implementation of {@link ActionReader}. */
 public final class FakeActionReader implements ActionReader {
   private final ArrayList<DismissActionWithSemanticProperties> dismissActions = new ArrayList<>();
-  private final Map<String, OpaqueActionData> actionProperties = new HashMap<>();
 
   @Override
   public Result<List<DismissActionWithSemanticProperties>>
@@ -36,28 +31,10 @@
     return Result.success(dismissActions);
   }
 
-  @Override
-  public Result<List<ActionPropertiesWithId>> getActionProperties(List<String> contentIds) {
-    ArrayList<ActionPropertiesWithId> result = new ArrayList<>();
-    for (String contentId : contentIds) {
-      OpaqueActionData data = actionProperties.get(contentId);
-      if (data != null) {
-        result.add(new ActionPropertiesWithId(contentId, data));
-      }
-    }
-    return Result.success(result);
-  }
-
   /** Adds a dismiss action with semantic properties. */
   public FakeActionReader addDismissActionsWithSemanticProperties(
       DismissActionWithSemanticProperties... dismissActionsToAdd) {
     Collections.addAll(dismissActions, dismissActionsToAdd);
     return this;
   }
-
-  /** Adds action properties for the {@code contentId}. */
-  public FakeActionReader addActionProperties(String contentId, OpaqueActionData data) {
-    actionProperties.put(contentId, data);
-    return this;
-  }
 }
diff --git a/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java b/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
index 6a4797f..3afc497 100644
--- a/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
+++ b/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
@@ -189,7 +189,6 @@
     contentIds.add(contentId);
     ArrayList<Object> result = new ArrayList<>();
     result.addAll(getPayloads(contentIds).getValue());
-    result.addAll(getActionProperties(contentIds).getValue());
     result.addAll(getSemanticProperties(contentIds).getValue());
     for (StreamUploadableAction action : getAllUploadableActions().getValue()) {
       if (action.getFeatureContentId().equals(contentId)) {
diff --git a/src/main/proto/com/google/android/libraries/feed/api/internal/proto/stream_data.proto b/src/main/proto/com/google/android/libraries/feed/api/internal/proto/stream_data.proto
index 9b9d6f5..bc03bdd 100644
--- a/src/main/proto/com/google/android/libraries/feed/api/internal/proto/stream_data.proto
+++ b/src/main/proto/com/google/android/libraries/feed/api/internal/proto/stream_data.proto
@@ -21,7 +21,6 @@
 import "src/main/proto/search/now/ui/stream/stream_structure.proto";
 import "src/main/proto/search/now/wire/feed/action_payload.proto";
 import "src/main/proto/search/now/wire/feed/consistency_token.proto";
-import "src/main/proto/search/now/wire/feed/opaque_action_data.proto";
 import "src/main/proto/search/now/wire/feed/piet_shared_state_item.proto";
 
 option java_package = "com.google.search.now.feed.client";
@@ -165,15 +164,11 @@
     // FeedStoreConstants.SEMANTIC_PROPERTIES_PREFIX) allowing prefix queries.
     bytes semantic_data = 7;
 
-    // The action data associated with a Feature.  These are stored as content
-    // with a prefix added by the Store (see
-    // FeedStoreConstants.ACTION_PROPERTIES_PREFIX) allowing prefix queries.
-    wire.feed.OpaqueActionData action_data = 8;
-
     // The consistency token used to ensure that we are recording actions to
     // the same server store.
     wire.feed.ConsistencyToken consistency_token = 9;
   }
+  reserved 8;
 }
 
 // Allow the payload to contain Legacy Stream content.
diff --git a/src/main/proto/search/now/wire/feed/action_properties.proto b/src/main/proto/search/now/wire/feed/action_properties.proto
deleted file mode 100644
index 464c1f6..0000000
--- a/src/main/proto/search/now/wire/feed/action_properties.proto
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2019 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.
-
-syntax = "proto2";
-
-package search.now.wire.feed;
-
-option optimize_for=LITE_RUNTIME;
-
-import "src/main/proto/search/now/wire/feed/opaque_action_data.proto";
-
-option java_package = "com.google.search.now.wire.feed";
-option java_outer_classname = "ActionPropertiesProto";
-
-// ActionProperties hold information that we want to attach to
-// actions when they are sent to the server. For example, an action might be
-// associated with a specific topic.
-message ActionProperties {
-  // This is kept opaque to Feed - we want to keep it and send it alongside
-  // content ids in requests
-  optional OpaqueActionData action_data = 1;
-}
diff --git a/src/main/proto/search/now/wire/feed/feed_action.proto b/src/main/proto/search/now/wire/feed/feed_action.proto
index 7fbe45d..406dbee 100644
--- a/src/main/proto/search/now/wire/feed/feed_action.proto
+++ b/src/main/proto/search/now/wire/feed/feed_action.proto
@@ -19,7 +19,6 @@
 option optimize_for=LITE_RUNTIME;
 
 import "src/main/proto/search/now/wire/feed/action_payload.proto";
-import "src/main/proto/search/now/wire/feed/action_properties.proto";
 import "src/main/proto/search/now/wire/feed/content_id.proto";
 
 option java_package = "com.google.search.now.wire.feed";
@@ -28,14 +27,12 @@
 message FeedAction {
   // The Id for the content that this action was triggered on.
   optional ContentId content_id = 1;
-  // Additional logging data that is roundtripped from the server
-  optional ActionProperties action_properties = 3;
   // Additional logging data that is on a per-action level
   optional ActionPayload action_payload = 4;
   // Client-generated data that pertains to the action.
   optional ClientData client_data = 5;
   // Next Id: 6
-  reserved 2;
+  reserved 2, 3;
 
   // The data the client provides to the server.
   message ClientData {
diff --git a/src/main/proto/search/now/wire/feed/opaque_action_data.proto b/src/main/proto/search/now/wire/feed/opaque_action_data.proto
deleted file mode 100644
index 651d483..0000000
--- a/src/main/proto/search/now/wire/feed/opaque_action_data.proto
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2019 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.
-
-syntax = "proto2";
-
-package search.now.wire.feed;
-
-option optimize_for=LITE_RUNTIME;
-
-option java_package = "com.google.search.now.wire.feed";
-option java_outer_classname = "OpaqueActionDataProto";
-
-// The data needed by the server to handle action recording. This information is
-// opaque to the client and will be the information that is roundtripped so the
-// server can properly handle the action. For the Not Interested In action, this
-// data will contain the ids needed to record that the user is not interested
-// in that particular topic or source.
-// NOTE: it is important to keep this to a bare minimum amount of data.
-message OpaqueActionData {
-  // Reserved fields for renderable unit extensions
-  // Please use CL numbers you own for extension numbers.
-  extensions 1 to 1;
-}
diff --git a/src/main/proto/search/now/wire/feed/payload_metadata.proto b/src/main/proto/search/now/wire/feed/payload_metadata.proto
index 1777f2d..587a4f9 100644
--- a/src/main/proto/search/now/wire/feed/payload_metadata.proto
+++ b/src/main/proto/search/now/wire/feed/payload_metadata.proto
@@ -18,7 +18,6 @@
 
 option optimize_for=LITE_RUNTIME;
 
-import "src/main/proto/search/now/wire/feed/action_properties.proto";
 import "src/main/proto/search/now/wire/feed/content_id.proto";
 import "src/main/proto/search/now/wire/feed/semantic_properties.proto";
 
@@ -33,6 +32,5 @@
   // Payload semantic properties
   optional SemanticProperties semantic_properties = 2;
 
-  // Data relevant for actions that can be taken on this content.
-  optional ActionProperties action_properties = 3;
+  reserved 3;
 }
diff --git a/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java b/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
index 187a19e..fe8c7e3 100644
--- a/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
@@ -32,7 +32,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import com.google.search.now.wire.feed.DataOperationProto.DataOperation;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import com.google.search.now.wire.feed.ResponseProto.Response;
 import java.nio.charset.Charset;
 import java.util.List;
@@ -150,21 +149,6 @@
   }
 
   @Test
-  public void testSimpleResponse_feature_actionProperties() {
-    ContentId contentId = ResponseBuilder.createFeatureContentId(13);
-    OpaqueActionData actionData = OpaqueActionData.getDefaultInstance();
-    Response response = new ResponseBuilder().addCardWithActionData(contentId, actionData).build();
-
-    Result<Model> results = protocolAdapter.createModel(response);
-    assertThat(results.isSuccessful()).isTrue();
-    // Note that 2 operations are created (the card and the action data). We want the latter.
-    assertThat(results.getValue().streamDataOperations).hasSize(2);
-    StreamDataOperation sdo = results.getValue().streamDataOperations.get(1);
-    assertThat(sdo.getStreamPayload().hasActionData()).isTrue();
-    assertThat(sdo.getStreamPayload().getActionData()).isEqualTo(actionData);
-  }
-
-  @Test
   public void testResponse_rootClusterCardContent() {
     ContentId rootId = ContentId.newBuilder().setId(1).build();
     ContentId clusterId = ContentId.newBuilder().setId(2).build();
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 96ab241..6eb3e31 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/BUILD
@@ -18,13 +18,11 @@
         "//src/main/java/com/google/android/libraries/feed/common/testing",
         "//src/main/java/com/google/android/libraries/feed/common/time/testing",
         "//src/main/java/com/google/android/libraries/feed/feedrequestmanager",
-        "//src/main/java/com/google/android/libraries/feed/testing/actionmanager",
         "//src/main/java/com/google/android/libraries/feed/testing/network",
         "//src/main/java/com/google/android/libraries/feed/testing/protocoladapter",
         "//src/main/java/com/google/android/libraries/feed/testing/store",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
-        "//src/test/proto/search/now/wire/feed:feed_test_java_proto_lite",
         "//third_party:robolectric",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_google_truth_truth",
@@ -104,7 +102,6 @@
     manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
     deps = [
         "//src/main/java/com/google/android/libraries/feed/feedrequestmanager",
-        "//src/main/java/com/google/android/libraries/feed/testing/actionmanager",
         "//src/main/java/com/google/android/libraries/feed/testing/protocoladapter",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManagerTest.java b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManagerTest.java
index 853b708..771a021 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManagerTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManagerTest.java
@@ -31,7 +31,6 @@
 import com.google.android.libraries.feed.common.protoextensions.FeedExtensionRegistry;
 import com.google.android.libraries.feed.common.testing.RequiredConsumer;
 import com.google.android.libraries.feed.common.time.testing.FakeClock;
-import com.google.android.libraries.feed.testing.actionmanager.FakeActionReader;
 import com.google.android.libraries.feed.testing.network.FakeNetworkClient;
 import com.google.android.libraries.feed.testing.protocoladapter.FakeProtocolAdapter;
 import com.google.android.libraries.feed.testing.store.FakeStore;
@@ -43,8 +42,6 @@
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
 import com.google.search.now.wire.feed.FeedActionResponseProto.FeedActionResponse;
 import com.google.search.now.wire.feed.FeedRequestProto.FeedRequest;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import com.google.search.now.wire.feed.ResponseProto.Response;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -88,7 +85,6 @@
   private final FakeClock fakeClock = new FakeClock();
 
   private ExtensionRegistryLite registry;
-  private FakeActionReader fakeActionReader;
   private FakeNetworkClient fakeNetworkClient;
   private FakeProtocolAdapter fakeProtocolAdapter;
   private FakeStore fakeStore;
@@ -102,7 +98,6 @@
     initMocks(this);
     registry = ExtensionRegistryLite.newInstance();
     registry.add(FeedRequest.feedRequest);
-    fakeActionReader = new FakeActionReader();
     fakeThreadUtils = FakeThreadUtils.withThreadChecks();
     fakeNetworkClient = new FakeNetworkClient(fakeThreadUtils);
     fakeTaskQueue = new FakeTaskQueue(fakeClock, fakeThreadUtils);
@@ -138,7 +133,6 @@
             .setTimestampSeconds(1L)
             .setFeatureContentId(CONTENT_ID)
             .build();
-    fakeActionReader.addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID));
     fakeStore.setStreamUploadableActions(action);
     fakeClock.set(5000L);
     fakeNetworkClient.addResponse(
@@ -164,7 +158,6 @@
             .setUploadAttempts(2)
             .setFeatureContentId(CONTENT_ID)
             .build();
-    fakeActionReader.addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID));
     fakeNetworkClient.addResponse(
         createHttpResponse(/* responseCode= */ 200, Response.getDefaultInstance()));
     requestManager.triggerUploadActions(
@@ -197,9 +190,6 @@
               assertThat(input.isSuccessful()).isTrue();
               assertThat(input.getValue().toByteArray()).isEqualTo(TOKEN_3.toByteArray());
             });
-    fakeActionReader
-        .addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID))
-        .addActionProperties(CONTENT_ID_2, createOpaqueActionData(CONTENT_ID_2));
     fakeNetworkClient
         .addResponse(createHttpResponse(/* responseCode= */ 200, RESPONSE_1))
         .addResponse(createHttpResponse(/* responseCode= */ 200, RESPONSE_2));
@@ -229,9 +219,6 @@
               fakeThreadUtils.checkNotMainThread();
               assertThat(input.isSuccessful()).isFalse();
             });
-    fakeActionReader
-        .addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID))
-        .addActionProperties(CONTENT_ID_2, createOpaqueActionData(CONTENT_ID_2));
     fakeNetworkClient.addResponse(createHttpResponse(/* responseCode= */ 500, RESPONSE_1));
     requestManager.triggerUploadActions(actionSet, TOKEN_1, consumer);
 
@@ -260,9 +247,6 @@
               assertThat(input.isSuccessful()).isTrue();
               assertThat(input.getValue().toByteArray()).isEqualTo(TOKEN_2.toByteArray());
             });
-    fakeActionReader
-        .addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID))
-        .addActionProperties(CONTENT_ID_2, createOpaqueActionData(CONTENT_ID_2));
     fakeNetworkClient
         .addResponse(createHttpResponse(/* responseCode= */ 200, RESPONSE_1))
         .addResponse(createHttpResponse(/* responseCode= */ 500, RESPONSE_2));
@@ -293,9 +277,6 @@
               assertThat(input.isSuccessful()).isTrue();
               assertThat(input.getValue().toByteArray()).isEqualTo(TOKEN_2.toByteArray());
             });
-    fakeActionReader
-        .addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID))
-        .addActionProperties(CONTENT_ID_2, createOpaqueActionData(CONTENT_ID_2));
     fakeNetworkClient.addResponse(createHttpResponse(/* responseCode= */ 200, RESPONSE_1));
     requestManager.triggerUploadActions(actionSet, TOKEN_1, consumer);
 
@@ -314,7 +295,6 @@
     StreamUploadableAction action =
         StreamUploadableAction.newBuilder().setFeatureContentId(CONTENT_ID).build();
     Set<StreamUploadableAction> actionSet = setOf(action);
-    fakeActionReader.addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID));
     fakeNetworkClient.addResponse(
         createHttpResponse(/* responseCode= */ 200, Response.getDefaultInstance()));
     requestManager.triggerUploadActions(actionSet, ConsistencyToken.getDefaultInstance(), consumer);
@@ -324,7 +304,7 @@
 
     ActionRequest request = getActionRequestFromHttpRequest(httpRequest);
     UploadableActionsRequestBuilder builder =
-        new UploadableActionsRequestBuilder(fakeActionReader, fakeProtocolAdapter);
+        new UploadableActionsRequestBuilder(fakeProtocolAdapter);
     ActionRequest expectedRequest =
         builder
             .setConsistencyToken(ConsistencyToken.getDefaultInstance())
@@ -344,7 +324,6 @@
   public void testTriggerUploadActions_defaultMethod() throws Exception {
     Set<StreamUploadableAction> actionSet =
         setOf(StreamUploadableAction.newBuilder().setFeatureContentId(CONTENT_ID).build());
-    fakeActionReader.addActionProperties(CONTENT_ID, createOpaqueActionData(CONTENT_ID));
     fakeNetworkClient.addResponse(
         createHttpResponse(/* responseCode= */ 200, Response.getDefaultInstance()));
     requestManager.triggerUploadActions(actionSet, ConsistencyToken.getDefaultInstance(), consumer);
@@ -353,7 +332,7 @@
 
     ActionRequest request = getActionRequestFromHttpRequestBody(httpRequest);
     UploadableActionsRequestBuilder builder =
-        new UploadableActionsRequestBuilder(fakeActionReader, fakeProtocolAdapter);
+        new UploadableActionsRequestBuilder(fakeProtocolAdapter);
     ActionRequest expectedRequest =
         builder
             .setConsistencyToken(ConsistencyToken.getDefaultInstance())
@@ -404,19 +383,10 @@
         new FeedExtensionRegistry(ArrayList::new),
         fakeTaskQueue,
         fakeThreadUtils,
-        fakeActionReader,
         fakeStore,
         fakeClock);
   }
 
-  private static OpaqueActionData createOpaqueActionData(String contentId) {
-    return OpaqueActionData.newBuilder()
-        .setExtension(
-            OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-            OpaqueActionDataForTest.newBuilder().setId(contentId).build())
-        .build();
-  }
-
   private static <T> Set<T> setOf(T... items) {
     Set<T> result = new HashSet<>();
     Collections.addAll(result, items);
diff --git a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilderTest.java b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilderTest.java
index 6affa74..d7cac77 100644
--- a/src/test/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilderTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilderTest.java
@@ -17,20 +17,16 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.MockitoAnnotations.initMocks;
 
-import com.google.android.libraries.feed.testing.actionmanager.FakeActionReader;
 import com.google.android.libraries.feed.testing.protocoladapter.FakeProtocolAdapter;
 import com.google.protobuf.ByteString;
 import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
 import com.google.search.now.wire.feed.ActionPayloadForTestProto.ActionPayloadForTest;
 import com.google.search.now.wire.feed.ActionPayloadProto.ActionPayload;
-import com.google.search.now.wire.feed.ActionPropertiesProto.ActionProperties;
 import com.google.search.now.wire.feed.ActionRequestProto.ActionRequest;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
 import com.google.search.now.wire.feed.FeedActionProto.FeedAction;
 import com.google.search.now.wire.feed.FeedActionRequestProto.FeedActionRequest;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.HashSet;
 import org.junit.Before;
 import org.junit.Test;
@@ -54,24 +50,14 @@
       ConsistencyToken.newBuilder().setToken(ByteString.copyFrom(new byte[] {0x1, 0xf})).build();
   private ActionRequest.Builder requestBuilder;
   private FeedActionRequest.Builder feedActionRequestBuilder;
-  private OpaqueActionData data;
   private FakeProtocolAdapter fakeProtocolAdapter;
-  private FakeActionReader fakeActionReader;
 
   @Before
   public void setUp() {
     initMocks(this);
     fakeProtocolAdapter = new FakeProtocolAdapter();
-    fakeActionReader = new FakeActionReader();
-    data =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID).build())
-            .build();
-    fakeActionReader.addActionProperties(CONTENT_ID, data);
     fakeProtocolAdapter.addContentId(CONTENT_ID, ContentId.getDefaultInstance());
-    builder = new UploadableActionsRequestBuilder(fakeActionReader, fakeProtocolAdapter);
+    builder = new UploadableActionsRequestBuilder(fakeProtocolAdapter);
     actionSet.add(
         StreamUploadableAction.newBuilder()
             .setFeatureContentId(CONTENT_ID)
@@ -87,13 +73,12 @@
   @Test
   public void testUploadableActionsRequest_noToken() throws Exception {
 
-    FeedAction.Builder feedAction =
+    FeedAction feedAction =
         FeedAction.newBuilder()
-            .setActionProperties(ActionProperties.newBuilder().setActionData(data).build());
-    feedAction.setContentId(ContentId.getDefaultInstance());
-    feedAction.setActionPayload(payload);
-
-    feedAction.setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build());
+            .setContentId(ContentId.getDefaultInstance())
+            .setActionPayload(payload)
+            .setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build())
+            .build();
     feedActionRequestBuilder.addFeedAction(feedAction);
     requestBuilder.setExtension(
         FeedActionRequest.feedActionRequest, feedActionRequestBuilder.build());
@@ -116,12 +101,12 @@
 
   @Test
   public void testUploadableActionsRequest() throws Exception {
-    FeedAction.Builder feedAction =
+    FeedAction feedAction =
         FeedAction.newBuilder()
-            .setActionProperties(ActionProperties.newBuilder().setActionData(data).build());
-    feedAction.setContentId(ContentId.getDefaultInstance());
-    feedAction.setActionPayload(payload);
-    feedAction.setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build());
+            .setContentId(ContentId.getDefaultInstance())
+            .setActionPayload(payload)
+            .setClientData(FeedAction.ClientData.newBuilder().setTimestampSeconds(TIME).build())
+            .build();
     feedActionRequestBuilder.addFeedAction(feedAction);
     feedActionRequestBuilder.setConsistencyToken(token);
     requestBuilder.setExtension(
diff --git a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/BUILD b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
index aba4e26..9b03cee 100644
--- a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/BUILD
@@ -36,7 +36,6 @@
         "//src/main/proto/com/google/android/libraries/feed/testing/proto:ui_refresh_reason_java_proto_lite",
         "//src/main/proto/search/now/ui/piet:piet_java_proto_lite",
         "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
-        "//src/test/proto/search/now/wire/feed:feed_test_java_proto_lite",
         "//third_party:robolectric",
         "@com_google_code_findbugs_jsr305//jar",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
diff --git a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImplTest.java b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImplTest.java
index 9e006a8..64e3458 100644
--- a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImplTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImplTest.java
@@ -29,7 +29,6 @@
 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;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.Model;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.testing.ContentIdGenerators;
@@ -78,8 +77,6 @@
 import com.google.search.now.ui.piet.PietProto.Template;
 import com.google.search.now.wire.feed.ConsistencyTokenProto.ConsistencyToken;
 import com.google.search.now.wire.feed.ContentIdProto.ContentId;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import com.google.search.now.wire.feed.PietSharedStateItemProto.PietSharedStateItem;
 import com.google.search.now.wire.feed.ResponseProto.Response;
 import java.nio.charset.Charset;
@@ -486,33 +483,6 @@
   }
 
   @Test
-  public void testEdit_actionProperties() {
-    FeedSessionManagerImpl sessionManager = getInitializedSessionManager();
-
-    OpaqueActionData actionData =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId("id").build())
-            .build();
-    StreamDataOperation streamDataOperation =
-        StreamDataOperation.newBuilder()
-            .setStreamPayload(StreamPayload.newBuilder().setActionData(actionData))
-            .setStreamStructure(
-                StreamStructure.newBuilder()
-                    .setContentId(rootContentId)
-                    .setOperation(Operation.UPDATE_OR_APPEND))
-            .build();
-
-    Consumer<Result<Model>> updateConsumer = sessionManager.getUpdateConsumer(EMPTY_MUTATION);
-    Result<Model> result = Result.success(Model.of(ImmutableList.of(streamDataOperation)));
-    updateConsumer.accept(result);
-
-    assertThat(fakeStore.getContentById(rootContentId))
-        .contains(new ActionPropertiesWithId(rootContentId, actionData));
-  }
-
-  @Test
   public void testEdit_semanticProperties() {
     FeedSessionManagerImpl sessionManager = getInitializedSessionManager();
 
diff --git a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/BUILD b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/BUILD
index b66b251..cbc7dda 100644
--- a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/BUILD
@@ -100,8 +100,6 @@
         "//src/main/java/com/google/android/libraries/feed/hostimpl/storage",
         "//src/main/java/com/google/android/libraries/feed/testing/host/logging",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
-        "//src/test/proto/search/now/wire/feed:feed_test_java_proto_lite",
         "//third_party:robolectric",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_google_guava_guava",
diff --git a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutationTest.java b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutationTest.java
index 8c4af39..b70a7ba 100644
--- a/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutationTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutationTest.java
@@ -30,7 +30,6 @@
 import com.google.android.libraries.feed.api.host.config.Configuration;
 import com.google.android.libraries.feed.api.host.scheduler.SchedulerApi;
 import com.google.android.libraries.feed.api.host.storage.ContentStorageDirect;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.Model;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
@@ -62,8 +61,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure.Operation;
 import com.google.search.now.feed.client.StreamDataProto.StreamToken;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
@@ -242,32 +239,6 @@
   }
 
   @Test
-  public void testActionData() {
-    List<String> contentIds = getContentIds(2);
-    OpaqueActionData data =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId("id").build())
-            .build();
-    List<Pair<StreamStructure, StreamPayload>> features =
-        getFeatures(contentIds, () -> StreamPayload.newBuilder().setActionData(data).build());
-    List<StreamDataOperation> dataOperations = new ArrayList<>();
-    for (Pair<StreamStructure, StreamPayload> feature : features) {
-      dataOperations.add(getStreamDataOperation(feature.first, feature.second));
-    }
-    MutationCommitter mutationCommitter = getMutationCommitter(EMPTY_CONTEXT);
-    mutationCommitter.accept(Result.success(Model.of(dataOperations)));
-
-    Result<List<ActionPropertiesWithId>> result = storeSpy.getActionProperties(contentIds);
-    assertThat(result.isSuccessful()).isTrue();
-    assertThat(result.getValue()).hasSize(contentIds.size());
-    for (ActionPropertiesWithId payload : result.getValue()) {
-      assertThat(contentIds).contains(payload.contentId);
-    }
-  }
-
-  @Test
   public void testValidDataOperation() {
     StreamDataOperation operation = StreamDataOperation.getDefaultInstance();
     assertThat(SessionManagerMutation.validDataOperation(operation)).isFalse();
diff --git a/src/test/java/com/google/android/libraries/feed/feedstore/internal/BUILD b/src/test/java/com/google/android/libraries/feed/feedstore/internal/BUILD
index cef1fbe..c174cb6 100644
--- a/src/test/java/com/google/android/libraries/feed/feedstore/internal/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/feedstore/internal/BUILD
@@ -84,8 +84,6 @@
         "//src/main/java/com/google/android/libraries/feed/feedstore/testing",
         "//src/main/java/com/google/android/libraries/feed/hostimpl/storage",
         "//src/main/proto/com/google/android/libraries/feed/api/internal/proto:client_feed_java_proto_lite",
-        "//src/main/proto/search/now/wire/feed:feed_java_proto_lite",
-        "//src/test/proto/search/now/wire/feed:feed_test_java_proto_lite",
         "//third_party:robolectric",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
         "@maven//:com_google_truth_truth",
diff --git a/src/test/java/com/google/android/libraries/feed/feedstore/internal/ContentGcTest.java b/src/test/java/com/google/android/libraries/feed/feedstore/internal/ContentGcTest.java
index f0a3949..5f76786 100644
--- a/src/test/java/com/google/android/libraries/feed/feedstore/internal/ContentGcTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedstore/internal/ContentGcTest.java
@@ -13,9 +13,9 @@
 // limitations under the License.
 package com.google.android.libraries.feed.feedstore.internal;
 
-import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.ACTION_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SEMANTIC_PROPERTIES_PREFIX;
 import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.SHARED_STATE_PREFIX;
+import static com.google.android.libraries.feed.feedstore.internal.FeedStoreConstants.UPLOADABLE_ACTION_PREFIX;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
@@ -32,7 +32,6 @@
 import com.google.android.libraries.feed.common.time.TimingUtils;
 import com.google.common.collect.ImmutableSet;
 import com.google.search.now.feed.client.StreamDataProto.StreamLocalAction;
-import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Before;
@@ -52,8 +51,7 @@
   private static final String CONTENT_ID_2 = "contentId2";
   private static final String SEMANTIC_PROPERTIES_1 = SEMANTIC_PROPERTIES_PREFIX + CONTENT_ID_1;
   private static final String SEMANTIC_PROPERTIES_2 = SEMANTIC_PROPERTIES_PREFIX + CONTENT_ID_2;
-  private static final String ACTION_PROPERTIES_1 = ACTION_PROPERTIES_PREFIX + CONTENT_ID_1;
-  private static final String ACTION_PROPERTIES_2 = ACTION_PROPERTIES_PREFIX + CONTENT_ID_2;
+  private static final String ACTION_1 = UPLOADABLE_ACTION_PREFIX + CONTENT_ID_1;
 
   private final TimingUtils timingUtils = new TimingUtils();
 
@@ -73,7 +71,6 @@
             ImmutableSet::of,
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -98,7 +95,6 @@
             () -> ImmutableSet.of(CONTENT_ID_1),
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -123,7 +119,6 @@
             ImmutableSet::of,
             ImmutableSet.of(CONTENT_ID_1),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -138,17 +133,15 @@
   }
 
   @Test
-  public void gc_actionProperties_noAction() {
+  public void gc_actionUploads_validAction() {
     List<String> contentKeys = new ArrayList<>();
-    contentKeys.add(ACTION_PROPERTIES_1);
-    contentKeys.add(ACTION_PROPERTIES_2);
+    contentKeys.add(ACTION_1);
     mockContentStorageWithContents(contentKeys);
     ContentGc contentGc =
         new ContentGc(
             ImmutableSet::of,
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -156,71 +149,12 @@
     ArgumentCaptor<ContentMutation> contentMutationCaptor =
         ArgumentCaptor.forClass(ContentMutation.class);
     verify(contentStorage).commit(contentMutationCaptor.capture());
-    List<ContentOperation> expectedOperations =
-        new Builder()
-            .delete(ACTION_PROPERTIES_1)
-            .delete(ACTION_PROPERTIES_2)
-            .build()
-            .getOperations();
+    List<ContentOperation> expectedOperations = new Builder().build().getOperations();
     List<ContentOperation> resultOperations = contentMutationCaptor.getValue().getOperations();
     assertListsContainSameElements(expectedOperations, resultOperations);
   }
 
-  @Test
-  public void gc_actionProperties_validAction() {
-    List<String> contentKeys = new ArrayList<>();
-    contentKeys.add(ACTION_PROPERTIES_1);
-    contentKeys.add(ACTION_PROPERTIES_2);
-    mockContentStorageWithContents(contentKeys);
-    ContentGc contentGc =
-        new ContentGc(
-            ImmutableSet::of,
-            ImmutableSet.of(),
-            ImmutableSet::of,
-            () ->
-                ImmutableSet.of(
-                    StreamUploadableAction.newBuilder()
-                        .setUploadAttempts(1)
-                        .setFeatureContentId(CONTENT_ID_1)
-                        .build()),
-            contentStorage,
-            timingUtils,
-            /* keepSharedStates= */ true);
-    contentGc.gc();
-    ArgumentCaptor<ContentMutation> contentMutationCaptor =
-        ArgumentCaptor.forClass(ContentMutation.class);
-    verify(contentStorage).commit(contentMutationCaptor.capture());
-    List<ContentOperation> expectedOperations =
-        new Builder().delete(ACTION_PROPERTIES_2).build().getOperations();
-    List<ContentOperation> resultOperations = contentMutationCaptor.getValue().getOperations();
-    assertListsContainSameElements(expectedOperations, resultOperations);
-  }
 
-  @Test
-  public void gc_actionProperties_accessibleContent() {
-    List<String> contentKeys = new ArrayList<>();
-    contentKeys.add(CONTENT_ID_1);
-    contentKeys.add(ACTION_PROPERTIES_1);
-    contentKeys.add(ACTION_PROPERTIES_2);
-    mockContentStorageWithContents(contentKeys);
-    ContentGc contentGc =
-        new ContentGc(
-            () -> ImmutableSet.of(CONTENT_ID_1),
-            ImmutableSet.of(),
-            ImmutableSet::of,
-            ImmutableSet::of,
-            contentStorage,
-            timingUtils,
-            /* keepSharedStates= */ true);
-    contentGc.gc();
-    ArgumentCaptor<ContentMutation> contentMutationCaptor =
-        ArgumentCaptor.forClass(ContentMutation.class);
-    verify(contentStorage).commit(contentMutationCaptor.capture());
-    List<ContentOperation> expectedOperations =
-        new Builder().delete(ACTION_PROPERTIES_2).build().getOperations();
-    List<ContentOperation> resultOperations = contentMutationCaptor.getValue().getOperations();
-    assertListsContainSameElements(expectedOperations, resultOperations);
-  }
 
   @Test
   public void gc_semanticProperties_noAction() {
@@ -233,7 +167,6 @@
             ImmutableSet::of,
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -267,7 +200,6 @@
                         .setAction(ActionType.DISMISS)
                         .setFeatureContentId(CONTENT_ID_1)
                         .build()),
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -293,7 +225,6 @@
             () -> ImmutableSet.of(CONTENT_ID_1),
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -318,7 +249,6 @@
             ImmutableSet::of,
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ true);
@@ -343,7 +273,6 @@
             ImmutableSet::of,
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ false);
@@ -372,7 +301,6 @@
             () -> ImmutableSet.of(CONTENT_ID_1),
             ImmutableSet.of(),
             ImmutableSet::of,
-            ImmutableSet::of,
             contentStorage,
             timingUtils,
             /* keepSharedStates= */ false);
diff --git a/src/test/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStoreTest.java b/src/test/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStoreTest.java
index 37c6c3c..969448e 100644
--- a/src/test/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStoreTest.java
+++ b/src/test/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStoreTest.java
@@ -26,7 +26,6 @@
 import com.google.android.libraries.feed.api.host.storage.ContentStorageDirect;
 import com.google.android.libraries.feed.api.host.storage.JournalMutation;
 import com.google.android.libraries.feed.api.host.storage.JournalStorageDirect;
-import com.google.android.libraries.feed.api.internal.common.ActionPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.PayloadWithId;
 import com.google.android.libraries.feed.api.internal.common.SemanticPropertiesWithId;
 import com.google.android.libraries.feed.api.internal.common.ThreadUtils;
@@ -46,8 +45,6 @@
 import com.google.search.now.feed.client.StreamDataProto.StreamSharedState;
 import com.google.search.now.feed.client.StreamDataProto.StreamStructure;
 import com.google.search.now.feed.client.StreamDataProto.StreamUploadableAction;
-import com.google.search.now.wire.feed.OpaqueActionDataForTestProto.OpaqueActionDataForTest;
-import com.google.search.now.wire.feed.OpaqueActionDataProto.OpaqueActionData;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -224,32 +221,6 @@
     assertThat(semanticPropertiesResult.isSuccessful()).isTrue();
     assertThat(semanticPropertiesResult.getValue()).hasSize(2);
 
-    // Action properties
-    OpaqueActionData data1 =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID).build())
-            .build();
-    OpaqueActionData data2 =
-        OpaqueActionData.newBuilder()
-            .setExtension(
-                OpaqueActionDataForTest.opaqueActionDataForTestExtension,
-                OpaqueActionDataForTest.newBuilder().setId(CONTENT_ID_2).build())
-            .build();
-    commitResult =
-        store.editActionProperties().add(CONTENT_ID, data1).add(CONTENT_ID_2, data2).commit();
-    assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
-
-    Result<List<ActionPropertiesWithId>> actionPropertiesResult =
-        store.getActionProperties(Arrays.asList(CONTENT_ID, CONTENT_ID_2));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    assertThat(actionPropertiesResult.getValue()).hasSize(2);
-    assertThat(actionPropertiesResult.getValue())
-        .containsExactly(
-            new ActionPropertiesWithId(CONTENT_ID, data1),
-            new ActionPropertiesWithId(CONTENT_ID_2, data2));
-
     // Shared State
     commitResult =
         store
@@ -334,11 +305,6 @@
             new SemanticPropertiesWithId(CONTENT_ID, SEMANTIC_PROPERTIES),
             new SemanticPropertiesWithId(CONTENT_ID_2, SEMANTIC_PROPERTIES_2));
 
-    // Action properties
-    actionPropertiesResult = store.getActionProperties(Arrays.asList(CONTENT_ID, CONTENT_ID_2));
-    assertThat(actionPropertiesResult.isSuccessful()).isTrue();
-    assertThat(actionPropertiesResult.getValue()).hasSize(0);
-
     // Shared state
     sharedStatesResult = store.getSharedStates();
     assertThat(sharedStatesResult.isSuccessful()).isTrue();
diff --git a/src/test/proto/search/now/wire/feed/opaque_action_data_for_test.proto b/src/test/proto/search/now/wire/feed/opaque_action_data_for_test.proto
deleted file mode 100644
index 49abb99..0000000
--- a/src/test/proto/search/now/wire/feed/opaque_action_data_for_test.proto
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2019 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.
-
-syntax = "proto2";
-
-package search.now.wire.feed;
-
-option optimize_for=LITE_RUNTIME;
-
-import "src/main/proto/search/now/wire/feed/opaque_action_data.proto";
-
-option java_package = "com.google.search.now.wire.feed";
-option java_outer_classname = "OpaqueActionDataForTestProto";
-
-// A proto that extends feed_action.OpaqueActionData and carries data associated
-// with the not interested in action.
-message OpaqueActionDataForTest {
-  // The mid that represents the topic of the story on the card
-  optional string id = 1;
-
-  extend search.now.wire.feed.OpaqueActionData {
-    optional OpaqueActionDataForTest opaque_action_data_for_test_extension = 1;
-  }
-}