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;
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);
}

View File

@@ -51,6 +51,9 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP
// 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 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP
// 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);
}
}

View File

@@ -149,10 +149,10 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
// 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);
}
}

View File

@@ -201,8 +201,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
.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;
}

View File

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

View File

@@ -173,8 +173,9 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer,
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;
}

View File

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

View File

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

View File

@@ -49,13 +49,13 @@ public class ContextualCardFeatureProviderImplTest {
@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 @@ public class ContextualCardFeatureProviderImplTest {
@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 @@ public class ContextualCardFeatureProviderImplTest {
@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());
}

View File

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

View File

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