Add sliceUri in broadcast intent

Bug: 119748954
Test: robolectric
Change-Id: I24eb8d5a274be60ba3395d05d2b306e185e7dcab
This commit is contained in:
Raff Tsai
2018-12-17 17:50:08 +08:00
parent 8c22eebb40
commit f7a6d94863
11 changed files with 47 additions and 39 deletions

View File

@@ -16,24 +16,21 @@
package com.android.settings.homepage.contextualcards; package com.android.settings.homepage.contextualcards;
import android.content.Context;
import java.util.List; import java.util.List;
/** Feature provider for the contextual card feature. */ /** Feature provider for the contextual card feature. */
public interface ContextualCardFeatureProvider { public interface ContextualCardFeatureProvider {
/** Homepage displays. */ /** Homepage displays. */
void logHomepageDisplay(Context context, long latency); void logHomepageDisplay(long latency);
/** When user clicks dismiss in contextual card */ /** 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 */ /** After ContextualCardManager decides which cards will be displayed/hidden */
void logContextualCardDisplay(Context context, List<ContextualCard> showedCards, void logContextualCardDisplay(List<ContextualCard> showedCards,
List<ContextualCard> hiddenCards); List<ContextualCard> hiddenCards);
/** When user clicks toggle/title area of a contextual card. */ /** When user clicks toggle/title area of a contextual card. */
void logContextualCardClick(Context context, ContextualCard card, int row, void logContextualCardClick(ContextualCard card, int row, int tapTarget);
int tapTarget);
} }

View File

@@ -51,6 +51,9 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP
// contextual card name // contextual card name
private static final String EXTRA_CONTEXTUALCARD_NAME = "name"; private static final String EXTRA_CONTEXTUALCARD_NAME = "name";
// contextual card uri
private static final String EXTRA_CONTEXTUALCARD_URI = "uri";
// contextual card score // contextual card score
private static final String EXTRA_CONTEXTUALCARD_SCORE = "score"; private static final String EXTRA_CONTEXTUALCARD_SCORE = "score";
@@ -84,51 +87,59 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP
// Click slider // Click slider
private static final int TARGET_SLIDER = 3; private static final int TARGET_SLIDER = 3;
private final Context mContext;
public ContextualCardFeatureProviderImpl(Context context) {
mContext = context;
}
@Override @Override
public void logHomepageDisplay(Context context, long latency) { public void logHomepageDisplay(long latency) {
sendBroadcast(context, new Intent() sendBroadcast(new Intent()
.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_HOME_SHOW) .putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_HOME_SHOW)
.putExtra(EXTRA_LATENCY, latency)); .putExtra(EXTRA_LATENCY, latency));
} }
@Override @Override
public void logContextualCardDismiss(Context context, ContextualCard card) { public void logContextualCardDismiss(ContextualCard card) {
final Intent intent = new Intent(); final Intent intent = new Intent();
intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_DISMISS); intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_DISMISS);
intent.putExtra(EXTRA_CONTEXTUALCARD_NAME, card.getName()); 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_SCORE, card.getRankingScore());
sendBroadcast(context, intent); sendBroadcast(intent);
} }
@Override @Override
public void logContextualCardDisplay(Context context, List<ContextualCard> visibleCards, public void logContextualCardDisplay(List<ContextualCard> visibleCards,
List<ContextualCard> hiddenCards) { List<ContextualCard> hiddenCards) {
final Intent intent = new Intent(); final Intent intent = new Intent();
intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_SHOW); intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_SHOW);
intent.putExtra(EXTRA_CONTEXTUALCARD_VISIBLE, serialize(visibleCards)); intent.putExtra(EXTRA_CONTEXTUALCARD_VISIBLE, serialize(visibleCards));
intent.putExtra(EXTRA_CONTEXTUALCARD_HIDDEN, serialize(hiddenCards)); intent.putExtra(EXTRA_CONTEXTUALCARD_HIDDEN, serialize(hiddenCards));
sendBroadcast(context, intent); sendBroadcast(intent);
} }
@Override @Override
public void logContextualCardClick(Context context, ContextualCard card, int row, public void logContextualCardClick(ContextualCard card, int row,
int actionType) { int actionType) {
final Intent intent = new Intent(); final Intent intent = new Intent();
intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_CLICK); intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_CARD_CLICK);
intent.putExtra(EXTRA_CONTEXTUALCARD_NAME, card.getName()); 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_SCORE, card.getRankingScore());
intent.putExtra(EXTRA_CONTEXTUALCARD_ROW, row); intent.putExtra(EXTRA_CONTEXTUALCARD_ROW, row);
intent.putExtra(EXTRA_CONTEXTUALCARD_TAP_TARGET, actionTypeToTapTarget(actionType)); intent.putExtra(EXTRA_CONTEXTUALCARD_TAP_TARGET, actionTypeToTapTarget(actionType));
sendBroadcast(context, intent); sendBroadcast(intent);
} }
@VisibleForTesting @VisibleForTesting
void sendBroadcast(final Context context, final Intent intent) { void sendBroadcast(final Intent intent) {
intent.setPackage(context.getString(R.string.config_settingsintelligence_package_name)); intent.setPackage(mContext.getString(R.string.config_settingsintelligence_package_name));
final String action = context.getString(R.string.config_settingsintelligence_log_action); final String action = mContext.getString(R.string.config_settingsintelligence_log_action);
if (!TextUtils.isEmpty(action)) { if (!TextUtils.isEmpty(action)) {
intent.setAction(action); intent.setAction(action);
context.sendBroadcastAsUser(intent, UserHandle.ALL); mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
} }
} }

