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