From 682763974d02a5a5f41df11361a45381ddbf9543 Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Wed, 27 Mar 2019 16:50:55 +0800 Subject: [PATCH] Log RecyclerView click position Test: rebuild, robolectric Fixes: 127881281 Change-Id: Idddbbf9c1159e0e5b280178e98f9258cbd7864f9 --- .../ContextualCardFeatureProvider.java | 2 +- .../ContextualCardFeatureProviderImpl.java | 6 +++- .../slices/SliceContextualCardRenderer.java | 5 +-- .../SliceDeferredSetupCardRendererHelper.java | 2 +- .../slices/SliceFullCardRendererHelper.java | 35 ++++++------------- .../slices/SliceHalfCardRendererHelper.java | 2 +- .../SliceFullCardRendererHelperTest.java | 8 ++--- 7 files changed, 24 insertions(+), 36 deletions(-) diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java index b1e9d33e682..c296c7a6d20 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java @@ -32,5 +32,5 @@ public interface ContextualCardFeatureProvider { List 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 ce7777a5e5b..793134f9bc0 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java @@ -63,6 +63,9 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP // 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 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP @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 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP 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 006734f2f8d..3ecfcaecdae 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 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life private final Context mContext; private final LifecycleOwner mLifecycleOwner; private final ControllerRendererPool mControllerRendererPool; - private final Set mCardSet; private final SliceDeferredSetupCardRendererHelper mDeferredSetupCardHelper; private final SliceFullCardRendererHelper mFullCardHelper; private final SliceHalfCardRendererHelper mHalfCardHelper; @@ -75,7 +74,6 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life 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 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life sliceLiveData = SliceLiveData.fromUri(mContext, uri); mSliceLiveDataMap.put(uri, sliceLiveData); } - mCardSet.add(card); sliceLiveData.removeObservers(mLifecycleOwner); sliceLiveData.observe(mLifecycleOwner, slice -> { @@ -129,7 +126,7 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, Life 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 d0d51e74cc7..630839c1340 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 @@ class SliceDeferredSetupCardRendererHelper { 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 ef0a67d0e20..1e1bde4981d 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 @@ import java.util.Set; /** * 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 mCardSet; - SliceFullCardRendererHelper(Context context) { mContext = context; } @@ -51,17 +50,22 @@ class SliceFullCardRendererHelper implements SliceView.OnSliceActionListener { return new SliceViewHolder(view); } - void bindView(RecyclerView.ViewHolder holder, ContextualCard card, Slice slice, - Set 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 @@ class SliceFullCardRendererHelper implements SliceView.OnSliceActionListener { } } - @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 24d654d885c..6bb22087925 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 @@ class SliceHalfCardRendererHelper { 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 88820096fce..395748bc0fb 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 class SliceFullCardRendererHelperTest { 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 @@ public class SliceFullCardRendererHelperTest { 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 class SliceFullCardRendererHelperTest { 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 class SliceFullCardRendererHelperTest { 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);