View File

@@ -149,10 +149,10 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
// Two large cards // Two large cards
return visibleCards; return visibleCards;
} finally { } finally {
//TODO(b/121196921): Should not call this if user click dismiss
final ContextualCardFeatureProvider contextualCardFeatureProvider = final ContextualCardFeatureProvider contextualCardFeatureProvider =
FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(); FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
contextualCardFeatureProvider.logContextualCardDisplay(mContext, visibleCards, contextualCardFeatureProvider.logContextualCardDisplay(visibleCards, hiddenCards);
hiddenCards);
} }
} }

View File

@@ -201,8 +201,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
.collect(groupingBy(ContextualCard::getCardType))); .collect(groupingBy(ContextualCard::getCardType)));
} }
final long totalTime = System.currentTimeMillis() - mStartTime; final long totalTime = System.currentTimeMillis() - mStartTime;
FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider() FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext)
.logHomepageDisplay(mContext, totalTime); .logHomepageDisplay(totalTime);
mIsFirstLaunch = false; mIsFirstLaunch = false;
} }

View File

@@ -70,8 +70,8 @@ public class SliceContextualCardController implements ContextualCardController {
}); });
showFeedbackDialog(card); showFeedbackDialog(card);
final ContextualCardFeatureProvider contextualCardFeatureProvider = final ContextualCardFeatureProvider contextualCardFeatureProvider =
FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(); FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext);
contextualCardFeatureProvider.logContextualCardDismiss(mContext, card); contextualCardFeatureProvider.logContextualCardDismiss(card);
} }
@Override @Override

View File

@@ -173,8 +173,9 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer,
if (sliceItem.getSlice().getUri().toString().startsWith( if (sliceItem.getSlice().getUri().toString().startsWith(
card.getSliceUri().toString())) { card.getSliceUri().toString())) {
ContextualCardFeatureProvider contexualCardFeatureProvider = ContextualCardFeatureProvider contexualCardFeatureProvider =
FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(); FeatureFactory.getFactory(mContext)
contexualCardFeatureProvider.logContextualCardClick(mContext, card, .getContextualCardFeatureProvider(mContext);
contexualCardFeatureProvider.logContextualCardClick(card,
eventInfo.rowIndex, eventInfo.actionType); eventInfo.rowIndex, eventInfo.actionType);
break; break;
} }

