private TrackMe onTrack(TrackMe trackMe) { for (Iterator<CustomDimension> it = mOneTimeDimensions.iterator(); it.hasNext(); ) { CustomDimension dim = it.next(); String existing = CustomDimension.getDimension(trackMe, dim.getId()); if (existing != null) { Timber.tag(TAG).d("Setting dimension %s to slot %d would overwrite %s, skipping!", dim.getValue(), dim.getId(), existing); } else { CustomDimension.setDimension(trackMe, dim); it.remove(); } } return trackMe; } }
/** * The added id-value-pair will be injected into the next tracked event, * if that events slot for this ID is still empty. */ public void add(int id, String value) { mOneTimeDimensions.add(new CustomDimension(id, value)); }
@Nullable public static String getDimension(TrackMe trackMe, int dimensionId) { return trackMe.get(formatDimensionId(dimensionId)); }
public static boolean setDimension(TrackMe trackMe, CustomDimension dimension) { return setDimension(trackMe, dimension.getId(), dimension.getValue()); }
@Override public Dimension dimension(int id, String value) { CustomDimension.setDimension(mBaseTrackMe, id, value); return this; } }
@Test public void testCallback() { DimensionQueue queue = new DimensionQueue(mTracker); verify(mTracker).addTrackingCallback(mCaptor.capture()); queue.add(1, "test1"); queue.add(2, "test2"); TrackMe pre = new TrackMe(); TrackMe post = mCaptor.getValue().onTrack(pre); assertThat(post, notNullValue()); assertThat(pre, is(post)); assertThat(CustomDimension.getDimension(post, 1), is("test1")); assertThat(CustomDimension.getDimension(post, 2), is("test2")); }
@Test public void testCollision() { DimensionQueue queue = new DimensionQueue(mTracker); verify(mTracker).addTrackingCallback(mCaptor.capture()); queue.add(1, "test1"); TrackMe pre = new TrackMe(); CustomDimension.setDimension(pre, 1, "don't overwrite me"); TrackMe post = mCaptor.getValue().onTrack(pre); assertThat(post, notNullValue()); assertThat(pre, is(post)); assertThat(CustomDimension.getDimension(post, 1), is("don't overwrite me")); }
@Override public Dimension dimension(int id, String value) { CustomDimension.setDimension(mBaseTrackMe, id, value); return this; } }
@Test public void testCallback() { DimensionQueue queue = new DimensionQueue(mTracker); verify(mTracker).addTrackingCallback(mCaptor.capture()); queue.add(1, "test1"); queue.add(2, "test2"); TrackMe pre = new TrackMe(); TrackMe post = mCaptor.getValue().onTrack(pre); assertThat(post, notNullValue()); assertThat(pre, is(post)); assertThat(CustomDimension.getDimension(post, 1), is("test1")); assertThat(CustomDimension.getDimension(post, 2), is("test2")); }
@Test public void testCollision() { DimensionQueue queue = new DimensionQueue(mTracker); verify(mTracker).addTrackingCallback(mCaptor.capture()); queue.add(1, "test1"); TrackMe pre = new TrackMe(); CustomDimension.setDimension(pre, 1, "don't overwrite me"); TrackMe post = mCaptor.getValue().onTrack(pre); assertThat(post, notNullValue()); assertThat(pre, is(post)); assertThat(CustomDimension.getDimension(post, 1), is("don't overwrite me")); }
public static boolean setDimension(TrackMe trackMe, CustomDimension dimension) { return setDimension(trackMe, dimension.getId(), dimension.getValue()); }
private TrackMe onTrack(TrackMe trackMe) { for (Iterator<CustomDimension> it = mOneTimeDimensions.iterator(); it.hasNext(); ) { CustomDimension dim = it.next(); String existing = CustomDimension.getDimension(trackMe, dim.getId()); if (existing != null) { Timber.tag(TAG).d("Setting dimension %s to slot %d would overwrite %s, skipping!", dim.getValue(), dim.getId(), existing); } else { CustomDimension.setDimension(trackMe, dim); it.remove(); } } return trackMe; } }
@Override public TrackMe build() { if (mPath == null) { throw new IllegalArgumentException("Screen tracking requires a non-empty path"); } final TrackMe trackMe = new TrackMe(getBaseTrackMe()) .set(QueryParams.URL_PATH, mPath) .set(QueryParams.ACTION_NAME, mTitle) .set(QueryParams.CAMPAIGN_NAME, mCampaignName) .set(QueryParams.CAMPAIGN_KEYWORD, mCampaignKeyword); if (mCustomVariables.size() > 0) { //noinspection deprecation trackMe.set(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES, mCustomVariables.toString()); } for (Map.Entry<Integer, String> entry : mCustomDimensions.entrySet()) { CustomDimension.setDimension(trackMe, entry.getKey(), entry.getValue()); } return trackMe; } }
@Test public void testSetScreenCustomDimension() throws Exception { track() .screen("") .dimension(1, "dim1") .dimension(2, "dim2") .dimension(3, "dim3") .dimension(3, null) .dimension(4, null) .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals("dim1", CustomDimension.getDimension(mCaptor.getValue(), 1)); assertEquals("dim2", CustomDimension.getDimension(mCaptor.getValue(), 2)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 3)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 4)); }
@Nullable public static String getDimension(TrackMe trackMe, int dimensionId) { return trackMe.get(formatDimensionId(dimensionId)); }
/** * The added id-value-pair will be injected into the next tracked event, * if that events slot for this ID is still empty. */ public void add(int id, String value) { mOneTimeDimensions.add(new CustomDimension(id, value)); }
@Override public TrackMe build() { if (mPath == null) { throw new IllegalArgumentException("Screen tracking requires a non-empty path"); } final TrackMe trackMe = new TrackMe(getBaseTrackMe()) .set(QueryParams.URL_PATH, mPath) .set(QueryParams.ACTION_NAME, mTitle) .set(QueryParams.CAMPAIGN_NAME, mCampaignName) .set(QueryParams.CAMPAIGN_KEYWORD, mCampaignKeyword); if (mCustomVariables.size() > 0) { //noinspection deprecation trackMe.set(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES, mCustomVariables.toString()); } for (Map.Entry<Integer, String> entry : mCustomDimensions.entrySet()) { CustomDimension.setDimension(trackMe, entry.getKey(), entry.getValue()); } return trackMe; } }
@Test public void testSetScreenCustomDimension() throws Exception { track() .screen("") .dimension(1, "dim1") .dimension(2, "dim2") .dimension(3, "dim3") .dimension(3, null) .dimension(4, null) .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals("dim1", CustomDimension.getDimension(mCaptor.getValue(), 1)); assertEquals("dim2", CustomDimension.getDimension(mCaptor.getValue(), 2)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 3)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 4)); }
/** * This method sets a tracking API parameter dimension%dimensionId%=%dimensionValue%. * Eg dimension1=foo or dimension2=bar. * So the tracking API parameter starts with dimension followed by the set dimensionId. * <p> * Requires <a href="https://plugins.matomo.org/CustomDimensions">Custom Dimensions</a> plugin (server-side) * * @param trackMe into which the data should be inserted * @param dimensionId accepts values greater than 0 * @param dimensionValue is limited to 255 characters, you can pass null to delete a value * @return true if the value was valid */ public static boolean setDimension(@NonNull TrackMe trackMe, int dimensionId, @Nullable String dimensionValue) { if (dimensionId < 1) { Timber.tag(TAG).e("dimensionId should be great than 0 (arg: %d)", dimensionId); return false; } if (dimensionValue != null && dimensionValue.length() > 255) { dimensionValue = dimensionValue.substring(0, 255); Timber.tag(TAG).w("dimensionValue was truncated to 255 chars."); } if (dimensionValue != null && dimensionValue.length() == 0) { dimensionValue = null; } trackMe.set(formatDimensionId(dimensionId), dimensionValue); return true; }
@Test public void testSet_empty() throws Exception { TrackMe trackMe = new TrackMe(); CustomDimension.setDimension(trackMe, 1, UUID.randomUUID().toString()); assertFalse(trackMe.isEmpty()); CustomDimension.setDimension(trackMe, 1, ""); assertTrue(trackMe.isEmpty()); } }