public void with(Tracker tracker) { if (mDownloadTracker == null) mDownloadTracker = new DownloadTracker(tracker); if (mVersion != null) mDownloadTracker.setVersion(mVersion); if (mForced) mDownloadTracker.trackNewAppDownload(mBaseBuilder.mBaseTrackMe, mExtra); else mDownloadTracker.trackOnce(mBaseBuilder.mBaseTrackMe, mExtra); } }
public void trackOnce(TrackMe baseTrackme, @NonNull Extra extra) { String firedKey = "downloaded:" + mPkgInfo.packageName + ":" + getVersion(); synchronized (mTrackOnceLock) { if (!mPreferences.getBoolean(firedKey, false)) { mPreferences.edit().putBoolean(firedKey, true).apply(); trackNewAppDownload(baseTrackme, extra); } } }
public DownloadTracker(Tracker tracker) { this(tracker, getOurPackageInfo(tracker.getMatomo().getContext())); }
@Test public void testTrackNewAppDownloadWithVersion() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.setVersion("2"); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); Matcher m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals("package", m.group(1)); assertEquals("2", m.group(2)); assertEquals("2", downloadTracker.getVersion()); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(1)).track(mCaptor.capture()); downloadTracker.setVersion(null); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(2)).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); }
@Test public void testTrackReferrer() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.trackNewAppDownload(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); String downloadParams = mCaptor.getValue().get(QueryParams.DOWNLOAD); Matcher m = REGEX_DOWNLOADTRACK.matcher(downloadParams); assertTrue(downloadParams, m.matches()); assertEquals(3, m.groupCount()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals(null, m.group(3)); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); when(mPackageManager.getInstallerPackageName(anyString())).thenReturn(null); downloadTracker.trackNewAppDownload(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(2)).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals(3, m.groupCount()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals(null, m.group(3)); assertEquals(null, mCaptor.getValue().get(QueryParams.REFERRER)); }
@Test public void testTrackAppDownload() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); // track only once downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(1)).track(mCaptor.capture()); }
@Test public void testDownloadCustomVersion() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); String version = UUID.randomUUID().toString(); track().download(downloadTracker).version(version).with(mTracker); verify(downloadTracker).setVersion(version); verify(downloadTracker).trackOnce(any(TrackMe.class), any(DownloadTracker.Extra.class)); }
@Test public void testDownloadTrackChecksum() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); track().download(downloadTracker).identifier(new DownloadTracker.Extra.ApkChecksum(mContext)).with(mTracker); verify(downloadTracker).trackOnce(any(TrackMe.class), any(DownloadTracker.Extra.ApkChecksum.class)); }
@Test public void testDownloadTrackForced() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); track().download(downloadTracker).force().with(mTracker); verify(downloadTracker).trackNewAppDownload(any(TrackMe.class), any(DownloadTracker.Extra.None.class)); }
installIdentifier.append("http://").append(mPkgInfo.packageName).append(":").append(getVersion());
public void trackNewAppDownload(final TrackMe baseTrackme, @NonNull final Extra extra) { // We can only get referrer information if we are tracking our own app download. final boolean delay = mInternalTracking && INSTALL_SOURCE_GOOGLE_PLAY.equals(mPackMan.getInstallerPackageName(mPkgInfo.packageName)); if (delay) { // Delay tracking incase we were called from within Application.onCreate Timber.tag(TAG).d("Google Play is install source, deferring tracking."); } final Thread trackTask = new Thread(() -> { if (delay) try {Thread.sleep(3000);} catch (Exception e) { Timber.tag(ContentValues.TAG).e(e);} trackNewAppDownloadInternal(baseTrackme, extra); }); if (!delay && !extra.isIntensiveWork()) trackTask.run(); else trackTask.start(); }
@Test public void testTrackNewAppDownloadWithVersion() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.setVersion("2"); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); Matcher m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals("package", m.group(1)); assertEquals("2", m.group(2)); assertEquals("2", downloadTracker.getVersion()); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(1)).track(mCaptor.capture()); downloadTracker.setVersion(null); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(2)).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); }
@Test public void testTrackReferrer() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.trackNewAppDownload(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); String downloadParams = mCaptor.getValue().get(QueryParams.DOWNLOAD); Matcher m = REGEX_DOWNLOADTRACK.matcher(downloadParams); assertTrue(downloadParams, m.matches()); assertEquals(3, m.groupCount()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals(null, m.group(3)); assertEquals("http://installer", mCaptor.getValue().get(QueryParams.REFERRER)); when(mPackageManager.getInstallerPackageName(anyString())).thenReturn(null); downloadTracker.trackNewAppDownload(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(2)).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); m = REGEX_DOWNLOADTRACK.matcher(mCaptor.getValue().get(QueryParams.DOWNLOAD)); assertTrue(m.matches()); assertEquals(3, m.groupCount()); assertEquals("package", m.group(1)); assertEquals(123, Integer.parseInt(m.group(2))); assertEquals(null, m.group(3)); assertEquals(null, mCaptor.getValue().get(QueryParams.REFERRER)); }
@Test public void testTrackAppDownload() throws Exception { DownloadTracker downloadTracker = new DownloadTracker(mTracker); downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker).track(mCaptor.capture()); checkNewAppDownload(mCaptor.getValue()); // track only once downloadTracker.trackOnce(new TrackMe(), new DownloadTracker.Extra.None()); verify(mTracker, times(1)).track(mCaptor.capture()); }
@Test public void testDownloadCustomVersion() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); String version = UUID.randomUUID().toString(); track().download(downloadTracker).version(version).with(mTracker); verify(downloadTracker).setVersion(version); verify(downloadTracker).trackOnce(any(TrackMe.class), any(DownloadTracker.Extra.class)); }
@Test public void testDownloadTrackChecksum() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); track().download(downloadTracker).identifier(new DownloadTracker.Extra.ApkChecksum(mContext)).with(mTracker); verify(downloadTracker).trackOnce(any(TrackMe.class), any(DownloadTracker.Extra.ApkChecksum.class)); }
@Test public void testDownloadTrackForced() throws Exception { DownloadTracker downloadTracker = mock(DownloadTracker.class); track().download(downloadTracker).force().with(mTracker); verify(downloadTracker).trackNewAppDownload(any(TrackMe.class), any(DownloadTracker.Extra.None.class)); }
installIdentifier.append("http://").append(mPkgInfo.packageName).append(":").append(getVersion());
public void trackNewAppDownload(final TrackMe baseTrackme, @NonNull final Extra extra) { // We can only get referrer information if we are tracking our own app download. final boolean delay = mInternalTracking && INSTALL_SOURCE_GOOGLE_PLAY.equals(mPackMan.getInstallerPackageName(mPkgInfo.packageName)); if (delay) { // Delay tracking incase we were called from within Application.onCreate Timber.tag(TAG).d("Google Play is install source, deferring tracking."); } final Thread trackTask = new Thread(() -> { if (delay) try {Thread.sleep(3000);} catch (Exception e) { Timber.tag(ContentValues.TAG).e(e);} trackNewAppDownloadInternal(baseTrackme, extra); }); if (!delay && !extra.isIntensiveWork()) trackTask.run(); else trackTask.start(); }
public void with(Tracker tracker) { if (mDownloadTracker == null) mDownloadTracker = new DownloadTracker(tracker); if (mVersion != null) mDownloadTracker.setVersion(mVersion); if (mForced) mDownloadTracker.trackNewAppDownload(mBaseBuilder.mBaseTrackMe, mExtra); else mDownloadTracker.trackOnce(mBaseBuilder.mBaseTrackMe, mExtra); } }