diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
index 5ebc924..b1e9d33 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
@@ -16,24 +16,21 @@
 
 package com.android.settings.homepage.contextualcards;
 
-import android.content.Context;
-
 import java.util.List;
 
 /** Feature provider for the contextual card feature. */
 public interface ContextualCardFeatureProvider {
 
     /** Homepage displays. */
-    void logHomepageDisplay(Context context, long latency);
+    void logHomepageDisplay(long latency);
 
     /** When user clicks dismiss in contextual card */
-    void logContextualCardDismiss(Context context, ContextualCard card);
+    void logContextualCardDismiss(ContextualCard card);
 
     /** After ContextualCardManager decides which cards will be displayed/hidden */
-    void logContextualCardDisplay(Context context, List<ContextualCard> showedCards,
+    void logContextualCardDisplay(List<ContextualCard> showedCards,
             List<ContextualCard> hiddenCards);
 
     /** When user clicks toggle/title area of a contextual card. */
-    void logContextualCardClick(Context context, ContextualCard card, int row,
-            int tapTarget);
+    void logContextualCardClick(ContextualCard card, int row, int tapTarget);
 }
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
index dc295fc..12590ff 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
@@ -51,6 +51,9 @@
     // contextual card name
     private static final String EXTRA_CONTEXTUALCARD_NAME = "name";
 
+    // contextual card uri
+    private static final String EXTRA_CONTEXTUALCARD_URI = "uri";
+
     // contextual card score
     private static final String EXTRA_CONTEXTUALCARD_SCORE = "score";
 
@@ -84,51 +87,59 @@
     // Click slider
     private static final int TARGET_SLIDER = 3;
 
+    private final Context mContext;
+
+    public ContextualCardFeatureProviderImpl(Context context) {
+        mContext = context;
+    }
+
     @Override
-    public void logHomepageDisplay(Context context, long latency) {
-        sendBroadcast(context, new Intent()
+    public void logHomepageDisplay(long latency) {
+        sendBroadcast(new Intent()
                 .putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_HOME_SHOW)
                 .putExtra(EXTRA_LATENCY, latency));
     }
 
     @Override
-    public void logContextualCardDismiss(Context context, ContextualCard card) {
+    public void logContextualCardDismiss(ContextualCard card) {
         final Intent intent = new Intent();
         intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_DISMISS);
         intent.putExtra(EXTRA_CONTEXTUALCARD_NAME, card.getName());
+        intent.putExtra(EXTRA_CONTEXTUALCARD_URI, card.getSliceUri().toString());
         intent.putExtra(EXTRA_CONTEXTUALCARD_SCORE, card.getRankingScore());
-        sendBroadcast(context, intent);
+        sendBroadcast(intent);
     }
 
     @Override
-    public void logContextualCardDisplay(Context context, List<ContextualCard> visibleCards,
+    public void logContextualCardDisplay(List<ContextualCard> visibleCards,
             List<ContextualCard> hiddenCards) {
         final Intent intent = new Intent();
         intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_SHOW);
         intent.putExtra(EXTRA_CONTEXTUALCARD_VISIBLE, serialize(visibleCards));
         intent.putExtra(EXTRA_CONTEXTUALCARD_HIDDEN, serialize(hiddenCards));
-        sendBroadcast(context, intent);
+        sendBroadcast(intent);
     }
 
     @Override
-    public void logContextualCardClick(Context context, ContextualCard card, int row,
+    public void logContextualCardClick(ContextualCard card, int row,
             int actionType) {
         final Intent intent = new Intent();
         intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_CLICK);
         intent.putExtra(EXTRA_CONTEXTUALCARD_NAME, card.getName());
+        intent.putExtra(EXTRA_CONTEXTUALCARD_URI, card.getSliceUri().toString());
         intent.putExtra(EXTRA_CONTEXTUALCARD_SCORE, card.getRankingScore());
         intent.putExtra(EXTRA_CONTEXTUALCARD_ROW, row);
         intent.putExtra(EXTRA_CONTEXTUALCARD_TAP_TARGET, actionTypeToTapTarget(actionType));
-        sendBroadcast(context, intent);
+        sendBroadcast(intent);
     }
 
     @VisibleForTesting
-    void sendBroadcast(final Context context, final Intent intent) {
-        intent.setPackage(context.getString(R.string.config_settingsintelligence_package_name));
-        final String action = context.getString(R.string.config_settingsintelligence_log_action);
+    void sendBroadcast(final Intent intent) {
+        intent.setPackage(mContext.getString(R.string.config_settingsintelligence_package_name));
+        final String action = mContext.getString(R.string.config_settingsintelligence_log_action);
         if (!TextUtils.isEmpty(action)) {
             intent.setAction(action);
-            context.sendBroadcastAsUser(intent, UserHandle.ALL);
+            mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
         }
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index 71b262d..997d86b 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -149,10 +149,10 @@
             // Two large cards
             return visibleCards;
         } finally {
+            //TODO(b/121196921): Should not call this if user click dismiss
             final ContextualCardFeatureProvider contextualCardFeatureProvider =
-                    FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider();
-            contextualCardFeatureProvider.logContextualCardDisplay(mContext, visibleCards,
-                    hiddenCards);
+                    FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
+            contextualCardFeatureProvider.logContextualCardDisplay(visibleCards, hiddenCards);
         }
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java
index 9c06beb..067de7c 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java
@@ -201,8 +201,8 @@
                     .collect(groupingBy(ContextualCard::getCardType)));
         }
         final long totalTime = System.currentTimeMillis() - mStartTime;
-        FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider()
-                .logHomepageDisplay(mContext, totalTime);
+        FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext)
+                .logHomepageDisplay(totalTime);
 
         mIsFirstLaunch = false;
     }
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java
index 8720a3c..eb062e8 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardController.java
@@ -70,8 +70,8 @@
         });
         showFeedbackDialog(card);
         final ContextualCardFeatureProvider contextualCardFeatureProvider =
