diff --git a/MyTracks/libs/libGoogleAnalytics.jar b/MyTracks/libs/libGoogleAnalytics.jar
index a5a4e16bf..78d47a72a 100644
Binary files a/MyTracks/libs/libGoogleAnalytics.jar and b/MyTracks/libs/libGoogleAnalytics.jar differ
diff --git a/MyTracks/res/values/do_not_translate.xml b/MyTracks/res/values/do_not_translate.xml
index 06045fb5c..588361d33 100644
--- a/MyTracks/res/values/do_not_translate.xml
+++ b/MyTracks/res/values/do_not_translate.xml
@@ -18,7 +18,6 @@ limitations under the License.
http://maps.google.com/mapfiles/ms/micons/ylw-pushpin.png
http://maps.google.com/mapfiles/ms/micons/blue-pushpin.png
- UA-7222692-2
www.google.com/policies/privacy/
My Tracks Recording Service
groups.google.com/a/googleproductforums.com/forum/#!categories/maps/mytracks
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java
index f5bab7acb..92610c570 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksApplication.java
@@ -35,10 +35,11 @@ public class MyTracksApplication extends Application {
@Override
public void onCreate() {
+ super.onCreate();
if (BuildConfig.DEBUG) {
ApiAdapterFactory.getApiAdapter().enableStrictMode();
}
- AnalyticsUtils.sendPageViews(this, "/appstart");
+ AnalyticsUtils.sendPageViews(getApplicationContext(), "/appstart");
Intent intent = new Intent(this, RemoveTempFilesService.class);
startService(intent);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 071dd8cca..2a8b43a96 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -91,7 +91,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
private MenuItem saveMenuItem;
private View mapViewContainer;
-
+
/*
* Note that sharedPreferenceChangeListener cannot be an anonymous inner
* class. Anonymous inner class will get garbage collected.
@@ -252,6 +252,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
TrackRecordingServiceConnectionUtils.stop(this, trackRecordingServiceConnection, true);
return true;
case R.id.track_detail_insert_marker:
+ AnalyticsUtils.sendPageViews(this, "/action/insert_marker");
intent = IntentUtils.newIntent(this, MarkerEditActivity.class)
.putExtra(MarkerEditActivity.EXTRA_TRACK_ID, trackId);
startActivity(intent);
@@ -270,6 +271,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
}
return true;
case R.id.track_detail_share:
+ AnalyticsUtils.sendPageViews(this, "/action/share");
ChooseActivityDialogFragment.newInstance(trackId, null).show(
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
return true;
@@ -290,6 +292,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
.show(getSupportFragmentManager(), FrequencyDialogFragment.FREQUENCY_DIALOG_TAG);
return true;
case R.id.track_detail_send_google:
+ AnalyticsUtils.sendPageViews(this, "/action/send_google");
ChooseUploadServiceDialogFragment.newInstance(new SendRequest(trackId)).show(
getSupportFragmentManager(),
ChooseUploadServiceDialogFragment.CHOOSE_UPLOAD_SERVICE_DIALOG_TAG);
@@ -457,6 +460,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
* @param trackFileFormat the track file format
*/
private void startSaveActivity(TrackFileFormat trackFileFormat) {
+ AnalyticsUtils.sendPageViews(this, "/action/save");
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
index e38657f64..f998cd771 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -28,6 +28,7 @@ import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileForm
import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.settings.SettingsActivity;
+import com.google.android.apps.mytracks.util.AnalyticsUtils;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.EulaUtils;
import com.google.android.apps.mytracks.util.IntentUtils;
@@ -384,6 +385,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
Intent intent;
switch (item.getItemId()) {
case R.id.track_list_record_track:
+ AnalyticsUtils.sendPageViews(this, "/action/record_track");
updateMenuItems(true);
startRecording();
return true;
@@ -394,6 +396,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
case R.id.track_list_search:
return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this);
case R.id.track_list_import:
+ AnalyticsUtils.sendPageViews(this, "/action/import");
intent = IntentUtils.newIntent(this, ImportActivity.class)
.putExtra(ImportActivity.EXTRA_IMPORT_ALL, true);
startActivity(intent);
@@ -437,6 +440,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
* @param trackFileFormat the track file format
*/
private void startSaveActivity(TrackFileFormat trackFileFormat) {
+ AnalyticsUtils.sendPageViews(this, "/action/save_all");
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat);
startActivity(intent);
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseUploadServiceDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseUploadServiceDialogFragment.java
index 8534e379e..7c4c33c0f 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseUploadServiceDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseUploadServiceDialogFragment.java
@@ -36,8 +36,6 @@ import android.widget.RadioButton;
import android.widget.TableRow;
import android.widget.Toast;
-import java.util.ArrayList;
-
/**
* A DialogFragment to choose upload service.
*
@@ -143,11 +141,11 @@ public class ChooseUploadServiceDialogFragment extends DialogFragment {
* Starts the next activity, {@link AccountChooserActivity}.
*/
private void startNextActivity() {
- sendStats();
sendRequest.setSendMaps(mapsCheckBox.isChecked());
sendRequest.setSendFusionTables(fusionTablesCheckBox.isChecked());
sendRequest.setSendDocs(docsCheckBox.isChecked());
sendRequest.setNewMap(!existingMapRadioButton.isChecked());
+ sendStats();
Intent intent = IntentUtils.newIntent(getActivity(), AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
@@ -157,16 +155,14 @@ public class ChooseUploadServiceDialogFragment extends DialogFragment {
* Sends stats to Google Analytics.
*/
private void sendStats() {
- ArrayList pages = new ArrayList();
if (sendRequest.isSendMaps()) {
- pages.add("/send/maps");
+ AnalyticsUtils.sendPageViews(getActivity(), "/send/maps");
}
if (sendRequest.isSendFusionTables()) {
- pages.add("/send/fusion_tables");
+ AnalyticsUtils.sendPageViews(getActivity(), "/send/fusion_tables");
}
if (sendRequest.isSendDocs()) {
- pages.add("/send/docs");
+ AnalyticsUtils.sendPageViews(getActivity(), "/send/docs");
}
- AnalyticsUtils.sendPageViews(getActivity(), pages.toArray(new String[pages.size()]));
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java b/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java
index d4e16bba1..f6fff39bd 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java
@@ -17,6 +17,7 @@
package com.google.android.apps.mytracks.services.sensors;
import com.google.android.apps.mytracks.services.sensors.ant.AntSensorManager;
+import com.google.android.apps.mytracks.util.AnalyticsUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
@@ -42,7 +43,7 @@ public class SensorManagerFactory {
public static SensorManager getSystemSensorManager(Context context) {
releaseTempSensorManager();
releaseSystemSensorManager();
- systemSensorManager = getSensorManager(context);
+ systemSensorManager = getSensorManager(context, true);
if (systemSensorManager != null) {
systemSensorManager.startSensor();
}
@@ -69,7 +70,7 @@ public class SensorManagerFactory {
if (systemSensorManager != null) {
return null;
}
- tempSensorManager = getSensorManager(context);
+ tempSensorManager = getSensorManager(context, false);
if (tempSensorManager != null) {
tempSensorManager.startSensor();
}
@@ -91,16 +92,25 @@ public class SensorManagerFactory {
*
* @param context the context
*/
- private static SensorManager getSensorManager(Context context) {
+ private static SensorManager getSensorManager(Context context, boolean sendPageViews) {
String sensorTypeValueNone = context.getString(R.string.sensor_type_value_none);
String sensorType = PreferencesUtils.getString(
context, R.string.sensor_type_key, sensorTypeValueNone);
if (sensorType.equals(context.getString(R.string.sensor_type_value_ant))) {
+ if (sendPageViews) {
+ AnalyticsUtils.sendPageViews(context, "/sensor/ant");
+ }
return new AntSensorManager(context);
} else if (sensorType.equals(context.getString(R.string.sensor_type_value_zephyr))) {
+ if (sendPageViews) {
+ AnalyticsUtils.sendPageViews(context, "/sensor/zephyr");
+ }
return new ZephyrSensorManager(context);
} else if (sensorType.equals(context.getString(R.string.sensor_type_value_polar))) {
+ if (sendPageViews) {
+ AnalyticsUtils.sendPageViews(context, "/sensor/polar");
+ }
return new PolarSensorManager(context);
}
return null;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/AnalyticsUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/AnalyticsUtils.java
index d0b00dea3..cbf561c0a 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/util/AnalyticsUtils.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/AnalyticsUtils.java
@@ -17,7 +17,6 @@
package com.google.android.apps.mytracks.util;
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
-import com.google.android.maps.mytracks.R;
import android.content.Context;
@@ -28,16 +27,23 @@ import android.content.Context;
*/
public class AnalyticsUtils {
+ private static final String UA = "UA-7222692-2";
+ private static final String PRODUCT_NAME = "android-mytracks";
+
private AnalyticsUtils() {}
-
- public static void sendPageViews(Context context, String ... pages) {
+
+ /**
+ * Sends a page view.
+ *
+ * @param context the context
+ * @param page the page
+ */
+ public static void sendPageViews(Context context, String page) {
GoogleAnalyticsTracker tracker = GoogleAnalyticsTracker.getInstance();
- tracker.start(context.getString(R.string.my_tracks_analytics_id), context);
- tracker.setProductVersion("android-mytracks", SystemUtils.getMyTracksVersion(context));
- for (String page : pages) {
- tracker.trackPageView(page);
- }
+ tracker.startNewSession(UA, context);
+ tracker.setProductVersion(PRODUCT_NAME, SystemUtils.getMyTracksVersion(context));
+ tracker.trackPageView(page);
tracker.dispatch();
- tracker.stop();
+ tracker.stopSession();
}
}