Log RecyclerView click position

Test: rebuild, robolectric
Fixes: 127881281
Change-Id: Idddbbf9c1159e0e5b280178e98f9258cbd7864f9
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
index b1e9d33..c296c7a 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java
@@ -32,5 +32,5 @@
             List<ContextualCard> hiddenCards);
 
     /** When user clicks toggle/title area of a contextual card. */
-    void logContextualCardClick(ContextualCard card, int row, int tapTarget);
+    void logContextualCardClick(ContextualCard card, int sliceRow, int tapTarget, int uiPosition);
 }
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
index ce7777a..793134f 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java
@@ -63,6 +63,9 @@
     // contextual card tap target
     private static final String EXTRA_CONTEXTUALCARD_TAP_TARGET = "target";
 
+    // contextual card ui position
+    private static final String EXTRA_CONTEXTUALCARD_UI_POSTITION = "ui_position";
+
     // contextual homepage display latency
     private static final String EXTRA_LATENCY = "latency";
 
@@ -122,7 +125,7 @@
 
     @Override
     public void logContextualCardClick(ContextualCard card, int row,
-            int actionType) {
+            int actionType, int uiPosition) {
         final Intent intent = new Intent();
         intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_CLICK);
         intent.putExtra(EXTRA_CONTEXTUALCARD_NAME, card.getName());
@@ -130,6 +133,7 @@
         intent.putExtra(EXTRA_CONTEXTUALCARD_SCORE, card.getRankingScore());
         intent.putExtra(EXTRA_CONTEXTUALCARD_ROW, row);
         intent.putExtra(EXTRA_CONTEXTUALCARD_TAP_TARGET, actionTypeToTapTarget(actionType));
+        intent.putExtra(EXTRA_CONTEXTUALCARD_UI_POSTITION, uiPosition);
         sendBroadcast(intent);
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
index 006734f..3ecfcae 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java
@@ -64,7 +64,6 @@
     private final Context mContext;
     private final LifecycleOwner mLifecycleOwner;
     private final ControllerRendererPool mControllerRendererPool;
-    private final Set<ContextualCard> mCardSet;
     private final SliceDeferredSetupCardRendererHelper mDeferredSetupCardHelper;
     private final SliceFullCardRendererHelper mFullCardHelper;
     private final SliceHalfCardRendererHelper mHalfCardHelper;
@@ -75,7 +74,6 @@
         mLifecycleOwner = lifecycleOwner;
         mSliceLiveDataMap = new ArrayMap<>();
         mControllerRendererPool = controllerRendererPool;
-        mCardSet = new ArraySet<>();
         mFlippedCardSet = new ArraySet<>();
         mLifecycleOwner.getLifecycle().addObserver(this);
         mFullCardHelper = new SliceFullCardRendererHelper(context);
@@ -110,7 +108,6 @@
             sliceLiveData = SliceLiveData.fromUri(mContext, uri);
             mSliceLiveDataMap.put(uri, sliceLiveData);
         }
-        mCardSet.add(card);
 
         sliceLiveData.removeObservers(mLifecycleOwner);
         sliceLiveData.observe(mLifecycleOwner, slice -> {
@@ -129,7 +126,7 @@
                     mHalfCardHelper.bindView(holder, card, slice);
                     break;
                 default:
-                    mFullCardHelper.bindView(holder, card, slice, mCardSet);
+                    mFullCardHelper.bindView(holder, card, slice);
             }
         });
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceDeferredSetupCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceDeferredSetupCardRendererHelper.java
index d0d51e7..630839c 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceDeferredSetupCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceDeferredSetupCardRendererHelper.java
@@ -68,7 +68,7 @@
             final ContextualCardFeatureProvider contextualCardFeatureProvider =
                     FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
             contextualCardFeatureProvider.logContextualCardClick(card, 0 /* row */,
-                    EventInfo.ACTION_TYPE_CONTENT);
+                    EventInfo.ACTION_TYPE_CONTENT, view.getAdapterPosition());
         });
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
index ef0a67d..1e1bde4 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
@@ -17,6 +17,7 @@
 package com.android.settings.homepage.contextualcards.slices;
 
 import android.content.Context;
+import android.util.Log;
 import android.view.View;
 
 import androidx.annotation.NonNull;
@@ -36,13 +37,11 @@
 /**
  * Card renderer helper for {@link ContextualCard} built as slice full card.
  */
