Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68276397 authored by Raff Tsai's avatar Raff Tsai
Browse files

Log RecyclerView click position

Test: rebuild, robolectric
Fixes: 127881281
Change-Id: Idddbbf9c1159e0e5b280178e98f9258cbd7864f9
parent f11c4c24
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32,5 +32,5 @@ public interface ContextualCardFeatureProvider {
            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);
}
+5 −1
Original line number Diff line number Diff line
@@ -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);
    }

+1 −4
Original line number Diff line number Diff line
@@ -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<ContextualCard> 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);
            }
        });

+1 −1
Original line number Diff line number Diff line
@@ -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());
        });
    }

+11 −24
Original line number Diff line number Diff line
@@ -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<ContextualCard> 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<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 @@ 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;

Loading