diff --git a/core/java/android/credentials/ui/CreateCredentialProviderData.java b/core/java/android/credentials/ui/CreateCredentialProviderData.java
index 9cc9c72..98157d7 100644
--- a/core/java/android/credentials/ui/CreateCredentialProviderData.java
+++ b/core/java/android/credentials/ui/CreateCredentialProviderData.java
@@ -34,19 +34,15 @@
 public class CreateCredentialProviderData extends ProviderData implements Parcelable {
     @NonNull
     private final List<Entry> mSaveEntries;
-    @NonNull
-    private final List<Entry> mActionChips;
     private final boolean mIsDefaultProvider;
     @Nullable
     private final Entry mRemoteEntry;
 
     public CreateCredentialProviderData(
             @NonNull String providerFlattenedComponentName, @NonNull List<Entry> saveEntries,
-            @NonNull List<Entry> actionChips, boolean isDefaultProvider,
-            @Nullable Entry remoteEntry) {
+            boolean isDefaultProvider, @Nullable Entry remoteEntry) {
         super(providerFlattenedComponentName);
         mSaveEntries = saveEntries;
-        mActionChips = actionChips;
         mIsDefaultProvider = isDefaultProvider;
         mRemoteEntry = remoteEntry;
     }
@@ -56,11 +52,6 @@
         return mSaveEntries;
     }
 
-    @NonNull
-    public List<Entry> getActionChips() {
-        return mActionChips;
-    }
-
     public boolean isDefaultProvider() {
         return mIsDefaultProvider;
     }
@@ -78,11 +69,6 @@
         mSaveEntries = credentialEntries;
         AnnotationValidations.validate(NonNull.class, null, mSaveEntries);
 
-        List<Entry> actionChips  = new ArrayList<>();
-        in.readTypedList(actionChips, Entry.CREATOR);
-        mActionChips = actionChips;
-        AnnotationValidations.validate(NonNull.class, null, mActionChips);
-
         mIsDefaultProvider = in.readBoolean();
 
         Entry remoteEntry = in.readTypedObject(Entry.CREATOR);
@@ -93,7 +79,6 @@
     public void writeToParcel(@NonNull Parcel dest, int flags) {
         super.writeToParcel(dest, flags);
         dest.writeTypedList(mSaveEntries);
-        dest.writeTypedList(mActionChips);
         dest.writeBoolean(isDefaultProvider());
         dest.writeTypedObject(mRemoteEntry, flags);
     }
@@ -124,7 +109,6 @@
     public static class Builder {
         private @NonNull String mProviderFlattenedComponentName;
         private @NonNull List<Entry> mSaveEntries = new ArrayList<>();
-        private @NonNull List<Entry> mActionChips = new ArrayList<>();
         private boolean mIsDefaultProvider = false;
         private @Nullable Entry mRemoteEntry = null;
 
@@ -140,13 +124,6 @@
             return this;
         }
 
-        /** Sets the list of action chips to be displayed to the user. */
-        @NonNull
-        public Builder setActionChips(@NonNull List<Entry> actionChips) {
-            mActionChips = actionChips;
-            return this;
-        }
-
         /** Sets whether this provider is the user's selected default provider. */
         @NonNull
         public Builder setIsDefaultProvider(boolean isDefaultProvider) {
@@ -158,7 +135,7 @@
         @NonNull
         public CreateCredentialProviderData build() {
             return new CreateCredentialProviderData(mProviderFlattenedComponentName,
-                    mSaveEntries, mActionChips, mIsDefaultProvider, mRemoteEntry);
+                    mSaveEntries, mIsDefaultProvider, mRemoteEntry);
         }
     }
 }
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
index 3d1fc92..9e9d16f 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
@@ -170,15 +170,7 @@
               20, 7, 27, 11000),
           )
         )
-        .setActionChips(
-          listOf<Entry>(
-            newEntry("key2", "subkey-1", "Go to Settings",
-              20, 7, 27, 20000),
-            newEntry("key2", "subkey-2", "Switch Account",
-              20, 7, 27, 21000),
-          ),
-        )
-        .setIsDefaultProvider(false)
+        .setIsDefaultProvider(true)
         .build(),
       CreateCredentialProviderData
         .Builder("com.dashlane/com.dashlane.CredentialManagerService")
@@ -189,12 +181,8 @@
             newEntry("key1", "subkey-4", "elisa.work@dashlane.com",
               20, 7, 27, 31000),
           )
-        ).setActionChips(
-          listOf<Entry>(
-            newEntry("key2", "subkey-3", "Manage Accounts",
-              20, 7, 27, 32000),
-          ),
-        ).build(),
+        )
+        .build(),
     )
   }
 
