diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java
index 255f7a2..aa2f576 100644
--- a/src/com/android/settings/homepage/ContextualCardManager.java
+++ b/src/com/android/settings/homepage/ContextualCardManager.java
@@ -28,14 +28,14 @@
 /**
  * This is a centralized manager of multiple {@link ContextualCardController}.
  *
- * {@link ContextualCardManager} first loads data from {@link CardContentLoader} and gets back a list of
- * {@link ContextualCard}. All subclasses of {@link ContextualCardController} are loaded here, which
- * will then trigger the {@link ContextualCardController} to load its data and listen to
+ * {@link ContextualCardManager} first loads data from {@link CardContentLoader} and gets back a
+ * list of {@link ContextualCard}. All subclasses of {@link ContextualCardController} are loaded
+ * here, which will then trigger the {@link ContextualCardController} to load its data and listen to
  * corresponding changes. When every single {@link ContextualCardController} updates its data, the
  * data will be passed here, then going through some sorting mechanisms. The
- * {@link ContextualCardController} will end up building a list of {@link ContextualCard} for {@link
- * ContextualCardsAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page
- * refreshed.
+ * {@link ContextualCardController} will end up building a list of {@link ContextualCard} for
+ * {@link ContextualCardsAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to
+ * get the page refreshed.
  */
 public class ContextualCardManager implements CardContentLoader.CardContentLoaderListener,
         ContextualCardUpdateListener {
@@ -48,8 +48,8 @@
     private final Context mContext;
     private final ControllerRendererPool mControllerRendererPool;
     private final Lifecycle mLifecycle;
+    private final List<ContextualCard> mContextualCards;
 
-    private List<ContextualCard> mContextualCards;
     private ContextualCardUpdateListener mListener;
 
 
@@ -97,7 +97,7 @@
     }
 
     @Override
-    public void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList) {
+    public void onContextualCardUpdated(int cardType, List<ContextualCard> updateList) {
         //TODO(b/112245748): Should implement a DiffCallback.
         //Keep the old list for comparison.
         final List<ContextualCard> prevCards = mContextualCards;
@@ -115,13 +115,16 @@
         sortCards();
 
         if (mListener != null) {
-            mListener.onHomepageCardUpdated(ContextualCard.CardType.INVALID, mContextualCards);
+            mListener.onContextualCardUpdated(ContextualCard.CardType.INVALID, mContextualCards);
         }
     }
 
     @Override
     public void onFinishCardLoading(List<ContextualCard> contextualCards) {
-        mContextualCards = contextualCards;
+        mContextualCards.clear();
+        if (contextualCards != null) {
+            mContextualCards.addAll(contextualCards);
+        }
 
         //Force card sorting here in case CardControllers of custom view have nothing to update
         // for the first launch.
diff --git a/src/com/android/settings/homepage/ContextualCardUpdateListener.java b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
index 0b45426..d307a8f 100644
--- a/src/com/android/settings/homepage/ContextualCardUpdateListener.java
+++ b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
@@ -19,13 +19,13 @@
 import java.util.List;
 
 /**
- * When {@link ContextualCardController} detects changes, it will notify the listeners registered. In
- * our case, {@link ContextualCardManager} gets noticed.
+ * When {@link ContextualCardController} detects changes, it will notify the listeners registered.
+ * In our case, {@link ContextualCardManager} gets noticed.
  *
  * After the list of {@link ContextualCard} gets updated in{@link ContextualCardManager},
- * {@link ContextualCardManager} will notify the listeners registered, {@link ContextualCardsAdapter} in this
- * case.
+ * {@link ContextualCardManager} will notify the listeners registered, {@link
+ * ContextualCardsAdapter} in this case.
  */
 public interface ContextualCardUpdateListener {
-    void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList);
+    void onContextualCardUpdated(int cardType, List<ContextualCard> updateList);
 }
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/ContextualCardsAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java
index 254f4a4..e985343 100644
--- a/src/com/android/settings/homepage/ContextualCardsAdapter.java
+++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java
@@ -37,8 +37,7 @@
 
     private final Context mContext;
     private final ControllerRendererPool mControllerRendererPool;
-
-    private List<ContextualCard> mContextualCards;
+    private final List<ContextualCard> mContextualCards;
 
     public ContextualCardsAdapter(Context context, ContextualCardManager manager) {
         mContext = context;
@@ -102,13 +101,14 @@
     }
 
     @Override
-    public void onHomepageCardUpdated(int cardType, List<ContextualCard> contextualCards) {
+    public void onContextualCardUpdated(int cardType, List<ContextualCard> contextualCards) {
         //TODO(b/112245748): Should implement a DiffCallback so we can use notifyItemChanged()
         // instead.
         if (contextualCards == null) {
             mContextualCards.clear();
         } else {
-            mContextualCards = contextualCards;
+            mContextualCards.clear();
+            mContextualCards.addAll(contextualCards);
         }
         notifyDataSetChanged();
     }
diff --git a/src/com/android/settings/homepage/PersonalSettingsFragment.java b/src/com/android/settings/homepage/PersonalSettingsFragment.java
index 69af23b..2eb9663 100644
--- a/src/com/android/settings/homepage/PersonalSettingsFragment.java
+++ b/src/com/android/settings/homepage/PersonalSettingsFragment.java
@@ -24,7 +24,6 @@
 import android.view.ViewGroup;
 
 import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -50,11 +49,10 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        final View rootView = inflater.inflate(R.layout.settings_homepage,
-                container, false);
+        final View rootView = inflater.inflate(R.layout.settings_homepage, container, false);
         mCardsContainer = rootView.findViewById(R.id.card_container);
         mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT,
-                LinearLayoutManager.VERTICAL, false /* reverseLayout */);
+                GridLayoutManager.VERTICAL, false /* reverseLayout */);
         mCardsContainer.setLayoutManager(mLayoutManager);
         mContextualCardsAdapter = new ContextualCardsAdapter(getContext(), mContextualCardManager);
         mCardsContainer.setAdapter(mContextualCardsAdapter);
diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
index eab6099..6701cfd 100644
--- a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
+++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
@@ -58,7 +58,7 @@
 
     @Override
     public void onDataUpdated(List<ContextualCard> cardList) {
-        mListener.onHomepageCardUpdated(getCardType(), cardList);
+        mListener.onContextualCardUpdated(getCardType(), cardList);
     }
 
     @Override