-                FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider();
-        contextualCardFeatureProvider.logContextualCardDismiss(mContext, card);
+                FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
+        contextualCardFeatureProvider.logContextualCardDismiss(card);
     }
 
     @Override
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 172c3b2..17e9d48 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -173,8 +173,9 @@
             if (sliceItem.getSlice().getUri().toString().startsWith(
                     card.getSliceUri().toString())) {
                 ContextualCardFeatureProvider contexualCardFeatureProvider =
-                        FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider();
-                contexualCardFeatureProvider.logContextualCardClick(mContext, card,
+                        FeatureFactory.getFactory(mContext)
+                                .getContextualCardFeatureProvider(mContext);
+                contexualCardFeatureProvider.logContextualCardClick(card,
                         eventInfo.rowIndex, eventInfo.actionType);
                 break;
             }
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 184ccc8..0320bf6 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -110,7 +110,7 @@
 
     public abstract PanelFeatureProvider getPanelFeatureProvider();
 
-    public abstract ContextualCardFeatureProvider getContextualCardFeatureProvider();
+    public abstract ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context);
 
     public abstract FaceFeatureProvider getFaceFeatureProvider();
 
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 88c09d0..0232964 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -228,9 +228,10 @@
     }
 
     @Override
-    public ContextualCardFeatureProvider getContextualCardFeatureProvider() {
+    public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) {
         if (mContextualCardFeatureProvider == null) {
-            mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl();
+            mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl(
+                    context.getApplicationContext());
         }
         return mContextualCardFeatureProvider;
     }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImplTest.java
index f1bb3ed..2db7f3f 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImplTest.java
@@ -49,13 +49,13 @@
     @Before
     public void setUp() {
         mContext = spy(RuntimeEnvironment.application);
-        mImpl = new ContextualCardFeatureProviderImpl();
+        mImpl = new ContextualCardFeatureProviderImpl(mContext);
     }
 
     @Test
     public void sendBroadcast_emptyAction_notSendBroadcast() {
         final Intent intent = new Intent();
-        mImpl.sendBroadcast(mContext, intent);
+        mImpl.sendBroadcast(intent);
 
         verify(mContext, never()).sendBroadcastAsUser(intent, UserHandle.ALL);
     }
@@ -64,7 +64,7 @@
     @Config(qualifiers = "mcc999")
     public void sendBroadcast_hasAction_sendBroadcast() {
         final Intent intent = new Intent();
-        mImpl.sendBroadcast(mContext, intent);
+        mImpl.sendBroadcast(intent);
 
         verify(mContext).sendBroadcastAsUser(intent, UserHandle.ALL);
     }
@@ -72,7 +72,7 @@
     @Test
     @Config(qualifiers = "mcc999")
     public void logContextualCardDisplay_hasAction_sendBroadcast() {
-        mImpl.logContextualCardDisplay(mContext, new ArrayList<>(), new ArrayList<>());
+        mImpl.logContextualCardDisplay(new ArrayList<>(), new ArrayList<>());
 
         verify(mContext).sendBroadcastAsUser(any(Intent.class), any());
     }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
index 5bc3698..7e1a32c 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardControllerTest.java
@@ -91,8 +91,7 @@
         cr.close();
 
         assertThat(qryDismissed).isEqualTo(1);
-        verify(mFeatureFactory.mContextualCardFeatureProvider).logContextualCardDismiss(
-                mContext, card);
+        verify(mFeatureFactory.mContextualCardFeatureProvider).logContextualCardDismiss(card);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index e0b8646..1d8e2cb 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -198,8 +198,7 @@
         return panelFeatureProvider;
     }
 
-    @Override
-    public ContextualCardFeatureProvider getContextualCardFeatureProvider() {
+    public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) {
         return mContextualCardFeatureProvider;
     }
 
