From e81012df056caf0e633ec54773f40eef99c2d93c Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 3 Jun 2009 01:40:11 +0000 Subject: [PATCH] Added Flurry to track application usage statistics. Creating various logging points for errors and events, including creating, editing, postponing, completing tasks, synchronization, notifications. --- .classpath | 1 + AndroidManifest.xml | 8 ++++-- lib/FlurryAgent.jar | Bin 0 -> 9431 bytes .../astrid/activities/EditPreferences.java | 16 ++++++++++++ .../astrid/activities/LocaleEditAlerts.java | 16 ++++++++++++ .../astrid/activities/SyncLoginActivity.java | 2 +- .../astrid/activities/SyncPreferences.java | 15 ++++++++++++ src/com/timsu/astrid/activities/TaskEdit.java | 8 +++++- src/com/timsu/astrid/activities/TaskList.java | 15 ++++++++++++ .../astrid/activities/TaskListAdapter.java | 11 +++++++-- .../activities/TaskListSubActivity.java | 23 ++++++++++++++++-- .../activities/TaskModificationActivity.java | 16 ++++++++++++ .../TaskModificationTabbedActivity.java | 16 ++++++++++++ .../timsu/astrid/sync/RTMSyncProvider.java | 20 +++++++++++++++ .../astrid/sync/SynchronizationProvider.java | 16 +++++++++++- src/com/timsu/astrid/utilities/Constants.java | 3 +++ 16 files changed, 177 insertions(+), 9 deletions(-) create mode 100644 lib/FlurryAgent.jar diff --git a/.classpath b/.classpath index 968491105..c0d02d2e3 100644 --- a/.classpath +++ b/.classpath @@ -5,5 +5,6 @@ + diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 6b81fc5d0..0aee18ba0 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="103" + android:versionName="2.8.3"> @@ -12,6 +12,10 @@ + + + + diff --git a/lib/FlurryAgent.jar b/lib/FlurryAgent.jar new file mode 100644 index 0000000000000000000000000000000000000000..eddb7cde69430227ee1ed391d9302a375a056896 GIT binary patch literal 9431 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 z ze7>$bX%V^k=#K L@j{jMuigIwF3X$$ literal 0 HcmV?d00001 diff --git a/src/com/timsu/astrid/activities/EditPreferences.java b/src/com/timsu/astrid/activities/EditPreferences.java index 0b06db10e..b222e91c3 100644 --- a/src/com/timsu/astrid/activities/EditPreferences.java +++ b/src/com/timsu/astrid/activities/EditPreferences.java @@ -22,7 +22,9 @@ package com.timsu.astrid.activities; import android.os.Bundle; import android.preference.PreferenceActivity; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; +import com.timsu.astrid.utilities.Constants; /** * Displays the preference screen for users to edit their preferences @@ -37,4 +39,18 @@ public class EditPreferences extends PreferenceActivity { addPreferencesFromResource(R.xml.preferences); } + + @Override + protected void onStart() { + super.onStart(); + + // set up flurry + FlurryAgent.onStartSession(this, Constants.FLURRY_KEY); + } + + @Override + protected void onStop() { + super.onStop(); + FlurryAgent.onEndSession(this); + } } \ No newline at end of file diff --git a/src/com/timsu/astrid/activities/LocaleEditAlerts.java b/src/com/timsu/astrid/activities/LocaleEditAlerts.java index d1b3af1e4..49ec5ebc8 100644 --- a/src/com/timsu/astrid/activities/LocaleEditAlerts.java +++ b/src/com/timsu/astrid/activities/LocaleEditAlerts.java @@ -15,9 +15,11 @@ import android.widget.Spinner; import android.widget.TextView; import android.widget.AdapterView.OnItemSelectedListener; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.data.tag.TagController; import com.timsu.astrid.data.tag.TagModelForView; +import com.timsu.astrid.utilities.Constants; /** * Activity to edit alerts from Locale @@ -89,6 +91,20 @@ public final class LocaleEditAlerts extends Activity { }); } + @Override + protected void onStart() { + super.onStart(); + + // set up flurry + FlurryAgent.onStartSession(this, Constants.FLURRY_KEY); + } + + @Override + protected void onStop() { + super.onStop(); + FlurryAgent.onEndSession(this); + } + /** * Private helper method to persist the Toast message in the return {@code Intent}. */ diff --git a/src/com/timsu/astrid/activities/SyncLoginActivity.java b/src/com/timsu/astrid/activities/SyncLoginActivity.java index bf7b25151..82ceed514 100644 --- a/src/com/timsu/astrid/activities/SyncLoginActivity.java +++ b/src/com/timsu/astrid/activities/SyncLoginActivity.java @@ -118,8 +118,8 @@ public class SyncLoginActivity extends Activity { boolean result = callback.verifyLogin(handler); if(result) { TaskList.synchronizeNow = true; - finish(); } + finish(); } }).start(); } diff --git a/src/com/timsu/astrid/activities/SyncPreferences.java b/src/com/timsu/astrid/activities/SyncPreferences.java index 8c2bc8a77..d1ab669c4 100644 --- a/src/com/timsu/astrid/activities/SyncPreferences.java +++ b/src/com/timsu/astrid/activities/SyncPreferences.java @@ -32,6 +32,7 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.sync.Synchronizer; import com.timsu.astrid.utilities.Constants; @@ -104,6 +105,20 @@ public class SyncPreferences extends PreferenceActivity { lastAutoSyncLabel.setVisibility(View.GONE); } + @Override + protected void onStart() { + super.onStart(); + + // set up flurry + FlurryAgent.onStartSession(this, Constants.FLURRY_KEY); + } + + @Override + protected void onStop() { + super.onStop(); + FlurryAgent.onEndSession(this); + } + @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { diff --git a/src/com/timsu/astrid/activities/TaskEdit.java b/src/com/timsu/astrid/activities/TaskEdit.java index 25f15220f..b4822bf61 100644 --- a/src/com/timsu/astrid/activities/TaskEdit.java +++ b/src/com/timsu/astrid/activities/TaskEdit.java @@ -60,6 +60,7 @@ import android.widget.Toast; import android.widget.ToggleButton; import android.widget.CompoundButton.OnCheckedChangeListener; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.data.alerts.AlertController; import com.timsu.astrid.data.enums.Importance; @@ -188,11 +189,14 @@ public class TaskEdit extends TaskModificationTabbedActivity { if(model.getCursor() != null) startManagingCursor(model.getCursor()); if(model.getTaskIdentifier() == null) { + FlurryAgent.onEvent("create-task"); Bundle extras = getIntent().getExtras(); if(extras != null && extras.containsKey(START_CHAR_TOKEN)) name.setText("" + extras.getChar(START_CHAR_TOKEN)); - } else + } else { + FlurryAgent.onEvent("edit-task"); name.setText(model.getName()); + } if(model.getName().length() > 0) setTitle(new StringBuilder(). append(r.getString(R.string.taskEdit_titlePrefix)). @@ -713,6 +717,8 @@ public class TaskEdit extends TaskModificationTabbedActivity { */ public static void createCalendarStartEndTimes(Date preferred, Date definite, Integer estimatedSeconds, ContentValues values) { + FlurryAgent.onEvent("create-calendar-event"); + Long deadlineDate = null; if (preferred != null && preferred.after(new Date())) deadlineDate = preferred.getTime(); diff --git a/src/com/timsu/astrid/activities/TaskList.java b/src/com/timsu/astrid/activities/TaskList.java index 987385e01..99b8b8044 100644 --- a/src/com/timsu/astrid/activities/TaskList.java +++ b/src/com/timsu/astrid/activities/TaskList.java @@ -34,6 +34,7 @@ import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ViewFlipper; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.data.tag.TagController; import com.timsu.astrid.data.task.TaskController; @@ -142,6 +143,20 @@ public class TaskList extends Activity { } } + @Override + protected void onStart() { + super.onStart(); + + // set up flurry + FlurryAgent.onStartSession(this, Constants.FLURRY_KEY); + } + + @Override + protected void onStop() { + super.onStop(); + FlurryAgent.onEndSession(this); + } + /** Set up user interface components */ private void setupUIComponents() { gestureDetector = new GestureDetector(new AstridGestureDetector()); diff --git a/src/com/timsu/astrid/activities/TaskListAdapter.java b/src/com/timsu/astrid/activities/TaskListAdapter.java index 6f021f9ca..cb34fbd2c 100644 --- a/src/com/timsu/astrid/activities/TaskListAdapter.java +++ b/src/com/timsu/astrid/activities/TaskListAdapter.java @@ -46,6 +46,7 @@ import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.data.alerts.AlertController; import com.timsu.astrid.data.enums.Importance; @@ -169,6 +170,9 @@ public class TaskListAdapter extends ArrayAdapter { view.requestFocus(); } } catch (Exception e) { + FlurryAgent.onError("task-adapter-set-expanded", e.toString(), + e.getClass().getSimpleName()); + Log.e("astrid", "Error in setExpanded", e); } } @@ -682,10 +686,13 @@ public class TaskListAdapter extends ArrayAdapter { hooks.taskController().saveTask(task); // show this task as completed even if it has repeats - if(progress == 100) + if(progress == 100) { recentlyCompleted = task; - else + FlurryAgent.onEvent("complete-task"); + } else { + FlurryAgent.onEvent("uncomplete-task"); recentlyCompleted = null; + } // if our timer is on, ask if we want to stop if(progress == 100 && task.getTimerStart() != null) { diff --git a/src/com/timsu/astrid/activities/TaskListSubActivity.java b/src/com/timsu/astrid/activities/TaskListSubActivity.java index 73a44436c..9e19eff63 100644 --- a/src/com/timsu/astrid/activities/TaskListSubActivity.java +++ b/src/com/timsu/astrid/activities/TaskListSubActivity.java @@ -50,6 +50,7 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.activities.TaskListAdapter.TaskListAdapterHooks; import com.timsu.astrid.data.tag.TagController; @@ -233,6 +234,7 @@ public class TaskListSubActivity extends SubActivity { // open up reminder box if(variables != null && variables.containsKey(NOTIF_FLAGS_TOKEN) && context.selectedTask != null) { + FlurryAgent.onEvent("open-notification"); handler.post(new Runnable() { public void run() { long repeatInterval = 0; @@ -554,12 +556,20 @@ public class TaskListSubActivity extends SubActivity { if(task.isTaskCompleted()) completedTasks++; } + + HashMap args = new HashMap(); + args.put("tasks", Integer.toString(context.taskArray.size())); + FlurryAgent.onEvent("loaded-tasks", args); + } catch (StaleDataException e) { // happens when you rotate the screen while the thread is // still running. i don't think it's avoidable? Log.w("astrid", "StaleDataException", e); return; } catch (final IllegalStateException e) { + FlurryAgent.onError("task-list-error", e.toString(), + e.getClass().getSimpleName()); + // happens when you run out of memory usually Log.e("astrid", "Error loading task list", e); handler.post(new Runnable() { @@ -572,6 +582,9 @@ public class TaskListSubActivity extends SubActivity { }); return; } catch (final Exception e) { + FlurryAgent.onError("task-list-error", e.toString(), + e.getClass().getSimpleName()); + Log.e("astrid", "Error loading task list", e); return; } @@ -713,6 +726,8 @@ public class TaskListSubActivity extends SubActivity { context.listAdapter.setExpanded(v, context.selectedTask, true); listView.setSelection(selectedPosition); } catch (Exception e) { + FlurryAgent.onError("task-list-selected", e.toString(), + e.getClass().getSimpleName()); Log.e("astrid", "error with selected task", e); } } @@ -906,9 +921,11 @@ public class TaskListSubActivity extends SubActivity { /** Toggle the timer */ private void toggleTimer(TaskModelForList task) { - if(task.getTimerStart() == null) + if(task.getTimerStart() == null) { + FlurryAgent.onEvent("start-timer"); task.setTimerStart(new Date()); - else { + } else { + FlurryAgent.onEvent("stop-timer"); task.stopTimerAndUpdateElapsedTime(); } getTaskController().saveTask(task); @@ -988,6 +1005,8 @@ public class TaskListSubActivity extends SubActivity { /** Show a dialog box to postpone your tasks */ private void postponeTask(final TaskModelForList task) { + FlurryAgent.onEvent("postpone-task"); + final Resources r = getResources(); DialogUtilities.dayHourPicker(getParent(), r.getString(R.string.taskList_postpone_dialog), new OnNNumberPickedListener() { diff --git a/src/com/timsu/astrid/activities/TaskModificationActivity.java b/src/com/timsu/astrid/activities/TaskModificationActivity.java index 48223a632..f90435504 100644 --- a/src/com/timsu/astrid/activities/TaskModificationActivity.java +++ b/src/com/timsu/astrid/activities/TaskModificationActivity.java @@ -24,10 +24,12 @@ import android.content.DialogInterface; import android.content.res.Resources; import android.os.Bundle; +import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; import com.timsu.astrid.data.task.AbstractTaskModel; import com.timsu.astrid.data.task.TaskController; import com.timsu.astrid.data.task.TaskIdentifier; +import com.timsu.astrid.utilities.Constants; import com.timsu.astrid.utilities.DialogUtilities; /** Abstract activity that operates on a single task. Use the generic parameter @@ -64,6 +66,20 @@ public abstract class TaskModificationActivity args = new HashMap(); + args.put("localCreatedTasks", Integer.toString(localCreatedTasks)); + args.put("localUpdatedTasks", Integer.toString(localUpdatedTasks)); + args.put("localDeletedTasks", Integer.toString(localDeletedTasks)); + args.put("mergedTasks", Integer.toString(mergedTasks)); + args.put("remoteCreatedTasks", Integer.toString(remoteCreatedTasks)); + args.put("remoteUpdatedTasks", Integer.toString(remoteUpdatedTasks)); + args.put("remoteDeletedTasks", Integer.toString(remoteDeletedTasks)); + FlurryAgent.onEvent("sync-finished", args); if(Preferences.shouldSuppressSyncDialogs(context) || getSingleTaskForSync() != null) { return; } + Resources r = context.getResources(); Dialog.OnClickListener finishListener = null; // nothing updated diff --git a/src/com/timsu/astrid/utilities/Constants.java b/src/com/timsu/astrid/utilities/Constants.java index 87e9e6b80..eb7511f76 100644 --- a/src/com/timsu/astrid/utilities/Constants.java +++ b/src/com/timsu/astrid/utilities/Constants.java @@ -13,6 +13,9 @@ public class Constants { /** URL of Astrid Feature Survey */ public static final String SURVEY_URL = "http://www.haveasec.com/survey/m/detail/welcome/bf25e0/"; + /** Flurry API KEy */ + public static final String FLURRY_KEY = "T3JAY9TV2JFMJR4YTG16"; + public static final boolean DEBUG = true; // result codes