View File

@@ -110,7 +110,7 @@ public abstract class FeatureFactory {
public abstract PanelFeatureProvider getPanelFeatureProvider(); public abstract PanelFeatureProvider getPanelFeatureProvider();
public abstract ContextualCardFeatureProvider getContextualCardFeatureProvider(); public abstract ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context);
public abstract FaceFeatureProvider getFaceFeatureProvider(); public abstract FaceFeatureProvider getFaceFeatureProvider();

View File

@@ -228,9 +228,10 @@ public class FeatureFactoryImpl extends FeatureFactory {
} }
@Override @Override
public ContextualCardFeatureProvider getContextualCardFeatureProvider() { public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) {
if (mContextualCardFeatureProvider == null) { if (mContextualCardFeatureProvider == null) {
mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl(); mContextualCardFeatureProvider = new ContextualCardFeatureProviderImpl(
context.getApplicationContext());
} }
return mContextualCardFeatureProvider; return mContextualCardFeatureProvider;
} }

View File

@@ -49,13 +49,13 @@ public class ContextualCardFeatureProviderImplTest {
@Before @Before
public void setUp() { public void setUp() {
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mImpl = new ContextualCardFeatureProviderImpl(); mImpl = new ContextualCardFeatureProviderImpl(mContext);
} }
@Test @Test
public void sendBroadcast_emptyAction_notSendBroadcast() { public void sendBroadcast_emptyAction_notSendBroadcast() {
final Intent intent = new Intent(); final Intent intent = new Intent();
mImpl.sendBroadcast(mContext, intent); mImpl.sendBroadcast(intent);
verify(mContext, never()).sendBroadcastAsUser(intent, UserHandle.ALL); verify(mContext, never()).sendBroadcastAsUser(intent, UserHandle.ALL);
} }
@@ -64,7 +64,7 @@ public class ContextualCardFeatureProviderImplTest {
@Config(qualifiers = "mcc999") @Config(qualifiers = "mcc999")
public void sendBroadcast_hasAction_sendBroadcast() { public void sendBroadcast_hasAction_sendBroadcast() {
final Intent intent = new Intent(); final Intent intent = new Intent();
mImpl.sendBroadcast(mContext, intent); mImpl.sendBroadcast(intent);
verify(mContext).sendBroadcastAsUser(intent, UserHandle.ALL); verify(mContext).sendBroadcastAsUser(intent, UserHandle.ALL);
} }
@@ -72,7 +72,7 @@ public class ContextualCardFeatureProviderImplTest {
@Test @Test
@Config(qualifiers = "mcc999") @Config(qualifiers = "mcc999")
public void logContextualCardDisplay_hasAction_sendBroadcast() { 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()); verify(mContext).sendBroadcastAsUser(any(Intent.class), any());
} }

View File

@@ -91,8 +91,7 @@ public class SliceContextualCardControllerTest {
cr.close(); cr.close();
assertThat(qryDismissed).isEqualTo(1); assertThat(qryDismissed).isEqualTo(1);
verify(mFeatureFactory.mContextualCardFeatureProvider).logContextualCardDismiss( verify(mFeatureFactory.mContextualCardFeatureProvider).logContextualCardDismiss(card);
mContext, card);
} }
@Test @Test

View File

@@ -198,8 +198,7 @@ public class FakeFeatureFactory extends FeatureFactory {
return panelFeatureProvider; return panelFeatureProvider;
} }
@Override public ContextualCardFeatureProvider getContextualCardFeatureProvider(Context context) {
public ContextualCardFeatureProvider getContextualCardFeatureProvider() {
return mContextualCardFeatureProvider; return mContextualCardFeatureProvider;
} }