-class SliceFullCardRendererHelper implements SliceView.OnSliceActionListener {
+class SliceFullCardRendererHelper {
     private static final String TAG = "SliceFCRendererHelper";
 
     private final Context mContext;
 
-    private Set<ContextualCard> mCardSet;
-
     SliceFullCardRendererHelper(Context context) {
         mContext = context;
     }
@@ -51,17 +50,22 @@
         return new SliceViewHolder(view);
     }
 
-    void bindView(RecyclerView.ViewHolder holder, ContextualCard card, Slice slice,
-            Set<ContextualCard> cardSet) {
+    void bindView(RecyclerView.ViewHolder holder, ContextualCard card, Slice slice) {
         final SliceViewHolder cardHolder = (SliceViewHolder) holder;
         cardHolder.sliceView.setScrollable(false);
         cardHolder.sliceView.setTag(card.getSliceUri());
         //TODO(b/114009676): We will soon have a field to decide what slice mode we should set.
         cardHolder.sliceView.setMode(SliceView.MODE_LARGE);
         cardHolder.sliceView.setSlice(slice);
-        mCardSet = cardSet;
         // Set this listener so we can log the interaction users make on the slice
-        cardHolder.sliceView.setOnSliceActionListener(this);
+        cardHolder.sliceView.setOnSliceActionListener(
+                (eventInfo, sliceItem) -> {
+                    final ContextualCardFeatureProvider contextualCardFeatureProvider =
+                            FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(
+                                    mContext);
+                    contextualCardFeatureProvider.logContextualCardClick(card, eventInfo.rowIndex,
+                            eventInfo.actionType, cardHolder.getAdapterPosition());
+                });
 
         // Customize slice view for Settings
         cardHolder.sliceView.showTitleItems(true);
@@ -71,23 +75,6 @@
         }
     }
 
-    @Override
-    public void onSliceAction(@NonNull EventInfo eventInfo, @NonNull SliceItem sliceItem) {
-        // sliceItem.getSlice().getUri() is like
-        // content://android.settings.slices/action/wifi/_gen/0/_gen/0
-        // contextualCard.getSliceUri() is prefix of sliceItem.getSlice().getUri()
-        final ContextualCardFeatureProvider contextualCardFeatureProvider =
-                FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
-        for (ContextualCard card : mCardSet) {
-            if (sliceItem.getSlice().getUri().toString().startsWith(
-                    card.getSliceUri().toString())) {
-                contextualCardFeatureProvider.logContextualCardClick(card, eventInfo.rowIndex,
-                        eventInfo.actionType);
-                break;
-            }
-        }
-    }
-
     static class SliceViewHolder extends RecyclerView.ViewHolder {
         public final SliceView sliceView;
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceHalfCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceHalfCardRendererHelper.java
index 24d654d..6bb2208 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceHalfCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceHalfCardRendererHelper.java
@@ -66,7 +66,7 @@
             final ContextualCardFeatureProvider contextualCardFeatureProvider =
                     FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
             contextualCardFeatureProvider.logContextualCardClick(card, 0 /* row */,
-                    EventInfo.ACTION_TYPE_CONTENT);
+                    EventInfo.ACTION_TYPE_CONTENT, view.getAdapterPosition());
         });
     }
 
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelperTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelperTest.java
index 8882009..395748b 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelperTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelperTest.java
@@ -78,7 +78,7 @@
     public void bindView_shouldSetScrollableToFalse() {
         final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
 
-        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice(), Collections.emptySet());
+        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice());
 
         assertThat(((SliceViewHolder) viewHolder).sliceView.isScrollable()).isFalse();
     }
@@ -88,7 +88,7 @@
         final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
         final ContextualCard card = buildContextualCard();
 
-        mHelper.bindView(viewHolder, card, buildSlice(), Collections.emptySet());
+        mHelper.bindView(viewHolder, card, buildSlice());
 
         assertThat(((SliceViewHolder) viewHolder).sliceView.getTag()).isEqualTo(card.getSliceUri());
     }
@@ -97,7 +97,7 @@
     public void bindView_shouldSetModeToLarge() {
         final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
 
-        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice(), Collections.emptySet());
+        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice());
 
         assertThat(((SliceViewHolder) viewHolder).sliceView.getMode()).isEqualTo(
                 SliceView.MODE_LARGE);
@@ -107,7 +107,7 @@
     public void bindView_shouldSetSlice() {
         final RecyclerView.ViewHolder viewHolder = getSliceViewHolder();
 
-        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice(), Collections.emptySet());
+        mHelper.bindView(viewHolder, buildContextualCard(), buildSlice());
 
         assertThat(((SliceViewHolder) viewHolder).sliceView.getSlice().getUri()).isEqualTo(
                 TEST_SLICE_URI);