Rename a bunch of stuff.

For homepage cards, rename Homepage* to ContextualCard*.

Change-Id: I95740f15a1789683fa6c61f03ecf9bc47c367146
Fixes: 113966426
Test: robotests
diff --git a/src/com/android/settings/homepage/CardContentLoader.java b/src/com/android/settings/homepage/CardContentLoader.java
index 4e1e33e..47ba59a 100644
--- a/src/com/android/settings/homepage/CardContentLoader.java
+++ b/src/com/android/settings/homepage/CardContentLoader.java
@@ -32,7 +32,7 @@
     private CardContentLoaderListener mListener;
 
     public interface CardContentLoaderListener {
-        void onFinishCardLoading(List<HomepageCard> homepageCards);
+        void onFinishCardLoading(List<ContextualCard> contextualCards);
     }
 
     public CardContentLoader() {
@@ -42,20 +42,20 @@
         mListener = listener;
     }
 
-    private static class CardLoader extends AsyncLoaderCompat<List<HomepageCard>> {
+    private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> {
 
         public CardLoader(Context context) {
             super(context);
         }
 
         @Override
-        protected void onDiscardResult(List<HomepageCard> result) {
+        protected void onDiscardResult(List<ContextualCard> result) {
 
         }
 
         @Nullable
         @Override
-        public List<HomepageCard> loadInBackground() {
+        public List<ContextualCard> loadInBackground() {
             return null;
         }
     }
diff --git a/src/com/android/settings/homepage/HomepageCard.java b/src/com/android/settings/homepage/ContextualCard.java
similarity index 95%
rename from src/com/android/settings/homepage/HomepageCard.java
rename to src/com/android/settings/homepage/ContextualCard.java
index 1469ff1..f5083d8 100644
--- a/src/com/android/settings/homepage/HomepageCard.java
+++ b/src/com/android/settings/homepage/ContextualCard.java
@@ -25,12 +25,12 @@
 import java.lang.annotation.RetentionPolicy;
 
 /**
- * Data class representing a {@link HomepageCard}.
+ * Data class representing a {@link ContextualCard}.
  */
-public class HomepageCard {
+public class ContextualCard {
 
     /**
-     * Flags indicating the type of the HomepageCard.
+     * Flags indicating the type of the ContextualCard.
      */
     @IntDef({CardType.INVALID, CardType.SLICE, CardType.SUGGESTION, CardType.CONDITIONAL})
     @Retention(RetentionPolicy.SOURCE)
@@ -137,7 +137,7 @@
         return mIsHalfWidth;
     }
 
-    public HomepageCard(Builder builder) {
+    public ContextualCard(Builder builder) {
         mName = builder.mName;
         mCardType = builder.mCardType;
         mRankingScore = builder.mRankingScore;
@@ -171,10 +171,10 @@
         if (this == obj) {
             return true;
         }
-        if (!(obj instanceof HomepageCard)) {
+        if (!(obj instanceof ContextualCard)) {
             return false;
         }
-        final HomepageCard that = (HomepageCard) obj;
+        final ContextualCard that = (ContextualCard) obj;
 
         return TextUtils.equals(mName, that.mName);
     }
@@ -289,8 +289,8 @@
             return this;
         }
 
-        public HomepageCard build() {
-            return new HomepageCard(this);
+        public ContextualCard build() {
+            return new ContextualCard(this);
         }
     }
 }
diff --git a/src/com/android/settings/homepage/HomepageCardController.java b/src/com/android/settings/homepage/ContextualCardController.java
similarity index 68%
rename from src/com/android/settings/homepage/HomepageCardController.java
rename to src/com/android/settings/homepage/ContextualCardController.java
index a7d89af..921d72b 100644
--- a/src/com/android/settings/homepage/HomepageCardController.java
+++ b/src/com/android/settings/homepage/ContextualCardController.java
@@ -19,22 +19,22 @@
 import java.util.List;
 
 /**
- * Data controller for {@link HomepageCard}.
+ * Data controller for {@link ContextualCard}.
  */
-public interface HomepageCardController {
+public interface ContextualCardController {
 
-    @HomepageCard.CardType
+    @ContextualCard.CardType
     int getCardType();
 
     /**
-     * When data is updated or changed, the new data should be passed to HomepageManager for list
+     * When data is updated or changed, the new data should be passed to ContextualCardManager for list
      * updating.
      */
-    void onDataUpdated(List<HomepageCard> cardList);
+    void onDataUpdated(List<ContextualCard> cardList);
 
-    void onPrimaryClick(HomepageCard card);
+    void onPrimaryClick(ContextualCard card);
 
-    void onActionClick(HomepageCard card);
+    void onActionClick(ContextualCard card);
 
-    void setHomepageCardUpdateListener(HomepageCardUpdateListener listener);
+    void setCardUpdateListener(ContextualCardUpdateListener listener);
 }
diff --git a/src/com/android/settings/homepage/ContextualCardLookupTable.java b/src/com/android/settings/homepage/ContextualCardLookupTable.java
new file mode 100644
index 0000000..e70b700
--- /dev/null
+++ b/src/com/android/settings/homepage/ContextualCardLookupTable.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.android.settings.homepage;
+
+import com.android.settings.homepage.ContextualCard.CardType;
+import com.android.settings.homepage.conditional.ConditionContextualCardController;
+import com.android.settings.homepage.conditional.ConditionContextualCardRenderer;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+public class ContextualCardLookupTable {
+
+    static class ControllerRendererMapping implements Comparable<ControllerRendererMapping> {
+        @CardType
+        private final int mCardType;
+        private final Class<? extends ContextualCardController> mControllerClass;
+        private final Class<? extends ContextualCardRenderer> mRendererClass;
+
+        private ControllerRendererMapping(@CardType int cardType,
+                Class<? extends ContextualCardController> controllerClass,
+                Class<? extends ContextualCardRenderer> rendererClass) {
+            mCardType = cardType;
+            mControllerClass = controllerClass;
+            mRendererClass = rendererClass;
+        }
+
+        @Override
+        public int compareTo(ControllerRendererMapping other) {
+            return Integer.compare(this.mCardType, other.mCardType);
+        }
+    }
+
+    private static final Set<ControllerRendererMapping> LOOKUP_TABLE =
+            new TreeSet<ControllerRendererMapping>() {{
+                add(new ControllerRendererMapping(CardType.CONDITIONAL,
+                        ConditionContextualCardController.class,
+                        ConditionContextualCardRenderer.class));
+            }};
+
+    public static Class<? extends ContextualCardController> getCardControllerClass(
+            @CardType int cardType) {
+        for (ControllerRendererMapping mapping : LOOKUP_TABLE) {
+            if (mapping.mCardType == cardType) {
+                return mapping.mControllerClass;
+            }
+        }
+        return null;
+    }
+
+    //TODO(b/112578070): Implement multi renderer cases.
+    public static Class<? extends ContextualCardRenderer> getCardRendererClasses(
+            @CardType int cardType) {
+        for (ControllerRendererMapping mapping : LOOKUP_TABLE) {
+            if (mapping.mCardType == cardType) {
+                return mapping.mRendererClass;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java
new file mode 100644
index 0000000..255f7a2
--- /dev/null
+++ b/src/com/android/settings/homepage/ContextualCardManager.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.android.settings.homepage;
+
+import android.content.Context;
+import android.widget.BaseAdapter;
+
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 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
+ * 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.
+ */
+public class ContextualCardManager implements CardContentLoader.CardContentLoaderListener,
+        ContextualCardUpdateListener {
+
+    private static final String TAG = "ContextualCardManager";
+    //The list for Settings Custom Card
+    @ContextualCard.CardType
+    private static final int[] SETTINGS_CARDS = {ContextualCard.CardType.CONDITIONAL};
+
+    private final Context mContext;
+    private final ControllerRendererPool mControllerRendererPool;
+    private final Lifecycle mLifecycle;
+
+    private List<ContextualCard> mContextualCards;
+    private ContextualCardUpdateListener mListener;
+
+
+    public ContextualCardManager(Context context, Lifecycle lifecycle) {
+        mContext = context;
+        mLifecycle = lifecycle;
+        mContextualCards = new ArrayList<>();
+        mControllerRendererPool = new ControllerRendererPool();
+    }
+
+    void startCardContentLoading() {
+        final CardContentLoader cardContentLoader = new CardContentLoader();
+        cardContentLoader.setListener(this);
+    }
+
+    private void loadCardControllers() {
+        if (mContextualCards != null) {
+            for (ContextualCard card : mContextualCards) {
+                setupController(card.getCardType());
+            }
+        }
+
+        //for data provided by Settings
+        for (int cardType : SETTINGS_CARDS) {
+            setupController(cardType);
+        }
+    }
+
+    private void setupController(int cardType) {
+        final ContextualCardController controller = mControllerRendererPool.getController(mContext,
+                cardType);
+        if (controller != null) {
+            controller.setCardUpdateListener(this);
+            if (controller instanceof LifecycleObserver) {
+                if (mLifecycle != null) {
+                    mLifecycle.addObserver((LifecycleObserver) controller);
+                }
+            }
+        }
+    }
+
+    //TODO(b/111822376): implement sorting mechanism.
+    private void sortCards() {
+        //take mContextualCards as the source and do the ranking based on the rule.
+    }
+
+    @Override
+    public void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList) {
+        //TODO(b/112245748): Should implement a DiffCallback.
+        //Keep the old list for comparison.
+        final List<ContextualCard> prevCards = mContextualCards;
+
+        //Remove the existing data that matches the certain cardType so as to insert the new data.
+        for (int i = mContextualCards.size() - 1; i >= 0; i--) {
+            if (mContextualCards.get(i).getCardType() == cardType) {
+                mContextualCards.remove(i);
+            }
+        }
+
+        //Append the new data
+        mContextualCards.addAll(updateList);
+
+        sortCards();
+
+        if (mListener != null) {
+            mListener.onHomepageCardUpdated(ContextualCard.CardType.INVALID, mContextualCards);
+        }
+    }
+
+    @Override
+    public void onFinishCardLoading(List<ContextualCard> contextualCards) {
+        mContextualCards = contextualCards;
+
+        //Force card sorting here in case CardControllers of custom view have nothing to update
+        // for the first launch.
+        sortCards();
+
+        loadCardControllers();
+    }
+
+    void setListener(ContextualCardUpdateListener listener) {
+        mListener = listener;
+    }
+
+    public ControllerRendererPool getControllerRendererPool() {
+        return mControllerRendererPool;
+    }
+}
diff --git a/src/com/android/settings/homepage/HomepageCardRenderer.java b/src/com/android/settings/homepage/ContextualCardRenderer.java
similarity index 76%
rename from src/com/android/settings/homepage/HomepageCardRenderer.java
rename to src/com/android/settings/homepage/ContextualCardRenderer.java
index ffa54e3..94fdb43 100644
--- a/src/com/android/settings/homepage/HomepageCardRenderer.java
+++ b/src/com/android/settings/homepage/ContextualCardRenderer.java
@@ -21,9 +21,9 @@
 import androidx.recyclerview.widget.RecyclerView;
 
 /**
- * UI renderer for {@link HomepageCard}.
+ * UI renderer for {@link ContextualCard}.
  */
-public interface HomepageCardRenderer {
+public interface ContextualCardRenderer {
 
     /**
      * The layout type of the controller.
@@ -31,16 +31,16 @@
     int getViewType();
 
     /**
-     * When {@link HomepageAdapter} calls {@link HomepageAdapter#onCreateViewHolder(ViewGroup,
+     * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onCreateViewHolder(ViewGroup,
      * int)}, this method will be called to retrieve the corresponding
      * {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}.
      */
     RecyclerView.ViewHolder createViewHolder(View view);
 
     /**
-     * When {@link HomepageAdapter} calls {@link HomepageAdapter#onBindViewHolder(RecyclerView
+     * When {@link ContextualCardsAdapter} calls {@link ContextualCardsAdapter#onBindViewHolder(RecyclerView
      * .ViewHolder, int)}, this method will be called to bind data to the
      * {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}.
      */
-    void bindView(RecyclerView.ViewHolder holder, HomepageCard card);
+    void bindView(RecyclerView.ViewHolder holder, ContextualCard card);
 }
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/ContextualCardUpdateListener.java b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
new file mode 100644
index 0000000..0b45426
--- /dev/null
+++ b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.android.settings.homepage;
+
+import java.util.List;
+
+/**
+ * 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.
+ */
+public interface ContextualCardUpdateListener {
+    void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList);
+}
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/HomepageAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java
similarity index 72%
rename from src/com/android/settings/homepage/HomepageAdapter.java
rename to src/com/android/settings/homepage/ContextualCardsAdapter.java
index bd37601..254f4a4 100644
--- a/src/com/android/settings/homepage/HomepageAdapter.java
+++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java
@@ -27,39 +27,39 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class HomepageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
-        HomepageCardUpdateListener {
+public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements
+        ContextualCardUpdateListener {
     static final int SPAN_COUNT = 2;
 
-    private static final String TAG = "HomepageAdapter";
+    private static final String TAG = "ContextualCardsAdapter";
     private static final int HALF_WIDTH = 1;
     private static final int FULL_WIDTH = 2;
 
     private final Context mContext;
     private final ControllerRendererPool mControllerRendererPool;
 
-    private List<HomepageCard> mHomepageCards;
+    private List<ContextualCard> mContextualCards;
 
-    public HomepageAdapter(Context context, HomepageManager manager) {
+    public ContextualCardsAdapter(Context context, ContextualCardManager manager) {
         mContext = context;
-        mHomepageCards = new ArrayList<>();
+        mContextualCards = new ArrayList<>();
         mControllerRendererPool = manager.getControllerRendererPool();
         setHasStableIds(true);
     }
 
     @Override
     public long getItemId(int position) {
-        return mHomepageCards.get(position).hashCode();
+        return mContextualCards.get(position).hashCode();
     }
 
     @Override
     public int getItemViewType(int position) {
-        return mHomepageCards.get(position).getCardType();
+        return mContextualCards.get(position).getCardType();
     }
 
     @Override
     public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int cardType) {
-        final HomepageCardRenderer renderer = mControllerRendererPool.getRenderer(mContext,
+        final ContextualCardRenderer renderer = mControllerRendererPool.getRenderer(mContext,
                 cardType);
         final int viewType = renderer.getViewType();
         final View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
@@ -69,16 +69,16 @@
 
     @Override
     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
-        final int cardType = mHomepageCards.get(position).getCardType();
-        final HomepageCardRenderer renderer = mControllerRendererPool.getRenderer(mContext,
+        final int cardType = mContextualCards.get(position).getCardType();
+        final ContextualCardRenderer renderer = mControllerRendererPool.getRenderer(mContext,
                 cardType);
 
-        renderer.bindView(holder, mHomepageCards.get(position));
+        renderer.bindView(holder, mContextualCards.get(position));
     }
 
     @Override
     public int getItemCount() {
-        return mHomepageCards.size();
+        return mContextualCards.size();
     }
 
     @Override
@@ -90,7 +90,7 @@
             gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                 @Override
                 public int getSpanSize(int position) {
-                    final HomepageCard card = mHomepageCards.get(position);
+                    final ContextualCard card = mContextualCards.get(position);
                     //TODO(b/114009676): may use another field to make decision. still under review.
                     if (card.isHalfWidth()) {
                         return HALF_WIDTH;
@@ -102,13 +102,13 @@
     }
 
     @Override
-    public void onHomepageCardUpdated(int cardType, List<HomepageCard> homepageCards) {
+    public void onHomepageCardUpdated(int cardType, List<ContextualCard> contextualCards) {
         //TODO(b/112245748): Should implement a DiffCallback so we can use notifyItemChanged()
         // instead.
-        if (homepageCards == null) {
-            mHomepageCards.clear();
+        if (contextualCards == null) {
+            mContextualCards.clear();
         } else {
-            mHomepageCards = homepageCards;
+            mContextualCards = contextualCards;
         }
         notifyDataSetChanged();
     }
diff --git a/src/com/android/settings/homepage/ControllerRendererPool.java b/src/com/android/settings/homepage/ControllerRendererPool.java
index ebd63d4..1e4b37c 100644
--- a/src/com/android/settings/homepage/ControllerRendererPool.java
+++ b/src/com/android/settings/homepage/ControllerRendererPool.java
@@ -21,77 +21,77 @@
 
 import androidx.collection.ArraySet;
 
-import com.android.settings.homepage.conditional.ConditionHomepageCardController;
-import com.android.settings.homepage.conditional.ConditionHomepageCardRenderer;
+import com.android.settings.homepage.conditional.ConditionContextualCardController;
+import com.android.settings.homepage.conditional.ConditionContextualCardRenderer;
 
 import java.util.Set;
 
 /**
- * This is a fragment scoped singleton holding a set of {@link HomepageCardController} and
- * {@link HomepageCardRenderer}.
+ * This is a fragment scoped singleton holding a set of {@link ContextualCardController} and
+ * {@link ContextualCardRenderer}.
  */
 public class ControllerRendererPool {
 
     private static final String TAG = "ControllerRendererPool";
 
-    private final Set<HomepageCardController> mControllers;
-    private final Set<HomepageCardRenderer> mRenderers;
+    private final Set<ContextualCardController> mControllers;
+    private final Set<ContextualCardRenderer> mRenderers;
 
     public ControllerRendererPool() {
         mControllers = new ArraySet<>();
         mRenderers = new ArraySet<>();
     }
 
-    public <T extends HomepageCardController> T getController(Context context,
-            @HomepageCard.CardType int cardType) {
-        final Class<? extends HomepageCardController> clz =
-                HomepageCardLookupTable.getCardControllerClass(cardType);
-        for (HomepageCardController controller : mControllers) {
+    public <T extends ContextualCardController> T getController(Context context,
+            @ContextualCard.CardType int cardType) {
+        final Class<? extends ContextualCardController> clz =
+                ContextualCardLookupTable.getCardControllerClass(cardType);
+        for (ContextualCardController controller : mControllers) {
             if (controller.getClass() == clz) {
                 Log.d(TAG, "Controller is already there.");
                 return (T) controller;
             }
         }
 
-        final HomepageCardController controller = createCardController(context, clz);
+        final ContextualCardController controller = createCardController(context, clz);
         if (controller != null) {
             mControllers.add(controller);
         }
         return (T) controller;
     }
 
-    public Set<HomepageCardController> getControllers() {
+    public Set<ContextualCardController> getControllers() {
         return mControllers;
     }
 
-    public HomepageCardRenderer getRenderer(Context context, @HomepageCard.CardType int cardType) {
-        final Class<? extends HomepageCardRenderer> clz =
-                HomepageCardLookupTable.getCardRendererClasses(cardType);
-        for (HomepageCardRenderer renderer : mRenderers) {
+    public ContextualCardRenderer getRenderer(Context context, @ContextualCard.CardType int cardType) {
+        final Class<? extends ContextualCardRenderer> clz =
+                ContextualCardLookupTable.getCardRendererClasses(cardType);
+        for (ContextualCardRenderer renderer : mRenderers) {
             if (renderer.getClass() == clz) {
                 Log.d(TAG, "Renderer is already there.");
                 return renderer;
             }
         }
 
-        final HomepageCardRenderer renderer = createCardRenderer(context, clz);
+        final ContextualCardRenderer renderer = createCardRenderer(context, clz);
         if (renderer != null) {
             mRenderers.add(renderer);
         }
         return renderer;
     }
 
-    private HomepageCardController createCardController(Context context,
-            Class<? extends HomepageCardController> clz) {
-        if (ConditionHomepageCardController.class == clz) {
-            return new ConditionHomepageCardController(context);
+    private ContextualCardController createCardController(Context context,
+            Class<? extends ContextualCardController> clz) {
+        if (ConditionContextualCardController.class == clz) {
+            return new ConditionContextualCardController(context);
         }
         return null;
     }
 
-    private HomepageCardRenderer createCardRenderer(Context context, Class<?> clz) {
-        if (ConditionHomepageCardRenderer.class == clz) {
-            return new ConditionHomepageCardRenderer(context, this /*controllerRendererPool*/);
+    private ContextualCardRenderer createCardRenderer(Context context, Class<?> clz) {
+        if (ConditionContextualCardRenderer.class == clz) {
+            return new ConditionContextualCardRenderer(context, this /*controllerRendererPool*/);
         }
         return null;
     }
diff --git a/src/com/android/settings/homepage/HomepageCardLookupTable.java b/src/com/android/settings/homepage/HomepageCardLookupTable.java
deleted file mode 100644
index 8d8e52b..0000000
--- a/src/com/android/settings/homepage/HomepageCardLookupTable.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * 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.android.settings.homepage;
-
-import com.android.settings.homepage.HomepageCard.CardType;
-import com.android.settings.homepage.conditional.ConditionHomepageCardController;
-import com.android.settings.homepage.conditional.ConditionHomepageCardRenderer;
-
-import java.util.Set;
-import java.util.TreeSet;
-
-public class HomepageCardLookupTable {
-
-    static class HomepageMapping implements Comparable<HomepageMapping> {
-        @CardType
-        private final int mCardType;
-        private final Class<? extends HomepageCardController> mControllerClass;
-        private final Class<? extends HomepageCardRenderer> mRendererClass;
-
-        private HomepageMapping(@CardType int cardType,
-                Class<? extends HomepageCardController> controllerClass,
-                Class<? extends HomepageCardRenderer> rendererClass) {
-            mCardType = cardType;
-            mControllerClass = controllerClass;
-            mRendererClass = rendererClass;
-        }
-
-        @Override
-        public int compareTo(HomepageMapping other) {
-            return Integer.compare(this.mCardType, other.mCardType);
-        }
-    }
-
-    private static final Set<HomepageMapping> LOOKUP_TABLE = new TreeSet<HomepageMapping>() {{
-            add(new HomepageMapping(CardType.CONDITIONAL, ConditionHomepageCardController.class,
-                    ConditionHomepageCardRenderer.class));
-    }};
-
-    public static Class<? extends HomepageCardController> getCardControllerClass(
-            @CardType int cardType) {
-        for (HomepageMapping mapping : LOOKUP_TABLE) {
-            if (mapping.mCardType == cardType) {
-                return mapping.mControllerClass;
-            }
-        }
-        return null;
-    }
-
-    //TODO(b/112578070): Implement multi renderer cases.
-    public static Class<? extends HomepageCardRenderer> getCardRendererClasses(
-            @CardType int cardType) {
-        for (HomepageMapping mapping : LOOKUP_TABLE) {
-            if (mapping.mCardType == cardType) {
-                return mapping.mRendererClass;
-            }
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/settings/homepage/HomepageCardUpdateListener.java b/src/com/android/settings/homepage/HomepageCardUpdateListener.java
deleted file mode 100644
index 35bc3a3..0000000
--- a/src/com/android/settings/homepage/HomepageCardUpdateListener.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * 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.android.settings.homepage;
-
-import java.util.List;
-
-/**
- * When {@link HomepageCardController} detects changes, it will notify the listeners registered. In
- * our case, {@link HomepageManager} gets noticed.
- *
- * After the list of {@link HomepageCard} gets updated in{@link HomepageManager},
- * {@link HomepageManager} will notify the listeners registered, {@link HomepageAdapter} in this
- * case.
- */
-public interface HomepageCardUpdateListener {
-    void onHomepageCardUpdated(int cardType, List<HomepageCard> updateList);
-}
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/HomepageManager.java b/src/com/android/settings/homepage/HomepageManager.java
deleted file mode 100644
index 61d7ce7..0000000
--- a/src/com/android/settings/homepage/HomepageManager.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * 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.android.settings.homepage;
-
-import android.content.Context;
-import android.widget.BaseAdapter;
-
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This is a centralized manager of multiple {@link HomepageCardController}.
- *
- * {@link HomepageManager} first loads data from {@link CardContentLoader} and gets back a list of
- * {@link HomepageCard}. All subclasses of {@link HomepageCardController} are loaded here, which
- * will then trigger the {@link HomepageCardController} to load its data and listen to
- * corresponding changes. When every single {@link HomepageCardController} updates its data, the
- * data will be passed here, then going through some sorting mechanisms. The
- * {@link HomepageCardController} will end up building a list of {@link HomepageCard} for {@link
- * HomepageAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page
- * refreshed.
- */
-public class HomepageManager implements CardContentLoader.CardContentLoaderListener,
-        HomepageCardUpdateListener {
-
-    private static final String TAG = "HomepageManager";
-    //The list for Settings Custom Card
-    @HomepageCard.CardType
-    private static final int[] SETTINGS_CARDS = {HomepageCard.CardType.CONDITIONAL};
-
-    private final Context mContext;
-    private final ControllerRendererPool mControllerRendererPool;
-    private final Lifecycle mLifecycle;
-
-    private List<HomepageCard> mHomepageCards;
-    private HomepageCardUpdateListener mListener;
-
-
-    public HomepageManager(Context context, Lifecycle lifecycle) {
-        mContext = context;
-        mLifecycle = lifecycle;
-        mHomepageCards = new ArrayList<>();
-        mControllerRendererPool = new ControllerRendererPool();
-    }
-
-    void startCardContentLoading() {
-        final CardContentLoader cardContentLoader = new CardContentLoader();
-        cardContentLoader.setListener(this);
-    }
-
-    private void loadCardControllers() {
-        if (mHomepageCards != null) {
-            for (HomepageCard card : mHomepageCards) {
-                setupController(card.getCardType());
-            }
-        }
-
-        //for data provided by Settings
-        for (int cardType : SETTINGS_CARDS) {
-            setupController(cardType);
-        }
-    }
-
-    private void setupController(int cardType) {
-        final HomepageCardController controller = mControllerRendererPool.getController(mContext,
-                cardType);
-        if (controller != null) {
-            controller.setHomepageCardUpdateListener(this);
-            if (controller instanceof LifecycleObserver) {
-                if (mLifecycle != null) {
-                    mLifecycle.addObserver((LifecycleObserver) controller);
-                }
-            }
-        }
-    }
-
-    //TODO(b/111822376): implement sorting mechanism.
-    private void sortCards() {
-        //take mHomepageCards as the source and do the ranking based on the rule.
-    }
-
-    @Override
-    public void onHomepageCardUpdated(int cardType, List<HomepageCard> updateList) {
-        //TODO(b/112245748): Should implement a DiffCallback.
-        //Keep the old list for comparison.
-        final List<HomepageCard> prevCards = mHomepageCards;
-
-        //Remove the existing data that matches the certain cardType so as to insert the new data.
-        for (int i = mHomepageCards.size() - 1; i >= 0; i--) {
-            if (mHomepageCards.get(i).getCardType() == cardType) {
-                mHomepageCards.remove(i);
-            }
-        }
-
-        //Append the new data
-        mHomepageCards.addAll(updateList);
-
-        sortCards();
-
-        if (mListener != null) {
-            mListener.onHomepageCardUpdated(HomepageCard.CardType.INVALID, mHomepageCards);
-        }
-    }
-
-    @Override
-    public void onFinishCardLoading(List<HomepageCard> homepageCards) {
-        mHomepageCards = homepageCards;
-
-        //Force card sorting here in case CardControllers of custom view have nothing to update
-        // for the first launch.
-        sortCards();
-
-        loadCardControllers();
-    }
-
-    void setListener(HomepageCardUpdateListener listener) {
-        mListener = listener;
-    }
-
-    public ControllerRendererPool getControllerRendererPool() {
-        return mControllerRendererPool;
-    }
-}
diff --git a/src/com/android/settings/homepage/PersonalSettingsFragment.java b/src/com/android/settings/homepage/PersonalSettingsFragment.java
index 1894e5e..69af23b 100644
--- a/src/com/android/settings/homepage/PersonalSettingsFragment.java
+++ b/src/com/android/settings/homepage/PersonalSettingsFragment.java
@@ -16,7 +16,7 @@
 
 package com.android.settings.homepage;
 
-import static com.android.settings.homepage.HomepageAdapter.SPAN_COUNT;
+import static com.android.settings.homepage.ContextualCardsAdapter.SPAN_COUNT;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -36,17 +36,15 @@
     private static final String TAG = "PersonalSettingsFragment";
 
     private RecyclerView mCardsContainer;
-    //TODO(b/113966426): rename
-    private HomepageAdapter mHomepageAdapter;
     private GridLayoutManager mLayoutManager;
-    //TODO(b/113966426): rename
-    private HomepageManager mHomepageManager;
+    private ContextualCardsAdapter mContextualCardsAdapter;
+    private ContextualCardManager mContextualCardManager;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mHomepageManager = new HomepageManager(getContext(), getSettingsLifecycle());
-        mHomepageManager.startCardContentLoading();
+        mContextualCardManager = new ContextualCardManager(getContext(), getSettingsLifecycle());
+        mContextualCardManager.startCardContentLoading();
     }
 
     @Override
@@ -58,9 +56,9 @@
         mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT,
                 LinearLayoutManager.VERTICAL, false /* reverseLayout */);
         mCardsContainer.setLayoutManager(mLayoutManager);
-        mHomepageAdapter = new HomepageAdapter(getContext(), mHomepageManager);
-        mCardsContainer.setAdapter(mHomepageAdapter);
-        mHomepageManager.setListener(mHomepageAdapter);
+        mContextualCardsAdapter = new ContextualCardsAdapter(getContext(), mContextualCardManager);
+        mCardsContainer.setAdapter(mContextualCardsAdapter);
+        mContextualCardManager.setListener(mContextualCardsAdapter);
 
         return rootView;
     }
diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
new file mode 100644
index 0000000..eab6099
--- /dev/null
+++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * 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.android.settings.homepage.conditional;
+
+import android.content.Context;
+
+import com.android.settings.homepage.ContextualCard;
+import com.android.settings.homepage.ContextualCardController;
+import com.android.settings.homepage.ContextualCardUpdateListener;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This controller triggers the loading of conditional cards and monitors state changes to
+ * update the homepage.
+ */
+public class ConditionContextualCardController implements ContextualCardController,
+        ConditionListener, LifecycleObserver, OnStart, OnStop {
+
+    private final Context mContext;
+    private final ConditionManager mConditionManager;
+
+    private ContextualCardUpdateListener mListener;
+
+    public ConditionContextualCardController(Context context) {
+        mContext = context;
+        mConditionManager = new ConditionManager(context.getApplicationContext(), this);
+        mConditionManager.startMonitoringStateChange();
+    }
+
+    @Override
+    public void setCardUpdateListener(ContextualCardUpdateListener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public int getCardType() {
+        return ContextualCard.CardType.CONDITIONAL;
+    }
+
+    @Override
+    public void onDataUpdated(List<ContextualCard> cardList) {
+        mListener.onHomepageCardUpdated(getCardType(), cardList);
+    }
+
+    @Override
+    public void onStart() {
+        mConditionManager.startMonitoringStateChange();
+    }
+
+    @Override
+    public void onStop() {
+        mConditionManager.stopMonitoringStateChange();
+    }
+
+    @Override
+    public void onPrimaryClick(ContextualCard contextualCard) {
+        final ConditionalContextualCard card = (ConditionalContextualCard) contextualCard;
+        mConditionManager.onPrimaryClick(mContext, card.getConditionId());
+    }
+
+    @Override
+    public void onActionClick(ContextualCard contextualCard) {
+        final ConditionalContextualCard card = (ConditionalContextualCard) contextualCard;
+        mConditionManager.onActionClick(card.getConditionId());
+    }
+
+    @Override
+    public void onConditionsChanged() {
+        final List<ContextualCard> conditionCards = new ArrayList<>();
+        final List<ConditionalCard> conditionList = mConditionManager.getDisplayableCards();
+
+        for (ConditionalCard condition : conditionList) {
+            final ContextualCard conditionCard =
+                    new ConditionalContextualCard.Builder()
+                            .setConditionId(condition.getId())
+                            .setMetricsConstant(condition.getMetricsConstant())
+                            .setActionText(condition.getActionText())
+                            .setName(mContext.getPackageName() + "/"
+                                    + condition.getTitle().toString())
+                            .setCardType(ContextualCard.CardType.CONDITIONAL)
+                            .setTitleText(condition.getTitle().toString())
+                            .setSummaryText(condition.getSummary().toString())
+                            .setIconDrawable(condition.getIcon())
+                            .build();
+
+            conditionCards.add(conditionCard);
+        }
+
+        if (mListener != null) {
+            onDataUpdated(conditionCards);
+        }
+    }
+}
diff --git a/src/com/android/settings/homepage/conditional/ConditionHomepageCardRenderer.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardRenderer.java
similarity index 89%
rename from src/com/android/settings/homepage/conditional/ConditionHomepageCardRenderer.java
rename to src/com/android/settings/homepage/conditional/ConditionContextualCardRenderer.java
index 6aa90ae..69988ae 100644
--- a/src/com/android/settings/homepage/conditional/ConditionHomepageCardRenderer.java
+++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardRenderer.java
@@ -27,21 +27,21 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.homepage.ContextualCard;
 import com.android.settings.homepage.ControllerRendererPool;
-import com.android.settings.homepage.HomepageCard;
-import com.android.settings.homepage.HomepageCardRenderer;
+import com.android.settings.homepage.ContextualCardRenderer;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 /**
- * Card renderer for {@link ConditionCard}.
+ * Card renderer for {@link ConditionalContextualCard}.
  */
-public class ConditionHomepageCardRenderer implements HomepageCardRenderer {
+public class ConditionContextualCardRenderer implements ContextualCardRenderer {
 
     private final Context mContext;
     private final ControllerRendererPool mControllerRendererPool;
 
-    public ConditionHomepageCardRenderer(Context context,
+    public ConditionContextualCardRenderer(Context context,
             ControllerRendererPool controllerRendererPool) {
         mContext = context;
         mControllerRendererPool = controllerRendererPool;
@@ -58,9 +58,9 @@
     }
 
     @Override
-    public void bindView(RecyclerView.ViewHolder holder, HomepageCard homepageCard) {
+    public void bindView(RecyclerView.ViewHolder holder, ContextualCard contextualCard) {
         final ConditionalCardHolder view = (ConditionalCardHolder) holder;
-        final ConditionCard card = (ConditionCard) homepageCard;
+        final ConditionalContextualCard card = (ConditionalContextualCard) contextualCard;
         final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory.getFactory(
                 mContext).getMetricsFeatureProvider();
 
@@ -71,7 +71,7 @@
         initializeActionButton(view, card, metricsFeatureProvider);
     }
 
-    private void initializePrimaryClick(ConditionalCardHolder view, ConditionCard card,
+    private void initializePrimaryClick(ConditionalCardHolder view, ConditionalContextualCard card,
             MetricsFeatureProvider metricsFeatureProvider) {
         view.itemView.findViewById(R.id.content).setOnClickListener(
                 v -> {
@@ -83,7 +83,7 @@
                 });
     }
 
-    private void initializeView(ConditionalCardHolder view, ConditionCard card) {
+    private void initializeView(ConditionalCardHolder view, ConditionalContextualCard card) {
         view.icon.setImageDrawable(card.getIconDrawable());
         view.title.setText(card.getTitleText());
         view.summary.setText(card.getSummaryText());
@@ -91,7 +91,7 @@
         setViewVisibility(view.itemView, R.id.divider, false);
     }
 
-    private void initializeActionButton(ConditionalCardHolder view, ConditionCard card,
+    private void initializeActionButton(ConditionalCardHolder view, ConditionalContextualCard card,
             MetricsFeatureProvider metricsFeatureProvider) {
         final CharSequence action = card.getActionText();
         final boolean hasButtons = !TextUtils.isEmpty(action);
diff --git a/src/com/android/settings/homepage/conditional/ConditionHomepageCardController.java b/src/com/android/settings/homepage/conditional/ConditionHomepageCardController.java
deleted file mode 100644
index bb7af4b..0000000
--- a/src/com/android/settings/homepage/conditional/ConditionHomepageCardController.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * 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.android.settings.homepage.conditional;
-
-import android.content.Context;
-
-import com.android.settings.homepage.HomepageCard;
-import com.android.settings.homepage.HomepageCardController;
-import com.android.settings.homepage.HomepageCardUpdateListener;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This controller triggers the loading of conditional cards and monitors state changes to
- * update the homepage.
- */
-public class ConditionHomepageCardController implements HomepageCardController, ConditionListener,
-        LifecycleObserver, OnStart, OnStop {
-
-    private final Context mContext;
-    private final ConditionManager mConditionManager;
-
-    private HomepageCardUpdateListener mListener;
-
-    public ConditionHomepageCardController(Context context) {
-        mContext = context;
-        mConditionManager = new ConditionManager(context.getApplicationContext(), this);
-        mConditionManager.startMonitoringStateChange();
-    }
-
-    @Override
-    public void setHomepageCardUpdateListener(HomepageCardUpdateListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public int getCardType() {
-        return HomepageCard.CardType.CONDITIONAL;
-    }
-
-    @Override
-    public void onDataUpdated(List<HomepageCard> cardList) {
-        mListener.onHomepageCardUpdated(getCardType(), cardList);
-    }
-
-    @Override
-    public void onStart() {
-        mConditionManager.startMonitoringStateChange();
-    }
-
-    @Override
-    public void onStop() {
-        mConditionManager.stopMonitoringStateChange();
-    }
-
-    @Override
-    public void onPrimaryClick(HomepageCard homepageCard) {
-        final ConditionCard card = (ConditionCard) homepageCard;
-        mConditionManager.onPrimaryClick(mContext, card.getConditionId());
-
-    }
-
-    @Override
-    public void onActionClick(HomepageCard homepageCard) {
-        final ConditionCard card = (ConditionCard) homepageCard;
-        mConditionManager.onActionClick(card.getConditionId());
-    }
-
-    @Override
-    public void onConditionsChanged() {
-        final List<HomepageCard> conditionCards = new ArrayList<>();
-        final List<ConditionalCard> conditionList = mConditionManager.getDisplayableCards();
-
-        for (ConditionalCard condition : conditionList) {
-            final ConditionCard conditionCard = ((ConditionCard.Builder) new ConditionCard.Builder()
-                    .setConditionId(condition.getId())
-                    .setMetricsConstant(condition.getMetricsConstant())
-                    .setActionText(condition.getActionText())
-                    .setName(mContext.getPackageName() + "/" + condition.getTitle().toString())
-                    .setCardType(HomepageCard.CardType.CONDITIONAL)
-                    .setTitleText(condition.getTitle().toString())
-                    .setSummaryText(condition.getSummary().toString())
-                    .setIconDrawable(condition.getIcon()))
-                    .build();
-
-            conditionCards.add(conditionCard);
-        }
-
-        if (mListener != null) {
-            onDataUpdated(conditionCards);
-        }
-    }
-}
diff --git a/src/com/android/settings/homepage/conditional/ConditionCard.java b/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java
similarity index 80%
rename from src/com/android/settings/homepage/conditional/ConditionCard.java
rename to src/com/android/settings/homepage/conditional/ConditionalContextualCard.java
index 9f445b2..62a4956 100644
--- a/src/com/android/settings/homepage/conditional/ConditionCard.java
+++ b/src/com/android/settings/homepage/conditional/ConditionalContextualCard.java
@@ -16,21 +16,21 @@
 
 package com.android.settings.homepage.conditional;
 
-import com.android.settings.homepage.HomepageCard;
+import com.android.settings.homepage.ContextualCard;
 
 /**
- * Data class representing a {@link ConditionCard}.
+ * Data class representing a conditional {@link ContextualCard}.
  *
- * Use this class to store additional attributes on top of {@link HomepageCard} for
+ * Use this class to store additional attributes on top of {@link ContextualCard} for
  * {@link ConditionalCard}.
  */
-public class ConditionCard extends HomepageCard {
+public class ConditionalContextualCard extends ContextualCard {
 
     private final long mConditionId;
     private final int mMetricsConstant;
     private final CharSequence mActionText;
 
-    private ConditionCard(Builder builder) {
+    private ConditionalContextualCard(Builder builder) {
         super(builder);
 
         mConditionId = builder.mConditionId;
@@ -50,7 +50,7 @@
         return mActionText;
     }
 
-    static class Builder extends HomepageCard.Builder {
+    static class Builder extends ContextualCard.Builder {
 
         private long mConditionId;
         private int mMetricsConstant;
@@ -71,8 +71,8 @@
             return this;
         }
 
-        public ConditionCard build() {
-            return new ConditionCard(this);
+        public ConditionalContextualCard build() {
+            return new ConditionalContextualCard(this);
         }
     }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardControllerTest.java
rename to tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
index 2b8ab00..ed45ce7 100644
--- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
@@ -26,7 +26,7 @@
 import android.graphics.drawable.Drawable;
 
 import com.android.settings.R;
-import com.android.settings.homepage.HomepageCardUpdateListener;
+import com.android.settings.homepage.ContextualCardUpdateListener;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
@@ -41,20 +41,20 @@
 import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-public class ConditionHomepageCardControllerTest {
+public class ConditionContextualCardControllerTest {
 
     @Mock
     private ConditionManager mConditionManager;
     @Mock
-    private HomepageCardUpdateListener mListener;
+    private ContextualCardUpdateListener mListener;
     private Context mContext;
-    private ConditionHomepageCardController mController;
+    private ConditionContextualCardController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
-        mController = spy(new ConditionHomepageCardController(mContext));
+        mController = spy(new ConditionContextualCardController(mContext));
         ReflectionHelpers.setField(mController, "mConditionManager", mConditionManager);
     }
 
@@ -78,7 +78,7 @@
         final List<ConditionalCard> conditionalCards = new ArrayList<>();
         conditionalCards.add(fakeConditionalCard);
         when(mConditionManager.getDisplayableCards()).thenReturn(conditionalCards);
-        mController.setHomepageCardUpdateListener(mListener);
+        mController.setCardUpdateListener(mListener);
 
         mController.onConditionsChanged();
 
diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java
similarity index 79%
rename from tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardRendererTest.java
rename to tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java
index 663931a..1ee052d 100644
--- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionHomepageCardRendererTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardRendererTest.java
@@ -31,8 +31,8 @@
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.settings.R;
+import com.android.settings.homepage.ContextualCard;
 import com.android.settings.homepage.ControllerRendererPool;
-import com.android.settings.homepage.HomepageCard;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
 import org.junit.Before;
@@ -43,20 +43,20 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-public class ConditionHomepageCardRendererTest {
+public class ConditionContextualCardRendererTest {
 
     @Mock
     private ControllerRendererPool mControllerRendererPool;
     @Mock
-    private ConditionHomepageCardController mController;
+    private ConditionContextualCardController mController;
     private Context mContext;
-    private ConditionHomepageCardRenderer mRenderer;
+    private ConditionContextualCardRenderer mRenderer;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
-        mRenderer = new ConditionHomepageCardRenderer(mContext, mControllerRendererPool);
+        mRenderer = new ConditionContextualCardRenderer(mContext, mControllerRendererPool);
     }
 
     @Test
@@ -68,9 +68,9 @@
         final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view);
         final View card = view.findViewById(R.id.content);
         when(mControllerRendererPool.getController(mContext,
-                HomepageCard.CardType.CONDITIONAL)).thenReturn(mController);
+                ContextualCard.CardType.CONDITIONAL)).thenReturn(mController);
 
-        mRenderer.bindView(viewHolder, getHomepageCard());
+        mRenderer.bindView(viewHolder, buildConditionContextualCard());
 
         assertThat(card).isNotNull();
         assertThat(card.hasOnClickListeners()).isTrue();
@@ -85,28 +85,27 @@
         final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view);
         final View card = view.findViewById(R.id.content);
         when(mControllerRendererPool.getController(mContext,
-                HomepageCard.CardType.CONDITIONAL)).thenReturn(mController);
+                ContextualCard.CardType.CONDITIONAL)).thenReturn(mController);
 
-        mRenderer.bindView(viewHolder, getHomepageCard());
+        mRenderer.bindView(viewHolder, buildConditionContextualCard());
 
         assertThat(card).isNotNull();
         card.performClick();
 
-        verify(mController).onPrimaryClick(any(HomepageCard.class));
+        verify(mController).onPrimaryClick(any(ContextualCard.class));
     }
 
-    private HomepageCard getHomepageCard() {
-        ConditionCard conditionCard = ((ConditionCard.Builder) new ConditionCard.Builder()
+    private ContextualCard buildConditionContextualCard() {
+        return new ConditionalContextualCard.Builder()
                 .setConditionId(123)
                 .setMetricsConstant(1)
                 .setActionText("test_action")
                 .setName("test_name")
-                .setCardType(HomepageCard.CardType.CONDITIONAL)
+                .setCardType(ContextualCard.CardType.CONDITIONAL)
                 .setTitleText("test_title")
                 .setSummaryText("test_summary")
                 .setIconDrawable(mContext.getDrawable(R.drawable.ic_do_not_disturb_on_24dp))
-                .setIsHalfWidth(true))
+                .setIsHalfWidth(true)
                 .build();
-        return conditionCard;
     }
 }